1 | function ArrayMax(array){ //{{{
|
---|
2 | return Math.max.apply(null,array);
|
---|
3 | } //}}}
|
---|
4 | function 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 | } //}}}
|
---|
15 | function ArrayMin(array){ //{{{
|
---|
16 | return Math.min.apply(null,array);
|
---|
17 | } //}}}
|
---|
18 | function ArraySum(array){ //{{{
|
---|
19 | var sum=0;
|
---|
20 | for(var i=0;i<array.length;i++)sum+=array[i];
|
---|
21 | return sum;
|
---|
22 | } //}}}
|
---|
23 | function 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 | } //}}}
|
---|
46 | function 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 | } //}}}
|
---|
69 | function 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 | } //}}}
|
---|
80 | function 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 | } //}}}
|
---|
94 | function 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 | } //}}}
|
---|
112 | function 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 | } //}}}
|
---|
126 | function ArrayNot(array) { //{{{
|
---|
127 |
|
---|
128 | var notarray=array;
|
---|
129 | for (var i=0;i<array.length;i++)notarray[i]=-array[i];
|
---|
130 | return notarray;
|
---|
131 | } //}}}
|
---|
132 | function ArrayCopy(array) { //{{{
|
---|
133 |
|
---|
134 | var copy=[];
|
---|
135 | for(var i=0;i<array.length;i++)copy[i]=array[i];
|
---|
136 | return copy;
|
---|
137 | } //}}}
|
---|
138 | function 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 | } //}}}
|
---|
144 | function 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 | } //}}}
|
---|
150 | function ArrayScale(array,alpha) { //{{{
|
---|
151 |
|
---|
152 | for (var i=0;i<array.length;i++)array[i]=array[i]*alpha;
|
---|
153 |
|
---|
154 | } //}}}
|
---|
155 | function 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 | } //}}}
|
---|
161 | function 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 | } //}}}
|
---|
177 | function ArrayUnique(arr) { //{{{
|
---|
178 |
|
---|
179 | return arr.reverse().filter(function (e, i, arr) {
|
---|
180 | return arr.indexOf(e, i+1) === -1;
|
---|
181 | }).reverse();
|
---|
182 | } //}}}
|
---|
183 | function ArraySort(array) { //{{{
|
---|
184 |
|
---|
185 | return array.sort(function(a, b) {
|
---|
186 | return a - b;
|
---|
187 | });
|
---|
188 |
|
---|
189 | } //}}}
|
---|
190 | function 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 | } //}}}
|
---|
204 | function 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 | } //}}}
|
---|
211 | function 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 | } //}}}
|
---|
218 | function 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 | } //}}}
|
---|
225 | function 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 | } //}}}
|
---|
232 | function 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 | } //}}}
|
---|
238 | function 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 | } //}}}
|
---|
251 | function NewArrayFill(size,value) { //{{{
|
---|
252 |
|
---|
253 | return new Array(size).fill(value);
|
---|
254 | } //}}}
|
---|
255 | function 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 | } //}}}
|
---|
265 | function 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 | } //}}}
|
---|
284 | function 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 | } //}}}
|
---|
303 | function 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 | } //}}}
|
---|
312 | function MapIsEmpty(map) { //{{{
|
---|
313 | for (var key in map){
|
---|
314 | if(map.hasOwnProperty(key)){
|
---|
315 | return false;
|
---|
316 | }
|
---|
317 | }
|
---|
318 | return true;
|
---|
319 | } //}}}
|
---|
320 | function 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 | } //}}}
|
---|
354 | function 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 | } //}}}
|
---|
362 | function 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 | } //}}}
|
---|