source: issm/trunk/src/m/array/arrayoperations.js@ 20500

Last change on this file since 20500 was 20500, checked in by Mathieu Morlighem, 9 years ago

merged trunk-jpl and trunk for revision 20497

File size: 8.0 KB
Line 
1function ArrayMax(array){ //{{{
2 return Math.max.apply(null,array);
3} //}}}
4function ArrayMax2D(array){ //{{{
5
6 var max=0;
7
8 for (var i=0;i<array.length;i++){
9 var subarray=array[i];
10 max=Math.max(max,ArrayMax(subarray));
11 }
12
13 return max;
14} //}}}
15function ArrayMin(array){ //{{{
16 return Math.min.apply(null,array);
17} //}}}
18function ArraySum(array){ //{{{
19 var sum=0;
20 for(var i=0;i<array.length;i++)sum+=array[i];
21 return sum;
22} //}}}
23function ArrayXPY(){ //{{{
24 if (arguments.length<2)throw Error("ArrayXPY error message: sum has to be for at least two arrays!");
25
26 //check internal consistency of arrays provided!:
27 var firstarray=arguments[0];
28 var firstsize=firstarray.length;
29
30 for(var a=1;a<arguments.length;a++){
31 var array=arguments[a];
32 if(array.length!=firstsize)throw Error("ArrayXPY error message: arrays provided as arguments are not of the same length!");
33 }
34
35 //do the sum:
36 var sum=NewArrayFill(firstsize,0);
37 for(var a=0;a<arguments.length;a++){
38 var array=arguments[a];
39 for(var i=0;i<array.length;i++){
40 sum[i]+=array[i];
41 }
42 }
43 return sum;
44
45} //}}}
46function ArrayOr(){ //{{{
47 if (arguments.length<2)throw Error("ArrayOr error message: sum has to be for at least two arrays!");
48
49 //check internal consistency of arrays provided!:
50 var firstarray=arguments[0];
51 var firstsize=firstarray.length;
52
53 for(var a=1;a<arguments.length;a++){
54 var array=arguments[a];
55 if(array.length!=firstsize)throw Error("ArrayOr error message: arrays provided as arguments are not of the same length!");
56 }
57
58 //do the or:
59 var or=NewArrayFill(firstsize,0);
60 for(var a=0;a<arguments.length;a++){
61 var array=arguments[a];
62 for(var i=0;i<array.length;i++){
63 or[i] = or[i] | array[i];
64 }
65 }
66 return or;
67
68} //}}}
69function ArrayMin2D(array){ //{{{
70
71 var min=ArrayMax2D(array);
72
73 for (var i=0;i<array.length;i++){
74 var subarray=array[i];
75 min=Math.min(min,ArrayMin(subarray));
76 }
77
78 return min;
79} //}}}
80function ListToMatrix(list, elementsPerSubArray) { //{{{
81 var matrix = [], i, k;
82
83 for (i = 0, k = -1; i < list.length; i++) {
84 if (i % elementsPerSubArray === 0) {
85 k++;
86 matrix[k] = [];
87 }
88
89 matrix[k].push(list[i]);
90 }
91
92 return matrix;
93} //}}}
94function MatrixToList(matrixin) { //{{{
95
96 var matrix=matrixin;
97
98 if (!IsArray(matrix[0])) return matrix;
99 else{
100 var width = matrix[0].length;
101 var length = matrix.length;
102 var list= new Array(width*length);
103
104 for(var i=0;i<length;i++){
105 for(var j=0;j<width;j++){
106 list[i*width+j]=matrix[i][j];
107 }
108 }
109 return list;
110 }
111} //}}}
112function IsArray(object) { //{{{
113
114 var type=Object.prototype.toString.call( object );
115 if( type === '[object Array]' ) return 1;
116 if( type === '[object Float64Array]' ) return 1;
117 if( type === '[object Float32Array]' ) return 1;
118 if( type === '[object Int32Array]' ) return 1;
119 if( type === '[object Int16Array]' ) return 1;
120 if( type === '[object Uint32Array]' ) return 1;
121 if( type === '[object Uint16Array]' ) return 1;
122 if( type === '[object Uint8Array]' ) return 1;
123 return 0;
124
125} //}}}
126function ArrayNot(array) { //{{{
127
128 var notarray=array;
129 for (var i=0;i<array.length;i++)notarray[i]=-array[i];
130 return notarray;
131} //}}}
132function ArrayCopy(array) { //{{{
133
134 var copy=[];
135 for(var i=0;i<array.length;i++)copy[i]=array[i];
136 return copy;
137} //}}}
138function ArrayPow(array,coefficient) { //{{{
139
140 var powarray=array;
141 for (var i=0;i<array.length;i++)powarray[i]=Math.pow(array[i],coefficient);
142 return powarray;
143} //}}}
144function ArraySqrt(array) { //{{{
145
146 var sqrtarray=array;
147 for (var i=0;i<array.length;i++)sqrtarray[i]=Math.sqrt(array[i]);
148 return sqrtarray;
149} //}}}
150function ArrayScale(array,alpha) { //{{{
151
152 for (var i=0;i<array.length;i++)array[i]=array[i]*alpha;
153
154} //}}}
155function ArrayMag(array1,array2) { //{{{
156
157 var arraymag=NewArrayFill(array1.length,0);
158 for (var i=0;i<array1.length;i++)arraymag[i]=Math.sqrt(Math.pow(array1[i],2)+Math.pow(array2[i],2));
159 return arraymag;
160} //}}}
161function ArrayAnyNaN(array) { //{{{
162
163 if(IsArray(array[0])){
164 for(var i=0;i<array.length;i++){
165 for(var j=0;j<array[0].length;j++){
166 if (isNaN(array[i][j])) return 1;
167 }
168 }
169 }
170 else{
171 for(var i=0;i<array.length;i++){
172 if (isNaN(array[i])) return 1;
173 }
174 }
175 return 0;
176} //}}}
177function ArrayUnique(arr) { //{{{
178
179 return arr.reverse().filter(function (e, i, arr) {
180 return arr.indexOf(e, i+1) === -1;
181 }).reverse();
182} //}}}
183function ArraySort(array) { //{{{
184
185 return array.sort(function(a, b) {
186 return a - b;
187 });
188
189} //}}}
190function ArrayAnyEqual(array,value) { //{{{
191
192 if(!isNaN(value)){
193 for(var i=0;i<array.length;i++){
194 if (array[i]==value)return 1;
195 }
196 }
197 else{
198 for(var i=0;i<array.length;i++){
199 if (isNaN(array[i]))return 1;
200 }
201 }
202 return 0;
203} //}}}
204function ArrayAnyBelowOrEqual(array,value) { //{{{
205
206 for(var i=0;i<array.length;i++){
207 if (array[i]<=value)return 1;
208 }
209 return 0;
210} //}}}
211function ArrayAnyBelowStrict(array,value) { //{{{
212
213 for(var i=0;i<array.length;i++){
214 if (array[i]<value)return 1;
215 }
216 return 0;
217} //}}}
218function ArrayAnyAboveOrEqual(array,value) { //{{{
219
220 for(var i=0;i<array.length;i++){
221 if (array[i]>=value)return 1;
222 }
223 return 0;
224} //}}}
225function ArrayAnyAboveStrict(array,value) { //{{{
226
227 for(var i=0;i<array.length;i++){
228 if (array[i]>value)return 1;
229 }
230 return 0;
231} //}}}
232function ArrayAnd(array1,array2) { //{{{
233
234 var array=array1;
235 for (var i=0;i<array1.length;i++)array[i]=array1[i] & array2[i];
236 return array;
237} //}}}
238function ArrayIsMember(array1,array2) { //{{{
239
240 var array=NewArrayFill(array1.length,0);
241 for (var i=0;i<array1.length;i++){
242 for(var j=0;j<array2.length;j++){
243 if (array1[i] == array2[j]){
244 array[i]=1;
245 break;
246 }
247 }
248 }
249 return array;
250} //}}}
251function NewArrayFill(size,value) { //{{{
252
253 return new Array(size).fill(value);
254} //}}}
255function NewArrayFillIncrement(size,start,increment) { //{{{
256
257 var array=new Array(size);
258
259 for(var i=0;i<size;i++){
260 array[i]=start+i*increment;
261 }
262
263 return array;
264} //}}}
265function ArrayFind(array,value) { //{{{
266
267 //find number of indices
268 var count=0;
269 for (var i=0;i<array.length;i++)if(array[i]==value)count++;
270
271 //allocate:
272 var indices= NewArrayFill(count,0);
273
274 //fill in:
275 count=0;
276 for (var i=0;i<array.length;i++){
277 if(array[i]==value){
278 indices[count]=i;
279 count++;
280 }
281 }
282 return indices;
283} //}}}
284function ArrayFindNot(array,value) { //{{{
285
286 //find number of indices
287 var count=0;
288 for (var i=0;i<array.length;i++)if(array[i]!=value)count++;
289
290 //allocate:
291 var indices= NewArrayFill(count,0);
292
293 //fill in:
294 count=0;
295 for (var i=0;i<array.length;i++){
296 if(array[i]!=value){
297 indices[count]=i;
298 count++;
299 }
300 }
301 return indices;
302} //}}}
303function Create2DArray(rows,cols) { //{{{
304 var arr = [];
305
306 for (var i=0;i<rows;i++) {
307 arr[i] = new Array(cols);
308 }
309
310 return arr;
311} //}}}
312function MapIsEmpty(map) { //{{{
313 for (var key in map){
314 if(map.hasOwnProperty(key)){
315 return false;
316 }
317 }
318 return true;
319} //}}}
320function clone(obj) {//{{{
321
322 var copy;
323
324 // Handle the 3 simple types, and null or undefined
325 if (null == obj || "object" != typeof obj) return obj;
326
327 // Handle Date
328 if (obj instanceof Date) {
329 copy = new Date();
330 copy.setTime(obj.getTime());
331 return copy;
332 }
333
334 // Handle Array
335 if (obj instanceof Array) {
336 copy = [];
337 for (var i = 0, len = obj.length; i < len; i++) {
338 copy[i] = clone(obj[i]);
339 }
340 return copy;
341 }
342
343 // Handle Object
344 if (obj instanceof Object) {
345 copy = {};
346 for (var attr in obj) {
347 if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]);
348 }
349 return copy;
350 }
351
352 throw new Error("Unable to copy obj! Its type isn't supported.");
353} //}}}
354function FloatFix(pointer,size) {//{{{
355
356 var buffer=new Float64Array(size);
357 for(var i=0;i<size;i++)buffer[i]=pointer[i];
358 return buffer;
359
360
361} //}}}
362function NullFix(pointer,value) {//{{{
363
364 if(pointer==null)return value;
365 else{
366 //check that the pointer values are not null:
367 if(IsArray(pointer)){
368 if(IsArray(pointer[0])){
369 for(var i=0;i<pointer.length;i++){
370 for(var j=0;j<pointer[0].length;j++){
371 if(pointer[i][j]==null)pointer[i][j]=value;
372 }
373 }
374 }
375 else{
376 for(var i=0;i<pointer.length;i++){
377 if(pointer[i]==null)pointer[i]=value;
378 }
379 }
380 }
381 return pointer;
382 }
383
384} //}}}
Note: See TracBrowser for help on using the repository browser.