UNPKG

art-standard-lib

Version:

The Standard Library for JavaScript that aught to be.

299 lines (254 loc) 8.92 kB
// Generated by CoffeeScript 1.12.7 (function() { "use strict"; var ArrayCompactFlatten, isArray, slice = [].slice; isArray = require('./Types').isArray; module.exports = ArrayCompactFlatten = (function() { var compact, compactFlattenIfNeeded, compactFlattenIfNeededFast, compactFlattenIfNeededFastCustom, deepArrayEach, deepArrayEachFast, doFlattenInternal, doFlattenInternalFast, doFlattenInternalFastCustom, flatten, isArrayOrArguments, keepAll, keepUnlessNullOrUndefined, needsFlatteningOrCompacting, needsFlatteningOrCompactingFast, needsFlatteningOrCompactingFastCustom; function ArrayCompactFlatten() {} ArrayCompactFlatten.isArrayOrArguments = isArrayOrArguments = function(o) { return isArray(o) || (typeof (o != null ? o.length : void 0) === "number" && o.toString() === '[object Arguments]' ? (console.error("DEPRICATED compactFlatten* no longer supports Arguments objects"), true) : false); }; ArrayCompactFlatten.needsFlatteningOrCompacting = function(array, keepTester) { console.warn("DEPRICATED - needsFlatteningOrCompacting"); return needsFlatteningOrCompacting(array, keepTester); }; ArrayCompactFlatten.keepUnlessNullOrUndefined = function(a) { console.warn("DEPRICATED: keepUnlessNullOrUndefined"); return a != null; }; needsFlatteningOrCompacting = function(array, keepTester) { var a, i, len; for (i = 0, len = array.length; i < len; i++) { a = array[i]; if (isArrayOrArguments(a) || !keepTester(a)) { return true; } } return false; }; keepAll = function() { return true; }; keepUnlessNullOrUndefined = function(a) { return a != null; }; /* IN: array: array or arguments-object keepTester: (value) -> true/false OUT: return true if that element should be in the output OUT: array where all elements test true to keepTester NOTE: NOT recursive - just does a shallow pass */ ArrayCompactFlatten.compact = compact = function(array, keepTester) { var a, i, j, len, len1; if (keepTester) { for (i = 0, len = array.length; i < len; i++) { a = array[i]; if (!keepTester(a)) { return (function() { var j, len1, results; results = []; for (j = 0, len1 = array.length; j < len1; j++) { a = array[j]; if (keepTester(a)) { results.push(a); } } return results; })(); } } } else { for (j = 0, len1 = array.length; j < len1; j++) { a = array[j]; if (a == null) { return (function() { var k, len2, results; results = []; for (k = 0, len2 = array.length; k < len2; k++) { a = array[k]; if (a != null) { results.push(a); } } return results; })(); } } } return array; }; /* IN: accepts any number of arguments NOTE: RECURSIVE: recurses into all arry or arguments-objects and adds their contents to the top level (flatten) */ ArrayCompactFlatten.flatten = flatten = function() { var args; args = 1 <= arguments.length ? slice.call(arguments, 0) : []; return compactFlattenIfNeeded(args.length === 1 ? args[0] : args, keepAll); }; /* IN: array: array or arguments-object keepTester: (value) -> true/false OUT: return true if that element should be in the output OUT: array where all elements test true to keepTester NOTE: RECURSIVE: recurses into all arry or arguments-objects and adds their contents to the top level (flatten) */ ArrayCompactFlatten.compactFlatten = function(array, keepTester) { if (keepTester) { throw new Error("DEPRICATED ArtStandardLib.ArrayCompactFlatten.compactFlatten: keepTester param; use customCompactFlatten"); } return compactFlattenIfNeeded(array, keepUnlessNullOrUndefined); }; ArrayCompactFlatten.customCompactFlatten = function(array, customKeepTester) { return compactFlattenIfNeeded(array, customKeepTester); }; ArrayCompactFlatten.compactFlattenAll = function() { var all; all = 1 <= arguments.length ? slice.call(arguments, 0) : []; return compactFlattenIfNeededFast(all); }; ArrayCompactFlatten.compactFlattenFast = function(array) { return compactFlattenIfNeededFast(array); }; ArrayCompactFlatten.compactFlattenIntoFast = function(into, array) { return doFlattenInternalFast(array, into); }; ArrayCompactFlatten.customCompactFlattenFast = function(array, customKeepTester) { return compactFlattenIfNeededFastCustom(array, customKeepTester); }; ArrayCompactFlatten.customCompactFlattenIntoFast = function(into, array, customKeepTester) { return doFlattenInternalFastCustom(array, into, customKeepTester); }; ArrayCompactFlatten.compactFlattenAllFast = function() { var all; all = 1 <= arguments.length ? slice.call(arguments, 0) : []; return compactFlattenIfNeededFast(all); }; ArrayCompactFlatten.deepArrayEachFast = deepArrayEachFast = function(array, f) { var el, i, len; for (i = 0, len = array.length; i < len; i++) { el = array[i]; if (isArray(el)) { deepArrayEachFast(el, f); } else { f(el); } } return array; }; /* IN: array: any object that has a length EFFECT: itterates over array and recurse over any element which isArrayOrArguments invokes f on every element that is not isArrayOrArguments OUT: array (same as passed in) */ ArrayCompactFlatten.deepArrayEach = deepArrayEach = function(array, f) { var el, i, len; for (i = 0, len = array.length; i < len; i++) { el = array[i]; if (isArrayOrArguments(el)) { deepArrayEach(el, f); } else { f(el); } } return array; }; doFlattenInternal = function(array, output, keepTester) { var el, i, len; for (i = 0, len = array.length; i < len; i++) { el = array[i]; if (isArrayOrArguments(el)) { doFlattenInternal(el, output, keepTester); } else { if (keepTester(el)) { output.push(el); } } } return output; }; compactFlattenIfNeeded = function(array, keepTester) { switch (false) { case !(array == null): return array; case !!isArrayOrArguments(array): return [array]; case !(needsFlatteningOrCompacting(array, keepTester) || !isArray(array)): return doFlattenInternal(array, [], keepTester); default: return array; } }; doFlattenInternalFast = function(array, output) { var el, i, len; for (i = 0, len = array.length; i < len; i++) { el = array[i]; if (isArray(el)) { doFlattenInternalFast(el, output); } else if (el != null) { output.push(el); } } return output; }; needsFlatteningOrCompactingFast = function(array) { var el, i, len; for (i = 0, len = array.length; i < len; i++) { el = array[i]; if ((el == null) || isArray(el)) { return true; } } return false; }; compactFlattenIfNeededFast = function(array) { if (needsFlatteningOrCompactingFast(array)) { return doFlattenInternalFast(array, []); } else { return array; } }; doFlattenInternalFastCustom = function(array, output, keepTester) { var el, i, len; for (i = 0, len = array.length; i < len; i++) { el = array[i]; if (isArray(el)) { doFlattenInternalFastCustom(el, output, keepTester); } else { if (keepTester(el)) { output.push(el); } } } return output; }; needsFlatteningOrCompactingFastCustom = function(array, keepTester) { var a, i, len; for (i = 0, len = array.length; i < len; i++) { a = array[i]; if (isArray(a) || !keepTester(a)) { return true; } } return false; }; compactFlattenIfNeededFastCustom = function(array, keepTester) { if (needsFlatteningOrCompactingFastCustom(array, keepTester)) { return doFlattenInternalFastCustom(array, [], keepTester); } else { return array; } }; return ArrayCompactFlatten; })(); }).call(this); //# sourceMappingURL=ArrayCompactFlatten.js.map