Projektstart
This commit is contained in:
93
backend/node_modules/mnemonist/utils/iterables.js
generated
vendored
Normal file
93
backend/node_modules/mnemonist/utils/iterables.js
generated
vendored
Normal file
@@ -0,0 +1,93 @@
|
||||
/**
|
||||
* Mnemonist Iterable Function
|
||||
* ============================
|
||||
*
|
||||
* Harmonized iteration helpers over mixed iterable targets.
|
||||
*/
|
||||
var forEach = require('obliterator/foreach');
|
||||
|
||||
var typed = require('./typed-arrays.js');
|
||||
|
||||
/**
|
||||
* Function used to determine whether the given object supports array-like
|
||||
* random access.
|
||||
*
|
||||
* @param {any} target - Target object.
|
||||
* @return {boolean}
|
||||
*/
|
||||
function isArrayLike(target) {
|
||||
return Array.isArray(target) || typed.isTypedArray(target);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function used to guess the length of the structure over which we are going
|
||||
* to iterate.
|
||||
*
|
||||
* @param {any} target - Target object.
|
||||
* @return {number|undefined}
|
||||
*/
|
||||
function guessLength(target) {
|
||||
if (typeof target.length === 'number')
|
||||
return target.length;
|
||||
|
||||
if (typeof target.size === 'number')
|
||||
return target.size;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function used to convert an iterable to an array.
|
||||
*
|
||||
* @param {any} target - Iteration target.
|
||||
* @return {array}
|
||||
*/
|
||||
function toArray(target) {
|
||||
var l = guessLength(target);
|
||||
|
||||
var array = typeof l === 'number' ? new Array(l) : [];
|
||||
|
||||
var i = 0;
|
||||
|
||||
// TODO: we could optimize when given target is array like
|
||||
forEach(target, function(value) {
|
||||
array[i++] = value;
|
||||
});
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
/**
|
||||
* Same as above but returns a supplementary indices array.
|
||||
*
|
||||
* @param {any} target - Iteration target.
|
||||
* @return {array}
|
||||
*/
|
||||
function toArrayWithIndices(target) {
|
||||
var l = guessLength(target);
|
||||
|
||||
var IndexArray = typeof l === 'number' ?
|
||||
typed.getPointerArray(l) :
|
||||
Array;
|
||||
|
||||
var array = typeof l === 'number' ? new Array(l) : [];
|
||||
var indices = typeof l === 'number' ? new IndexArray(l) : [];
|
||||
|
||||
var i = 0;
|
||||
|
||||
// TODO: we could optimize when given target is array like
|
||||
forEach(target, function(value) {
|
||||
array[i] = value;
|
||||
indices[i] = i++;
|
||||
});
|
||||
|
||||
return [array, indices];
|
||||
}
|
||||
|
||||
/**
|
||||
* Exporting.
|
||||
*/
|
||||
exports.isArrayLike = isArrayLike;
|
||||
exports.guessLength = guessLength;
|
||||
exports.toArray = toArray;
|
||||
exports.toArrayWithIndices = toArrayWithIndices;
|
||||
Reference in New Issue
Block a user