[19711] | 1 | function ArrayMax(array){ //{{{
|
---|
| 2 | return Math.max.apply(null,array);
|
---|
| 3 | } //}}}
|
---|
| 4 | function ArrayMax2D(array){ //{{{
|
---|
| 5 |
|
---|
| 6 | var max=0;
|
---|
| 7 |
|
---|
[19823] | 8 | for (var i=0;i<array.length;i++){
|
---|
[19711] | 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 | } //}}}
|
---|
[19721] | 18 | function ArraySum(array){ //{{{
|
---|
| 19 | var sum=0;
|
---|
| 20 | for(var i=0;i<array.length;i++)sum+=array[i];
|
---|
| 21 | return sum;
|
---|
| 22 | } //}}}
|
---|
[19768] | 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 | } //}}}
|
---|
[19711] | 69 | function ArrayMin2D(array){ //{{{
|
---|
| 70 |
|
---|
| 71 | var min=ArrayMax2D(array);
|
---|
| 72 |
|
---|
[19823] | 73 | for (var i=0;i<array.length;i++){
|
---|
[19711] | 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 | } //}}}
|
---|
[19780] | 94 | function MatrixToList(matrixin) { //{{{
|
---|
[19711] | 95 |
|
---|
[19780] | 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 | }
|
---|
[19711] | 108 | }
|
---|
[19780] | 109 | return list;
|
---|
[19711] | 110 | }
|
---|
| 111 | } //}}}
|
---|
[19719] | 112 | function IsArray(object) { //{{{
|
---|
| 113 |
|
---|
[19793] | 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;
|
---|
[19719] | 124 |
|
---|
| 125 | } //}}}
|
---|
| 126 | function ArrayNot(array) { //{{{
|
---|
| 127 |
|
---|
| 128 | var notarray=array;
|
---|
[19823] | 129 | for (var i=0;i<array.length;i++)notarray[i]=-array[i];
|
---|
[19719] | 130 | return notarray;
|
---|
| 131 | } //}}}
|
---|
[19780] | 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 | } //}}}
|
---|
[19753] | 138 | function ArrayPow(array,coefficient) { //{{{
|
---|
| 139 |
|
---|
| 140 | var powarray=array;
|
---|
[19823] | 141 | for (var i=0;i<array.length;i++)powarray[i]=Math.pow(array[i],coefficient);
|
---|
[19753] | 142 | return powarray;
|
---|
| 143 | } //}}}
|
---|
| 144 | function ArraySqrt(array) { //{{{
|
---|
| 145 |
|
---|
| 146 | var sqrtarray=array;
|
---|
[19823] | 147 | for (var i=0;i<array.length;i++)sqrtarray[i]=Math.sqrt(array[i]);
|
---|
[19753] | 148 | return sqrtarray;
|
---|
| 149 | } //}}}
|
---|
[19787] | 150 | function ArrayScale(array,alpha) { //{{{
|
---|
| 151 |
|
---|
[19823] | 152 | for (var i=0;i<array.length;i++)array[i]=array[i]*alpha;
|
---|
[19787] | 153 |
|
---|
| 154 | } //}}}
|
---|
[19753] | 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 | } //}}}
|
---|
[19721] | 161 | function ArrayAnyNaN(array) { //{{{
|
---|
| 162 |
|
---|
[19887] | 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;
|
---|
[19721] | 176 | } //}}}
|
---|
[19780] | 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 | } //}}}
|
---|
[19768] | 190 | function ArrayAnyEqual(array,value) { //{{{
|
---|
[19780] | 191 |
|
---|
| 192 | if(!isNaN(value)){
|
---|
| 193 | for(var i=0;i<array.length;i++){
|
---|
| 194 | if (array[i]==value)return 1;
|
---|
| 195 | }
|
---|
[19768] | 196 | }
|
---|
[19780] | 197 | else{
|
---|
| 198 | for(var i=0;i<array.length;i++){
|
---|
| 199 | if (isNaN(array[i]))return 1;
|
---|
| 200 | }
|
---|
| 201 | }
|
---|
[19768] | 202 | return 0;
|
---|
| 203 | } //}}}
|
---|
[19753] | 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 | } //}}}
|
---|
[19768] | 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 | } //}}}
|
---|
[19719] | 232 | function ArrayAnd(array1,array2) { //{{{
|
---|
| 233 |
|
---|
| 234 | var array=array1;
|
---|
[19823] | 235 | for (var i=0;i<array1.length;i++)array[i]=array1[i] & array2[i];
|
---|
[19719] | 236 | return array;
|
---|
| 237 | } //}}}
|
---|
[19780] | 238 | function ArrayIsMember(array1,array2) { //{{{
|
---|
| 239 |
|
---|
| 240 | var array=NewArrayFill(array1.length,0);
|
---|
[19823] | 241 | for (var i=0;i<array1.length;i++){
|
---|
| 242 | for(var j=0;j<array2.length;j++){
|
---|
[19780] | 243 | if (array1[i] == array2[j]){
|
---|
| 244 | array[i]=1;
|
---|
| 245 | break;
|
---|
| 246 | }
|
---|
| 247 | }
|
---|
| 248 | }
|
---|
| 249 | return array;
|
---|
| 250 | } //}}}
|
---|
[19719] | 251 | function NewArrayFill(size,value) { //{{{
|
---|
| 252 |
|
---|
| 253 | return new Array(size).fill(value);
|
---|
| 254 | } //}}}
|
---|
[19780] | 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 | } //}}}
|
---|
[19719] | 265 | function ArrayFind(array,value) { //{{{
|
---|
| 266 |
|
---|
| 267 | //find number of indices
|
---|
| 268 | var count=0;
|
---|
[19823] | 269 | for (var i=0;i<array.length;i++)if(array[i]==value)count++;
|
---|
[19719] | 270 |
|
---|
| 271 | //allocate:
|
---|
| 272 | var indices= NewArrayFill(count,0);
|
---|
| 273 |
|
---|
| 274 | //fill in:
|
---|
| 275 | count=0;
|
---|
[19823] | 276 | for (var i=0;i<array.length;i++){
|
---|
[19719] | 277 | if(array[i]==value){
|
---|
| 278 | indices[count]=i;
|
---|
| 279 | count++;
|
---|
| 280 | }
|
---|
| 281 | }
|
---|
| 282 | return indices;
|
---|
| 283 | } //}}}
|
---|
[19721] | 284 | function ArrayFindNot(array,value) { //{{{
|
---|
| 285 |
|
---|
| 286 | //find number of indices
|
---|
| 287 | var count=0;
|
---|
[19823] | 288 | for (var i=0;i<array.length;i++)if(array[i]!=value)count++;
|
---|
[19721] | 289 |
|
---|
| 290 | //allocate:
|
---|
| 291 | var indices= NewArrayFill(count,0);
|
---|
| 292 |
|
---|
| 293 | //fill in:
|
---|
| 294 | count=0;
|
---|
[19823] | 295 | for (var i=0;i<array.length;i++){
|
---|
[19721] | 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 | } //}}}
|
---|
[19805] | 312 | function MapIsEmpty(map) { //{{{
|
---|
| 313 | for (var key in map){
|
---|
| 314 | if(map.hasOwnProperty(key)){
|
---|
| 315 | return false;
|
---|
| 316 | }
|
---|
| 317 | }
|
---|
| 318 | return true;
|
---|
| 319 | } //}}}
|
---|
[19827] | 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 | } //}}}
|
---|
[19863] | 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 | } //}}}
|
---|