From a0ae1572ca86f31f40fbd49c466860e8fc4307f5 Mon Sep 17 00:00:00 2001 From: electricessence Date: Tue, 3 Nov 2015 02:02:02 -0800 Subject: [PATCH] Updated OrderEnumerable to use standardized SortContext that can be reused by other sorting mechanism. SortContext Implements IComparer. Extended Enumerable to have: orderUsing(comparison); orderUsingReversed(comparison); Extended OrderedEnumerable to have: thenUsing(comparison); thenUsingReversed(comparison); This allows for any comparison to be used instead of only keys. --- dist/commonjs/System.Linq/Linq.js | 134 ++++++------- dist/commonjs/System.Linq/Linq.js.map | 2 +- .../System/Collections/Array/Sort.js.map | 2 +- source/System.Linq/Linq.js | 102 ++++------ source/System.Linq/Linq.js.map | 2 +- source/System.Linq/Linq.ts | 179 ++++++++---------- source/System/Collections/Array/IArray.d.ts | 2 +- source/System/Collections/Array/Sort.js.map | 2 +- source/System/Collections/Array/Sort.ts | 10 +- .../Collections/Sorting/KeySortedContext.js | 47 +++++ .../Sorting/KeySortedContext.js.map | 1 + .../Collections/Sorting/KeySortedContext.ts | 38 ++++ source/System/Collections/Sorting/Order.js | 10 + .../System/Collections/Sorting/Order.js.map | 1 + source/System/Collections/Sorting/Order.ts | 10 + .../System/Collections/Sorting/SortContext.js | 50 +++++ .../Collections/Sorting/SortContext.js.map | 1 + .../System/Collections/Sorting/SortContext.ts | 59 ++++++ source/System/IComparer.js | 6 + source/System/IComparer.js.map | 1 + source/System/IComparer.ts | 10 + 21 files changed, 424 insertions(+), 245 deletions(-) create mode 100644 source/System/Collections/Sorting/KeySortedContext.js create mode 100644 source/System/Collections/Sorting/KeySortedContext.js.map create mode 100644 source/System/Collections/Sorting/KeySortedContext.ts create mode 100644 source/System/Collections/Sorting/Order.js create mode 100644 source/System/Collections/Sorting/Order.js.map create mode 100644 source/System/Collections/Sorting/Order.ts create mode 100644 source/System/Collections/Sorting/SortContext.js create mode 100644 source/System/Collections/Sorting/SortContext.js.map create mode 100644 source/System/Collections/Sorting/SortContext.ts create mode 100644 source/System/IComparer.js create mode 100644 source/System/IComparer.js.map create mode 100644 source/System/IComparer.ts diff --git a/dist/commonjs/System.Linq/Linq.js b/dist/commonjs/System.Linq/Linq.js index 2b83dd64..0bf9bd60 100644 --- a/dist/commonjs/System.Linq/Linq.js +++ b/dist/commonjs/System.Linq/Linq.js @@ -11,7 +11,7 @@ Object.defineProperty(exports, '__esModule', { var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); -var _get = function get(_x55, _x56, _x57) { var _again = true; _function: while (_again) { var object = _x55, property = _x56, receiver = _x57; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x55 = parent; _x56 = property; _x57 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; +var _get = function get(_x53, _x54, _x55) { var _again = true; _function: while (_again) { var object = _x53, property = _x54, receiver = _x55; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x53 = parent; _x54 = property; _x55 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } @@ -75,6 +75,10 @@ var _SystemDisposableObjectDisposedException = require('../System/Disposable/Obj var _SystemDisposableObjectDisposedException2 = _interopRequireDefault(_SystemDisposableObjectDisposedException); +var _SystemCollectionsSortingKeySortedContext = require("../System/Collections/Sorting/KeySortedContext"); + +var _SystemCollectionsSortingKeySortedContext2 = _interopRequireDefault(_SystemCollectionsSortingKeySortedContext); + var enumeratorFrom = Enumerator.from; var enumeratorForEach = Enumerator.forEach; 'use strict'; @@ -1200,14 +1204,24 @@ var Enumerable = (function (_DisposableBase) { value: function orderBy() { var keySelector = arguments.length <= 0 || arguments[0] === undefined ? Functions.Identity : arguments[0]; - return new OrderedEnumerable(this, keySelector, false); + return new OrderedEnumerable(this, keySelector, 1); + } + }, { + key: 'orderUsing', + value: function orderUsing(comparison) { + return new OrderedEnumerable(this, null, 1, null, comparison); + } + }, { + key: 'orderUsingReversed', + value: function orderUsingReversed(comparison) { + return new OrderedEnumerable(this, null, -1, null, comparison); } }, { key: 'orderByDescending', value: function orderByDescending() { var keySelector = arguments.length <= 0 || arguments[0] === undefined ? Functions.Identity : arguments[0]; - return new OrderedEnumerable(this, keySelector, true); + return new OrderedEnumerable(this, keySelector, -1); } }, { key: 'groupBy', @@ -1893,6 +1907,17 @@ var Enumerable = (function (_DisposableBase) { }); } } + }, { + key: 'map', + value: function map(enumerable, selector) { + return enumerable && (0, _SystemDisposableUtility.using)(Enumerator.from(enumerable), function (e) { + var result = []; + Enumerator.forEach(e, function (e, i) { + result[i] = selector(e); + }); + return result; + }); + } }, { key: 'max', value: function max(values) { @@ -2299,7 +2324,7 @@ var WhereSelectEnumerable = (function (_Enumerable3) { var OrderedEnumerable = (function (_Enumerable4) { _inherits(OrderedEnumerable, _Enumerable4); - function OrderedEnumerable(source, keySelector, descending, parent) { + function OrderedEnumerable(source, keySelector, order, parent) { var comparer = arguments.length <= 4 || arguments[4] === undefined ? Values.compare : arguments[4]; _classCallCheck(this, OrderedEnumerable); @@ -2307,25 +2332,35 @@ var OrderedEnumerable = (function (_Enumerable4) { _get(Object.getPrototypeOf(OrderedEnumerable.prototype), 'constructor', this).call(this, null); this.source = source; this.keySelector = keySelector; - this.descending = descending; + this.order = order; this.parent = parent; this.comparer = comparer; } _createClass(OrderedEnumerable, [{ key: 'createOrderedEnumerable', - value: function createOrderedEnumerable(keySelector, descending) { - return new OrderedEnumerable(this.source, keySelector, descending, this); + value: function createOrderedEnumerable(keySelector, order) { + return new OrderedEnumerable(this.source, keySelector, order, this); } }, { key: 'thenBy', value: function thenBy(keySelector) { - return this.createOrderedEnumerable(keySelector, false); + return this.createOrderedEnumerable(keySelector, 1); + } + }, { + key: 'thenUsing', + value: function thenUsing(comparison) { + return new OrderedEnumerable(this.source, null, 1, this, comparison); } }, { key: 'thenByDescending', value: function thenByDescending(keySelector) { - return this.createOrderedEnumerable(keySelector, true); + return this.createOrderedEnumerable(keySelector, -1); + } + }, { + key: 'thenUsingReversed', + value: function thenUsingReversed(comparison) { + return new OrderedEnumerable(this.source, null, -1, this, comparison); } }, { key: 'getEnumerator', @@ -2336,17 +2371,8 @@ var OrderedEnumerable = (function (_Enumerable4) { var index = 0; return new _SystemCollectionsEnumerationEnumeratorBase2['default'](function () { index = 0; - buffer = []; - indexes = []; - Enumerable.forEach(_.source, function (item, i) { - buffer[i] = item; - indexes[i] = i; - }); - var sortContext = SortContext.create(_, null, _.comparer); - sortContext.generateKeys(buffer); - indexes.sort(function (a, b) { - return sortContext.compare(a, b); - }); + buffer = Enumerable.toArray(_.source); + indexes = createSortContext(_).generateSortedIndexes(buffer); }, function (yielder) { return index < indexes.length ? yielder.yieldReturn(buffer[indexes[index++]]) : false; }, function () { @@ -2362,7 +2388,7 @@ var OrderedEnumerable = (function (_Enumerable4) { _get(Object.getPrototypeOf(OrderedEnumerable.prototype), '_onDispose', this).call(this); this.source = null; this.keySelector = null; - this.descending = null; + this.order = null; this.parent = null; } }]); @@ -2370,59 +2396,25 @@ var OrderedEnumerable = (function (_Enumerable4) { return OrderedEnumerable; })(Enumerable); -var SortContext = (function () { - function SortContext(keySelector, descending, child) { - var comparison = arguments.length <= 3 || arguments[3] === undefined ? Values.compare : arguments[3]; +function createSortContext(_x56) { + var _arguments2 = arguments; + var _again2 = true; - _classCallCheck(this, SortContext); + _function2: while (_again2) { + var orderedEnumerable = _x56; + currentContext = context = undefined; + _again2 = false; + var currentContext = _arguments2.length <= 1 || _arguments2[1] === undefined ? null : _arguments2[1]; - this.keySelector = keySelector; - this.descending = descending; - this.child = child; - this.comparison = comparison; - this.keys = null; - } - - _createClass(SortContext, [{ - key: 'generateKeys', - value: function generateKeys(source) { - var _ = this; - var len = source.length; - var keySelector = _.keySelector; - var keys = new Array(len); - for (var i = 0; i < len; ++i) { - keys[i] = keySelector(source[i]); - } - _.keys = keys; - if (_.child) _.child.generateKeys(source); + var context = new _SystemCollectionsSortingKeySortedContext2['default'](currentContext, orderedEnumerable.keySelector, orderedEnumerable.order, orderedEnumerable.comparer); + if (orderedEnumerable.parent) { + _arguments2 = [_x56 = orderedEnumerable.parent, context]; + _again2 = true; + continue _function2; } - }, { - key: 'compare', - value: function compare(index1, index2) { - var _ = this, - keys = _.keys; - var comparison = _.comparison(keys[index1], keys[index2]); - if (comparison == 0) { - var child = _.child; - return child ? child.compare(index1, index2) : Values.compare(index1, index2); - } - return _.descending ? -comparison : comparison; - } - }], [{ - key: 'create', - value: function create(orderedEnumerable) { - var currentContext = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1]; - var comparison = arguments.length <= 2 || arguments[2] === undefined ? Values.compare : arguments[2]; - - var context = new SortContext(orderedEnumerable.keySelector, orderedEnumerable.descending, currentContext, comparison); - if (orderedEnumerable.parent) return SortContext.create(orderedEnumerable.parent, context); - return context; - } - }]); - - return SortContext; -})(); - + return context; + } +} function throwIfDisposed(disposed) { var className = arguments.length <= 1 || arguments[1] === undefined ? "Enumerable" : arguments[1]; diff --git a/dist/commonjs/System.Linq/Linq.js.map b/dist/commonjs/System.Linq/Linq.js.map index 712ea2ed..1fdb3764 100644 --- a/dist/commonjs/System.Linq/Linq.js.map +++ b/dist/commonjs/System.Linq/Linq.js.map @@ -1 +1 @@ -{"version":3,"sources":["System.Linq/Linq.ts"],"names":["LinqFunctions","LinqFunctions.Greater","LinqFunctions.Lesser","Enumerable","Enumerable.constructor","Enumerable.getEnumerator","Enumerable._onDispose","Enumerable.forEach","Enumerable.toArray","Enumerable.asEnumerable","Enumerable.toLookup","Enumerable.toMap","Enumerable.toDictionary","Enumerable.toJoinedString","Enumerable.doAction","Enumerable.force","Enumerable.skip","Enumerable.skipWhile","Enumerable.take","Enumerable.takeWhile","Enumerable.takeUntil","Enumerable.takeExceptLast","Enumerable.takeFromLast","Enumerable.traverseBreadthFirst","Enumerable.traverseDepthFirst","Enumerable.flatten","Enumerable.pairwise","Enumerable.scan","Enumerable.select","Enumerable.selectMany","Enumerable.choose","Enumerable.where","Enumerable.ofType","Enumerable.except","Enumerable.distinct","Enumerable.distinctUntilChanged","Enumerable.reverse","Enumerable.shuffle","Enumerable.count","Enumerable.all","Enumerable.every","Enumerable.any","Enumerable.some","Enumerable.isEmpty","Enumerable.contains","Enumerable.indexOf","Enumerable.lastIndexOf","Enumerable.defaultIfEmpty","Enumerable.zip","Enumerable.zipMultiple","Enumerable.join","Enumerable.groupJoin","Enumerable.concatWith","Enumerable.merge","Enumerable.concat","Enumerable.insertAt","Enumerable.alternateMultiple","Enumerable.alternateSingle","Enumerable.alternate","Enumerable.intersect","Enumerable.sequenceEqual","Enumerable.union","Enumerable.orderBy","Enumerable.orderByDescending","Enumerable.groupBy","Enumerable.partitionBy","Enumerable.buffer","Enumerable.aggregate","Enumerable.average","Enumerable.max","Enumerable.min","Enumerable.maxBy","Enumerable.minBy","Enumerable.sum","Enumerable.product","Enumerable.elementAt","Enumerable.elementAtOrDefault","Enumerable.first","Enumerable.firstOrDefault","Enumerable.last","Enumerable.lastOrDefault","Enumerable.single","Enumerable.singleOrDefault","Enumerable.share","Enumerable.memoize","Enumerable.catchError","Enumerable.finallyAction","Enumerable.fromArray","Enumerable.from","Enumerable.choice","Enumerable.cycle","Enumerable.empty","Enumerable.repeat","Enumerable.repeatWithFinalize","Enumerable.make","Enumerable.range","Enumerable.rangeDown","Enumerable.toInfinity","Enumerable.toNegativeInfinity","Enumerable.rangeTo","Enumerable.matches","Enumerable.generate","Enumerable.unfold","Enumerable.defer","ArrayEnumerable","ArrayEnumerable.constructor","ArrayEnumerable._onDispose","ArrayEnumerable.toArray","ArrayEnumerable.asEnumerable","ArrayEnumerable.forEach","ArrayEnumerable.any","ArrayEnumerable.count","ArrayEnumerable.elementAt","ArrayEnumerable.elementAtOrDefault","ArrayEnumerable.first","ArrayEnumerable.firstOrDefault","ArrayEnumerable.last","ArrayEnumerable.lastOrDefault","ArrayEnumerable.skip","ArrayEnumerable.takeExceptLast","ArrayEnumerable.takeFromLast","ArrayEnumerable.reverse","ArrayEnumerable.memoize","ArrayEnumerable.sequenceEqual","ArrayEnumerable.toJoinedString","ArrayEnumerable.source","Grouping","Grouping.constructor","Grouping.key","Lookup","Lookup.constructor","Lookup.get","Lookup.contains","Lookup.getEnumerator","Lookup.count","WhereEnumerable","WhereEnumerable.constructor","WhereEnumerable.where","WhereEnumerable.select","WhereEnumerable.getEnumerator","WhereEnumerable._onDispose","WhereSelectEnumerable","WhereSelectEnumerable.constructor","WhereSelectEnumerable.where","WhereSelectEnumerable.select","WhereSelectEnumerable.getEnumerator","WhereSelectEnumerable._onDispose","OrderedEnumerable","OrderedEnumerable.constructor","OrderedEnumerable.createOrderedEnumerable","OrderedEnumerable.thenBy","OrderedEnumerable.thenByDescending","OrderedEnumerable.getEnumerator","OrderedEnumerable._onDispose","SortContext","SortContext.constructor","SortContext.generateKeys","SortContext.compare","SortContext.create","throwIfDisposed"],"mappings":"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","file":"System.Linq/Linq.js","sourcesContent":["/*\r\n * @author electricessence / https://github.com/electricessence/\r\n * Original: http://linqjs.codeplex.com/\r\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\r\n */\r\n\r\n///\r\n///\r\n///\r\n///\r\n///\r\n///\r\nimport * as Values from '../System/Compare';\r\nimport * as Arrays from '../System/Collections/Array/Compare';\r\nimport * as ArrayUtility from '../System/Collections/Array/Utility';\r\nimport * as Enumerator from '../System/Collections/Enumeration/Enumerator';\r\nimport Type from '../System/Types';\r\nimport Integer from '../System/Integer';\r\nimport BaseFunctions from '../System/Functions';\r\nimport ArrayEnumerator from '../System/Collections/Enumeration/ArrayEnumerator';\r\nimport EnumeratorBase from '../System/Collections/Enumeration/EnumeratorBase';\r\nimport Dictionary from '../System/Collections/Dictionaries/Dictionary';\r\nimport Queue from '../System/Collections/Queue';\r\nimport {dispose, disposeThese, using} from '../System/Disposable/Utility';\r\nimport DisposableBase from '../System/Disposable/DisposableBase';\r\nimport ArgumentException from '../System/Exceptions/ArgumentException';\r\nimport ObjectDisposedException from '../System/Disposable/ObjectDisposedException';\r\n\r\nimport enumeratorFrom = Enumerator.from;\r\nimport enumeratorForEach = Enumerator.forEach;\r\n\r\ntype Comparable = Primitive|IComparable;\r\n\r\n'use strict';\r\n\r\n// #region Local Constants.\r\n// Leave internal to avoid accidental overwriting.\r\nclass LinqFunctions extends BaseFunctions\r\n{\r\n\tGreater(a:T, b:T)\r\n\t{\r\n\t\treturn a>b ? a : b;\r\n\t}\r\n\r\n\tLesser(a:T, b:T)\r\n\t{\r\n\t\treturn a is a wrapper class that allows more primitive enumerables to exhibit LINQ behavior.\r\n *\r\n * In C# Enumerable is not an instance but has extensions for IEnumerable.\r\n * In this case, we use Enumerable as the underlying class that is being chained.\r\n */\r\nexport class Enumerable\r\nextends DisposableBase implements IEnumerable\r\n{\r\n\r\n\tconstructor(\r\n\t\tprotected _enumeratorFactory:() => IEnumerator,\r\n\t\tfinalizer?:() => void)\r\n\t{\r\n\t\tsuper(finalizer);\r\n\t}\r\n\r\n\t/**\r\n\t * Static shortcut for creating an ArrayEnumerable.\r\n\t */\r\n\tstatic fromArray(array:IArray):Enumerable\r\n\t{\r\n\t\treturn new ArrayEnumerable(array);\r\n\t}\r\n\r\n\t/**\r\n\t * Universal method for converting a primitive enumerables into a LINQ enabled ones.\r\n\t *\r\n\t * Is not limited to TypeScript usages.\r\n\t */\r\n\tstatic from(source:IEnumerable | IArray):Enumerable\r\n\t{\r\n\t\tvar type = Type.of(source);\r\n\t\tif(type.isObject)\r\n\t\t{\r\n\t\t\tif(source instanceof Enumerable)\r\n\t\t\t\treturn source;\r\n\r\n\t\t\tif(source instanceof Array)\r\n\t\t\t\treturn new ArrayEnumerable(source);\r\n\r\n\t\t\tif(type.member(GET_ENUMERATOR).isFunction)\r\n\t\t\t\treturn new Enumerable(()=>(>source).getEnumerator());\r\n\r\n\t\t\tif(type.member(LENGTH).isValidNumber)\r\n\t\t\t\treturn new ArrayEnumerable(>source);\r\n\t\t}\r\n\r\n\t\tthrow new Error(UNSUPPORTED_ENUMERABLE);\r\n\t}\r\n\r\n\tstatic toArray(source:IEnumerable | IArray):T[]\r\n\t{\r\n\t\tvar type = Type.of(source);\r\n\t\tif(type.isObject)\r\n\t\t{\r\n\t\t\tif(source instanceof Array)\r\n\t\t\t\treturn source.slice();\r\n\r\n\t\t\tif(type.member(LENGTH).isValidNumber)\r\n\t\t\t\tsource = new ArrayEnumerable(>source);\r\n\r\n\t\t\tif(source instanceof Enumerable)\r\n\t\t\t\treturn source.toArray();\r\n\r\n\t\t\tif(type.member(GET_ENUMERATOR).isFunction)\r\n\t\t\t{\r\n\t\t\t\tvar result:T[] = [];\r\n\t\t\t\tenumeratorForEach(\r\n\t\t\t\t\t(>source).getEnumerator(), (e, i) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tresult[i] = e;\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthrow new Error(UNSUPPORTED_ENUMERABLE);\r\n\t}\r\n\r\n\r\n\t// #region IEnumerable Implementation...\r\n\tgetEnumerator():IEnumerator\r\n\t{\r\n\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\treturn this._enumeratorFactory();\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\t// #region IDisposable override...\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._enumeratorFactory = null;\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\t//////////////////////////////////////////\r\n\t// #region Static Methods...\r\n\tstatic choice(values:IArray):Enumerable\r\n\t{\r\n\t\treturn new Enumerable(\r\n\t\t\t() => new EnumeratorBase(\r\n\t\t\t\tnull,\r\n\t\t\t\t(yielder)=>\r\n\t\t\t\t\tyielder.yieldReturn(values[Integer.random(values.length)])\r\n\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\tstatic cycle(values:IArray):Enumerable\r\n\t{\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar index:number = 0; // Let the compiler know this is an int.\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t}, // Reinitialize the value just in case the enumerator is restarted.\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(index>=values.length) index = 0;\r\n\t\t\t\t\t\treturn yielder.yieldReturn(values[index++]);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic empty():Enumerable\r\n\t{\r\n\t\treturn new Enumerable(\r\n\t\t\t() => new EnumeratorBase(\r\n\t\t\t\tnull,\r\n\t\t\t\tFunctions.False\r\n\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\tstatic repeat(element:T, count:number = Infinity):Enumerable\r\n\t{\r\n\t\tif(isNaN(count) || count<=0)\r\n\t\t\treturn Enumerable.empty();\r\n\r\n\t\treturn isFinite(count) && Integer.assert(count, \"count\")\r\n\t\t\t? new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar c:number = count;\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=> (index++(\r\n\t\t\t() =>\r\n\t\t\t\tnew EnumeratorBase(\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\t(yielder)=> yielder.yieldReturn(element)\r\n\t\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\t// Note: this enumeration does not break.\r\n\tstatic repeatWithFinalize(\r\n\t\tinitializer:() => T,\r\n\t\tfinalizer:(element:T) => void):Enumerable\r\n\t{\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar element:T;\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\telement = initializer();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=> yielder.yieldReturn(element),\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfinalizer(element);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic make(element:T):Enumerable\r\n\t{\r\n\t\treturn Enumerable.repeat(element, 1);\r\n\t}\r\n\r\n\t// start and step can be other than integer.\r\n\tstatic range(\r\n\t\tstart:number = 0,\r\n\t\tcount:number = Infinity,\r\n\t\tstep:number = 1):Enumerable\r\n\t{\r\n\r\n\t\tif(!isFinite(start))\r\n\t\t\tthrow new Error(\"Must have a valid 'start' value.\");\r\n\r\n\t\tif(isNaN(count) || count<=0)\r\n\t\t\treturn Enumerable.empty();\r\n\r\n\t\tif(!isFinite(step))\r\n\t\t\tthrow new Error(\"Must have a valid 'step' value.\");\r\n\r\n\t\treturn isFinite(count) && Integer.assert(count, \"count\")\r\n\t\t\t? new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar value:number;\r\n\t\t\t\tvar c:number = count; // Force integer evaluation.\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t\tvalue = start;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar result:boolean =\r\n\t\t\t\t\t\t\t index++(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar value:number;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvalue = start;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar current:number = value;\r\n\t\t\t\t\t\tvalue += step;\r\n\t\t\t\t\t\treturn yielder.yieldReturn(current);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic rangeDown(\r\n\t\tstart:number = 0,\r\n\t\tcount:number = Infinity,\r\n\t\tstep:number = 1):Enumerable\r\n\t{\r\n\t\tstep = Math.abs(step)* -1;\r\n\r\n\t\treturn Enumerable.range(start, count, step);\r\n\t}\r\n\r\n\t// step = -1 behaves the same as toNegativeInfinity;\r\n\tstatic toInfinity(\r\n\t\tstart:number = 0,\r\n\t\tstep:number = 1):Enumerable\r\n\t{\r\n\t\treturn Enumerable.range(start, Infinity, step);\r\n\t}\r\n\r\n\tstatic toNegativeInfinity(\r\n\t\tstart:number = 0,\r\n\t\tstep:number = 1):Enumerable\r\n\t{\r\n\t\treturn Enumerable.rangeDown(start, Infinity, step);\r\n\t}\r\n\r\n\tstatic rangeTo(\r\n\t\tstart:number = 0,\r\n\t\tto:number = Infinity,\r\n\t\tstep:number = 1):Enumerable\r\n\t{\r\n\t\tif(!isFinite(start))\r\n\t\t\tthrow new Error(\"Must have a valid 'start' value.\");\r\n\r\n\t\tif(isNaN(to))\r\n\t\t\tthrow new Error(\"Must have a valid 'to' value.\");\r\n\r\n\t\tif(!isFinite(step))\r\n\t\t\tthrow new Error(\"Must have a valid 'step' value.\");\r\n\r\n\t\t// This way we adjust for the delta from start and to so the user can say +/- step and it will work as expected.\r\n\t\tstep = Math.abs(step);\r\n\r\n\t\t// Range to infinity has a more efficient mechanism.\r\n\t\tif(!isFinite(to))\r\n\t\t\treturn Enumerable.range(start, Infinity, (start(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar value:number;\r\n\r\n\t\t\t\treturn start(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvalue = start;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar result:boolean = value<=to && yielder.yieldReturn(value);\r\n\r\n\t\t\t\t\t\tif(result)\r\n\t\t\t\t\t\t\tvalue += step;\r\n\r\n\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t})\r\n\r\n\t\t\t\t\t: new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvalue = start;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar result:boolean = value>=to && yielder.yieldReturn(value);\r\n\r\n\t\t\t\t\t\tif(result)\r\n\t\t\t\t\t\t\tvalue -= step;\r\n\r\n\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic matches(input:string, pattern:any, flags:string = \"\"):Enumerable\r\n\t{\r\n\r\n\t\tvar type = typeof input;\r\n\t\tif(type!=Type.STRING)\r\n\t\t\tthrow new Error(\"Cannot exec RegExp matches of type '\" + type + \"'.\");\r\n\r\n\t\tif(pattern instanceof RegExp)\r\n\t\t{\r\n\t\t\tflags += (pattern.ignoreCase) ? \"i\" : \"\";\r\n\t\t\tflags += (pattern.multiline) ? \"m\" : \"\";\r\n\t\t\tpattern = pattern.source;\r\n\t\t}\r\n\r\n\t\tif(flags.indexOf(\"g\")=== -1) flags += \"g\";\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar regex:RegExp;\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tregex = new RegExp(pattern, flags);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// Calling regex.exec consecutively on the same input uses the lastIndex to start the next match.\r\n\t\t\t\t\t\tvar match = regex.exec(input);\r\n\t\t\t\t\t\treturn (match!==null) ? yielder.yieldReturn(match) : false;\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic generate(factory:(index?:number) => T, count:number = Infinity):Enumerable\r\n\t{\r\n\r\n\t\tif(isNaN(count) || count<=0)\r\n\t\t\treturn Enumerable.empty();\r\n\r\n\t\treturn isFinite(count) && Integer.assert(count, \"count\")\r\n\r\n\t\t\t? new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar c:number = count;\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar current:number = index++;\r\n\t\t\t\t\t\treturn current(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar index:number = 0;\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=> yielder.yieldReturn(factory(index++))\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t}\r\n\r\n\tstatic unfold(seed:T, valueFactory:Selector, skipSeed:Boolean = false):Enumerable\r\n\t{\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar index:number = 0;\r\n\t\t\t\tvar value:T;\r\n\t\t\t\tvar isFirst:boolean;\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t\tvalue = seed;\r\n\t\t\t\t\t\tisFirst = !skipSeed;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar i = index++;\r\n\t\t\t\t\t\tif(isFirst)\r\n\t\t\t\t\t\t\tisFirst = false;\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tvalue = valueFactory(value, i);\r\n\t\t\t\t\t\treturn yielder.yieldReturn(value);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic defer(enumerableFactory:() => IEnumerable):Enumerable\r\n\t{\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = enumerableFactory().getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=> enumerator.moveNext() && yielder.yieldReturn(enumerator.current),\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic forEach(\r\n\t\tenumerable:IEnumerable,\r\n\t\taction:(element:T, index?:number) => any):void\r\n\t{\r\n\t\tif(enumerable)\r\n\t\t{\r\n\t\t\tusing(Enumerator.from(enumerable), e=>\r\n\t\t\t{\r\n\t\t\t\tEnumerator.forEach(e, action);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t// Slightly optimized versions for numbers.\r\n\tstatic max(values:Enumerable):number\r\n\t{\r\n\t\treturn values\r\n\t\t\t.takeUntil(v=> v== +Infinity, true)\r\n\t\t\t.aggregate(Functions.Greater);\r\n\t}\r\n\r\n\tstatic min(values:Enumerable):number\r\n\t{\r\n\t\treturn values\r\n\t\t\t.takeUntil(v=> v== -Infinity, true)\r\n\t\t\t.aggregate(Functions.Lesser);\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\t//////////////////////////////////////////\r\n\t// #region Instance methods...\r\n\r\n\tforEach(action:Predicate | Action):void\r\n\t{\r\n\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar index:number = 0;\r\n\t\t// Return value of action can be anything, but if it is (===) false then the forEach will discontinue.\r\n\t\tusing(\r\n\t\t\t_.getEnumerator(), e=>\r\n\t\t\t{\r\n\t\t\t\t// It is possible that subsequently 'action' could cause the enumeration to dispose, so we have to check each time.\r\n\t\t\t\twhile(_.throwIfDisposed() && e.moveNext())\r\n\t\t\t\t{\r\n\t\t\t\t\tif(action(e.current, index++)===false)\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t// #region Conversion Methods\r\n\ttoArray(predicate?:Predicate):T[]\r\n\t{\r\n\t\tvar result:T[] = [];\r\n\r\n\t\tif(predicate) return this.where(predicate).toArray();\r\n\r\n\t\tthis.forEach((x, i)=>\r\n\t\t{\r\n\t\t\tresult[i] = x\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t// Return a default (unfiltered) enumerable.\r\n\tasEnumerable():Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\t\treturn new Enumerable(() => _.getEnumerator());\r\n\t}\r\n\r\n\r\n\ttoLookup(\r\n\t\tkeySelector:Selector,\r\n\t\telementSelector:Selector = Functions.Identity,\r\n\t\tcompareSelector:Selector = Functions.Identity):ILookup\r\n\t{\r\n\r\n\t\tvar dict:Dictionary = new Dictionary(compareSelector);\r\n\t\tthis.forEach(\r\n\t\t\t\tx=>\r\n\t\t\t{\r\n\t\t\t\tvar key = keySelector(x);\r\n\t\t\t\tvar element = elementSelector(x);\r\n\r\n\t\t\t\tvar array = dict.getValue(key);\r\n\t\t\t\tif(array!==undefined) array.push(element);\r\n\t\t\t\telse dict.addByKeyValue(key, [element]);\r\n\t\t\t}\r\n\t\t);\r\n\t\treturn new Lookup(dict);\r\n\t}\r\n\r\n\ttoMap(\r\n\t\tkeySelector:Selector,\r\n\t\telementSelector:Selector):IMap\r\n\t{\r\n\t\tvar obj:IMap = {};\r\n\t\tthis.forEach(x=>\r\n\t\t{\r\n\t\t\tobj[keySelector(x)] = elementSelector(x);\r\n\t\t});\r\n\t\treturn obj;\r\n\t}\r\n\r\n\ttoDictionary(\r\n\t\tkeySelector:Selector,\r\n\t\telementSelector:Selector,\r\n\t\tcompareSelector:Selector = Functions.Identity):Dictionary\r\n\t{\r\n\t\tvar dict:Dictionary = new Dictionary(compareSelector);\r\n\t\tthis.forEach(x=> dict.addByKeyValue(keySelector(x), elementSelector(x)));\r\n\t\treturn dict;\r\n\t}\r\n\r\n\ttoJoinedString(separator:string = \"\", selector:Selector = Functions.Identity)\r\n\t{\r\n\t\treturn this.select(selector).toArray().join(separator);\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\r\n\t/**\r\n\t * Similar to forEach, but executes an action for each time a value is enumerated.\r\n\t * If the action explicitly returns false or 0 (EnumerationAction.Break), the enumeration will complete.\r\n\t * If it returns a 2 (EnumerationAction.Skip) it will move on to the next item.\r\n\t * This also automatically handles disposing the enumerator.\r\n\t */\r\n\tdoAction(\r\n\t\taction:Action | Predicate | Selector | Selector):Enumerable\r\n\t{\r\n\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\r\n\t\t\t\t\t\twhile(enumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar actionResult = action(enumerator.current, index++);\r\n\r\n\t\t\t\t\t\t\tif(actionResult===false || actionResult===EnumerableAction.Break)\r\n\t\t\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\r\n\t\t\t\t\t\t\tif(actionResult!==EnumerableAction.Skip) // || !== 2\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(enumerator.current);\r\n\r\n\t\t\t\t\t\t\t// If actionResult===2, then a signal for skip is received.\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\r\n\t\t\t},\r\n\t\t\t// Using a finalizer value reduces the chance of a circular reference\r\n\t\t\t// since we could simply reference the enumeration and check e.wasDisposed.\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdisposed = true;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tforce(defaultAction:EnumerableAction = EnumerableAction.Break):void\r\n\t{\r\n\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tthis.doAction(element => defaultAction);\r\n\t}\r\n\r\n\t// #region Indexing/Paging methods.\r\n\tskip(count:number):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tif(!count || isNaN(count) || count<0) // Out of bounds? Simply return this.\r\n\t\t\treturn _;\r\n\r\n\t\tif(!isFinite(count)) // +Infinity equals skip all so return empty.\r\n\t\t\treturn Enumerable.empty();\r\n\r\n\t\tInteger.assert(count, \"count\");\r\n\r\n\t\tvar c:number = count;\r\n\r\n\t\treturn this.doAction(\r\n\t\t\t(element:T, index?:number) =>\r\n\t\t\t\tindex):Enumerable\r\n\t{\r\n\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tvar skipping:boolean = true;\r\n\r\n\t\treturn this.doAction(\r\n\t\t\t(element:T, index?:number) =>\r\n\t\t\t{\r\n\t\t\t\tif(skipping)\r\n\t\t\t\t\tskipping = predicate(element, index);\r\n\r\n\t\t\t\treturn skipping\r\n\t\t\t\t\t? EnumerableAction.Skip\r\n\t\t\t\t\t: EnumerableAction.Return;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\ttake(count:number):Enumerable\r\n\t{\r\n\t\tif(!count || isNaN(count) || count<0) // Out of bounds? Empty.\r\n\t\t\treturn Enumerable.empty();\r\n\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tif(!isFinite(count)) // +Infinity equals no limit.\r\n\t\t\treturn _;\r\n\r\n\t\tInteger.assert(count, \"count\");\r\n\t\tvar c = count;\r\n\r\n\t\t// Once action returns false, the enumeration will stop.\r\n\t\treturn _.doAction((element:T, index?:number) => index):Enumerable\r\n\t{\r\n\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\treturn this.doAction(\r\n\t\t\t(element:T, index?:number) =>\r\n\t\t\t\tpredicate(element, index)\r\n\t\t\t\t\t? EnumerableAction.Return\r\n\t\t\t\t\t: EnumerableAction.Break\r\n\t\t);\r\n\t}\r\n\r\n\t// Is like the inverse of take While with the ability to return the value identified by the predicate.\r\n\ttakeUntil(predicate:Predicate, includeUntilValue?:boolean):Enumerable\r\n\t{\r\n\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tif(!includeUntilValue)\r\n\t\t\treturn this.doAction(\r\n\t\t\t\t(element:T, index?:number) =>\r\n\t\t\t\t\tpredicate(element, index)\r\n\t\t\t\t\t\t? EnumerableAction.Break\r\n\t\t\t\t\t\t: EnumerableAction.Return\r\n\t\t\t);\r\n\r\n\t\tvar found:boolean = false;\r\n\t\treturn this.doAction(\r\n\t\t\t(element:T, index?:number) =>\r\n\t\t\t{\r\n\t\t\t\tif(found)\r\n\t\t\t\t\treturn EnumerableAction.Break;\r\n\r\n\t\t\t\tfound = predicate(element, index);\r\n\r\n\t\t\t\treturn EnumerableAction.Return;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\ttakeExceptLast(count:number = 1):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\tif(!count || isNaN(count) || count<=0) // Out of bounds? Empty.\r\n\t\t\treturn _;\r\n\r\n\t\tif(!isFinite(count)) // +Infinity equals skip all so return empty.\r\n\t\t\treturn Enumerable.empty();\r\n\r\n\t\tInteger.assert(count, \"count\");\r\n\t\tvar c = count;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar q:Queue;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\tq = new Queue();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twhile(enumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// Add the next one to the queue.\r\n\t\t\t\t\t\t\tq.enqueue(enumerator.current);\r\n\r\n\t\t\t\t\t\t\t// Did we reach our quota?\r\n\t\t\t\t\t\t\tif(q.count>c)\r\n\t\t\t\t\t\t\t// Okay then, start returning results.\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(q.dequeue());\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator, q);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\ttakeFromLast(count:number):Enumerable\r\n\t{\r\n\t\tif(!count || isNaN(count) || count<=0) // Out of bounds? Empty.\r\n\t\t\treturn Enumerable.empty();\r\n\r\n\t\tvar _ = this;\r\n\r\n\t\tif(!isFinite(count)) // Infinity means return all in reverse.\r\n\t\t\treturn _.reverse();\r\n\r\n\t\tInteger.assert(count, \"count\");\r\n\r\n\t\treturn _.reverse().take(count);\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\t// #region Projection and Filtering Methods\r\n\r\n\ttraverseBreadthFirst(\r\n\t\tfunc:(element:any) => IEnumerable,\r\n\t\tresultSelector?:(element:any, nestLevel?:number) => any):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar nestLevel:number = 0;\r\n\t\t\t\tvar buffer:any[], len:number;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tnestLevel = 0;\r\n\t\t\t\t\t\tbuffer = [];\r\n\t\t\t\t\t\tlen = 0;\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twhile(true)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(enumerator.moveNext())\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tbuffer[len++] = enumerator.current;\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(resultSelector(enumerator.current, nestLevel));\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(!len)\r\n\t\t\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\r\n\t\t\t\t\t\t\tvar next = Enumerable\r\n\t\t\t\t\t\t\t\t.fromArray(buffer)\r\n\t\t\t\t\t\t\t\t.selectMany(func);\r\n\r\n\t\t\t\t\t\t\tif(!next.any())\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tnestLevel++;\r\n\t\t\t\t\t\t\t\tbuffer = [];\r\n\t\t\t\t\t\t\t\tlen = 0;\r\n\t\t\t\t\t\t\t\tenumerator.dispose();\r\n\t\t\t\t\t\t\t\tenumerator = next.getEnumerator();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t\tbuffer.length = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\r\n\ttraverseDepthFirst(\r\n\t\tfunc:(element:any) => IEnumerable,\r\n\t\tresultSelector?:(element:any, nestLevel?:number) => any):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\t// Dev Note: May want to consider using an actual stack and not an array.\r\n\t\t\t\tvar enumeratorStack:IEnumerator[] = [];\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar len:number; // Avoid using push/pop since they query .length every time and can be slower.\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\tlen = 0;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twhile(true)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(enumerator.moveNext())\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tvar value = resultSelector(enumerator.current, len);\r\n\t\t\t\t\t\t\t\tenumeratorStack[len++] = enumerator;\r\n\t\t\t\t\t\t\t\tenumerator = func(enumerator.current).getEnumerator();\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(value);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(len==0) return false;\r\n\r\n\t\t\t\t\t\t\tenumerator.dispose();\r\n\t\t\t\t\t\t\tenumerator = enumeratorStack[--len];\r\n\t\t\t\t\t\t\tenumeratorStack.length = len;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfinally\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tdisposeThese(enumeratorStack);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\r\n\tflatten():Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar middleEnumerator:IEnumerator = null;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twhile(true)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(middleEnumerator!=null)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif(middleEnumerator.moveNext())\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\treturn yielder.yieldReturn(middleEnumerator.current);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tmiddleEnumerator = null;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(enumerator.moveNext())\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tvar c = enumerator.current;\r\n\t\t\t\t\t\t\t\tif(c instanceof Array)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tmiddleEnumerator.dispose();\r\n\t\t\t\t\t\t\t\t\tmiddleEnumerator = Enumerable.fromArray(c)\r\n\t\t\t\t\t\t\t\t\t\t.selectMany(Functions.Identity)\r\n\t\t\t\t\t\t\t\t\t\t.flatten()\r\n\t\t\t\t\t\t\t\t\t\t.getEnumerator();\r\n\t\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\treturn yielder.yieldReturn(enumerator.current);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator, middleEnumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\r\n\tpairwise(selector:(prev:T, current:T) => TSelect):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\tenumerator.moveNext();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar prev = enumerator.current;\r\n\t\t\t\t\t\treturn enumerator.moveNext()\r\n\t\t\t\t\t\t\t&& yielder.yieldReturn(selector(prev, enumerator.current));\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tscan(func:(a:T, b:T) => T, seed?:T):Enumerable\r\n\t{\r\n\r\n\t\tvar isUseSeed = seed!==undefined; // For now...\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar value:T;\r\n\t\t\t\tvar isFirst:boolean;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\tisFirst = true;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(isFirst)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tisFirst = false;\r\n\t\t\t\t\t\t\t//noinspection JSUnusedAssignment\r\n\t\t\t\t\t\t\treturn isUseSeed\r\n\t\t\t\t\t\t\t\t? yielder.yieldReturn(value = seed)\r\n\t\t\t\t\t\t\t\t: enumerator.moveNext() && yielder.yieldReturn(value\r\n\t\t\t\t\t\t\t\t= enumerator.current);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn (enumerator.moveNext())\r\n\t\t\t\t\t\t\t? yielder.yieldReturn(value = func(value, enumerator.current))\r\n\t\t\t\t\t\t\t: false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\r\n\tselect(selector:Selector):Enumerable\r\n\t{\r\n\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\r\n\t\tif(selector.length<2)\r\n\t\t\treturn new WhereSelectEnumerable(_, null, selector);\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\r\n\t\t\t\t\t\treturn enumerator.moveNext()\r\n\t\t\t\t\t\t\t? yielder.yieldReturn(selector(enumerator.current, index++))\r\n\t\t\t\t\t\t\t: false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdisposed = true;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\r\n\tselectMany(collectionSelector:Selector>>):Enumerable;\r\n\r\n\tselectMany(\r\n\t\tcollectionSelector:Selector | IArray> | Selector>,\r\n\t\tresultSelector?:(collection:T, element:TElement) => TResult):Enumerable;\r\n\r\n\tselectMany(\r\n\t\tcollectionSelector:Selector,\r\n\t\tresultSelector?:(collection:any, middle:any) => TResult):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tif(!resultSelector)\r\n\t\t\tresultSelector = (a, b) => b;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar middleEnumerator:IEnumerator;\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\tmiddleEnumerator = undefined;\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\r\n\t\t\t\t\t\t// Just started, and nothing to enumerate? End.\r\n\t\t\t\t\t\tif(middleEnumerator===undefined && !enumerator.moveNext())\r\n\t\t\t\t\t\t\treturn false;\r\n\r\n\t\t\t\t\t\t// moveNext has been called at least once...\r\n\t\t\t\t\t\tdo\r\n\t\t\t\t\t\t{\r\n\r\n\t\t\t\t\t\t\t// Initialize middle if there isn't one.\r\n\t\t\t\t\t\t\tif(!middleEnumerator)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tvar middleSeq = collectionSelector(enumerator.current, index++);\r\n\r\n\t\t\t\t\t\t\t\t// Collection is null? Skip it...\r\n\t\t\t\t\t\t\t\tif(!middleSeq)\r\n\t\t\t\t\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\t\t\t\t\tmiddleEnumerator = Enumerator.from(middleSeq);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(middleEnumerator.moveNext())\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(\r\n\t\t\t\t\t\t\t\t\tresultSelector(\r\n\t\t\t\t\t\t\t\t\t\tenumerator.current, middleEnumerator.current\r\n\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\t// else no more in this middle? Then clear and reset for next...\r\n\r\n\t\t\t\t\t\t\tmiddleEnumerator.dispose();\r\n\t\t\t\t\t\t\tmiddleEnumerator = null;\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\twhile(enumerator.moveNext());\r\n\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator, middleEnumerator);\r\n\t\t\t\t\t\tenumerator = null;\r\n\t\t\t\t\t\tmiddleEnumerator = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tchoose(selector:Selector):Enumerable\r\n\t{\r\n\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\r\n\t\t\t\t\t\twhile(enumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar result = selector(enumerator.current, index++);\r\n\t\t\t\t\t\t\tif(result!==null && result!==undefined)\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(result);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdisposed = true;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\twhere(predicate:Predicate):Enumerable\r\n\t{\r\n\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\r\n\t\tif(predicate.length<2)\r\n\t\t\treturn new WhereEnumerable(_, predicate);\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\r\n\t\t\t\t\t\twhile(enumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(predicate(enumerator.current, index++))\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(enumerator.current);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdisposed = true;\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t}\r\n\r\n\tofType(type:{ new (): TType }):Enumerable;\r\n\tofType(type:any):Enumerable\r\n\t{\r\n\t\tvar typeName:string;\r\n\t\tswitch(type)\r\n\t\t{\r\n\t\t\tcase Number:\r\n\t\t\t\ttypeName = Type.NUMBER;\r\n\t\t\t\tbreak;\r\n\t\t\tcase String:\r\n\t\t\t\ttypeName = Type.STRING;\r\n\t\t\t\tbreak;\r\n\t\t\tcase Boolean:\r\n\t\t\t\ttypeName = Type.BOOLEAN;\r\n\t\t\t\tbreak;\r\n\t\t\tcase Function:\r\n\t\t\t\ttypeName = Type.FUNCTION;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\treturn >this\r\n\t\t\t\t\t.where(x=>x instanceof type);\r\n\t\t}\r\n\t\treturn >this\r\n\t\t\t.where(x=>typeof x===typeName);\r\n\t}\r\n\r\n\texcept(\r\n\t\tsecond:IEnumerable,\r\n\t\tcompareSelector?:Selector):Enumerable\r\n\t{\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar keys:Dictionary;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\tkeys = new Dictionary(compareSelector);\r\n\t\t\t\t\t\tif(second)\r\n\t\t\t\t\t\t\tEnumerable.forEach(second, key => keys.addByKeyValue(key, true));\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\twhile(enumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar current = enumerator.current;\r\n\t\t\t\t\t\t\tif(!keys.containsKey(current))\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tkeys.addByKeyValue(current, true);\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(current);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t\tkeys.clear();\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdisposed = true;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tdistinct(compareSelector?:(value:T) => T):Enumerable\r\n\t{\r\n\t\treturn this.except(null, compareSelector);\r\n\t}\r\n\r\n\t// [0,0,0,1,1,1,2,2,2,0,0,0] results in [0,1,2,0];\r\n\tdistinctUntilChanged(compareSelector?:Selector):Enumerable\r\n\t{\r\n\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar compareKey:TCompare;\r\n\t\t\t\tvar initial:boolean = true;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\twhile(enumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar key = compareSelector(enumerator.current);\r\n\r\n\t\t\t\t\t\t\tif(initial)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tinitial = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse if(compareKey===key)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tcompareKey = key;\r\n\t\t\t\t\t\t\treturn yielder.yieldReturn(enumerator.current);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdisposed = true;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\treverse():Enumerable\r\n\t{\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar buffer:T[];\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\tbuffer = _.toArray();\r\n\t\t\t\t\t\tindex = buffer.length;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\tindex>0\r\n\t\t\t\t\t&& yielder.yieldReturn(buffer[--index]),\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbuffer.length = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdisposed = true;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tshuffle():Enumerable\r\n\t{\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar buffer:T[];\r\n\t\t\t\tvar capacity:number;\r\n\t\t\t\tvar len:number;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\tbuffer = _.toArray();\r\n\t\t\t\t\t\tcapacity = len = buffer.length;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// Avoid using major array operations like .slice();\r\n\t\t\t\t\t\tif(!len)\r\n\t\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\r\n\t\t\t\t\t\tvar selectedIndex = Integer.random(len);\r\n\t\t\t\t\t\tvar selectedValue = buffer[selectedIndex];\r\n\r\n\t\t\t\t\t\tbuffer[selectedIndex] = buffer[--len]; // Take the last one and put it here.\r\n\t\t\t\t\t\tbuffer[len] = null; // clear possible reference.\r\n\r\n\t\t\t\t\t\tif(len%32==0) // Shrink?\r\n\t\t\t\t\t\t\tbuffer.length = len;\r\n\r\n\t\t\t\t\t\treturn yielder.yieldReturn(selectedValue);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbuffer.length = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdisposed = true;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tcount(predicate?:Predicate):number\r\n\t{\r\n\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar count:number = 0;\r\n\t\tif(predicate)\r\n\t\t{\r\n\t\t\t_.forEach((x, i) =>\r\n\t\t\t{\r\n\t\t\t\tif(predicate(x, i))++count;\r\n\t\t\t});\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t_.forEach(() =>\r\n\t\t\t{\r\n\t\t\t\t++count;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn count;\r\n\t}\r\n\r\n\t// Akin to '.every' on an array.\r\n\tall(predicate:Predicate):boolean\r\n\t{\r\n\t\tvar result = true;\r\n\t\tthis.forEach(x =>\r\n\t\t{\r\n\t\t\tif(!predicate(x))\r\n\t\t\t{\r\n\t\t\t\tresult = false;\r\n\t\t\t\treturn false; // break\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn result;\r\n\t}\r\n\r\n\t// 'every' has been added here for parity/compatibility with an array.\r\n\tevery(predicate:Predicate):boolean\r\n\t{\r\n\t\treturn this.all(predicate);\r\n\t}\r\n\r\n\t// Akin to '.some' on an array.\r\n\tany(predicate?:Predicate):boolean\r\n\t{\r\n\t\tvar result = false;\r\n\r\n\t\t// Splitting the forEach up this way reduces iterative processing.\r\n\t\t// forEach handles the generation and disposal of the enumerator.\r\n\t\tif(predicate)\r\n\t\t{\r\n\t\t\tthis.forEach(x =>\r\n\t\t\t{\r\n\t\t\t\tresult = predicate(x); // false = not found and therefore it should continue. true = found and break;\r\n\t\t\t\treturn !result;\r\n\t\t\t});\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis.forEach(() =>\r\n\t\t\t{\r\n\t\t\t\tresult = true;\r\n\t\t\t\treturn false;\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn result;\r\n\r\n\t}\r\n\r\n\t// 'some' has been added here for parity/compatibility with an array.\r\n\tsome(predicate:Predicate):boolean\r\n\t{\r\n\t\treturn this.any(predicate);\r\n\t}\r\n\r\n\tisEmpty():boolean\r\n\t{\r\n\t\treturn !this.any();\r\n\t}\r\n\r\n\tcontains(value:T, compareSelector?:Selector):boolean\r\n\t{\r\n\t\treturn compareSelector\r\n\t\t\t? this.any(v=> compareSelector(v)===compareSelector(value))\r\n\t\t\t: this.any(v=> v===value);\r\n\t}\r\n\r\n\t// Originally has an overload for a predicate,\r\n\t// but that's a bad idea since this could be an enumeration of functions and therefore fail the intent.\r\n\t// Better to chain a where statement first to be more explicit.\r\n\tindexOf(value:T, compareSelector?:Selector):number\r\n\t{\r\n\t\tvar found:number = -1;\r\n\r\n\t\tif(compareSelector)\r\n\t\t\tthis.forEach((element:T, i?:number) =>\r\n\t\t\t{\r\n\t\t\t\tif(Values.areEqual(compareSelector(element), compareSelector(value), true))\r\n\t\t\t\t{\r\n\t\t\t\t\tfound = i;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\telse\r\n\t\t\tthis.forEach((element:T, i?:number) =>\r\n\t\t\t{\r\n\t\t\t\t// Why? Because NaN doesn't equal NaN. :P\r\n\t\t\t\tif(Values.areEqual(element, value, true))\r\n\t\t\t\t{\r\n\t\t\t\t\tfound = i;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\treturn found;\r\n\t}\r\n\r\n\tlastIndexOf(value:T, compareSelector?:Selector):number\r\n\t{\r\n\t\tvar result:number = -1;\r\n\r\n\t\tif(compareSelector)\r\n\t\t\tthis.forEach((element:T, i?:number) =>\r\n\t\t\t{\r\n\t\t\t\tif(Values.areEqual(compareSelector(element), compareSelector(value), true)) result\r\n\t\t\t\t\t= i;\r\n\t\t\t});\r\n\t\telse\r\n\t\t\tthis.forEach((element:T, i?:number) =>\r\n\t\t\t{\r\n\t\t\t\tif(Values.areEqual(element, value, true)) result = i;\r\n\t\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tdefaultIfEmpty(defaultValue:T = null):Enumerable\r\n\t{\r\n\t\tvar _ = this, disposed:boolean = !_.throwIfDisposed();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar isFirst:boolean;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tisFirst = true;\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\r\n\t\t\t\t\t\tif(enumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tisFirst = false;\r\n\t\t\t\t\t\t\treturn yielder.yieldReturn(enumerator.current);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if(isFirst)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tisFirst = false;\r\n\t\t\t\t\t\t\treturn yielder.yieldReturn(defaultValue);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tzip(\r\n\t\tsecond:IEnumerable | IArray,\r\n\t\tresultSelector:(first:T, second:TSecond, index?:number) => TResult):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar firstEnumerator:IEnumerator;\r\n\t\t\t\tvar secondEnumerator:IEnumerator;\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t\tfirstEnumerator = _.getEnumerator();\r\n\t\t\t\t\t\tsecondEnumerator = enumeratorFrom(second);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\tfirstEnumerator.moveNext() && secondEnumerator.moveNext()\r\n\t\t\t\t\t&& yielder.yieldReturn(resultSelector(firstEnumerator.current, secondEnumerator.current, index++)),\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(firstEnumerator, secondEnumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tzipMultiple(\r\n\t\tsecond:IArray | IArray>,\r\n\t\tresultSelector:(first:T, second:TSecond, index?:number) => TResult):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\tif(!second.length)\r\n\t\t\treturn Enumerable.empty();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar secondTemp:Queue;\r\n\t\t\t\tvar firstEnumerator:IEnumerator;\r\n\t\t\t\tvar secondEnumerator:IEnumerator;\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsecondTemp = new Queue(second);\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t\tfirstEnumerator = _.getEnumerator();\r\n\t\t\t\t\t\tsecondEnumerator = null;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(firstEnumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\twhile(true)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\twhile(!secondEnumerator)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif(secondTemp.count)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tvar next = secondTemp.dequeue();\r\n\t\t\t\t\t\t\t\t\t\tif(next) // In case by chance next is null, then try again.\r\n\t\t\t\t\t\t\t\t\t\t\tsecondEnumerator = enumeratorFrom(next);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tif(secondEnumerator.moveNext())\r\n\t\t\t\t\t\t\t\t\treturn yielder.yieldReturn(\r\n\t\t\t\t\t\t\t\t\t\tresultSelector(firstEnumerator.current, secondEnumerator.current, index++)\r\n\t\t\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\t\tsecondEnumerator.dispose();\r\n\t\t\t\t\t\t\t\tsecondEnumerator = null;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(firstEnumerator, secondTemp);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t// #region Join Methods\r\n\r\n\tjoin(\r\n\t\tinner:IEnumerable | IArray,\r\n\t\touterKeySelector:Selector,\r\n\t\tinnerKeySelector:Selector,\r\n\t\tresultSelector:(outer:T, inner:TInner) => TResult,\r\n\t\tcompareSelector:Selector = Functions.Identity):Enumerable\r\n\t{\r\n\r\n\t\tvar _ = this;\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar outerEnumerator:IEnumerator;\r\n\t\t\t\tvar lookup:ILookup;\r\n\t\t\t\tvar innerElements:TInner[] = null;\r\n\t\t\t\tvar innerCount:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\touterEnumerator = _.getEnumerator();\r\n\t\t\t\t\t\tlookup = Enumerable.from(inner)\r\n\t\t\t\t\t\t\t.toLookup(innerKeySelector, Functions.Identity, compareSelector);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twhile(true)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(innerElements!=null)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tvar innerElement = innerElements[innerCount++];\r\n\t\t\t\t\t\t\t\tif(innerElement!==undefined)\r\n\t\t\t\t\t\t\t\t\treturn yielder.yieldReturn(resultSelector(outerEnumerator.current, innerElement));\r\n\r\n\t\t\t\t\t\t\t\tinnerElement = null;\r\n\t\t\t\t\t\t\t\tinnerCount = 0;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(outerEnumerator.moveNext())\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tvar key = outerKeySelector(outerEnumerator.current);\r\n\t\t\t\t\t\t\t\tinnerElements = lookup.get(key);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(outerEnumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tgroupJoin(\r\n\t\tinner:IEnumerable | IArray,\r\n\t\touterKeySelector:Selector,\r\n\t\tinnerKeySelector:Selector,\r\n\t\tresultSelector:(outer:T, inner:TInner[]) => TResult,\r\n\t\tcompareSelector:Selector = Functions.Identity):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar lookup:ILookup = null;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\tlookup = Enumerable.from(inner)\r\n\t\t\t\t\t\t\t.toLookup(innerKeySelector, Functions.Identity, compareSelector);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\tenumerator.moveNext()\r\n\t\t\t\t\t&& yielder.yieldReturn(\r\n\t\t\t\t\t\tresultSelector(\r\n\t\t\t\t\t\t\tenumerator.current,\r\n\t\t\t\t\t\t\tlookup.get(outerKeySelector(enumerator.current))\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t),\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tconcatWith(other:IEnumerable | IArray):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar firstEnumerator:IEnumerator;\r\n\t\t\t\tvar secondEnumerator:IEnumerator;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfirstEnumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(firstEnumerator!=null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(firstEnumerator.moveNext()) return yielder.yieldReturn(firstEnumerator.current);\r\n\t\t\t\t\t\t\tsecondEnumerator = enumeratorFrom(other);\r\n\t\t\t\t\t\t\tfirstEnumerator.dispose();\r\n\t\t\t\t\t\t\tfirstEnumerator = null;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(secondEnumerator.moveNext()) return yielder.yieldReturn(secondEnumerator.current);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(firstEnumerator, secondEnumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tmerge(enumerables:IArray | IArray>):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\tif(!enumerables.length)\r\n\t\t\treturn _;\r\n\r\n\t\tif(enumerables.length==1)\r\n\t\t\treturn _.concatWith(enumerables[0]);\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar queue:Queue | IArray>;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// 1) First get our values...\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\tqueue = new Queue | IArray>(enumerables);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twhile(true)\r\n\t\t\t\t\t\t{\r\n\r\n\t\t\t\t\t\t\twhile(!enumerator && queue.count)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tenumerator = enumeratorFrom(queue.dequeue()); // 4) Keep going and on to step 2. Else fall through to yieldBreak().\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(enumerator && enumerator.moveNext()) // 2) Keep returning until done.\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(enumerator.current);\r\n\r\n\t\t\t\t\t\t\tif(enumerator) // 3) Dispose and reset for next.\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tenumerator.dispose();\r\n\t\t\t\t\t\t\t\tenumerator = null;\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator, queue); // Just in case this gets disposed early.\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tconcat(...enumerables:Array | IArray>):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tif(enumerables.length==0)\r\n\t\t\treturn _;\r\n\r\n\t\tif(enumerables.length==1)\r\n\t\t\treturn _.concatWith(enumerables[0]);\r\n\r\n\t\treturn _.merge(enumerables);\r\n\t}\r\n\r\n\r\n\tinsertAt(index:number, other:IEnumerable | IArray):Enumerable\r\n\t{\r\n\t\tif(isNaN(index) || index<0 || !isFinite(index))\r\n\t\t\tthrow new Error(\"'index' is invalid or out of bounds.\");\r\n\r\n\t\tInteger.assert(index, \"index\");\r\n\t\tvar n:number = index;\r\n\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\r\n\t\t\t\tvar firstEnumerator:IEnumerator;\r\n\t\t\t\tvar secondEnumerator:IEnumerator;\r\n\r\n\t\t\t\tvar count:number = 0;\r\n\t\t\t\tvar isEnumerated:boolean = false;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcount = 0;\r\n\t\t\t\t\t\tfirstEnumerator = _.getEnumerator();\r\n\t\t\t\t\t\tsecondEnumerator = enumeratorFrom(other);\r\n\t\t\t\t\t\tisEnumerated = false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(count==n)\r\n\t\t\t\t\t\t{ // Inserting?\r\n\t\t\t\t\t\t\tisEnumerated = true;\r\n\t\t\t\t\t\t\tif(secondEnumerator.moveNext())\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(secondEnumerator.current);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(firstEnumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcount++;\r\n\t\t\t\t\t\t\treturn yielder.yieldReturn(firstEnumerator.current);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn !isEnumerated\r\n\t\t\t\t\t\t\t&& secondEnumerator.moveNext()\r\n\t\t\t\t\t\t\t&& yielder.yieldReturn(secondEnumerator.current);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(firstEnumerator, secondEnumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\r\n\talternateMultiple(sequence:IEnumerable | IArray):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar buffer:T,\r\n\t\t\t\t mode:EnumerableAction,\r\n\t\t\t\t enumerator:IEnumerator,\r\n\t\t\t\t alternateEnumerator:IEnumerator;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// Instead of recalling getEnumerator every time, just reset the existing one.\r\n\t\t\t\t\t\talternateEnumerator = new ArrayEnumerator(\r\n\t\t\t\t\t\t\tEnumerable.toArray(sequence)\r\n\t\t\t\t\t\t); // Freeze\r\n\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\r\n\t\t\t\t\t\tvar hasAtLeastOne = enumerator.moveNext();\r\n\t\t\t\t\t\tmode = hasAtLeastOne\r\n\t\t\t\t\t\t\t? EnumerableAction.Return\r\n\t\t\t\t\t\t\t: EnumerableAction.Break;\r\n\r\n\t\t\t\t\t\tif(hasAtLeastOne)\r\n\t\t\t\t\t\t\tbuffer = enumerator.current;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tswitch(mode)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase EnumerableAction.Break: // We're done?\r\n\t\t\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\r\n\t\t\t\t\t\t\tcase EnumerableAction.Skip:\r\n\t\t\t\t\t\t\t\tif(alternateEnumerator.moveNext())\r\n\t\t\t\t\t\t\t\t\treturn yielder.yieldReturn(alternateEnumerator.current);\r\n\t\t\t\t\t\t\t\talternateEnumerator.reset();\r\n\t\t\t\t\t\t\t\tmode = EnumerableAction.Return;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar latest = buffer;\r\n\r\n\t\t\t\t\t\t// Set up the next round...\r\n\r\n\t\t\t\t\t\t// Is there another one? Set the buffer and setup instruct for the next one to be the alternate.\r\n\t\t\t\t\t\tvar another = enumerator.moveNext();\r\n\t\t\t\t\t\tmode = another\r\n\t\t\t\t\t\t\t? EnumerableAction.Skip\r\n\t\t\t\t\t\t\t: EnumerableAction.Break;\r\n\r\n\t\t\t\t\t\tif(another)\r\n\t\t\t\t\t\t\tbuffer = enumerator.current;\r\n\r\n\t\t\t\t\t\treturn yielder.yieldReturn(latest);\r\n\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator, alternateEnumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\talternateSingle(value:T):Enumerable\r\n\t{\r\n\t\treturn this.alternateMultiple(Enumerable.make(value));\r\n\t}\r\n\r\n\talternate(...sequence:T[]):Enumerable\r\n\t{\r\n\t\treturn this.alternateMultiple(sequence);\r\n\t}\r\n\r\n\r\n\tintersect(\r\n\t\tsecond:IEnumerable | IArray,\r\n\t\tcompareSelector?:Selector):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar keys:Dictionary;\r\n\t\t\t\tvar outs:Dictionary;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\r\n\t\t\t\t\t\tkeys = new Dictionary(compareSelector);\r\n\t\t\t\t\t\touts = new Dictionary(compareSelector);\r\n\r\n\t\t\t\t\t\tEnumerable.from(second)\r\n\t\t\t\t\t\t\t.forEach(key=>\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tkeys.addByKeyValue(key, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twhile(enumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar current = enumerator.current;\r\n\t\t\t\t\t\t\tif(!outs.containsKey(current) && keys.containsKey(current))\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\touts.addByKeyValue(current, true);\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(current);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t); // Should Dictionary be IDisposable?\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tsequenceEqual(\r\n\t\tsecond:IEnumerable | IArray,\r\n\t\tequalityComparer:EqualityComparison = Values.areEqual):boolean\r\n\t{\r\n\t\treturn using(\r\n\t\t\tthis.getEnumerator(),\r\n\t\t\t\te1=> using(\r\n\t\t\t\tEnumerable.from(second).getEnumerator(),\r\n\t\t\t\t\te2=>\r\n\t\t\t\t{\r\n\t\t\t\t\twhile(e1.moveNext())\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(!e2.moveNext() || !equalityComparer(e1.current, e2.current))\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn !e2.moveNext();\r\n\t\t\t\t}\r\n\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\t//isEquivalent(second:IEnumerable | IArray,\r\n\t//\tequalityComparer:EqualityComparison = Values.areEqual):boolean\r\n\t//{\r\n\t//\treturn this\r\n\t//\t\t.orderBy(keySelector)\r\n\t//\t\t.sequenceEqual(Enumerable.from(second).orderBy(keySelector))\r\n\t//}\r\n\r\n\tunion(\r\n\t\tsecond:IEnumerable | IArray,\r\n\t\tcompareSelector:Selector = Functions.Identity):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar firstEnumerator:IEnumerator;\r\n\t\t\t\tvar secondEnumerator:IEnumerator;\r\n\t\t\t\tvar keys:Dictionary;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfirstEnumerator = _.getEnumerator();\r\n\t\t\t\t\t\tkeys = new Dictionary(compareSelector);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar current:T;\r\n\t\t\t\t\t\tif(secondEnumerator===undefined)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\twhile(firstEnumerator.moveNext())\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcurrent = firstEnumerator.current;\r\n\t\t\t\t\t\t\t\tif(!keys.containsKey(current))\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tkeys.addByKeyValue(current, null);\r\n\t\t\t\t\t\t\t\t\treturn yielder.yieldReturn(current);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tsecondEnumerator = Enumerable.from(second).getEnumerator();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\twhile(secondEnumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcurrent = secondEnumerator.current;\r\n\t\t\t\t\t\t\tif(!keys.containsKey(current))\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tkeys.addByKeyValue(current, null);\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(current);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(firstEnumerator, secondEnumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\t// #region Ordering Methods\r\n\r\n\torderBy(keySelector:Selector = Functions.Identity):IOrderedEnumerable\r\n\t{\r\n\t\treturn new OrderedEnumerable(this, keySelector, false);\r\n\t}\r\n\r\n\torderByDescending(keySelector:Selector = Functions.Identity):IOrderedEnumerable\r\n\t{\r\n\t\treturn new OrderedEnumerable(this, keySelector, true);\r\n\t}\r\n\r\n\t/*\r\n\t\t weightedSample(weightSelector) {\r\n\t\t weightSelector = Utils.createLambda(weightSelector);\r\n\t\t var source = this;\r\n\r\n\t\t return new Enumerable(() => {\r\n\t\t var sortedByBound;\r\n\t\t var totalWeight = 0;\r\n\r\n\t\t return new EnumeratorBase(\r\n\t\t () => {\r\n\t\t sortedByBound = source\r\n\t\t .choose(function (x) {\r\n\t\t var weight = weightSelector(x);\r\n\t\t if (weight <= 0) return null; // ignore 0\r\n\r\n\t\t totalWeight += weight;\r\n\t\t return { value: x, bound: totalWeight }\r\n\t\t })\r\n\t\t .toArray();\r\n\t\t },\r\n\t\t () => {\r\n\t\t if (sortedByBound.length > 0) {\r\n\t\t var draw = (Math.random() * totalWeight) + 1;\r\n\r\n\t\t var lower = -1;\r\n\t\t var upper = sortedByBound.length;\r\n\t\t while (upper - lower > 1) {\r\n\t\t var index = ((lower + upper) / 2);\r\n\t\t if (sortedByBound[index].bound >= draw) {\r\n\t\t upper = index;\r\n\t\t }\r\n\t\t else {\r\n\t\t lower = index;\r\n\t\t }\r\n\t\t }\r\n\r\n\t\t return (this).yieldReturn(sortedByBound[upper].value);\r\n\t\t }\r\n\r\n\t\t return (this).yieldBreak();\r\n\t\t },\r\n\t\t Functions.Blank);\r\n\t\t });\r\n\t\t }\r\n\t\t */\r\n\t// #endregion\r\n\r\n\t// #region Grouping Methods\r\n\r\n\t// Originally contained a result selector (not common use), but this could be done simply by a select statement after.\r\n\r\n\r\n\tgroupBy(keySelector:Selector):Enumerable>;\r\n\tgroupBy(\r\n\t\tkeySelector:Selector,\r\n\t\telementSelector:Selector,\r\n\t\tcompareSelector?:Selector):Enumerable>;\r\n\tgroupBy(\r\n\t\tkeySelector:Selector,\r\n\t\telementSelector?:Selector,\r\n\t\tcompareSelector?:Selector):Enumerable>|Enumerable>\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tif(!elementSelector) elementSelector = Functions.Identity; // Allow for 'null' and not just undefined.\r\n\t\treturn new Enumerable>(\r\n\t\t\t() => _.toLookup(keySelector, elementSelector, compareSelector)\r\n\t\t\t\t.getEnumerator()\r\n\t\t);\r\n\t}\r\n\r\n\tpartitionBy(keySelector:Selector):Enumerable>;\r\n\tpartitionBy(\r\n\t\tkeySelector:Selector,\r\n\t\telementSelector:Selector,\r\n\t\tresultSelector?:(key:TKey, element:TElement[]) => IGrouping,\r\n\t\tcompareSelector?:Selector):Enumerable>;\r\n\tpartitionBy(\r\n\t\tkeySelector:Selector,\r\n\t\telementSelector?:Selector,\r\n\t\tresultSelector:(key:TKey, element:TElement[]) => IGrouping\r\n\t\t\t= (key:TKey, elements:TElement[]) => new Grouping(key, elements),\r\n\t\tcompareSelector:Selector\r\n\t\t\t= Functions.Identity):Enumerable>|Enumerable>\r\n\t{\r\n\r\n\t\tvar _ = this;\r\n\t\tif(!elementSelector) elementSelector = Functions.Identity; // Allow for 'null' and not just undefined.\r\n\t\treturn new Enumerable>(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar key:TKey;\r\n\t\t\t\tvar compareKey:TCompare;\r\n\t\t\t\tvar group:TElement[];\r\n\t\t\t\tvar len:number;\r\n\r\n\t\t\t\treturn new EnumeratorBase>(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\tif(enumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tkey = keySelector(enumerator.current);\r\n\t\t\t\t\t\t\tcompareKey = compareSelector(key);\r\n\t\t\t\t\t\t\tgroup = [elementSelector(enumerator.current)];\r\n\t\t\t\t\t\t\tlen = 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tgroup = null;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(!group)\r\n\t\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\r\n\t\t\t\t\t\tvar hasNext:boolean, c:T;\r\n\t\t\t\t\t\twhile((hasNext = enumerator.moveNext()))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tc = enumerator.current;\r\n\t\t\t\t\t\t\tif(compareKey===compareSelector(keySelector(c)))\r\n\t\t\t\t\t\t\t\tgroup[len++] = elementSelector(c);\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar result:IGrouping\r\n\t\t\t\t\t\t\t = resultSelector(key, group);\r\n\r\n\t\t\t\t\t\tif(hasNext)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tc = enumerator.current;\r\n\t\t\t\t\t\t\tkey = keySelector(c);\r\n\t\t\t\t\t\t\tcompareKey = compareSelector(key);\r\n\t\t\t\t\t\t\tgroup = [elementSelector(c)];\r\n\t\t\t\t\t\t\tlen = 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tgroup = null;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn yielder.yieldReturn(result);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t\tgroup = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\tbuffer(size:number):IEnumerable\r\n\t{\r\n\t\tif(size<1 || !isFinite(size))\r\n\t\t\tthrow new Error(\"Invalid buffer size.\");\r\n\r\n\t\tInteger.assert(size, \"size\");\r\n\r\n\t\tvar _ = this, len:number;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar array:T[] = ArrayUtility.initialize(size);\r\n\t\t\t\t\t\tlen = 0;\r\n\t\t\t\t\t\twhile(len\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t// #region Aggregate Methods\r\n\r\n\taggregate(\r\n\t\tfunc:(a:T, b:T) => T,\r\n\t\tseed?:T):T\r\n\t{\r\n\t\treturn this.scan(func, seed).lastOrDefault();\r\n\t}\r\n\r\n\taverage(selector:Selector = Type.numberOrNaN):number\r\n\t{\r\n\t\tvar sum = 0;\r\n\t\t// This allows for infinity math that doesn't destroy the other values.\r\n\t\tvar sumInfinite = 0; // Needs more investigation since we are really trying to retain signs.\r\n\r\n\t\tvar count = 0; // No need to make integer if the result could be a float.\r\n\r\n\t\tthis.forEach(\r\n\t\t\tfunction(x)\r\n\t\t\t{\r\n\t\t\t\tvar value = selector(x);\r\n\t\t\t\tif(isNaN(value))\r\n\t\t\t\t{\r\n\t\t\t\t\tsum = NaN;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tif(isFinite(value))\r\n\t\t\t\t\tsum += value;\r\n\t\t\t\telse\r\n\t\t\t\t\tsumInfinite += value>0 ? (+1) : (-1);\r\n\t\t\t\t++count;\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tif(sumInfinite) // Not zero?\r\n\t\t\treturn sumInfinite*Infinity;\r\n\r\n\t\treturn (isNaN(sum) || !count)\r\n\t\t\t? NaN\r\n\t\t\t: (sum/count);\r\n\t}\r\n\r\n\t// If using numbers, it may be useful to call .takeUntil(v=>v==Infinity,true) before calling max. See static versions for numbers.\r\n\tmax():T\r\n\t{\r\n\t\treturn this.aggregate(Functions.Greater);\r\n\t}\r\n\r\n\tmin():T\r\n\t{\r\n\t\treturn this.aggregate(Functions.Lesser);\r\n\t}\r\n\r\n\tmaxBy(keySelector:Selector = Functions.Identity):T\r\n\t{\r\n\t\treturn this.aggregate((a:T, b:T) => (keySelector(a)>keySelector(b)) ? a : b);\r\n\t}\r\n\r\n\tminBy(keySelector:Selector = Functions.Identity):T\r\n\t{\r\n\t\treturn this.aggregate((a:T, b:T) => (keySelector(a) = Type.numberOrNaN):number\r\n\t{\r\n\t\tvar sum = 0;\r\n\r\n\t\t// This allows for infinity math that doesn't destroy the other values.\r\n\t\tvar sumInfinite = 0; // Needs more investigation since we are really trying to retain signs.\r\n\r\n\t\tthis.forEach(\r\n\t\t\t\tx=>\r\n\t\t\t{\r\n\t\t\t\tvar value = selector(x);\r\n\t\t\t\tif(isNaN(value))\r\n\t\t\t\t{\r\n\t\t\t\t\tsum = NaN;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tif(isFinite(value))\r\n\t\t\t\t\tsum += value;\r\n\t\t\t\telse\r\n\t\t\t\t\tsumInfinite += value>0 ? (+1) : (-1);\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\treturn isNaN(sum) ? NaN : (sumInfinite ? (sumInfinite*Infinity) : sum);\r\n\t}\r\n\r\n\t// Multiplication...\r\n\tproduct(selector:Selector = Type.numberOrNaN):number\r\n\t{\r\n\t\tvar result = 1, exists:boolean = false;\r\n\r\n\t\tthis.forEach(\r\n\t\t\t\tx=>\r\n\t\t\t{\r\n\t\t\t\texists = true;\r\n\t\t\t\tvar value = selector(x);\r\n\t\t\t\tif(isNaN(value))\r\n\t\t\t\t{\r\n\t\t\t\t\tresult = NaN;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(value==0)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult = 0; // Multiplying by zero will always end in zero.\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Multiplication can never recover from infinity and simply must retain signs.\r\n\t\t\t\t// You could cancel out infinity with 1/infinity but no available representation exists.\r\n\t\t\t\tresult *= value;\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\treturn (exists && isNaN(result)) ? NaN : result;\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\t// #region Single Value Return...\r\n\r\n\telementAt(index:number):T\r\n\t{\r\n\t\tif(isNaN(index) || index<0 || !isFinite(index))\r\n\t\t\tthrow new Error(\"'index' is invalid or out of bounds.\");\r\n\r\n\t\tInteger.assert(index, \"index\");\r\n\t\tvar n:number = index;\r\n\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar value:T = undefined;\r\n\t\tvar found = false;\r\n\t\t_.forEach(\r\n\t\t\t(x:T, i:number) =>\r\n\t\t\t{\r\n\t\t\t\tif(i==n)\r\n\t\t\t\t{\r\n\t\t\t\t\tvalue = x;\r\n\t\t\t\t\tfound = true;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tif(!found) throw new Error(\"index is less than 0 or greater than or equal to the number of elements in source.\");\r\n\t\treturn value;\r\n\t}\r\n\r\n\telementAtOrDefault(index:number, defaultValue:T = null):T\r\n\t{\r\n\r\n\t\tif(isNaN(index) || index<0 || !isFinite(index))\r\n\t\t\tthrow new Error(\"'index' is invalid or out of bounds.\");\r\n\r\n\t\tInteger.assert(index, \"index\");\r\n\t\tvar n:number = index;\r\n\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar value:T = undefined;\r\n\t\tvar found = false;\r\n\t\t_.forEach(\r\n\t\t\t(x:T, i:number) =>\r\n\t\t\t{\r\n\t\t\t\tif(i==n)\r\n\t\t\t\t{\r\n\t\t\t\t\tvalue = x;\r\n\t\t\t\t\tfound = true;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\treturn (!found) ? defaultValue : value;\r\n\t}\r\n\r\n\t/* Note: Unlike previous implementations, you could pass a predicate into these methods.\r\n\t * But since under the hood it ends up calling .where(predicate) anyway,\r\n\t * it may be better to remove this to allow for a cleaner signature/override.\r\n\t * JavaScript/TypeScript does not easily allow for a strict method interface like C#.\r\n\t * Having to write extra override logic is error prone and confusing to the consumer.\r\n\t * Removing the predicate here may also cause the consumer of this method to think more about how they structure their query.\r\n\t * The end all difference is that the user must declare .where(predicate) before .first(), .single(), or .last().\r\n\t * */\r\n\r\n\tfirst():T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar value:T = undefined;\r\n\t\tvar found:boolean = false;\r\n\t\t_.forEach(\r\n\t\t\t\tx =>\r\n\t\t\t{\r\n\t\t\t\tvalue = x;\r\n\t\t\t\tfound = true;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tif(!found) throw new Error(\"first:No element satisfies the condition.\");\r\n\t\treturn value;\r\n\t}\r\n\r\n\tfirstOrDefault(defaultValue:T = null):T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar value:T = undefined;\r\n\t\tvar found = false;\r\n\t\t_.forEach(\r\n\t\t\t\tx =>\r\n\t\t\t{\r\n\t\t\t\tvalue = x;\r\n\t\t\t\tfound = true;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t);\r\n\t\treturn (!found) ? defaultValue : value;\r\n\t}\r\n\r\n\tlast():T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar value:T = undefined;\r\n\t\tvar found:boolean = false;\r\n\t\t_.forEach(\r\n\t\t\t\tx =>\r\n\t\t\t{\r\n\t\t\t\tfound = true;\r\n\t\t\t\tvalue = x;\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tif(!found) throw new Error(\"last:No element satisfies the condition.\");\r\n\t\treturn value;\r\n\t}\r\n\r\n\tlastOrDefault(defaultValue:T = null):T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar value:T = undefined;\r\n\t\tvar found:boolean = false;\r\n\t\t_.forEach(\r\n\t\t\t\tx=>\r\n\t\t\t{\r\n\t\t\t\tfound = true;\r\n\t\t\t\tvalue = x;\r\n\t\t\t}\r\n\t\t);\r\n\t\treturn (!found) ? defaultValue : value;\r\n\t}\r\n\r\n\tsingle():T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar value:T = undefined;\r\n\t\tvar found:boolean = false;\r\n\t\t_.forEach(\r\n\t\t\t\tx=>\r\n\t\t\t{\r\n\t\t\t\tif(!found)\r\n\t\t\t\t{\r\n\t\t\t\t\tfound = true;\r\n\t\t\t\t\tvalue = x;\r\n\t\t\t\t}\r\n\t\t\t\telse throw new Error(\"single:sequence contains more than one element.\");\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tif(!found) throw new Error(\"single:No element satisfies the condition.\");\r\n\t\treturn value;\r\n\t}\r\n\r\n\tsingleOrDefault(defaultValue:T = null):T\r\n\t{\r\n\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar value:T = undefined;\r\n\t\tvar found:boolean = false;\r\n\t\t_.forEach(\r\n\t\t\t\tx=>\r\n\t\t\t{\r\n\t\t\t\tif(!found)\r\n\t\t\t\t{\r\n\t\t\t\t\tfound = true;\r\n\t\t\t\t\tvalue = x;\r\n\t\t\t\t}\r\n\t\t\t\telse throw new Error(\"single:sequence contains more than one element.\");\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\treturn (!found) ? defaultValue : value;\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\tshare():Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar sharedEnumerator:IEnumerator;\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// assertIsNotDisposed(disposed); This doesn't need an assertion since disposing the underlying enumerable disposes the enumerator.\r\n\r\n\t\t\t\t\t\tif(!sharedEnumerator)\r\n\t\t\t\t\t\t\tsharedEnumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\tsharedEnumerator.moveNext()\r\n\t\t\t\t\t&& yielder.yieldReturn(sharedEnumerator.current)\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdispose(sharedEnumerator);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\r\n\tmemoize():Enumerable\r\n\t{\r\n\t\tvar _ = this, disposed:boolean = !_.throwIfDisposed();\r\n\r\n\t\tvar cache:T[];\r\n\t\tvar enumerator:IEnumerator;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\tif(!enumerator)\r\n\t\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\tif(!cache)\r\n\t\t\t\t\t\t\tcache = [];\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\r\n\t\t\t\t\t\tvar i = index++;\r\n\r\n\t\t\t\t\t\tif(i>=cache.length)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn (enumerator.moveNext())\r\n\t\t\t\t\t\t\t\t? yielder.yieldReturn(cache[i] = enumerator.current)\r\n\t\t\t\t\t\t\t\t: false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn yielder.yieldReturn(cache[i]);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdisposed = true;\r\n\t\t\t\tif(cache)\r\n\t\t\t\t\tcache.length = 0;\r\n\t\t\t\tcache = null;\r\n\r\n\t\t\t\tdispose(enumerator);\r\n\t\t\t\tenumerator = null;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t// #region Error Handling\r\n\tcatchError(handler:(e:Error) => void):Enumerable\r\n\t{\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcatch(e)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// Don't init...\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\t\tif(enumerator.moveNext())\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(enumerator.current);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcatch(e)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\thandler(e);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tfinallyAction(action:() => void):Enumerable\r\n\t{\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\treturn (enumerator.moveNext())\r\n\t\t\t\t\t\t\t? yielder.yieldReturn(enumerator.current)\r\n\t\t\t\t\t\t\t: false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfinally\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\taction();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n}\r\n\r\n\r\nclass ArrayEnumerable\r\nextends Enumerable\r\n{\r\n\tprivate _source:IArray;\r\n\r\n\tconstructor(source:IArray)\r\n\t{\r\n\t\tsuper(() =>\r\n\t\t{\r\n\t\t\t_.throwIfDisposed();\r\n\t\t\treturn new ArrayEnumerator(() =>\r\n\t\t\t{\r\n\t\t\t\t_.throwIfDisposed(\"The underlying ArrayEnumerable was disposed.\", \"ArrayEnumerator\");\r\n\r\n\t\t\t\treturn _._source; // Could possibly be null, but ArrayEnumerable if not disposed simply treats null as empty array.\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tvar _ = this;\r\n\t\t_._disposableObjectName = \"ArrayEnumerable\";\r\n\t\t_._source = source;\r\n\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._source = null;\r\n\t}\r\n\r\n\tget source():IArray\r\n\t{\r\n\t\treturn this._source;\r\n\t}\r\n\r\n\ttoArray():T[]\r\n\t{\r\n\t\tvar s = this.source;\r\n\t\tif(!s)\r\n\t\t\treturn [];\r\n\r\n\t\tif(s instanceof Array)\r\n\t\t\treturn (s).slice();\r\n\r\n\t\tvar len = s.length, result:T[] = ArrayUtility.initialize(len);\r\n\t\tfor(let i = 0; i\r\n\t{\r\n\t\treturn new ArrayEnumerable(this._source);\r\n\t}\r\n\r\n\t// Optimize forEach so that subsequent usage is optimized.\r\n\tforEach(action:Predicate | Action):void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar source = _._source;\r\n\t\tif(source)\r\n\t\t{\r\n\r\n\t\t\t// Return value of action can be anything, but if it is (===) false then the forEach will discontinue.\r\n\t\t\tfor(let i = 0; iaction(source[i], i)===false)\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// These methods should ALWAYS check for array length before attempting anything.\r\n\r\n\tany(predicate?:Predicate):boolean\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar source = _._source, len = source ? source.length : 0;\r\n\t\treturn len && (!predicate || super.any(predicate));\r\n\t}\r\n\r\n\tcount(predicate?:Predicate):number\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar source = _._source, len = source ? source.length : 0;\r\n\t\treturn len && (predicate ? super.count(predicate) : len);\r\n\t}\r\n\r\n\telementAt(index:number):T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar source = _._source;\r\n\t\treturn (index=0)\r\n\t\t\t? source[index]\r\n\t\t\t: super.elementAt(index);\r\n\t}\r\n\r\n\telementAtOrDefault(index:number, defaultValue:T = null):T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar source = _._source;\r\n\t\treturn (index=0)\r\n\t\t\t? source[index]\r\n\t\t\t: defaultValue;\r\n\t}\r\n\r\n\tfirst():T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar source = _._source;\r\n\t\treturn (source && source.length)\r\n\t\t\t? source[0]\r\n\t\t\t: super.first();\r\n\t}\r\n\r\n\tfirstOrDefault(defaultValue:T = null):T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar source = _._source;\r\n\t\treturn (source && source.length)\r\n\t\t\t? source[0]\r\n\t\t\t: defaultValue;\r\n\t}\r\n\r\n\tlast():T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar source = _._source, len = source.length;\r\n\t\treturn (len)\r\n\t\t\t? source[len - 1]\r\n\t\t\t: super.last();\r\n\t}\r\n\r\n\tlastOrDefault(defaultValue:T = null):T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar source = _._source, len = source.length;\r\n\t\treturn len\r\n\t\t\t? source[len - 1]\r\n\t\t\t: defaultValue;\r\n\t}\r\n\r\n\tskip(count:number):Enumerable\r\n\t{\r\n\r\n\t\tvar _ = this;\r\n\r\n\t\tif(!count || count<0) // Out of bounds? Simply return a unfiltered enumerable.\r\n\t\t\treturn _.asEnumerable();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() => new ArrayEnumerator(() => _._source, count)\r\n\t\t);\r\n\t}\r\n\r\n\ttakeExceptLast(count:number = 1):Enumerable\r\n\t{\r\n\t\tvar _ = this, len = _._source ? _._source.length : 0;\r\n\t\treturn _.take(len - count);\r\n\t}\r\n\r\n\ttakeFromLast(count:number):Enumerable\r\n\t{\r\n\t\tif(!count || count<0) return Enumerable.empty();\r\n\r\n\t\tvar _ = this,\r\n\t\t len = _._source\r\n\t\t\t ? _._source.length\r\n\t\t\t : 0;\r\n\r\n\t\treturn _.skip(len - count);\r\n\t}\r\n\r\n\treverse():Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() => new ArrayEnumerator(\r\n\t\t\t\t() => _._source, _._source\r\n\t\t\t\t\t? (_._source.length - 1)\r\n\t\t\t\t\t: 0, -1\r\n\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\tmemoize():ArrayEnumerable\r\n\t{\r\n\t\treturn new ArrayEnumerable(this._source);\r\n\t}\r\n\r\n\tsequenceEqual(\r\n\t\tsecond:IEnumerable | IArray,\r\n\t\tequalityComparer:EqualityComparison = Values.areEqual):boolean\r\n\t{\r\n\t\tif(second instanceof Array)\r\n\t\t\treturn Arrays.areEqual(this.source, >second, true, equalityComparer);\r\n\r\n\t\tif(second instanceof ArrayEnumerable)\r\n\t\t\treturn (>second).sequenceEqual(this.source, equalityComparer);\r\n\r\n\t\treturn super.sequenceEqual(second, equalityComparer);\r\n\t}\r\n\r\n\r\n\ttoJoinedString(separator:string = \"\", selector:Selector = Functions.Identity)\r\n\t{\r\n\t\tvar s = this._source;\r\n\t\treturn !selector && s instanceof Array\r\n\t\t\t? (>s).join(separator)\r\n\t\t\t: super.toJoinedString(separator, selector);\r\n\t}\r\n\r\n}\r\n\r\nexport interface IGrouping\r\nextends Enumerable\r\n{\r\n\tkey: TKey;\r\n}\r\n\r\nclass Grouping\r\nextends ArrayEnumerable implements IGrouping\r\n{\r\n\r\n\tconstructor(private _groupKey:TKey, elements:TElement[])\r\n\t{\r\n\t\tsuper(elements);\r\n\t}\r\n\r\n\tget key():TKey\r\n\t{\r\n\t\treturn this._groupKey;\r\n\t}\r\n}\r\n\r\n\r\nexport interface ILookup\r\nextends IEnumerable>\r\n{\r\n\tcount: number;\r\n\tget(key:TKey): TElement[];\r\n\tcontains(key:TKey): boolean;\r\n}\r\n\r\nclass Lookup\r\nimplements ILookup\r\n{\r\n\r\n\tconstructor(private _dictionary:Dictionary)\r\n\t{\r\n\t}\r\n\r\n\tget count():number\r\n\t{\r\n\t\treturn this._dictionary.count;\r\n\t}\r\n\r\n\tget(key:TKey):TElement[]\r\n\t{\r\n\t\treturn this._dictionary.getValue(key);\r\n\t}\r\n\r\n\tcontains(key:TKey):boolean\r\n\t{\r\n\t\treturn this._dictionary.containsKey(key);\r\n\t}\r\n\r\n\tgetEnumerator():IEnumerator>\r\n\t{\r\n\r\n\t\tvar _ = this;\r\n\t\tvar enumerator:IEnumerator>;\r\n\r\n\t\treturn new EnumeratorBase>(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tenumerator = _._dictionary.getEnumerator();\r\n\t\t\t},\r\n\t\t\t(yielder)=>\r\n\t\t\t{\r\n\r\n\t\t\t\tif(!enumerator.moveNext())\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\tvar current = enumerator.current;\r\n\r\n\t\t\t\treturn yielder.yieldReturn(new Grouping(current.key, current.value));\r\n\t\t\t},\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdispose(enumerator);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n}\r\n\r\n\r\nclass WhereEnumerable\r\nextends Enumerable\r\n{\r\n\tconstructor(\r\n\t\tprivate prevSource:IEnumerable,\r\n\t\tprivate prevPredicate:Predicate // predicate.length always <= 1\r\n\t)\r\n\t{\r\n\t\tsuper(null);\r\n\t}\r\n\r\n\twhere(predicate:Predicate):Enumerable\r\n\t{\r\n\r\n\t\tif(predicate.length>1)\r\n\t\t\treturn super.where(predicate);\r\n\r\n\t\tvar prevPredicate = this.prevPredicate;\r\n\t\tvar composedPredicate = (x:T) => prevPredicate(x) && predicate(x);\r\n\t\treturn new WhereEnumerable(this.prevSource, composedPredicate);\r\n\t}\r\n\r\n\tselect(selector:Selector):Enumerable\r\n\t{\r\n\r\n\t\tif(selector.length>1)\r\n\t\t\treturn super.select(selector);\r\n\r\n\t\treturn new WhereSelectEnumerable(\r\n\t\t\tthis.prevSource,\r\n\t\t\tthis.prevPredicate,\r\n\t\t\tselector\r\n\t\t);\r\n\t}\r\n\r\n\tgetEnumerator():IEnumerator\r\n\t{\r\n\t\tvar predicate = this.prevPredicate;\r\n\t\tvar source = this.prevSource;\r\n\t\tvar enumerator:IEnumerator;\r\n\r\n\t\treturn new EnumeratorBase(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tenumerator = source.getEnumerator();\r\n\t\t\t},\r\n\r\n\t\t\t(yielder)=>\r\n\t\t\t{\r\n\t\t\t\twhile(enumerator.moveNext())\r\n\t\t\t\t{\r\n\t\t\t\t\tif(predicate(enumerator.current))\r\n\t\t\t\t\t\treturn yielder.yieldReturn(enumerator.current);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn false;\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdispose(enumerator);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis.prevPredicate = null;\r\n\t\tthis.prevSource = null;\r\n\t}\r\n}\r\n\r\nclass WhereSelectEnumerable\r\nextends Enumerable\r\n{\r\n\tconstructor(\r\n\t\tprivate prevSource:IEnumerable,\r\n\t\tprivate prevPredicate:Predicate, // predicate.length always <= 1\r\n\t\tprivate prevSelector:Selector // selector.length always <= 1\r\n\t)\r\n\t{\r\n\t\tsuper(null);\r\n\t}\r\n\r\n\twhere(predicate:(value:T, index?:number) => boolean):Enumerable\r\n\t{\r\n\t\tif(predicate.length>1)\r\n\t\t\treturn super.where(predicate);\r\n\r\n\t\treturn new WhereEnumerable(this, predicate);\r\n\t}\r\n\r\n\tselect(selector:Selector):Enumerable\r\n\t{\r\n\r\n\t\tif(selector.length>1)\r\n\t\t// if selector use index, can't compose\r\n\t\t\treturn super.select(selector);\r\n\r\n\t\tvar _ = this;\r\n\t\tvar prevSelector = _.prevSelector;\r\n\t\tvar composedSelector = (x:TSource) => selector(prevSelector(x));\r\n\t\treturn new WhereSelectEnumerable(_.prevSource, _.prevPredicate, composedSelector);\r\n\t}\r\n\r\n\tgetEnumerator():IEnumerator\r\n\t{\r\n\t\tvar _ = this,\r\n\t\t predicate = _.prevPredicate,\r\n\t\t source = _.prevSource,\r\n\t\t selector:Selector = _.prevSelector, // Type definition needed for correct inference.\r\n\t\t enumerator:IEnumerator;\r\n\r\n\t\treturn new EnumeratorBase(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tenumerator = source.getEnumerator();\r\n\t\t\t},\r\n\r\n\t\t\t(yielder)=>\r\n\t\t\t{\r\n\t\t\t\twhile(enumerator.moveNext())\r\n\t\t\t\t{\r\n\t\t\t\t\tvar c = enumerator.current;\r\n\t\t\t\t\tif(predicate==null || predicate(c))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn yielder.yieldReturn(selector(c));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdispose(enumerator);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tsuper._onDispose();\r\n\t\t_.prevPredicate = null;\r\n\t\t_.prevSource = null;\r\n\t\t_.prevSelector = null;\r\n\t}\r\n}\r\n\r\nexport interface IOrderedEnumerable\r\nextends Enumerable\r\n{\r\n\tthenBy(keySelector:(value:T) => any):IOrderedEnumerable;\r\n\tthenByDescending(keySelector:(value:T) => any):IOrderedEnumerable;\r\n}\r\n\r\nclass OrderedEnumerable\r\nextends Enumerable implements IOrderedEnumerable\r\n{\r\n\r\n\tconstructor(\r\n\t\tprivate source:IEnumerable,\r\n\t\tpublic keySelector:(value:T) => TOrderBy,\r\n\t\tpublic descending:boolean,\r\n\t\tpublic parent?:OrderedEnumerable,\r\n\t\tpublic comparer:Comparison = Values.compare)\r\n\t{\r\n\t\tsuper(null);\r\n\t}\r\n\r\n\tprivate createOrderedEnumerable(\r\n\t\tkeySelector:(value:T) => TOrderBy,\r\n\t\tdescending:boolean):IOrderedEnumerable\r\n\t{\r\n\t\treturn new OrderedEnumerable(this.source, keySelector, descending, this);\r\n\t}\r\n\r\n\tthenBy(keySelector:(value:T) => TOrderBy):IOrderedEnumerable\r\n\t{\r\n\t\treturn this.createOrderedEnumerable(keySelector, false);\r\n\t}\r\n\r\n\tthenByDescending(keySelector:(value:T) => TOrderBy):IOrderedEnumerable\r\n\t{\r\n\t\treturn this.createOrderedEnumerable(keySelector, true);\r\n\t}\r\n\r\n\tgetEnumerator():EnumeratorBase\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tvar buffer:T[];\r\n\t\tvar indexes:number[];\r\n\t\tvar index:number = 0;\r\n\r\n\t\treturn new EnumeratorBase(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tindex = 0;\r\n\t\t\t\tbuffer = [];\r\n\t\t\t\tindexes = [];\r\n\t\t\t\tEnumerable.forEach(\r\n\t\t\t\t\t_.source, (item, i) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbuffer[i] = item;\r\n\t\t\t\t\t\tindexes[i] = i;\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t\tvar sortContext = SortContext.create(_, null, _.comparer);\r\n\t\t\t\tsortContext.generateKeys(buffer);\r\n\r\n\t\t\t\tindexes.sort((a, b) => sortContext.compare(a, b));\r\n\t\t\t},\r\n\r\n\t\t\t(yielder)=>\r\n\t\t\t{\r\n\t\t\t\treturn (index\r\n\t\t\t{\r\n\t\t\t\tif(buffer)\r\n\t\t\t\t\tbuffer.length = 0;\r\n\t\t\t\tbuffer = null;\r\n\t\t\t\tif(indexes)\r\n\t\t\t\t\tindexes.length = 0;\r\n\t\t\t\tindexes = null;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis.source = null;\r\n\t\tthis.keySelector = null;\r\n\t\tthis.descending = null;\r\n\t\tthis.parent = null;\r\n\t}\r\n}\r\n\r\n\r\nclass SortContext\r\n{\r\n\r\n\tkeys:TOrderBy[];\r\n\r\n\tconstructor(\r\n\t\tpublic keySelector:(value:T) => TOrderBy,\r\n\t\tpublic descending:boolean,\r\n\t\tpublic child:SortContext,\r\n\t\tpublic comparison:Comparison = Values.compare)\r\n\t{\r\n\t\tthis.keys = null;\r\n\t}\r\n\r\n\tstatic create(\r\n\t\torderedEnumerable:OrderedEnumerable,\r\n\t\tcurrentContext:SortContext = null,\r\n\t\tcomparison:Comparison = Values.compare):SortContext\r\n\t{\r\n\t\tvar context:SortContext\r\n\t\t\t = new SortContext(\r\n\t\t\torderedEnumerable.keySelector,\r\n\t\t\torderedEnumerable.descending,\r\n\t\t\tcurrentContext,\r\n\t\t\tcomparison\r\n\t\t);\r\n\r\n\t\tif(orderedEnumerable.parent)\r\n\t\t\treturn SortContext.create(orderedEnumerable.parent, context);\r\n\r\n\t\treturn context;\r\n\t}\r\n\r\n\tgenerateKeys(source:IArray):void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tvar len = source.length;\r\n\t\tvar keySelector:(value:T) => TOrderBy = _.keySelector;\r\n\t\tvar keys = new Array(len);\r\n\t\tfor(let i = 0; i\r\n///\r\n///\r\n///\r\n///\r\n///\r\nimport * as Values from '../System/Compare';\r\nimport * as Arrays from '../System/Collections/Array/Compare';\r\nimport * as ArrayUtility from '../System/Collections/Array/Utility';\r\nimport * as Enumerator from '../System/Collections/Enumeration/Enumerator';\r\nimport Type from '../System/Types';\r\nimport Integer from '../System/Integer';\r\nimport BaseFunctions from '../System/Functions';\r\nimport ArrayEnumerator from '../System/Collections/Enumeration/ArrayEnumerator';\r\nimport EnumeratorBase from '../System/Collections/Enumeration/EnumeratorBase';\r\nimport Dictionary from '../System/Collections/Dictionaries/Dictionary';\r\nimport Queue from '../System/Collections/Queue';\r\nimport {dispose, disposeThese, using} from '../System/Disposable/Utility';\r\nimport DisposableBase from '../System/Disposable/DisposableBase';\r\nimport ArgumentException from '../System/Exceptions/ArgumentException';\r\nimport ObjectDisposedException from '../System/Disposable/ObjectDisposedException';\r\nimport Order from \"../System/Collections/Sorting/Order\";\r\nimport KeySortedContext from \"../System/Collections/Sorting/KeySortedContext\";\r\n\r\nimport enumeratorFrom = Enumerator.from;\r\nimport enumeratorForEach = Enumerator.forEach;\r\n\r\n\r\ntype Comparable = Primitive|IComparable;\r\n\r\n'use strict';\r\n\r\n// #region Local Constants.\r\n// Leave internal to avoid accidental overwriting.\r\nclass LinqFunctions extends BaseFunctions\r\n{\r\n\tGreater(a:T, b:T)\r\n\t{\r\n\t\treturn a>b ? a : b;\r\n\t}\r\n\r\n\tLesser(a:T, b:T)\r\n\t{\r\n\t\treturn a is a wrapper class that allows more primitive enumerables to exhibit LINQ behavior.\r\n *\r\n * In C# Enumerable is not an instance but has extensions for IEnumerable.\r\n * In this case, we use Enumerable as the underlying class that is being chained.\r\n */\r\nexport class Enumerable\r\nextends DisposableBase implements IEnumerable\r\n{\r\n\r\n\tconstructor(\r\n\t\tprotected _enumeratorFactory:() => IEnumerator,\r\n\t\tfinalizer?:() => void)\r\n\t{\r\n\t\tsuper(finalizer);\r\n\t}\r\n\r\n\t/**\r\n\t * Static shortcut for creating an ArrayEnumerable.\r\n\t */\r\n\tstatic fromArray(array:IArray):Enumerable\r\n\t{\r\n\t\treturn new ArrayEnumerable(array);\r\n\t}\r\n\r\n\t/**\r\n\t * Universal method for converting a primitive enumerables into a LINQ enabled ones.\r\n\t *\r\n\t * Is not limited to TypeScript usages.\r\n\t */\r\n\tstatic from(source:IEnumerable | IArray):Enumerable\r\n\t{\r\n\t\tvar type = Type.of(source);\r\n\t\tif(type.isObject)\r\n\t\t{\r\n\t\t\tif(source instanceof Enumerable)\r\n\t\t\t\treturn source;\r\n\r\n\t\t\tif(source instanceof Array)\r\n\t\t\t\treturn new ArrayEnumerable(source);\r\n\r\n\t\t\tif(type.member(GET_ENUMERATOR).isFunction)\r\n\t\t\t\treturn new Enumerable(()=>(>source).getEnumerator());\r\n\r\n\t\t\tif(type.member(LENGTH).isValidNumber)\r\n\t\t\t\treturn new ArrayEnumerable(>source);\r\n\t\t}\r\n\r\n\t\tthrow new Error(UNSUPPORTED_ENUMERABLE);\r\n\t}\r\n\r\n\tstatic toArray(source:IEnumerable | IArray):T[]\r\n\t{\r\n\t\tvar type = Type.of(source);\r\n\t\tif(type.isObject)\r\n\t\t{\r\n\t\t\tif(source instanceof Array)\r\n\t\t\t\treturn source.slice();\r\n\r\n\t\t\tif(type.member(LENGTH).isValidNumber)\r\n\t\t\t\tsource = new ArrayEnumerable(>source);\r\n\r\n\t\t\tif(source instanceof Enumerable)\r\n\t\t\t\treturn source.toArray();\r\n\r\n\t\t\tif(type.member(GET_ENUMERATOR).isFunction)\r\n\t\t\t{\r\n\t\t\t\tvar result:T[] = [];\r\n\t\t\t\tenumeratorForEach(\r\n\t\t\t\t\t(>source).getEnumerator(), (e, i) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tresult[i] = e;\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthrow new Error(UNSUPPORTED_ENUMERABLE);\r\n\t}\r\n\r\n\r\n\t// #region IEnumerable Implementation...\r\n\tgetEnumerator():IEnumerator\r\n\t{\r\n\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\treturn this._enumeratorFactory();\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\t// #region IDisposable override...\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._enumeratorFactory = null;\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\t//////////////////////////////////////////\r\n\t// #region Static Methods...\r\n\tstatic choice(values:IArray):Enumerable\r\n\t{\r\n\t\treturn new Enumerable(\r\n\t\t\t() => new EnumeratorBase(\r\n\t\t\t\tnull,\r\n\t\t\t\t(yielder)=>\r\n\t\t\t\t\tyielder.yieldReturn(values[Integer.random(values.length)])\r\n\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\tstatic cycle(values:IArray):Enumerable\r\n\t{\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar index:number = 0; // Let the compiler know this is an int.\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t}, // Reinitialize the value just in case the enumerator is restarted.\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(index>=values.length) index = 0;\r\n\t\t\t\t\t\treturn yielder.yieldReturn(values[index++]);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic empty():Enumerable\r\n\t{\r\n\t\treturn new Enumerable(\r\n\t\t\t() => new EnumeratorBase(\r\n\t\t\t\tnull,\r\n\t\t\t\tFunctions.False\r\n\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\tstatic repeat(element:T, count:number = Infinity):Enumerable\r\n\t{\r\n\t\tif(isNaN(count) || count<=0)\r\n\t\t\treturn Enumerable.empty();\r\n\r\n\t\treturn isFinite(count) && Integer.assert(count, \"count\")\r\n\t\t\t? new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar c:number = count;\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=> (index++(\r\n\t\t\t() =>\r\n\t\t\t\tnew EnumeratorBase(\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\t(yielder)=> yielder.yieldReturn(element)\r\n\t\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\t// Note: this enumeration does not break.\r\n\tstatic repeatWithFinalize(\r\n\t\tinitializer:() => T,\r\n\t\tfinalizer:(element:T) => void):Enumerable\r\n\t{\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar element:T;\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\telement = initializer();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=> yielder.yieldReturn(element),\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfinalizer(element);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic make(element:T):Enumerable\r\n\t{\r\n\t\treturn Enumerable.repeat(element, 1);\r\n\t}\r\n\r\n\t// start and step can be other than integer.\r\n\tstatic range(\r\n\t\tstart:number = 0,\r\n\t\tcount:number = Infinity,\r\n\t\tstep:number = 1):Enumerable\r\n\t{\r\n\r\n\t\tif(!isFinite(start))\r\n\t\t\tthrow new Error(\"Must have a valid 'start' value.\");\r\n\r\n\t\tif(isNaN(count) || count<=0)\r\n\t\t\treturn Enumerable.empty();\r\n\r\n\t\tif(!isFinite(step))\r\n\t\t\tthrow new Error(\"Must have a valid 'step' value.\");\r\n\r\n\t\treturn isFinite(count) && Integer.assert(count, \"count\")\r\n\t\t\t? new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar value:number;\r\n\t\t\t\tvar c:number = count; // Force integer evaluation.\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t\tvalue = start;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar result:boolean =\r\n\t\t\t\t\t\t\t index++(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar value:number;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvalue = start;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar current:number = value;\r\n\t\t\t\t\t\tvalue += step;\r\n\t\t\t\t\t\treturn yielder.yieldReturn(current);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic rangeDown(\r\n\t\tstart:number = 0,\r\n\t\tcount:number = Infinity,\r\n\t\tstep:number = 1):Enumerable\r\n\t{\r\n\t\tstep = Math.abs(step)* -1;\r\n\r\n\t\treturn Enumerable.range(start, count, step);\r\n\t}\r\n\r\n\t// step = -1 behaves the same as toNegativeInfinity;\r\n\tstatic toInfinity(\r\n\t\tstart:number = 0,\r\n\t\tstep:number = 1):Enumerable\r\n\t{\r\n\t\treturn Enumerable.range(start, Infinity, step);\r\n\t}\r\n\r\n\tstatic toNegativeInfinity(\r\n\t\tstart:number = 0,\r\n\t\tstep:number = 1):Enumerable\r\n\t{\r\n\t\treturn Enumerable.rangeDown(start, Infinity, step);\r\n\t}\r\n\r\n\tstatic rangeTo(\r\n\t\tstart:number = 0,\r\n\t\tto:number = Infinity,\r\n\t\tstep:number = 1):Enumerable\r\n\t{\r\n\t\tif(!isFinite(start))\r\n\t\t\tthrow new Error(\"Must have a valid 'start' value.\");\r\n\r\n\t\tif(isNaN(to))\r\n\t\t\tthrow new Error(\"Must have a valid 'to' value.\");\r\n\r\n\t\tif(!isFinite(step))\r\n\t\t\tthrow new Error(\"Must have a valid 'step' value.\");\r\n\r\n\t\t// This way we adjust for the delta from start and to so the user can say +/- step and it will work as expected.\r\n\t\tstep = Math.abs(step);\r\n\r\n\t\t// Range to infinity has a more efficient mechanism.\r\n\t\tif(!isFinite(to))\r\n\t\t\treturn Enumerable.range(start, Infinity, (start(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar value:number;\r\n\r\n\t\t\t\treturn start(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvalue = start;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar result:boolean = value<=to && yielder.yieldReturn(value);\r\n\r\n\t\t\t\t\t\tif(result)\r\n\t\t\t\t\t\t\tvalue += step;\r\n\r\n\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t})\r\n\r\n\t\t\t\t\t: new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvalue = start;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar result:boolean = value>=to && yielder.yieldReturn(value);\r\n\r\n\t\t\t\t\t\tif(result)\r\n\t\t\t\t\t\t\tvalue -= step;\r\n\r\n\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic matches(input:string, pattern:any, flags:string = \"\"):Enumerable\r\n\t{\r\n\r\n\t\tvar type = typeof input;\r\n\t\tif(type!=Type.STRING)\r\n\t\t\tthrow new Error(\"Cannot exec RegExp matches of type '\" + type + \"'.\");\r\n\r\n\t\tif(pattern instanceof RegExp)\r\n\t\t{\r\n\t\t\tflags += (pattern.ignoreCase) ? \"i\" : \"\";\r\n\t\t\tflags += (pattern.multiline) ? \"m\" : \"\";\r\n\t\t\tpattern = pattern.source;\r\n\t\t}\r\n\r\n\t\tif(flags.indexOf(\"g\")=== -1) flags += \"g\";\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar regex:RegExp;\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tregex = new RegExp(pattern, flags);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// Calling regex.exec consecutively on the same input uses the lastIndex to start the next match.\r\n\t\t\t\t\t\tvar match = regex.exec(input);\r\n\t\t\t\t\t\treturn (match!==null) ? yielder.yieldReturn(match) : false;\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic generate(factory:(index?:number) => T, count:number = Infinity):Enumerable\r\n\t{\r\n\r\n\t\tif(isNaN(count) || count<=0)\r\n\t\t\treturn Enumerable.empty();\r\n\r\n\t\treturn isFinite(count) && Integer.assert(count, \"count\")\r\n\r\n\t\t\t? new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar c:number = count;\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar current:number = index++;\r\n\t\t\t\t\t\treturn current(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar index:number = 0;\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=> yielder.yieldReturn(factory(index++))\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t}\r\n\r\n\tstatic unfold(seed:T, valueFactory:Selector, skipSeed:Boolean = false):Enumerable\r\n\t{\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar index:number = 0;\r\n\t\t\t\tvar value:T;\r\n\t\t\t\tvar isFirst:boolean;\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t\tvalue = seed;\r\n\t\t\t\t\t\tisFirst = !skipSeed;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar i = index++;\r\n\t\t\t\t\t\tif(isFirst)\r\n\t\t\t\t\t\t\tisFirst = false;\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tvalue = valueFactory(value, i);\r\n\t\t\t\t\t\treturn yielder.yieldReturn(value);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic defer(enumerableFactory:() => IEnumerable):Enumerable\r\n\t{\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = enumerableFactory().getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=> enumerator.moveNext() && yielder.yieldReturn(enumerator.current),\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic forEach(\r\n\t\tenumerable:IEnumerable | IArray,\r\n\t\taction:(element:T, index?:number) => any):void\r\n\t{\r\n\t\tif(enumerable)\r\n\t\t{\r\n\t\t\tusing(Enumerator.from(enumerable), e=>\r\n\t\t\t{\r\n\t\t\t\tEnumerator.forEach(e, action);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tstatic map(\r\n\t\t\tenumerable:IEnumerable | IArray,\r\n\t\t\tselector:Selector):TResult[] {\r\n\r\n\t\treturn enumerable && using(Enumerator.from(enumerable), e=>\r\n\t\t{\r\n\t\t\tvar result:TResult[] = [];\r\n\t\t\tEnumerator.forEach(e, (e,i)=>{\r\n\t\t\t\tresult[i]=selector(e);\r\n\t\t\t});\r\n\t\t\treturn result;\r\n\t\t});\r\n\r\n\t}\r\n\r\n\t// Slightly optimized versions for numbers.\r\n\tstatic max(values:Enumerable):number\r\n\t{\r\n\t\treturn values\r\n\t\t\t.takeUntil(v=> v== +Infinity, true)\r\n\t\t\t.aggregate(Functions.Greater);\r\n\t}\r\n\r\n\tstatic min(values:Enumerable):number\r\n\t{\r\n\t\treturn values\r\n\t\t\t.takeUntil(v=> v== -Infinity, true)\r\n\t\t\t.aggregate(Functions.Lesser);\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\t//////////////////////////////////////////\r\n\t// #region Instance methods...\r\n\r\n\tforEach(action:Predicate | Action):void\r\n\t{\r\n\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar index:number = 0;\r\n\t\t// Return value of action can be anything, but if it is (===) false then the forEach will discontinue.\r\n\t\tusing(\r\n\t\t\t_.getEnumerator(), e=>\r\n\t\t\t{\r\n\t\t\t\t// It is possible that subsequently 'action' could cause the enumeration to dispose, so we have to check each time.\r\n\t\t\t\twhile(_.throwIfDisposed() && e.moveNext())\r\n\t\t\t\t{\r\n\t\t\t\t\tif(action(e.current, index++)===false)\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t// #region Conversion Methods\r\n\ttoArray(predicate?:Predicate):T[]\r\n\t{\r\n\t\tvar result:T[] = [];\r\n\r\n\t\tif(predicate) return this.where(predicate).toArray();\r\n\r\n\t\tthis.forEach((x, i)=>\r\n\t\t{\r\n\t\t\tresult[i] = x\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t// Return a default (unfiltered) enumerable.\r\n\tasEnumerable():Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\t\treturn new Enumerable(() => _.getEnumerator());\r\n\t}\r\n\r\n\r\n\ttoLookup(\r\n\t\tkeySelector:Selector,\r\n\t\telementSelector:Selector = Functions.Identity,\r\n\t\tcompareSelector:Selector = Functions.Identity):ILookup\r\n\t{\r\n\r\n\t\tvar dict:Dictionary = new Dictionary(compareSelector);\r\n\t\tthis.forEach(\r\n\t\t\tx=>\r\n\t\t\t{\r\n\t\t\t\tvar key = keySelector(x);\r\n\t\t\t\tvar element = elementSelector(x);\r\n\r\n\t\t\t\tvar array = dict.getValue(key);\r\n\t\t\t\tif(array!==undefined) array.push(element);\r\n\t\t\t\telse dict.addByKeyValue(key, [element]);\r\n\t\t\t}\r\n\t\t);\r\n\t\treturn new Lookup(dict);\r\n\t}\r\n\r\n\ttoMap(\r\n\t\tkeySelector:Selector,\r\n\t\telementSelector:Selector):IMap\r\n\t{\r\n\t\tvar obj:IMap = {};\r\n\t\tthis.forEach(x=>\r\n\t\t{\r\n\t\t\tobj[keySelector(x)] = elementSelector(x);\r\n\t\t});\r\n\t\treturn obj;\r\n\t}\r\n\r\n\ttoDictionary(\r\n\t\tkeySelector:Selector,\r\n\t\telementSelector:Selector,\r\n\t\tcompareSelector:Selector = Functions.Identity):Dictionary\r\n\t{\r\n\t\tvar dict:Dictionary = new Dictionary(compareSelector);\r\n\t\tthis.forEach(x=> dict.addByKeyValue(keySelector(x), elementSelector(x)));\r\n\t\treturn dict;\r\n\t}\r\n\r\n\ttoJoinedString(separator:string = \"\", selector:Selector = Functions.Identity)\r\n\t{\r\n\t\treturn this.select(selector).toArray().join(separator);\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\r\n\t/**\r\n\t * Similar to forEach, but executes an action for each time a value is enumerated.\r\n\t * If the action explicitly returns false or 0 (EnumerationAction.Break), the enumeration will complete.\r\n\t * If it returns a 2 (EnumerationAction.Skip) it will move on to the next item.\r\n\t * This also automatically handles disposing the enumerator.\r\n\t */\r\n\tdoAction(\r\n\t\taction:Action | Predicate | Selector | Selector):Enumerable\r\n\t{\r\n\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\r\n\t\t\t\t\t\twhile(enumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar actionResult = action(enumerator.current, index++);\r\n\r\n\t\t\t\t\t\t\tif(actionResult===false || actionResult===EnumerableAction.Break)\r\n\t\t\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\r\n\t\t\t\t\t\t\tif(actionResult!==EnumerableAction.Skip) // || !== 2\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(enumerator.current);\r\n\r\n\t\t\t\t\t\t\t// If actionResult===2, then a signal for skip is received.\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\r\n\t\t\t},\r\n\t\t\t// Using a finalizer value reduces the chance of a circular reference\r\n\t\t\t// since we could simply reference the enumeration and check e.wasDisposed.\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdisposed = true;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tforce(defaultAction:EnumerableAction = EnumerableAction.Break):void\r\n\t{\r\n\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tthis.doAction(element => defaultAction);\r\n\t}\r\n\r\n\t// #region Indexing/Paging methods.\r\n\tskip(count:number):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tif(!count || isNaN(count) || count<0) // Out of bounds? Simply return this.\r\n\t\t\treturn _;\r\n\r\n\t\tif(!isFinite(count)) // +Infinity equals skip all so return empty.\r\n\t\t\treturn Enumerable.empty();\r\n\r\n\t\tInteger.assert(count, \"count\");\r\n\r\n\t\tvar c:number = count;\r\n\r\n\t\treturn this.doAction(\r\n\t\t\t(element:T, index?:number) =>\r\n\t\t\t\tindex):Enumerable\r\n\t{\r\n\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tvar skipping:boolean = true;\r\n\r\n\t\treturn this.doAction(\r\n\t\t\t(element:T, index?:number) =>\r\n\t\t\t{\r\n\t\t\t\tif(skipping)\r\n\t\t\t\t\tskipping = predicate(element, index);\r\n\r\n\t\t\t\treturn skipping\r\n\t\t\t\t\t? EnumerableAction.Skip\r\n\t\t\t\t\t: EnumerableAction.Return;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\ttake(count:number):Enumerable\r\n\t{\r\n\t\tif(!count || isNaN(count) || count<0) // Out of bounds? Empty.\r\n\t\t\treturn Enumerable.empty();\r\n\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tif(!isFinite(count)) // +Infinity equals no limit.\r\n\t\t\treturn _;\r\n\r\n\t\tInteger.assert(count, \"count\");\r\n\t\tvar c = count;\r\n\r\n\t\t// Once action returns false, the enumeration will stop.\r\n\t\treturn _.doAction((element:T, index?:number) => index):Enumerable\r\n\t{\r\n\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\treturn this.doAction(\r\n\t\t\t(element:T, index?:number) =>\r\n\t\t\t\tpredicate(element, index)\r\n\t\t\t\t\t? EnumerableAction.Return\r\n\t\t\t\t\t: EnumerableAction.Break\r\n\t\t);\r\n\t}\r\n\r\n\t// Is like the inverse of take While with the ability to return the value identified by the predicate.\r\n\ttakeUntil(predicate:Predicate, includeUntilValue?:boolean):Enumerable\r\n\t{\r\n\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tif(!includeUntilValue)\r\n\t\t\treturn this.doAction(\r\n\t\t\t\t(element:T, index?:number) =>\r\n\t\t\t\t\tpredicate(element, index)\r\n\t\t\t\t\t\t? EnumerableAction.Break\r\n\t\t\t\t\t\t: EnumerableAction.Return\r\n\t\t\t);\r\n\r\n\t\tvar found:boolean = false;\r\n\t\treturn this.doAction(\r\n\t\t\t(element:T, index?:number) =>\r\n\t\t\t{\r\n\t\t\t\tif(found)\r\n\t\t\t\t\treturn EnumerableAction.Break;\r\n\r\n\t\t\t\tfound = predicate(element, index);\r\n\r\n\t\t\t\treturn EnumerableAction.Return;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\ttakeExceptLast(count:number = 1):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\tif(!count || isNaN(count) || count<=0) // Out of bounds? Empty.\r\n\t\t\treturn _;\r\n\r\n\t\tif(!isFinite(count)) // +Infinity equals skip all so return empty.\r\n\t\t\treturn Enumerable.empty();\r\n\r\n\t\tInteger.assert(count, \"count\");\r\n\t\tvar c = count;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar q:Queue;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\tq = new Queue();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twhile(enumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// Add the next one to the queue.\r\n\t\t\t\t\t\t\tq.enqueue(enumerator.current);\r\n\r\n\t\t\t\t\t\t\t// Did we reach our quota?\r\n\t\t\t\t\t\t\tif(q.count>c)\r\n\t\t\t\t\t\t\t// Okay then, start returning results.\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(q.dequeue());\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator, q);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\ttakeFromLast(count:number):Enumerable\r\n\t{\r\n\t\tif(!count || isNaN(count) || count<=0) // Out of bounds? Empty.\r\n\t\t\treturn Enumerable.empty();\r\n\r\n\t\tvar _ = this;\r\n\r\n\t\tif(!isFinite(count)) // Infinity means return all in reverse.\r\n\t\t\treturn _.reverse();\r\n\r\n\t\tInteger.assert(count, \"count\");\r\n\r\n\t\treturn _.reverse().take(count);\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\t// #region Projection and Filtering Methods\r\n\r\n\ttraverseBreadthFirst(\r\n\t\tfunc:(element:any) => IEnumerable,\r\n\t\tresultSelector?:(element:any, nestLevel?:number) => any):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar nestLevel:number = 0;\r\n\t\t\t\tvar buffer:any[], len:number;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tnestLevel = 0;\r\n\t\t\t\t\t\tbuffer = [];\r\n\t\t\t\t\t\tlen = 0;\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twhile(true)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(enumerator.moveNext())\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tbuffer[len++] = enumerator.current;\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(resultSelector(enumerator.current, nestLevel));\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(!len)\r\n\t\t\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\r\n\t\t\t\t\t\t\tvar next = Enumerable\r\n\t\t\t\t\t\t\t\t.fromArray(buffer)\r\n\t\t\t\t\t\t\t\t.selectMany(func);\r\n\r\n\t\t\t\t\t\t\tif(!next.any())\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tnestLevel++;\r\n\t\t\t\t\t\t\t\tbuffer = [];\r\n\t\t\t\t\t\t\t\tlen = 0;\r\n\t\t\t\t\t\t\t\tenumerator.dispose();\r\n\t\t\t\t\t\t\t\tenumerator = next.getEnumerator();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t\tbuffer.length = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\r\n\ttraverseDepthFirst(\r\n\t\tfunc:(element:any) => IEnumerable,\r\n\t\tresultSelector?:(element:any, nestLevel?:number) => any):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\t// Dev Note: May want to consider using an actual stack and not an array.\r\n\t\t\t\tvar enumeratorStack:IEnumerator[] = [];\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar len:number; // Avoid using push/pop since they query .length every time and can be slower.\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\tlen = 0;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twhile(true)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(enumerator.moveNext())\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tvar value = resultSelector(enumerator.current, len);\r\n\t\t\t\t\t\t\t\tenumeratorStack[len++] = enumerator;\r\n\t\t\t\t\t\t\t\tenumerator = func(enumerator.current).getEnumerator();\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(value);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(len==0) return false;\r\n\r\n\t\t\t\t\t\t\tenumerator.dispose();\r\n\t\t\t\t\t\t\tenumerator = enumeratorStack[--len];\r\n\t\t\t\t\t\t\tenumeratorStack.length = len;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfinally\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tdisposeThese(enumeratorStack);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\r\n\tflatten():Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar middleEnumerator:IEnumerator = null;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twhile(true)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(middleEnumerator!=null)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif(middleEnumerator.moveNext())\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\treturn yielder.yieldReturn(middleEnumerator.current);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tmiddleEnumerator = null;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(enumerator.moveNext())\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tvar c = enumerator.current;\r\n\t\t\t\t\t\t\t\tif(c instanceof Array)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tmiddleEnumerator.dispose();\r\n\t\t\t\t\t\t\t\t\tmiddleEnumerator = Enumerable.fromArray(c)\r\n\t\t\t\t\t\t\t\t\t\t.selectMany(Functions.Identity)\r\n\t\t\t\t\t\t\t\t\t\t.flatten()\r\n\t\t\t\t\t\t\t\t\t\t.getEnumerator();\r\n\t\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\treturn yielder.yieldReturn(enumerator.current);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator, middleEnumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\r\n\tpairwise(selector:(prev:T, current:T) => TSelect):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\tenumerator.moveNext();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar prev = enumerator.current;\r\n\t\t\t\t\t\treturn enumerator.moveNext()\r\n\t\t\t\t\t\t\t&& yielder.yieldReturn(selector(prev, enumerator.current));\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tscan(func:(a:T, b:T) => T, seed?:T):Enumerable\r\n\t{\r\n\r\n\t\tvar isUseSeed = seed!==undefined; // For now...\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar value:T;\r\n\t\t\t\tvar isFirst:boolean;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\tisFirst = true;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(isFirst)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tisFirst = false;\r\n\t\t\t\t\t\t\t//noinspection JSUnusedAssignment\r\n\t\t\t\t\t\t\treturn isUseSeed\r\n\t\t\t\t\t\t\t\t? yielder.yieldReturn(value = seed)\r\n\t\t\t\t\t\t\t\t: enumerator.moveNext() && yielder.yieldReturn(value\r\n\t\t\t\t\t\t\t\t= enumerator.current);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn (enumerator.moveNext())\r\n\t\t\t\t\t\t\t? yielder.yieldReturn(value = func(value, enumerator.current))\r\n\t\t\t\t\t\t\t: false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\r\n\tselect(selector:Selector):Enumerable\r\n\t{\r\n\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\r\n\t\tif(selector.length<2)\r\n\t\t\treturn new WhereSelectEnumerable(_, null, selector);\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\r\n\t\t\t\t\t\treturn enumerator.moveNext()\r\n\t\t\t\t\t\t\t? yielder.yieldReturn(selector(enumerator.current, index++))\r\n\t\t\t\t\t\t\t: false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdisposed = true;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\r\n\tselectMany(collectionSelector:Selector>>):Enumerable;\r\n\r\n\tselectMany(\r\n\t\tcollectionSelector:Selector | IArray> | Selector>,\r\n\t\tresultSelector?:(collection:T, element:TElement) => TResult):Enumerable;\r\n\r\n\tselectMany(\r\n\t\tcollectionSelector:Selector,\r\n\t\tresultSelector?:(collection:any, middle:any) => TResult):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tif(!resultSelector)\r\n\t\t\tresultSelector = (a, b) => b;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar middleEnumerator:IEnumerator;\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\tmiddleEnumerator = undefined;\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\r\n\t\t\t\t\t\t// Just started, and nothing to enumerate? End.\r\n\t\t\t\t\t\tif(middleEnumerator===undefined && !enumerator.moveNext())\r\n\t\t\t\t\t\t\treturn false;\r\n\r\n\t\t\t\t\t\t// moveNext has been called at least once...\r\n\t\t\t\t\t\tdo\r\n\t\t\t\t\t\t{\r\n\r\n\t\t\t\t\t\t\t// Initialize middle if there isn't one.\r\n\t\t\t\t\t\t\tif(!middleEnumerator)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tvar middleSeq = collectionSelector(enumerator.current, index++);\r\n\r\n\t\t\t\t\t\t\t\t// Collection is null? Skip it...\r\n\t\t\t\t\t\t\t\tif(!middleSeq)\r\n\t\t\t\t\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\t\t\t\t\tmiddleEnumerator = Enumerator.from(middleSeq);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(middleEnumerator.moveNext())\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(\r\n\t\t\t\t\t\t\t\t\tresultSelector(\r\n\t\t\t\t\t\t\t\t\t\tenumerator.current, middleEnumerator.current\r\n\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\t// else no more in this middle? Then clear and reset for next...\r\n\r\n\t\t\t\t\t\t\tmiddleEnumerator.dispose();\r\n\t\t\t\t\t\t\tmiddleEnumerator = null;\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\twhile(enumerator.moveNext());\r\n\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator, middleEnumerator);\r\n\t\t\t\t\t\tenumerator = null;\r\n\t\t\t\t\t\tmiddleEnumerator = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tchoose(selector:Selector):Enumerable\r\n\t{\r\n\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\r\n\t\t\t\t\t\twhile(enumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar result = selector(enumerator.current, index++);\r\n\t\t\t\t\t\t\tif(result!==null && result!==undefined)\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(result);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdisposed = true;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\twhere(predicate:Predicate):Enumerable\r\n\t{\r\n\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\r\n\t\tif(predicate.length<2)\r\n\t\t\treturn new WhereEnumerable(_, predicate);\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\r\n\t\t\t\t\t\twhile(enumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(predicate(enumerator.current, index++))\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(enumerator.current);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdisposed = true;\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t}\r\n\r\n\tofType(type:{ new (): TType }):Enumerable;\r\n\tofType(type:any):Enumerable\r\n\t{\r\n\t\tvar typeName:string;\r\n\t\tswitch(type)\r\n\t\t{\r\n\t\t\tcase Number:\r\n\t\t\t\ttypeName = Type.NUMBER;\r\n\t\t\t\tbreak;\r\n\t\t\tcase String:\r\n\t\t\t\ttypeName = Type.STRING;\r\n\t\t\t\tbreak;\r\n\t\t\tcase Boolean:\r\n\t\t\t\ttypeName = Type.BOOLEAN;\r\n\t\t\t\tbreak;\r\n\t\t\tcase Function:\r\n\t\t\t\ttypeName = Type.FUNCTION;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\treturn >this\r\n\t\t\t\t\t.where(x=>x instanceof type);\r\n\t\t}\r\n\t\treturn >this\r\n\t\t\t.where(x=>typeof x===typeName);\r\n\t}\r\n\r\n\texcept(\r\n\t\tsecond:IEnumerable,\r\n\t\tcompareSelector?:Selector):Enumerable\r\n\t{\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar keys:Dictionary;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\tkeys = new Dictionary(compareSelector);\r\n\t\t\t\t\t\tif(second)\r\n\t\t\t\t\t\t\tEnumerable.forEach(second, key => keys.addByKeyValue(key, true));\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\twhile(enumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar current = enumerator.current;\r\n\t\t\t\t\t\t\tif(!keys.containsKey(current))\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tkeys.addByKeyValue(current, true);\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(current);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t\tkeys.clear();\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdisposed = true;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tdistinct(compareSelector?:(value:T) => T):Enumerable\r\n\t{\r\n\t\treturn this.except(null, compareSelector);\r\n\t}\r\n\r\n\t// [0,0,0,1,1,1,2,2,2,0,0,0] results in [0,1,2,0];\r\n\tdistinctUntilChanged(compareSelector?:Selector):Enumerable\r\n\t{\r\n\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar compareKey:TCompare;\r\n\t\t\t\tvar initial:boolean = true;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\twhile(enumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar key = compareSelector(enumerator.current);\r\n\r\n\t\t\t\t\t\t\tif(initial)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tinitial = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse if(compareKey===key)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tcompareKey = key;\r\n\t\t\t\t\t\t\treturn yielder.yieldReturn(enumerator.current);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdisposed = true;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\treverse():Enumerable\r\n\t{\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar buffer:T[];\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\tbuffer = _.toArray();\r\n\t\t\t\t\t\tindex = buffer.length;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\tindex>0\r\n\t\t\t\t\t&& yielder.yieldReturn(buffer[--index]),\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbuffer.length = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdisposed = true;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tshuffle():Enumerable\r\n\t{\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar buffer:T[];\r\n\t\t\t\tvar capacity:number;\r\n\t\t\t\tvar len:number;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\tbuffer = _.toArray();\r\n\t\t\t\t\t\tcapacity = len = buffer.length;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// Avoid using major array operations like .slice();\r\n\t\t\t\t\t\tif(!len)\r\n\t\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\r\n\t\t\t\t\t\tvar selectedIndex = Integer.random(len);\r\n\t\t\t\t\t\tvar selectedValue = buffer[selectedIndex];\r\n\r\n\t\t\t\t\t\tbuffer[selectedIndex] = buffer[--len]; // Take the last one and put it here.\r\n\t\t\t\t\t\tbuffer[len] = null; // clear possible reference.\r\n\r\n\t\t\t\t\t\tif(len%32==0) // Shrink?\r\n\t\t\t\t\t\t\tbuffer.length = len;\r\n\r\n\t\t\t\t\t\treturn yielder.yieldReturn(selectedValue);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbuffer.length = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdisposed = true;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tcount(predicate?:Predicate):number\r\n\t{\r\n\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar count:number = 0;\r\n\t\tif(predicate)\r\n\t\t{\r\n\t\t\t_.forEach((x, i) =>\r\n\t\t\t{\r\n\t\t\t\tif(predicate(x, i))++count;\r\n\t\t\t});\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t_.forEach(() =>\r\n\t\t\t{\r\n\t\t\t\t++count;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn count;\r\n\t}\r\n\r\n\t// Akin to '.every' on an array.\r\n\tall(predicate:Predicate):boolean\r\n\t{\r\n\t\tvar result = true;\r\n\t\tthis.forEach(x =>\r\n\t\t{\r\n\t\t\tif(!predicate(x))\r\n\t\t\t{\r\n\t\t\t\tresult = false;\r\n\t\t\t\treturn false; // break\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn result;\r\n\t}\r\n\r\n\t// 'every' has been added here for parity/compatibility with an array.\r\n\tevery(predicate:Predicate):boolean\r\n\t{\r\n\t\treturn this.all(predicate);\r\n\t}\r\n\r\n\t// Akin to '.some' on an array.\r\n\tany(predicate?:Predicate):boolean\r\n\t{\r\n\t\tvar result = false;\r\n\r\n\t\t// Splitting the forEach up this way reduces iterative processing.\r\n\t\t// forEach handles the generation and disposal of the enumerator.\r\n\t\tif(predicate)\r\n\t\t{\r\n\t\t\tthis.forEach(x =>\r\n\t\t\t{\r\n\t\t\t\tresult = predicate(x); // false = not found and therefore it should continue. true = found and break;\r\n\t\t\t\treturn !result;\r\n\t\t\t});\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis.forEach(() =>\r\n\t\t\t{\r\n\t\t\t\tresult = true;\r\n\t\t\t\treturn false;\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn result;\r\n\r\n\t}\r\n\r\n\t// 'some' has been added here for parity/compatibility with an array.\r\n\tsome(predicate:Predicate):boolean\r\n\t{\r\n\t\treturn this.any(predicate);\r\n\t}\r\n\r\n\tisEmpty():boolean\r\n\t{\r\n\t\treturn !this.any();\r\n\t}\r\n\r\n\tcontains(value:T, compareSelector?:Selector):boolean\r\n\t{\r\n\t\treturn compareSelector\r\n\t\t\t? this.any(v=> compareSelector(v)===compareSelector(value))\r\n\t\t\t: this.any(v=> v===value);\r\n\t}\r\n\r\n\t// Originally has an overload for a predicate,\r\n\t// but that's a bad idea since this could be an enumeration of functions and therefore fail the intent.\r\n\t// Better to chain a where statement first to be more explicit.\r\n\tindexOf(value:T, compareSelector?:Selector):number\r\n\t{\r\n\t\tvar found:number = -1;\r\n\r\n\t\tif(compareSelector)\r\n\t\t\tthis.forEach((element:T, i?:number) =>\r\n\t\t\t{\r\n\t\t\t\tif(Values.areEqual(compareSelector(element), compareSelector(value), true))\r\n\t\t\t\t{\r\n\t\t\t\t\tfound = i;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\telse\r\n\t\t\tthis.forEach((element:T, i?:number) =>\r\n\t\t\t{\r\n\t\t\t\t// Why? Because NaN doesn't equal NaN. :P\r\n\t\t\t\tif(Values.areEqual(element, value, true))\r\n\t\t\t\t{\r\n\t\t\t\t\tfound = i;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\treturn found;\r\n\t}\r\n\r\n\tlastIndexOf(value:T, compareSelector?:Selector):number\r\n\t{\r\n\t\tvar result:number = -1;\r\n\r\n\t\tif(compareSelector)\r\n\t\t\tthis.forEach((element:T, i?:number) =>\r\n\t\t\t{\r\n\t\t\t\tif(Values.areEqual(compareSelector(element), compareSelector(value), true)) result\r\n\t\t\t\t\t= i;\r\n\t\t\t});\r\n\t\telse\r\n\t\t\tthis.forEach((element:T, i?:number) =>\r\n\t\t\t{\r\n\t\t\t\tif(Values.areEqual(element, value, true)) result = i;\r\n\t\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tdefaultIfEmpty(defaultValue:T = null):Enumerable\r\n\t{\r\n\t\tvar _ = this, disposed:boolean = !_.throwIfDisposed();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar isFirst:boolean;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tisFirst = true;\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\r\n\t\t\t\t\t\tif(enumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tisFirst = false;\r\n\t\t\t\t\t\t\treturn yielder.yieldReturn(enumerator.current);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if(isFirst)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tisFirst = false;\r\n\t\t\t\t\t\t\treturn yielder.yieldReturn(defaultValue);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tzip(\r\n\t\tsecond:IEnumerable | IArray,\r\n\t\tresultSelector:(first:T, second:TSecond, index?:number) => TResult):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar firstEnumerator:IEnumerator;\r\n\t\t\t\tvar secondEnumerator:IEnumerator;\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t\tfirstEnumerator = _.getEnumerator();\r\n\t\t\t\t\t\tsecondEnumerator = enumeratorFrom(second);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\tfirstEnumerator.moveNext() && secondEnumerator.moveNext()\r\n\t\t\t\t\t&& yielder.yieldReturn(resultSelector(firstEnumerator.current, secondEnumerator.current, index++)),\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(firstEnumerator, secondEnumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tzipMultiple(\r\n\t\tsecond:IArray | IArray>,\r\n\t\tresultSelector:(first:T, second:TSecond, index?:number) => TResult):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\tif(!second.length)\r\n\t\t\treturn Enumerable.empty();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar secondTemp:Queue;\r\n\t\t\t\tvar firstEnumerator:IEnumerator;\r\n\t\t\t\tvar secondEnumerator:IEnumerator;\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsecondTemp = new Queue(second);\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t\tfirstEnumerator = _.getEnumerator();\r\n\t\t\t\t\t\tsecondEnumerator = null;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(firstEnumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\twhile(true)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\twhile(!secondEnumerator)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif(secondTemp.count)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tvar next = secondTemp.dequeue();\r\n\t\t\t\t\t\t\t\t\t\tif(next) // In case by chance next is null, then try again.\r\n\t\t\t\t\t\t\t\t\t\t\tsecondEnumerator = enumeratorFrom(next);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tif(secondEnumerator.moveNext())\r\n\t\t\t\t\t\t\t\t\treturn yielder.yieldReturn(\r\n\t\t\t\t\t\t\t\t\t\tresultSelector(firstEnumerator.current, secondEnumerator.current, index++)\r\n\t\t\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\t\tsecondEnumerator.dispose();\r\n\t\t\t\t\t\t\t\tsecondEnumerator = null;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(firstEnumerator, secondTemp);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t// #region Join Methods\r\n\r\n\tjoin(\r\n\t\tinner:IEnumerable | IArray,\r\n\t\touterKeySelector:Selector,\r\n\t\tinnerKeySelector:Selector,\r\n\t\tresultSelector:(outer:T, inner:TInner) => TResult,\r\n\t\tcompareSelector:Selector = Functions.Identity):Enumerable\r\n\t{\r\n\r\n\t\tvar _ = this;\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar outerEnumerator:IEnumerator;\r\n\t\t\t\tvar lookup:ILookup;\r\n\t\t\t\tvar innerElements:TInner[] = null;\r\n\t\t\t\tvar innerCount:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\touterEnumerator = _.getEnumerator();\r\n\t\t\t\t\t\tlookup = Enumerable.from(inner)\r\n\t\t\t\t\t\t\t.toLookup(innerKeySelector, Functions.Identity, compareSelector);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twhile(true)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(innerElements!=null)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tvar innerElement = innerElements[innerCount++];\r\n\t\t\t\t\t\t\t\tif(innerElement!==undefined)\r\n\t\t\t\t\t\t\t\t\treturn yielder.yieldReturn(resultSelector(outerEnumerator.current, innerElement));\r\n\r\n\t\t\t\t\t\t\t\tinnerElement = null;\r\n\t\t\t\t\t\t\t\tinnerCount = 0;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(outerEnumerator.moveNext())\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tvar key = outerKeySelector(outerEnumerator.current);\r\n\t\t\t\t\t\t\t\tinnerElements = lookup.get(key);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(outerEnumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tgroupJoin(\r\n\t\tinner:IEnumerable | IArray,\r\n\t\touterKeySelector:Selector,\r\n\t\tinnerKeySelector:Selector,\r\n\t\tresultSelector:(outer:T, inner:TInner[]) => TResult,\r\n\t\tcompareSelector:Selector = Functions.Identity):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar lookup:ILookup = null;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\tlookup = Enumerable.from(inner)\r\n\t\t\t\t\t\t\t.toLookup(innerKeySelector, Functions.Identity, compareSelector);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\tenumerator.moveNext()\r\n\t\t\t\t\t&& yielder.yieldReturn(\r\n\t\t\t\t\t\tresultSelector(\r\n\t\t\t\t\t\t\tenumerator.current,\r\n\t\t\t\t\t\t\tlookup.get(outerKeySelector(enumerator.current))\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t),\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tconcatWith(other:IEnumerable | IArray):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar firstEnumerator:IEnumerator;\r\n\t\t\t\tvar secondEnumerator:IEnumerator;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfirstEnumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(firstEnumerator!=null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(firstEnumerator.moveNext()) return yielder.yieldReturn(firstEnumerator.current);\r\n\t\t\t\t\t\t\tsecondEnumerator = enumeratorFrom(other);\r\n\t\t\t\t\t\t\tfirstEnumerator.dispose();\r\n\t\t\t\t\t\t\tfirstEnumerator = null;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(secondEnumerator.moveNext()) return yielder.yieldReturn(secondEnumerator.current);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(firstEnumerator, secondEnumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tmerge(enumerables:IArray | IArray>):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\tif(!enumerables.length)\r\n\t\t\treturn _;\r\n\r\n\t\tif(enumerables.length==1)\r\n\t\t\treturn _.concatWith(enumerables[0]);\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar queue:Queue | IArray>;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// 1) First get our values...\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\tqueue = new Queue | IArray>(enumerables);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twhile(true)\r\n\t\t\t\t\t\t{\r\n\r\n\t\t\t\t\t\t\twhile(!enumerator && queue.count)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tenumerator = enumeratorFrom(queue.dequeue()); // 4) Keep going and on to step 2. Else fall through to yieldBreak().\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(enumerator && enumerator.moveNext()) // 2) Keep returning until done.\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(enumerator.current);\r\n\r\n\t\t\t\t\t\t\tif(enumerator) // 3) Dispose and reset for next.\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tenumerator.dispose();\r\n\t\t\t\t\t\t\t\tenumerator = null;\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator, queue); // Just in case this gets disposed early.\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tconcat(...enumerables:Array | IArray>):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tif(enumerables.length==0)\r\n\t\t\treturn _;\r\n\r\n\t\tif(enumerables.length==1)\r\n\t\t\treturn _.concatWith(enumerables[0]);\r\n\r\n\t\treturn _.merge(enumerables);\r\n\t}\r\n\r\n\r\n\tinsertAt(index:number, other:IEnumerable | IArray):Enumerable\r\n\t{\r\n\t\tif(isNaN(index) || index<0 || !isFinite(index))\r\n\t\t\tthrow new Error(\"'index' is invalid or out of bounds.\");\r\n\r\n\t\tInteger.assert(index, \"index\");\r\n\t\tvar n:number = index;\r\n\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\r\n\t\t\t\tvar firstEnumerator:IEnumerator;\r\n\t\t\t\tvar secondEnumerator:IEnumerator;\r\n\r\n\t\t\t\tvar count:number = 0;\r\n\t\t\t\tvar isEnumerated:boolean = false;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcount = 0;\r\n\t\t\t\t\t\tfirstEnumerator = _.getEnumerator();\r\n\t\t\t\t\t\tsecondEnumerator = enumeratorFrom(other);\r\n\t\t\t\t\t\tisEnumerated = false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(count==n)\r\n\t\t\t\t\t\t{ // Inserting?\r\n\t\t\t\t\t\t\tisEnumerated = true;\r\n\t\t\t\t\t\t\tif(secondEnumerator.moveNext())\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(secondEnumerator.current);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(firstEnumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcount++;\r\n\t\t\t\t\t\t\treturn yielder.yieldReturn(firstEnumerator.current);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn !isEnumerated\r\n\t\t\t\t\t\t\t&& secondEnumerator.moveNext()\r\n\t\t\t\t\t\t\t&& yielder.yieldReturn(secondEnumerator.current);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(firstEnumerator, secondEnumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\r\n\talternateMultiple(sequence:IEnumerable | IArray):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar buffer:T,\r\n\t\t\t\t mode:EnumerableAction,\r\n\t\t\t\t enumerator:IEnumerator,\r\n\t\t\t\t alternateEnumerator:IEnumerator;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// Instead of recalling getEnumerator every time, just reset the existing one.\r\n\t\t\t\t\t\talternateEnumerator = new ArrayEnumerator(\r\n\t\t\t\t\t\t\tEnumerable.toArray(sequence)\r\n\t\t\t\t\t\t); // Freeze\r\n\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\r\n\t\t\t\t\t\tvar hasAtLeastOne = enumerator.moveNext();\r\n\t\t\t\t\t\tmode = hasAtLeastOne\r\n\t\t\t\t\t\t\t? EnumerableAction.Return\r\n\t\t\t\t\t\t\t: EnumerableAction.Break;\r\n\r\n\t\t\t\t\t\tif(hasAtLeastOne)\r\n\t\t\t\t\t\t\tbuffer = enumerator.current;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tswitch(mode)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase EnumerableAction.Break: // We're done?\r\n\t\t\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\r\n\t\t\t\t\t\t\tcase EnumerableAction.Skip:\r\n\t\t\t\t\t\t\t\tif(alternateEnumerator.moveNext())\r\n\t\t\t\t\t\t\t\t\treturn yielder.yieldReturn(alternateEnumerator.current);\r\n\t\t\t\t\t\t\t\talternateEnumerator.reset();\r\n\t\t\t\t\t\t\t\tmode = EnumerableAction.Return;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar latest = buffer;\r\n\r\n\t\t\t\t\t\t// Set up the next round...\r\n\r\n\t\t\t\t\t\t// Is there another one? Set the buffer and setup instruct for the next one to be the alternate.\r\n\t\t\t\t\t\tvar another = enumerator.moveNext();\r\n\t\t\t\t\t\tmode = another\r\n\t\t\t\t\t\t\t? EnumerableAction.Skip\r\n\t\t\t\t\t\t\t: EnumerableAction.Break;\r\n\r\n\t\t\t\t\t\tif(another)\r\n\t\t\t\t\t\t\tbuffer = enumerator.current;\r\n\r\n\t\t\t\t\t\treturn yielder.yieldReturn(latest);\r\n\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator, alternateEnumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\talternateSingle(value:T):Enumerable\r\n\t{\r\n\t\treturn this.alternateMultiple(Enumerable.make(value));\r\n\t}\r\n\r\n\talternate(...sequence:T[]):Enumerable\r\n\t{\r\n\t\treturn this.alternateMultiple(sequence);\r\n\t}\r\n\r\n\r\n\tintersect(\r\n\t\tsecond:IEnumerable | IArray,\r\n\t\tcompareSelector?:Selector):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar keys:Dictionary;\r\n\t\t\t\tvar outs:Dictionary;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\r\n\t\t\t\t\t\tkeys = new Dictionary(compareSelector);\r\n\t\t\t\t\t\touts = new Dictionary(compareSelector);\r\n\r\n\t\t\t\t\t\tEnumerable.from(second)\r\n\t\t\t\t\t\t\t.forEach(key=>\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tkeys.addByKeyValue(key, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twhile(enumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar current = enumerator.current;\r\n\t\t\t\t\t\t\tif(!outs.containsKey(current) && keys.containsKey(current))\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\touts.addByKeyValue(current, true);\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(current);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t); // Should Dictionary be IDisposable?\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tsequenceEqual(\r\n\t\tsecond:IEnumerable | IArray,\r\n\t\tequalityComparer:EqualityComparison = Values.areEqual):boolean\r\n\t{\r\n\t\treturn using(\r\n\t\t\tthis.getEnumerator(),\r\n\t\t\te1=> using(\r\n\t\t\t\tEnumerable.from(second).getEnumerator(),\r\n\t\t\t\te2=>\r\n\t\t\t\t{\r\n\t\t\t\t\twhile(e1.moveNext())\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(!e2.moveNext() || !equalityComparer(e1.current, e2.current))\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn !e2.moveNext();\r\n\t\t\t\t}\r\n\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\t//isEquivalent(second:IEnumerable | IArray,\r\n\t//\tequalityComparer:EqualityComparison = Values.areEqual):boolean\r\n\t//{\r\n\t//\treturn this\r\n\t//\t\t.orderBy(keySelector)\r\n\t//\t\t.sequenceEqual(Enumerable.from(second).orderBy(keySelector))\r\n\t//}\r\n\r\n\tunion(\r\n\t\tsecond:IEnumerable | IArray,\r\n\t\tcompareSelector:Selector = Functions.Identity):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar firstEnumerator:IEnumerator;\r\n\t\t\t\tvar secondEnumerator:IEnumerator;\r\n\t\t\t\tvar keys:Dictionary;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfirstEnumerator = _.getEnumerator();\r\n\t\t\t\t\t\tkeys = new Dictionary(compareSelector);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar current:T;\r\n\t\t\t\t\t\tif(secondEnumerator===undefined)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\twhile(firstEnumerator.moveNext())\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcurrent = firstEnumerator.current;\r\n\t\t\t\t\t\t\t\tif(!keys.containsKey(current))\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tkeys.addByKeyValue(current, null);\r\n\t\t\t\t\t\t\t\t\treturn yielder.yieldReturn(current);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tsecondEnumerator = Enumerable.from(second).getEnumerator();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\twhile(secondEnumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcurrent = secondEnumerator.current;\r\n\t\t\t\t\t\t\tif(!keys.containsKey(current))\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tkeys.addByKeyValue(current, null);\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(current);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(firstEnumerator, secondEnumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\t// #region Ordering Methods\r\n\r\n\torderBy(keySelector:Selector = Functions.Identity):IOrderedEnumerable\r\n\t{\r\n\t\treturn new OrderedEnumerable(this, keySelector, Order.Ascending);\r\n\t}\r\n\r\n\torderUsing(comparison:Comparison):IOrderedEnumerable {\r\n\t\treturn new OrderedEnumerable(this, null, Order.Ascending, null, comparison);\r\n\t}\r\n\r\n\torderUsingReversed(comparison:Comparison):IOrderedEnumerable {\r\n\t\treturn new OrderedEnumerable(this, null, Order.Descending, null, comparison);\r\n\t}\r\n\r\n\torderByDescending(keySelector:Selector = Functions.Identity):IOrderedEnumerable\r\n\t{\r\n\t\treturn new OrderedEnumerable(this, keySelector, Order.Descending);\r\n\t}\r\n\r\n\t/*\r\n\t\t weightedSample(weightSelector) {\r\n\t\t weightSelector = Utils.createLambda(weightSelector);\r\n\t\t var source = this;\r\n\r\n\t\t return new Enumerable(() => {\r\n\t\t var sortedByBound;\r\n\t\t var totalWeight = 0;\r\n\r\n\t\t return new EnumeratorBase(\r\n\t\t () => {\r\n\t\t sortedByBound = source\r\n\t\t .choose(function (x) {\r\n\t\t var weight = weightSelector(x);\r\n\t\t if (weight <= 0) return null; // ignore 0\r\n\r\n\t\t totalWeight += weight;\r\n\t\t return { value: x, bound: totalWeight }\r\n\t\t })\r\n\t\t .toArray();\r\n\t\t },\r\n\t\t () => {\r\n\t\t if (sortedByBound.length > 0) {\r\n\t\t var draw = (Math.random() * totalWeight) + 1;\r\n\r\n\t\t var lower = -1;\r\n\t\t var upper = sortedByBound.length;\r\n\t\t while (upper - lower > 1) {\r\n\t\t var index = ((lower + upper) / 2);\r\n\t\t if (sortedByBound[index].bound >= draw) {\r\n\t\t upper = index;\r\n\t\t }\r\n\t\t else {\r\n\t\t lower = index;\r\n\t\t }\r\n\t\t }\r\n\r\n\t\t return (this).yieldReturn(sortedByBound[upper].value);\r\n\t\t }\r\n\r\n\t\t return (this).yieldBreak();\r\n\t\t },\r\n\t\t Functions.Blank);\r\n\t\t });\r\n\t\t }\r\n\t\t */\r\n\t// #endregion\r\n\r\n\t// #region Grouping Methods\r\n\r\n\t// Originally contained a result selector (not common use), but this could be done simply by a select statement after.\r\n\r\n\r\n\tgroupBy(keySelector:Selector):Enumerable>;\r\n\tgroupBy(\r\n\t\tkeySelector:Selector,\r\n\t\telementSelector:Selector,\r\n\t\tcompareSelector?:Selector):Enumerable>;\r\n\tgroupBy(\r\n\t\tkeySelector:Selector,\r\n\t\telementSelector?:Selector,\r\n\t\tcompareSelector?:Selector):Enumerable>|Enumerable>\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tif(!elementSelector) elementSelector = Functions.Identity; // Allow for 'null' and not just undefined.\r\n\t\treturn new Enumerable>(\r\n\t\t\t() => _.toLookup(keySelector, elementSelector, compareSelector)\r\n\t\t\t\t.getEnumerator()\r\n\t\t);\r\n\t}\r\n\r\n\tpartitionBy(keySelector:Selector):Enumerable>;\r\n\tpartitionBy(\r\n\t\tkeySelector:Selector,\r\n\t\telementSelector:Selector,\r\n\t\tresultSelector?:(key:TKey, element:TElement[]) => IGrouping,\r\n\t\tcompareSelector?:Selector):Enumerable>;\r\n\tpartitionBy(\r\n\t\tkeySelector:Selector,\r\n\t\telementSelector?:Selector,\r\n\t\tresultSelector:(key:TKey, element:TElement[]) => IGrouping\r\n\t\t\t= (key:TKey, elements:TElement[]) => new Grouping(key, elements),\r\n\t\tcompareSelector:Selector\r\n\t\t\t= Functions.Identity):Enumerable>|Enumerable>\r\n\t{\r\n\r\n\t\tvar _ = this;\r\n\t\tif(!elementSelector) elementSelector = Functions.Identity; // Allow for 'null' and not just undefined.\r\n\t\treturn new Enumerable>(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\tvar key:TKey;\r\n\t\t\t\tvar compareKey:TCompare;\r\n\t\t\t\tvar group:TElement[];\r\n\t\t\t\tvar len:number;\r\n\r\n\t\t\t\treturn new EnumeratorBase>(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\tif(enumerator.moveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tkey = keySelector(enumerator.current);\r\n\t\t\t\t\t\t\tcompareKey = compareSelector(key);\r\n\t\t\t\t\t\t\tgroup = [elementSelector(enumerator.current)];\r\n\t\t\t\t\t\t\tlen = 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tgroup = null;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(!group)\r\n\t\t\t\t\t\t\treturn yielder.yieldBreak();\r\n\r\n\t\t\t\t\t\tvar hasNext:boolean, c:T;\r\n\t\t\t\t\t\twhile((hasNext = enumerator.moveNext()))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tc = enumerator.current;\r\n\t\t\t\t\t\t\tif(compareKey===compareSelector(keySelector(c)))\r\n\t\t\t\t\t\t\t\tgroup[len++] = elementSelector(c);\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar result:IGrouping\r\n\t\t\t\t\t\t\t = resultSelector(key, group);\r\n\r\n\t\t\t\t\t\tif(hasNext)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tc = enumerator.current;\r\n\t\t\t\t\t\t\tkey = keySelector(c);\r\n\t\t\t\t\t\t\tcompareKey = compareSelector(key);\r\n\t\t\t\t\t\t\tgroup = [elementSelector(c)];\r\n\t\t\t\t\t\t\tlen = 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tgroup = null;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn yielder.yieldReturn(result);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t\tgroup = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\tbuffer(size:number):IEnumerable\r\n\t{\r\n\t\tif(size<1 || !isFinite(size))\r\n\t\t\tthrow new Error(\"Invalid buffer size.\");\r\n\r\n\t\tInteger.assert(size, \"size\");\r\n\r\n\t\tvar _ = this, len:number;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar array:T[] = ArrayUtility.initialize(size);\r\n\t\t\t\t\t\tlen = 0;\r\n\t\t\t\t\t\twhile(len\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t// #region Aggregate Methods\r\n\r\n\taggregate(\r\n\t\tfunc:(a:T, b:T) => T,\r\n\t\tseed?:T):T\r\n\t{\r\n\t\treturn this.scan(func, seed).lastOrDefault();\r\n\t}\r\n\r\n\taverage(selector:Selector = Type.numberOrNaN):number\r\n\t{\r\n\t\tvar sum = 0;\r\n\t\t// This allows for infinity math that doesn't destroy the other values.\r\n\t\tvar sumInfinite = 0; // Needs more investigation since we are really trying to retain signs.\r\n\r\n\t\tvar count = 0; // No need to make integer if the result could be a float.\r\n\r\n\t\tthis.forEach(\r\n\t\t\tfunction(x)\r\n\t\t\t{\r\n\t\t\t\tvar value = selector(x);\r\n\t\t\t\tif(isNaN(value))\r\n\t\t\t\t{\r\n\t\t\t\t\tsum = NaN;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tif(isFinite(value))\r\n\t\t\t\t\tsum += value;\r\n\t\t\t\telse\r\n\t\t\t\t\tsumInfinite += value>0 ? (+1) : (-1);\r\n\t\t\t\t++count;\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tif(sumInfinite) // Not zero?\r\n\t\t\treturn sumInfinite*Infinity;\r\n\r\n\t\treturn (isNaN(sum) || !count)\r\n\t\t\t? NaN\r\n\t\t\t: (sum/count);\r\n\t}\r\n\r\n\t// If using numbers, it may be useful to call .takeUntil(v=>v==Infinity,true) before calling max. See static versions for numbers.\r\n\tmax():T\r\n\t{\r\n\t\treturn this.aggregate(Functions.Greater);\r\n\t}\r\n\r\n\tmin():T\r\n\t{\r\n\t\treturn this.aggregate(Functions.Lesser);\r\n\t}\r\n\r\n\tmaxBy(keySelector:Selector = Functions.Identity):T\r\n\t{\r\n\t\treturn this.aggregate((a:T, b:T) => (keySelector(a)>keySelector(b)) ? a : b);\r\n\t}\r\n\r\n\tminBy(keySelector:Selector = Functions.Identity):T\r\n\t{\r\n\t\treturn this.aggregate((a:T, b:T) => (keySelector(a) = Type.numberOrNaN):number\r\n\t{\r\n\t\tvar sum = 0;\r\n\r\n\t\t// This allows for infinity math that doesn't destroy the other values.\r\n\t\tvar sumInfinite = 0; // Needs more investigation since we are really trying to retain signs.\r\n\r\n\t\tthis.forEach(\r\n\t\t\tx=>\r\n\t\t\t{\r\n\t\t\t\tvar value = selector(x);\r\n\t\t\t\tif(isNaN(value))\r\n\t\t\t\t{\r\n\t\t\t\t\tsum = NaN;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tif(isFinite(value))\r\n\t\t\t\t\tsum += value;\r\n\t\t\t\telse\r\n\t\t\t\t\tsumInfinite += value>0 ? (+1) : (-1);\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\treturn isNaN(sum) ? NaN : (sumInfinite ? (sumInfinite*Infinity) : sum);\r\n\t}\r\n\r\n\t// Multiplication...\r\n\tproduct(selector:Selector = Type.numberOrNaN):number\r\n\t{\r\n\t\tvar result = 1, exists:boolean = false;\r\n\r\n\t\tthis.forEach(\r\n\t\t\tx=>\r\n\t\t\t{\r\n\t\t\t\texists = true;\r\n\t\t\t\tvar value = selector(x);\r\n\t\t\t\tif(isNaN(value))\r\n\t\t\t\t{\r\n\t\t\t\t\tresult = NaN;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(value==0)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult = 0; // Multiplying by zero will always end in zero.\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Multiplication can never recover from infinity and simply must retain signs.\r\n\t\t\t\t// You could cancel out infinity with 1/infinity but no available representation exists.\r\n\t\t\t\tresult *= value;\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\treturn (exists && isNaN(result)) ? NaN : result;\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\t// #region Single Value Return...\r\n\r\n\telementAt(index:number):T\r\n\t{\r\n\t\tif(isNaN(index) || index<0 || !isFinite(index))\r\n\t\t\tthrow new Error(\"'index' is invalid or out of bounds.\");\r\n\r\n\t\tInteger.assert(index, \"index\");\r\n\t\tvar n:number = index;\r\n\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar value:T = undefined;\r\n\t\tvar found = false;\r\n\t\t_.forEach(\r\n\t\t\t(x:T, i:number) =>\r\n\t\t\t{\r\n\t\t\t\tif(i==n)\r\n\t\t\t\t{\r\n\t\t\t\t\tvalue = x;\r\n\t\t\t\t\tfound = true;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tif(!found) throw new Error(\"index is less than 0 or greater than or equal to the number of elements in source.\");\r\n\t\treturn value;\r\n\t}\r\n\r\n\telementAtOrDefault(index:number, defaultValue:T = null):T\r\n\t{\r\n\r\n\t\tif(isNaN(index) || index<0 || !isFinite(index))\r\n\t\t\tthrow new Error(\"'index' is invalid or out of bounds.\");\r\n\r\n\t\tInteger.assert(index, \"index\");\r\n\t\tvar n:number = index;\r\n\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar value:T = undefined;\r\n\t\tvar found = false;\r\n\t\t_.forEach(\r\n\t\t\t(x:T, i:number) =>\r\n\t\t\t{\r\n\t\t\t\tif(i==n)\r\n\t\t\t\t{\r\n\t\t\t\t\tvalue = x;\r\n\t\t\t\t\tfound = true;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\treturn (!found) ? defaultValue : value;\r\n\t}\r\n\r\n\t/* Note: Unlike previous implementations, you could pass a predicate into these methods.\r\n\t * But since under the hood it ends up calling .where(predicate) anyway,\r\n\t * it may be better to remove this to allow for a cleaner signature/override.\r\n\t * JavaScript/TypeScript does not easily allow for a strict method interface like C#.\r\n\t * Having to write extra override logic is error prone and confusing to the consumer.\r\n\t * Removing the predicate here may also cause the consumer of this method to think more about how they structure their query.\r\n\t * The end all difference is that the user must declare .where(predicate) before .first(), .single(), or .last().\r\n\t * */\r\n\r\n\tfirst():T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar value:T = undefined;\r\n\t\tvar found:boolean = false;\r\n\t\t_.forEach(\r\n\t\t\tx =>\r\n\t\t\t{\r\n\t\t\t\tvalue = x;\r\n\t\t\t\tfound = true;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tif(!found) throw new Error(\"first:No element satisfies the condition.\");\r\n\t\treturn value;\r\n\t}\r\n\r\n\tfirstOrDefault(defaultValue:T = null):T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar value:T = undefined;\r\n\t\tvar found = false;\r\n\t\t_.forEach(\r\n\t\t\tx =>\r\n\t\t\t{\r\n\t\t\t\tvalue = x;\r\n\t\t\t\tfound = true;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t);\r\n\t\treturn (!found) ? defaultValue : value;\r\n\t}\r\n\r\n\tlast():T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar value:T = undefined;\r\n\t\tvar found:boolean = false;\r\n\t\t_.forEach(\r\n\t\t\tx =>\r\n\t\t\t{\r\n\t\t\t\tfound = true;\r\n\t\t\t\tvalue = x;\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tif(!found) throw new Error(\"last:No element satisfies the condition.\");\r\n\t\treturn value;\r\n\t}\r\n\r\n\tlastOrDefault(defaultValue:T = null):T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar value:T = undefined;\r\n\t\tvar found:boolean = false;\r\n\t\t_.forEach(\r\n\t\t\tx=>\r\n\t\t\t{\r\n\t\t\t\tfound = true;\r\n\t\t\t\tvalue = x;\r\n\t\t\t}\r\n\t\t);\r\n\t\treturn (!found) ? defaultValue : value;\r\n\t}\r\n\r\n\tsingle():T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar value:T = undefined;\r\n\t\tvar found:boolean = false;\r\n\t\t_.forEach(\r\n\t\t\tx=>\r\n\t\t\t{\r\n\t\t\t\tif(!found)\r\n\t\t\t\t{\r\n\t\t\t\t\tfound = true;\r\n\t\t\t\t\tvalue = x;\r\n\t\t\t\t}\r\n\t\t\t\telse throw new Error(\"single:sequence contains more than one element.\");\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tif(!found) throw new Error(\"single:No element satisfies the condition.\");\r\n\t\treturn value;\r\n\t}\r\n\r\n\tsingleOrDefault(defaultValue:T = null):T\r\n\t{\r\n\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar value:T = undefined;\r\n\t\tvar found:boolean = false;\r\n\t\t_.forEach(\r\n\t\t\tx=>\r\n\t\t\t{\r\n\t\t\t\tif(!found)\r\n\t\t\t\t{\r\n\t\t\t\t\tfound = true;\r\n\t\t\t\t\tvalue = x;\r\n\t\t\t\t}\r\n\t\t\t\telse throw new Error(\"single:sequence contains more than one element.\");\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\treturn (!found) ? defaultValue : value;\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\tshare():Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar sharedEnumerator:IEnumerator;\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// assertIsNotDisposed(disposed); This doesn't need an assertion since disposing the underlying enumerable disposes the enumerator.\r\n\r\n\t\t\t\t\t\tif(!sharedEnumerator)\r\n\t\t\t\t\t\t\tsharedEnumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\tsharedEnumerator.moveNext()\r\n\t\t\t\t\t&& yielder.yieldReturn(sharedEnumerator.current)\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdispose(sharedEnumerator);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\r\n\tmemoize():Enumerable\r\n\t{\r\n\t\tvar _ = this, disposed:boolean = !_.throwIfDisposed();\r\n\r\n\t\tvar cache:T[];\r\n\t\tvar enumerator:IEnumerator;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\r\n\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\tif(!enumerator)\r\n\t\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\tif(!cache)\r\n\t\t\t\t\t\t\tcache = [];\r\n\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\r\n\t\t\t\t\t\tvar i = index++;\r\n\r\n\t\t\t\t\t\tif(i>=cache.length)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn (enumerator.moveNext())\r\n\t\t\t\t\t\t\t\t? yielder.yieldReturn(cache[i] = enumerator.current)\r\n\t\t\t\t\t\t\t\t: false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn yielder.yieldReturn(cache[i]);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdisposed = true;\r\n\t\t\t\tif(cache)\r\n\t\t\t\t\tcache.length = 0;\r\n\t\t\t\tcache = null;\r\n\r\n\t\t\t\tdispose(enumerator);\r\n\t\t\t\tenumerator = null;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t// #region Error Handling\r\n\tcatchError(handler:(e:Error) => void):Enumerable\r\n\t{\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcatch(e)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// Don't init...\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\t\tif(enumerator.moveNext())\r\n\t\t\t\t\t\t\t\treturn yielder.yieldReturn(enumerator.current);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcatch(e)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\thandler(e);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tfinallyAction(action:() => void):Enumerable\r\n\t{\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar enumerator:IEnumerator;\r\n\r\n\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\tenumerator = _.getEnumerator();\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrowIfDisposed(disposed);\r\n\t\t\t\t\t\treturn (enumerator.moveNext())\r\n\t\t\t\t\t\t\t? yielder.yieldReturn(enumerator.current)\r\n\t\t\t\t\t\t\t: false;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tdispose(enumerator);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfinally\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\taction();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n}\r\n\r\n\r\nclass ArrayEnumerable\r\nextends Enumerable\r\n{\r\n\tprivate _source:IArray;\r\n\r\n\tconstructor(source:IArray)\r\n\t{\r\n\t\tsuper(() =>\r\n\t\t{\r\n\t\t\t_.throwIfDisposed();\r\n\t\t\treturn new ArrayEnumerator(() =>\r\n\t\t\t{\r\n\t\t\t\t_.throwIfDisposed(\"The underlying ArrayEnumerable was disposed.\", \"ArrayEnumerator\");\r\n\r\n\t\t\t\treturn _._source; // Could possibly be null, but ArrayEnumerable if not disposed simply treats null as empty array.\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tvar _ = this;\r\n\t\t_._disposableObjectName = \"ArrayEnumerable\";\r\n\t\t_._source = source;\r\n\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._source = null;\r\n\t}\r\n\r\n\tget source():IArray\r\n\t{\r\n\t\treturn this._source;\r\n\t}\r\n\r\n\ttoArray():T[]\r\n\t{\r\n\t\tvar s = this.source;\r\n\t\tif(!s)\r\n\t\t\treturn [];\r\n\r\n\t\tif(s instanceof Array)\r\n\t\t\treturn (s).slice();\r\n\r\n\t\tvar len = s.length, result:T[] = ArrayUtility.initialize(len);\r\n\t\tfor(let i = 0; i\r\n\t{\r\n\t\treturn new ArrayEnumerable(this._source);\r\n\t}\r\n\r\n\t// Optimize forEach so that subsequent usage is optimized.\r\n\tforEach(action:Predicate | Action):void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar source = _._source;\r\n\t\tif(source)\r\n\t\t{\r\n\r\n\t\t\t// Return value of action can be anything, but if it is (===) false then the forEach will discontinue.\r\n\t\t\tfor(let i = 0; iaction(source[i], i)===false)\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// These methods should ALWAYS check for array length before attempting anything.\r\n\r\n\tany(predicate?:Predicate):boolean\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar source = _._source, len = source ? source.length : 0;\r\n\t\treturn len && (!predicate || super.any(predicate));\r\n\t}\r\n\r\n\tcount(predicate?:Predicate):number\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar source = _._source, len = source ? source.length : 0;\r\n\t\treturn len && (predicate ? super.count(predicate) : len);\r\n\t}\r\n\r\n\telementAt(index:number):T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar source = _._source;\r\n\t\treturn (index=0)\r\n\t\t\t? source[index]\r\n\t\t\t: super.elementAt(index);\r\n\t}\r\n\r\n\telementAtOrDefault(index:number, defaultValue:T = null):T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar source = _._source;\r\n\t\treturn (index=0)\r\n\t\t\t? source[index]\r\n\t\t\t: defaultValue;\r\n\t}\r\n\r\n\tfirst():T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar source = _._source;\r\n\t\treturn (source && source.length)\r\n\t\t\t? source[0]\r\n\t\t\t: super.first();\r\n\t}\r\n\r\n\tfirstOrDefault(defaultValue:T = null):T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar source = _._source;\r\n\t\treturn (source && source.length)\r\n\t\t\t? source[0]\r\n\t\t\t: defaultValue;\r\n\t}\r\n\r\n\tlast():T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar source = _._source, len = source.length;\r\n\t\treturn (len)\r\n\t\t\t? source[len - 1]\r\n\t\t\t: super.last();\r\n\t}\r\n\r\n\tlastOrDefault(defaultValue:T = null):T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\tvar source = _._source, len = source.length;\r\n\t\treturn len\r\n\t\t\t? source[len - 1]\r\n\t\t\t: defaultValue;\r\n\t}\r\n\r\n\tskip(count:number):Enumerable\r\n\t{\r\n\r\n\t\tvar _ = this;\r\n\r\n\t\tif(!count || count<0) // Out of bounds? Simply return a unfiltered enumerable.\r\n\t\t\treturn _.asEnumerable();\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() => new ArrayEnumerator(() => _._source, count)\r\n\t\t);\r\n\t}\r\n\r\n\ttakeExceptLast(count:number = 1):Enumerable\r\n\t{\r\n\t\tvar _ = this, len = _._source ? _._source.length : 0;\r\n\t\treturn _.take(len - count);\r\n\t}\r\n\r\n\ttakeFromLast(count:number):Enumerable\r\n\t{\r\n\t\tif(!count || count<0) return Enumerable.empty();\r\n\r\n\t\tvar _ = this,\r\n\t\t len = _._source\r\n\t\t\t ? _._source.length\r\n\t\t\t : 0;\r\n\r\n\t\treturn _.skip(len - count);\r\n\t}\r\n\r\n\treverse():Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() => new ArrayEnumerator(\r\n\t\t\t\t() => _._source, _._source\r\n\t\t\t\t\t? (_._source.length - 1)\r\n\t\t\t\t\t: 0, -1\r\n\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\tmemoize():ArrayEnumerable\r\n\t{\r\n\t\treturn new ArrayEnumerable(this._source);\r\n\t}\r\n\r\n\tsequenceEqual(\r\n\t\tsecond:IEnumerable | IArray,\r\n\t\tequalityComparer:EqualityComparison = Values.areEqual):boolean\r\n\t{\r\n\t\tif(second instanceof Array)\r\n\t\t\treturn Arrays.areEqual(this.source, >second, true, equalityComparer);\r\n\r\n\t\tif(second instanceof ArrayEnumerable)\r\n\t\t\treturn (>second).sequenceEqual(this.source, equalityComparer);\r\n\r\n\t\treturn super.sequenceEqual(second, equalityComparer);\r\n\t}\r\n\r\n\r\n\ttoJoinedString(separator:string = \"\", selector:Selector = Functions.Identity)\r\n\t{\r\n\t\tvar s = this._source;\r\n\t\treturn !selector && s instanceof Array\r\n\t\t\t? (>s).join(separator)\r\n\t\t\t: super.toJoinedString(separator, selector);\r\n\t}\r\n\r\n}\r\n\r\nexport interface IGrouping\r\nextends Enumerable\r\n{\r\n\tkey: TKey;\r\n}\r\n\r\nclass Grouping\r\nextends ArrayEnumerable implements IGrouping\r\n{\r\n\r\n\tconstructor(private _groupKey:TKey, elements:TElement[])\r\n\t{\r\n\t\tsuper(elements);\r\n\t}\r\n\r\n\tget key():TKey\r\n\t{\r\n\t\treturn this._groupKey;\r\n\t}\r\n}\r\n\r\n\r\nexport interface ILookup\r\nextends IEnumerable>\r\n{\r\n\tcount: number;\r\n\tget(key:TKey): TElement[];\r\n\tcontains(key:TKey): boolean;\r\n}\r\n\r\nclass Lookup\r\nimplements ILookup\r\n{\r\n\r\n\tconstructor(private _dictionary:Dictionary)\r\n\t{\r\n\t}\r\n\r\n\tget count():number\r\n\t{\r\n\t\treturn this._dictionary.count;\r\n\t}\r\n\r\n\tget(key:TKey):TElement[]\r\n\t{\r\n\t\treturn this._dictionary.getValue(key);\r\n\t}\r\n\r\n\tcontains(key:TKey):boolean\r\n\t{\r\n\t\treturn this._dictionary.containsKey(key);\r\n\t}\r\n\r\n\tgetEnumerator():IEnumerator>\r\n\t{\r\n\r\n\t\tvar _ = this;\r\n\t\tvar enumerator:IEnumerator>;\r\n\r\n\t\treturn new EnumeratorBase>(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tenumerator = _._dictionary.getEnumerator();\r\n\t\t\t},\r\n\t\t\t(yielder)=>\r\n\t\t\t{\r\n\r\n\t\t\t\tif(!enumerator.moveNext())\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\tvar current = enumerator.current;\r\n\r\n\t\t\t\treturn yielder.yieldReturn(new Grouping(current.key, current.value));\r\n\t\t\t},\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdispose(enumerator);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n}\r\n\r\n\r\nclass WhereEnumerable\r\nextends Enumerable\r\n{\r\n\tconstructor(\r\n\t\tprivate prevSource:IEnumerable,\r\n\t\tprivate prevPredicate:Predicate // predicate.length always <= 1\r\n\t)\r\n\t{\r\n\t\tsuper(null);\r\n\t}\r\n\r\n\twhere(predicate:Predicate):Enumerable\r\n\t{\r\n\r\n\t\tif(predicate.length>1)\r\n\t\t\treturn super.where(predicate);\r\n\r\n\t\tvar prevPredicate = this.prevPredicate;\r\n\t\tvar composedPredicate = (x:T) => prevPredicate(x) && predicate(x);\r\n\t\treturn new WhereEnumerable(this.prevSource, composedPredicate);\r\n\t}\r\n\r\n\tselect(selector:Selector):Enumerable\r\n\t{\r\n\r\n\t\tif(selector.length>1)\r\n\t\t\treturn super.select(selector);\r\n\r\n\t\treturn new WhereSelectEnumerable(\r\n\t\t\tthis.prevSource,\r\n\t\t\tthis.prevPredicate,\r\n\t\t\tselector\r\n\t\t);\r\n\t}\r\n\r\n\tgetEnumerator():IEnumerator\r\n\t{\r\n\t\tvar predicate = this.prevPredicate;\r\n\t\tvar source = this.prevSource;\r\n\t\tvar enumerator:IEnumerator;\r\n\r\n\t\treturn new EnumeratorBase(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tenumerator = source.getEnumerator();\r\n\t\t\t},\r\n\r\n\t\t\t(yielder)=>\r\n\t\t\t{\r\n\t\t\t\twhile(enumerator.moveNext())\r\n\t\t\t\t{\r\n\t\t\t\t\tif(predicate(enumerator.current))\r\n\t\t\t\t\t\treturn yielder.yieldReturn(enumerator.current);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn false;\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdispose(enumerator);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis.prevPredicate = null;\r\n\t\tthis.prevSource = null;\r\n\t}\r\n}\r\n\r\nclass WhereSelectEnumerable\r\nextends Enumerable\r\n{\r\n\tconstructor(\r\n\t\tprivate prevSource:IEnumerable,\r\n\t\tprivate prevPredicate:Predicate, // predicate.length always <= 1\r\n\t\tprivate prevSelector:Selector // selector.length always <= 1\r\n\t)\r\n\t{\r\n\t\tsuper(null);\r\n\t}\r\n\r\n\twhere(predicate:(value:T, index?:number) => boolean):Enumerable\r\n\t{\r\n\t\tif(predicate.length>1)\r\n\t\t\treturn super.where(predicate);\r\n\r\n\t\treturn new WhereEnumerable(this, predicate);\r\n\t}\r\n\r\n\tselect(selector:Selector):Enumerable\r\n\t{\r\n\r\n\t\tif(selector.length>1)\r\n\t\t// if selector use index, can't compose\r\n\t\t\treturn super.select(selector);\r\n\r\n\t\tvar _ = this;\r\n\t\tvar prevSelector = _.prevSelector;\r\n\t\tvar composedSelector = (x:TSource) => selector(prevSelector(x));\r\n\t\treturn new WhereSelectEnumerable(_.prevSource, _.prevPredicate, composedSelector);\r\n\t}\r\n\r\n\tgetEnumerator():IEnumerator\r\n\t{\r\n\t\tvar _ = this,\r\n\t\t predicate = _.prevPredicate,\r\n\t\t source = _.prevSource,\r\n\t\t selector:Selector = _.prevSelector, // Type definition needed for correct inference.\r\n\t\t enumerator:IEnumerator;\r\n\r\n\t\treturn new EnumeratorBase(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tenumerator = source.getEnumerator();\r\n\t\t\t},\r\n\r\n\t\t\t(yielder)=>\r\n\t\t\t{\r\n\t\t\t\twhile(enumerator.moveNext())\r\n\t\t\t\t{\r\n\t\t\t\t\tvar c = enumerator.current;\r\n\t\t\t\t\tif(predicate==null || predicate(c))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn yielder.yieldReturn(selector(c));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t},\r\n\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tdispose(enumerator);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tsuper._onDispose();\r\n\t\t_.prevPredicate = null;\r\n\t\t_.prevSource = null;\r\n\t\t_.prevSelector = null;\r\n\t}\r\n}\r\n\r\nexport interface IOrderedEnumerable\r\nextends Enumerable\r\n{\r\n\tthenBy(keySelector:(value:T) => any):IOrderedEnumerable;\r\n\tthenByDescending(keySelector:(value:T) => any):IOrderedEnumerable;\r\n\tthenUsing(comparison:Comparison):IOrderedEnumerable;\r\n\tthenUsingReversed(comparison:Comparison):IOrderedEnumerable\r\n}\r\n\r\nclass OrderedEnumerable\r\nextends Enumerable implements IOrderedEnumerable\r\n{\r\n\r\n\tconstructor(\r\n\t\tprivate source:IEnumerable,\r\n\t\tpublic keySelector:(value:T) => TOrderBy,\r\n\t\tpublic order:Order,\r\n\t\tpublic parent?:OrderedEnumerable,\r\n\t\tpublic comparer:Comparison = Values.compare)\r\n\t{\r\n\t\tsuper(null);\r\n\t}\r\n\r\n\tprivate createOrderedEnumerable(\r\n\t\tkeySelector:(value:T) => TOrderBy,\r\n\t\torder:Order):IOrderedEnumerable\r\n\t{\r\n\t\treturn new OrderedEnumerable(this.source, keySelector, order, this);\r\n\t}\r\n\r\n\tthenBy(keySelector:(value:T) => TOrderBy):IOrderedEnumerable\r\n\t{\r\n\t\treturn this.createOrderedEnumerable(keySelector, Order.Ascending);\r\n\t}\r\n\r\n\tthenUsing(comparison:Comparison):IOrderedEnumerable {\r\n\t\treturn new OrderedEnumerable(this.source, null, Order.Ascending, this, comparison);\r\n\t}\r\n\r\n\tthenByDescending(keySelector:(value:T) => TOrderBy):IOrderedEnumerable\r\n\t{\r\n\t\treturn this.createOrderedEnumerable(keySelector, Order.Descending);\r\n\t}\r\n\r\n\tthenUsingReversed(comparison:Comparison):IOrderedEnumerable {\r\n\t\treturn new OrderedEnumerable(this.source, null, Order.Descending, this, comparison);\r\n\t}\r\n\r\n\tgetEnumerator():EnumeratorBase\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tvar buffer:T[];\r\n\t\tvar indexes:number[];\r\n\t\tvar index:number = 0;\r\n\r\n\t\treturn new EnumeratorBase(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tindex = 0;\r\n\t\t\t\tbuffer = Enumerable.toArray(_.source);\r\n\t\t\t\tindexes = createSortContext(_).generateSortedIndexes(buffer);\r\n\t\t\t},\r\n\r\n\t\t\t(yielder)=>\r\n\t\t\t{\r\n\t\t\t\treturn (index\r\n\t\t\t{\r\n\t\t\t\tif(buffer)\r\n\t\t\t\t\tbuffer.length = 0;\r\n\t\t\t\tbuffer = null;\r\n\t\t\t\tif(indexes)\r\n\t\t\t\t\tindexes.length = 0;\r\n\t\t\t\tindexes = null;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis.source = null;\r\n\t\tthis.keySelector = null;\r\n\t\tthis.order = null;\r\n\t\tthis.parent = null;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Recursively builds a SortContext chain.\r\n * @param orderedEnumerable\r\n * @param currentContext\r\n * @returns {any}\r\n */\r\nfunction createSortContext(\r\n\torderedEnumerable:OrderedEnumerable,\r\n\tcurrentContext:IComparer = null):KeySortedContext\r\n{\r\n\r\n\tvar context = new KeySortedContext(\r\n\t\tcurrentContext,\r\n\t\torderedEnumerable.keySelector,\r\n\t\torderedEnumerable.order,\r\n\t\torderedEnumerable.comparer);\r\n\r\n\tif(orderedEnumerable.parent)\r\n\t\treturn createSortContext(orderedEnumerable.parent, context);\r\n\r\n\treturn context;\r\n}\r\n\r\n// #region Helper Functions...\r\n// This allows for the use of a boolean instead of calling this.throwIfDisposed()\r\n// since there is a strong chance of introducing a circular reference.\r\nfunction throwIfDisposed(disposed:boolean, className:string = \"Enumerable\"):void\r\n{\r\n\tif(disposed) throw new ObjectDisposedException(className);\r\n}\r\n// #endregion\r\n\r\nexport default Enumerable;\r\n"]} \ No newline at end of file diff --git a/dist/commonjs/System/Collections/Array/Sort.js.map b/dist/commonjs/System/Collections/Array/Sort.js.map index e75de93a..84ea1819 100644 --- a/dist/commonjs/System/Collections/Array/Sort.js.map +++ b/dist/commonjs/System/Collections/Array/Sort.js.map @@ -1 +1 @@ -{"version":3,"sources":["System/Collections/Array/Sort.ts"],"names":["ensureArray","createComparer"],"mappings":";;;;;;;;;;;;;qBAOiB,aAAa;;;;uBACM,eAAe;;AAWnD,SAAA,WAAA,CAAwB,KAAW,EAAA;AAElCA,WAAOA,KAAKA,YAAYA,KAAKA,GACrBA,KAAKA,GACVA,CAAIA,KAAKA,CAACA,CAACA;CACdA;;AAyBD,SAAA,cAAA,CACC,QAA4C,EAEnB;QADzB,KAAK,yDAAmB,CAAe;QACvC,eAAe,yDAAO,GAAG;;AAEzBC,QAAIA,gBAAgBA,GAAGA,CAACA,mBAAKA,SAASA,CAACA,eAAeA,CAACA,CAACA;AAExDA,WAAOA,UAACA,CAAmBA,EAAEA,CAAmBA,EAAAA;AAG/CA,YAAIA,MAAMA,GAAGA,WAAWA,CAACA,QAAQA,CAACA,CAACA,CAACA,CAACA,CAACA;AACtCA,YAAIA,MAAMA,GAAGA,WAAWA,CAACA,QAAQA,CAACA,CAACA,CAACA,CAACA,CAACA;AACtCA,YAAIA,GAAGA,GAAGA,IAAIA,CAACA,GAAGA,CAACA,MAAMA,CAACA,MAAMA,EAAEA,MAAMA,CAACA,MAAMA,CAACA,CAACA;AAEjDA,YAAIA,MAAMA,GAAWA,KAAKA,YAAYA,KAAKA,GAAYA,KAAKA,GAAGA,IAAIA,CAACA;AACpEA,aAAIA,IAAIA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAACA,GAAGA,EAAEA,CAACA,EAAEA,EACzBA;AACCA,gBAAIA,EAAEA,GAAGA,MAAMA,CAACA,CAACA,CAACA;gBAAEA,EAAEA,GAAGA,MAAMA,CAACA,CAACA,CAACA;gBAC9BA,CAACA,GAAIA,MAAMA,GACPA,CAACA,GAACA,MAAMA,CAACA,MAAMA,GAAGA,MAAMA,CAACA,CAACA,CAACA,GAAGA,CAAeA,GACvCA,KAAKA,CAACA;AAEpBA,gBAAGA,gBAAgBA,EACnBA;AACCA,oBAAGA,mBAAKA,SAASA,CAACA,EAAEA,CAACA,EACpBA,EAAEA,GAAGA,eAAeA,CAACA;AACtBA,oBAAGA,mBAAKA,SAASA,CAACA,EAAEA,CAACA,EACpBA,EAAEA,GAAGA,eAAeA,CAACA;aAEtBA;AAEDA,gBAAIA,CAACA,GAAGA,sBAAQA,EAAEA,EAAEA,EAAEA,CAACA,CAACA;AACxBA,gBAAGA,CAACA,KAAGA,CAAmBA,EACzBA,OAAOA,CAACA,GAACA,CAACA,CAACA;SAEZA;AAEDA,eAAOA,CAACA,CAACA;KACTA,CAACA;CACFA;;qBAGA,cAAc;QACI,EAAE,GAApB,cAAc","file":"System/Collections/Array/Sort.js","sourcesContent":["/*\r\n * @author electricessence / https://github.com/electricessence/\r\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\r\n */\r\n\r\n///\r\n\r\nimport Type from '../../Types';\r\nimport {compare,CompareResult} from '../../Compare';\r\n\r\n/**\r\n * Enum representation of sorting order.\r\n */\r\nexport const enum Order\r\n{\r\n\tAscending = +1,\r\n\tDescending = -1\r\n}\r\n\r\nfunction ensureArray(value:T|T[]):T[]\r\n{\r\n\treturn value instanceof Array\r\n\t\t? value\r\n\t\t: [value];\r\n}\r\n\r\n/**\r\n * A factory function that creates a comparer to be used in multi-dimensional sorting.\r\n *\r\n *

Example

\r\n * ```typescript\r\n * var myArray = [{a:1:b:2},{a:3,b:4},{a:1,b:3}];\r\n *\r\n * // First sort by a, then by b.\r\n * myArray.sort(\r\n * createComparer(\r\n * (e)=> [e.a, e.b],\r\n * [Order.Ascending, Order.Descending]\r\n * )\r\n * );\r\n *\r\n * // result: [{a:1,b:3},{a:1:b:2},{a:3,b:4}]\r\n * ```\r\n *\r\n * @param selector\r\n * @param order\r\n * @param equivalentToNaN\r\n * @returns {function((TSource|TSource[]), (TSource|TSource[])): CompareResult}\r\n */\r\nexport function createComparer(\r\n\tselector:Selector,\r\n\torder:Order | Order[] = Order.Ascending,\r\n\tequivalentToNaN:any = NaN):Comparison\r\n{\r\n\tvar nanHasEquivalent = !Type.isTrueNaN(equivalentToNaN);\r\n\r\n\treturn (a:TSource|TSource[], b:TSource|TSource[]):CompareResult=>\r\n\t{\r\n\t\t// Use an array always to ensure a single code path.\r\n\t\tvar aValue = ensureArray(selector(a));\r\n\t\tvar bValue = ensureArray(selector(b));\r\n\t\tvar len = Math.min(aValue.length, bValue.length);\r\n\r\n\t\tvar oArray:Order[] = order instanceof Array ? order : null;\r\n\t\tfor(let i = 0; iorder;\r\n\r\n\t\t\tif(nanHasEquivalent)\r\n\t\t\t{\r\n\t\t\t\tif(Type.isTrueNaN(vA))\r\n\t\t\t\t\tvA = equivalentToNaN;\r\n\t\t\t\tif(Type.isTrueNaN(vB))\r\n\t\t\t\t\tvB = equivalentToNaN;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar r = compare(vA, vB);\r\n\t\t\tif(r!==CompareResult.Equal)\r\n\t\t\t\treturn o*r;\r\n\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t};\r\n}\r\n\r\nexport {\r\n\tcreateComparer as default, // Allow for default import.\r\n\tcreateComparer as by // Alias for Sort.by(...) instead of Sort.createComparer\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["System/Collections/Array/Sort.ts"],"names":["ensureArray","createComparer"],"mappings":";;;;;;;;;;;;;qBAOiB,aAAa;;;;uBACM,eAAe;;AAGnD,SAAA,WAAA,CAAwB,KAAW,EAAA;AAElCA,WAAOA,KAAKA,YAAYA,KAAKA,GACrBA,KAAKA,GACVA,CAAIA,KAAKA,CAACA,CAACA;CACdA;;AAyBD,SAAA,cAAA,CACC,QAA4C,EAEnB;QADzB,KAAK,yDAAmB,CAAe;QACvC,eAAe,yDAAO,GAAG;;AAEzBC,QAAIA,gBAAgBA,GAAGA,CAACA,mBAAKA,SAASA,CAACA,eAAeA,CAACA,CAACA;AAExDA,WAAOA,UAACA,CAAmBA,EAAEA,CAAmBA,EAAAA;AAG/CA,YAAIA,MAAMA,GAAGA,WAAWA,CAACA,QAAQA,CAACA,CAACA,CAACA,CAACA,CAACA;AACtCA,YAAIA,MAAMA,GAAGA,WAAWA,CAACA,QAAQA,CAACA,CAACA,CAACA,CAACA,CAACA;AACtCA,YAAIA,GAAGA,GAAGA,IAAIA,CAACA,GAAGA,CAACA,MAAMA,CAACA,MAAMA,EAAEA,MAAMA,CAACA,MAAMA,CAACA,CAACA;AAEjDA,YAAIA,MAAMA,GAAWA,KAAKA,YAAYA,KAAKA,GAAYA,KAAKA,GAAGA,IAAIA,CAACA;AACpEA,aAAIA,IAAIA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAACA,GAAGA,EAAEA,CAACA,EAAEA,EACzBA;AACCA,gBAAIA,EAAEA,GAAGA,MAAMA,CAACA,CAACA,CAACA;gBAAEA,EAAEA,GAAGA,MAAMA,CAACA,CAACA,CAACA;gBAC9BA,CAACA,GAAIA,MAAMA,GACPA,CAACA,GAACA,MAAMA,CAACA,MAAMA,GAAGA,MAAMA,CAACA,CAACA,CAACA,GAAGA,CAAeA,GACvCA,KAAKA,CAACA;AAEpBA,gBAAGA,gBAAgBA,EACnBA;AACCA,oBAAGA,mBAAKA,SAASA,CAACA,EAAEA,CAACA,EACpBA,EAAEA,GAAGA,eAAeA,CAACA;AACtBA,oBAAGA,mBAAKA,SAASA,CAACA,EAAEA,CAACA,EACpBA,EAAEA,GAAGA,eAAeA,CAACA;aAEtBA;AAEDA,gBAAIA,CAACA,GAAGA,sBAAQA,EAAEA,EAAEA,EAAEA,CAACA,CAACA;AACxBA,gBAAGA,CAACA,KAAGA,CAAmBA,EACzBA,OAAOA,CAACA,GAACA,CAACA,CAACA;SAEZA;AAEDA,eAAOA,CAACA,CAACA;KACTA,CAACA;CACFA;;qBAGA,cAAc;QACI,EAAE,GAApB,cAAc","file":"System/Collections/Array/Sort.js","sourcesContent":["/*\r\n * @author electricessence / https://github.com/electricessence/\r\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\r\n */\r\n\r\n///\r\n\r\nimport Type from '../../Types';\r\nimport {compare,CompareResult} from '../../Compare';\r\nimport Order from '../Sorting/Order';\r\n\r\nfunction ensureArray(value:T|T[]):T[]\r\n{\r\n\treturn value instanceof Array\r\n\t\t? value\r\n\t\t: [value];\r\n}\r\n\r\n/**\r\n * A factory function that creates a comparer to be used in multi-dimensional sorting.\r\n *\r\n *

Example

\r\n * ```typescript\r\n * var myArray = [{a:1:b:2},{a:3,b:4},{a:1,b:3}];\r\n *\r\n * // First sort by a, then by b.\r\n * myArray.sort(\r\n * createComparer(\r\n * (e)=> [e.a, e.b],\r\n * [Order.Ascending, Order.Descending]\r\n * )\r\n * );\r\n *\r\n * // result: [{a:1,b:3},{a:1:b:2},{a:3,b:4}]\r\n * ```\r\n *\r\n * @param selector\r\n * @param order\r\n * @param equivalentToNaN\r\n * @returns {function((TSource|TSource[]), (TSource|TSource[])): CompareResult}\r\n */\r\nexport function createComparer(\r\n\tselector:Selector,\r\n\torder:Order | Order[] = Order.Ascending,\r\n\tequivalentToNaN:any = NaN):Comparison\r\n{\r\n\tvar nanHasEquivalent = !Type.isTrueNaN(equivalentToNaN);\r\n\r\n\treturn (a:TSource|TSource[], b:TSource|TSource[]):CompareResult=>\r\n\t{\r\n\t\t// Use an array always to ensure a single code path.\r\n\t\tvar aValue = ensureArray(selector(a));\r\n\t\tvar bValue = ensureArray(selector(b));\r\n\t\tvar len = Math.min(aValue.length, bValue.length);\r\n\r\n\t\tvar oArray:Order[] = order instanceof Array ? order : null;\r\n\t\tfor(let i = 0; iorder;\r\n\r\n\t\t\tif(nanHasEquivalent)\r\n\t\t\t{\r\n\t\t\t\tif(Type.isTrueNaN(vA))\r\n\t\t\t\t\tvA = equivalentToNaN;\r\n\t\t\t\tif(Type.isTrueNaN(vB))\r\n\t\t\t\t\tvB = equivalentToNaN;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar r = compare(vA, vB);\r\n\t\t\tif(r!==CompareResult.Equal)\r\n\t\t\t\treturn o*r;\r\n\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t};\r\n}\r\n\r\nexport {\r\n\tcreateComparer as default, // Allow for default import.\r\n\tcreateComparer as by // Alias for Sort.by(...) instead of Sort.createComparer\r\n}\r\n"]} \ No newline at end of file diff --git a/source/System.Linq/Linq.js b/source/System.Linq/Linq.js index 5473c572..3e69088e 100644 --- a/source/System.Linq/Linq.js +++ b/source/System.Linq/Linq.js @@ -15,7 +15,7 @@ var __extends = (this && this.__extends) || function (d, b) { else if (typeof define === 'function' && define.amd) { define(deps, factory); } -})(["require", "exports", '../System/Compare', '../System/Collections/Array/Compare', '../System/Collections/Array/Utility', '../System/Collections/Enumeration/Enumerator', '../System/Types', '../System/Integer', '../System/Functions', '../System/Collections/Enumeration/ArrayEnumerator', '../System/Collections/Enumeration/EnumeratorBase', '../System/Collections/Dictionaries/Dictionary', '../System/Collections/Queue', '../System/Disposable/Utility', '../System/Disposable/DisposableBase', '../System/Disposable/ObjectDisposedException'], function (require, exports) { +})(["require", "exports", '../System/Compare', '../System/Collections/Array/Compare', '../System/Collections/Array/Utility', '../System/Collections/Enumeration/Enumerator', '../System/Types', '../System/Integer', '../System/Functions', '../System/Collections/Enumeration/ArrayEnumerator', '../System/Collections/Enumeration/EnumeratorBase', '../System/Collections/Dictionaries/Dictionary', '../System/Collections/Queue', '../System/Disposable/Utility', '../System/Disposable/DisposableBase', '../System/Disposable/ObjectDisposedException', "../System/Collections/Sorting/KeySortedContext"], function (require, exports) { /// /// /// @@ -36,6 +36,7 @@ var __extends = (this && this.__extends) || function (d, b) { var Utility_1 = require('../System/Disposable/Utility'); var DisposableBase_1 = require('../System/Disposable/DisposableBase'); var ObjectDisposedException_1 = require('../System/Disposable/ObjectDisposedException'); + var KeySortedContext_1 = require("../System/Collections/Sorting/KeySortedContext"); var enumeratorFrom = Enumerator.from; var enumeratorForEach = Enumerator.forEach; 'use strict'; @@ -323,6 +324,15 @@ var __extends = (this && this.__extends) || function (d, b) { }); } }; + Enumerable.map = function (enumerable, selector) { + return enumerable && Utility_1.using(Enumerator.from(enumerable), function (e) { + var result = []; + Enumerator.forEach(e, function (e, i) { + result[i] = selector(e); + }); + return result; + }); + }; Enumerable.max = function (values) { return values .takeUntil(function (v) { return v == +Infinity; }, true) @@ -1354,11 +1364,17 @@ var __extends = (this && this.__extends) || function (d, b) { }; Enumerable.prototype.orderBy = function (keySelector) { if (keySelector === void 0) { keySelector = Functions.Identity; } - return new OrderedEnumerable(this, keySelector, false); + return new OrderedEnumerable(this, keySelector, 1); + }; + Enumerable.prototype.orderUsing = function (comparison) { + return new OrderedEnumerable(this, null, 1, null, comparison); + }; + Enumerable.prototype.orderUsingReversed = function (comparison) { + return new OrderedEnumerable(this, null, -1, null, comparison); }; Enumerable.prototype.orderByDescending = function (keySelector) { if (keySelector === void 0) { keySelector = Functions.Identity; } - return new OrderedEnumerable(this, keySelector, true); + return new OrderedEnumerable(this, keySelector, -1); }; Enumerable.prototype.groupBy = function (keySelector, elementSelector, compareSelector) { var _ = this; @@ -2037,23 +2053,29 @@ var __extends = (this && this.__extends) || function (d, b) { })(Enumerable); var OrderedEnumerable = (function (_super) { __extends(OrderedEnumerable, _super); - function OrderedEnumerable(source, keySelector, descending, parent, comparer) { + function OrderedEnumerable(source, keySelector, order, parent, comparer) { if (comparer === void 0) { comparer = Values.compare; } _super.call(this, null); this.source = source; this.keySelector = keySelector; - this.descending = descending; + this.order = order; this.parent = parent; this.comparer = comparer; } - OrderedEnumerable.prototype.createOrderedEnumerable = function (keySelector, descending) { - return new OrderedEnumerable(this.source, keySelector, descending, this); + OrderedEnumerable.prototype.createOrderedEnumerable = function (keySelector, order) { + return new OrderedEnumerable(this.source, keySelector, order, this); }; OrderedEnumerable.prototype.thenBy = function (keySelector) { - return this.createOrderedEnumerable(keySelector, false); + return this.createOrderedEnumerable(keySelector, 1); + }; + OrderedEnumerable.prototype.thenUsing = function (comparison) { + return new OrderedEnumerable(this.source, null, 1, this, comparison); }; OrderedEnumerable.prototype.thenByDescending = function (keySelector) { - return this.createOrderedEnumerable(keySelector, true); + return this.createOrderedEnumerable(keySelector, -1); + }; + OrderedEnumerable.prototype.thenUsingReversed = function (comparison) { + return new OrderedEnumerable(this.source, null, -1, this, comparison); }; OrderedEnumerable.prototype.getEnumerator = function () { var _ = this; @@ -2062,15 +2084,8 @@ var __extends = (this && this.__extends) || function (d, b) { var index = 0; return new EnumeratorBase_1.default(function () { index = 0; - buffer = []; - indexes = []; - Enumerable.forEach(_.source, function (item, i) { - buffer[i] = item; - indexes[i] = i; - }); - var sortContext = SortContext.create(_, null, _.comparer); - sortContext.generateKeys(buffer); - indexes.sort(function (a, b) { return sortContext.compare(a, b); }); + buffer = Enumerable.toArray(_.source); + indexes = createSortContext(_).generateSortedIndexes(buffer); }, function (yielder) { return (index < indexes.length) ? yielder.yieldReturn(buffer[indexes[index++]]) @@ -2088,53 +2103,18 @@ var __extends = (this && this.__extends) || function (d, b) { _super.prototype._onDispose.call(this); this.source = null; this.keySelector = null; - this.descending = null; + this.order = null; this.parent = null; }; return OrderedEnumerable; })(Enumerable); - var SortContext = (function () { - function SortContext(keySelector, descending, child, comparison) { - if (comparison === void 0) { comparison = Values.compare; } - this.keySelector = keySelector; - this.descending = descending; - this.child = child; - this.comparison = comparison; - this.keys = null; - } - SortContext.create = function (orderedEnumerable, currentContext, comparison) { - if (currentContext === void 0) { currentContext = null; } - if (comparison === void 0) { comparison = Values.compare; } - var context = new SortContext(orderedEnumerable.keySelector, orderedEnumerable.descending, currentContext, comparison); - if (orderedEnumerable.parent) - return SortContext.create(orderedEnumerable.parent, context); - return context; - }; - SortContext.prototype.generateKeys = function (source) { - var _ = this; - var len = source.length; - var keySelector = _.keySelector; - var keys = new Array(len); - for (var i = 0; i < len; ++i) { - keys[i] = keySelector(source[i]); - } - _.keys = keys; - if (_.child) - _.child.generateKeys(source); - }; - SortContext.prototype.compare = function (index1, index2) { - var _ = this, keys = _.keys; - var comparison = _.comparison(keys[index1], keys[index2]); - if (comparison == 0) { - var child = _.child; - return child - ? child.compare(index1, index2) - : Values.compare(index1, index2); - } - return _.descending ? -comparison : comparison; - }; - return SortContext; - })(); + function createSortContext(orderedEnumerable, currentContext) { + if (currentContext === void 0) { currentContext = null; } + var context = new KeySortedContext_1.default(currentContext, orderedEnumerable.keySelector, orderedEnumerable.order, orderedEnumerable.comparer); + if (orderedEnumerable.parent) + return createSortContext(orderedEnumerable.parent, context); + return context; + } function throwIfDisposed(disposed, className) { if (className === void 0) { className = "Enumerable"; } if (disposed) diff --git a/source/System.Linq/Linq.js.map b/source/System.Linq/Linq.js.map index 0e3217df..ae2d9396 100644 --- a/source/System.Linq/Linq.js.map +++ b/source/System.Linq/Linq.js.map @@ -1 +1 @@ -{"version":3,"file":"Linq.js","sourceRoot":"","sources":["Linq.ts"],"names":["LinqFunctions","LinqFunctions.constructor","LinqFunctions.Greater","LinqFunctions.Lesser","Enumerable","Enumerable.constructor","Enumerable.fromArray","Enumerable.from","Enumerable.toArray","Enumerable.getEnumerator","Enumerable._onDispose","Enumerable.choice","Enumerable.cycle","Enumerable.empty","Enumerable.repeat","Enumerable.repeatWithFinalize","Enumerable.make","Enumerable.range","Enumerable.rangeDown","Enumerable.toInfinity","Enumerable.toNegativeInfinity","Enumerable.rangeTo","Enumerable.matches","Enumerable.generate","Enumerable.unfold","Enumerable.defer","Enumerable.forEach","Enumerable.max","Enumerable.min","Enumerable.asEnumerable","Enumerable.toLookup","Enumerable.toMap","Enumerable.toDictionary","Enumerable.toJoinedString","Enumerable.doAction","Enumerable.force","Enumerable.skip","Enumerable.skipWhile","Enumerable.take","Enumerable.takeWhile","Enumerable.takeUntil","Enumerable.takeExceptLast","Enumerable.takeFromLast","Enumerable.traverseBreadthFirst","Enumerable.traverseDepthFirst","Enumerable.flatten","Enumerable.pairwise","Enumerable.scan","Enumerable.select","Enumerable.selectMany","Enumerable.choose","Enumerable.where","Enumerable.ofType","Enumerable.except","Enumerable.distinct","Enumerable.distinctUntilChanged","Enumerable.reverse","Enumerable.shuffle","Enumerable.count","Enumerable.all","Enumerable.every","Enumerable.any","Enumerable.some","Enumerable.isEmpty","Enumerable.contains","Enumerable.indexOf","Enumerable.lastIndexOf","Enumerable.defaultIfEmpty","Enumerable.zip","Enumerable.zipMultiple","Enumerable.join","Enumerable.groupJoin","Enumerable.concatWith","Enumerable.merge","Enumerable.concat","Enumerable.insertAt","Enumerable.alternateMultiple","Enumerable.alternateSingle","Enumerable.alternate","Enumerable.intersect","Enumerable.sequenceEqual","Enumerable.union","Enumerable.orderBy","Enumerable.orderByDescending","Enumerable.groupBy","Enumerable.partitionBy","Enumerable.buffer","Enumerable.aggregate","Enumerable.average","Enumerable.maxBy","Enumerable.minBy","Enumerable.sum","Enumerable.product","Enumerable.elementAt","Enumerable.elementAtOrDefault","Enumerable.first","Enumerable.firstOrDefault","Enumerable.last","Enumerable.lastOrDefault","Enumerable.single","Enumerable.singleOrDefault","Enumerable.share","Enumerable.memoize","Enumerable.catchError","Enumerable.finallyAction","ArrayEnumerable","ArrayEnumerable.constructor","ArrayEnumerable._onDispose","ArrayEnumerable.source","ArrayEnumerable.toArray","ArrayEnumerable.asEnumerable","ArrayEnumerable.forEach","ArrayEnumerable.any","ArrayEnumerable.count","ArrayEnumerable.elementAt","ArrayEnumerable.elementAtOrDefault","ArrayEnumerable.first","ArrayEnumerable.firstOrDefault","ArrayEnumerable.last","ArrayEnumerable.lastOrDefault","ArrayEnumerable.skip","ArrayEnumerable.takeExceptLast","ArrayEnumerable.takeFromLast","ArrayEnumerable.reverse","ArrayEnumerable.memoize","ArrayEnumerable.sequenceEqual","ArrayEnumerable.toJoinedString","Grouping","Grouping.constructor","Grouping.key","Lookup","Lookup.constructor","Lookup.count","Lookup.get","Lookup.contains","Lookup.getEnumerator","WhereEnumerable","WhereEnumerable.constructor","WhereEnumerable.where","WhereEnumerable.select","WhereEnumerable.getEnumerator","WhereEnumerable._onDispose","WhereSelectEnumerable","WhereSelectEnumerable.constructor","WhereSelectEnumerable.where","WhereSelectEnumerable.select","WhereSelectEnumerable.getEnumerator","WhereSelectEnumerable._onDispose","OrderedEnumerable","OrderedEnumerable.constructor","OrderedEnumerable.createOrderedEnumerable","OrderedEnumerable.thenBy","OrderedEnumerable.thenByDescending","OrderedEnumerable.getEnumerator","OrderedEnumerable._onDispose","SortContext","SortContext.constructor","SortContext.create","SortContext.generateKeys","SortContext.compare","throwIfDisposed"],"mappings":"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,CAACA;gBACAA,CAACA,CAACA,OAAOA,CAACA,UAACA,CAACA,EAAEA,CAACA;oBAEdA,EAAEA,CAAAA,CAACA,SAASA,CAACA,CAACA,EAAEA,CAACA,CAACA,CAACA;wBAAAA,EAAEA,KAAKA,CAACA;gBAC5BA,CAACA,CAACA,CAACA;YACJA,CAACA;YACDA,IAAIA,CACJA,CAACA;gBACAA,CAACA,CAACA,OAAOA,CAACA;oBAETA,EAAEA,KAAKA,CAACA;gBACTA,CAACA,CAACA,CAACA;YACJA,CAACA;YAEDA,MAAMA,CAACA,KAAKA,CAACA;QACdA,CAACA;QAGDtD,wBAAGA,GAAHA,UAAIA,SAAsBA;YAEzBuD,IAAIA,MAAMA,GAAGA,IAAIA,CAACA;YAClBA,IAAIA,CAACA,OAAOA,CAACA,UAAAA,CAACA;gBAEbA,EAAEA,CAAAA,CAACA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,CACjBA,CAACA;oBACAA,MAAMA,GAAGA,KAAKA,CAACA;oBACfA,MAAMA,CAACA,KAAKA,CAACA;gBACdA,CAACA;YACFA,CAACA,CAACA,CAACA;YACHA,MAAMA,CAACA,MAAMA,CAACA;QACfA,CAACA;QAGDvD,0BAAKA,GAALA,UAAMA,SAAsBA;YAE3BwD,MAAMA,CAACA,IAAIA,CAACA,GAAGA,CAACA,SAASA,CAACA,CAACA;QAC5BA,CAACA;QAGDxD,wBAAGA,GAAHA,UAAIA,SAAuBA;YAE1ByD,IAAIA,MAAMA,GAAGA,KAAKA,CAACA;YAInBA,EAAEA,CAAAA,CAACA,SAASA,CAACA,CACbA,CAACA;gBACAA,IAAIA,CAACA,OAAOA,CAACA,UAAAA,CAACA;oBAEbA,MAAMA,GAAGA,SAASA,CAACA,CAACA,CAACA,CAACA;oBACtBA,MAAMA,CAACA,CAACA,MAAMA,CAACA;gBAChBA,CAACA,CAACA,CAACA;YACJA,CAACA;YACDA,IAAIA,CACJA,CAACA;gBACAA,IAAIA,CAACA,OAAOA,CAACA;oBAEZA,MAAMA,GAAGA,IAAIA,CAACA;oBACdA,MAAMA,CAACA,KAAKA,CAACA;gBACdA,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"} \ No newline at end of file +{"version":3,"file":"Linq.js","sourceRoot":"","sources":["Linq.ts"],"names":["LinqFunctions","LinqFunctions.constructor","LinqFunctions.Greater","LinqFunctions.Lesser","Enumerable","Enumerable.constructor","Enumerable.fromArray","Enumerable.from","Enumerable.toArray","Enumerable.getEnumerator","Enumerable._onDispose","Enumerable.choice","Enumerable.cycle","Enumerable.empty","Enumerable.repeat","Enumerable.repeatWithFinalize","Enumerable.make","Enumerable.range","Enumerable.rangeDown","Enumerable.toInfinity","Enumerable.toNegativeInfinity","Enumerable.rangeTo","Enumerable.matches","Enumerable.generate","Enumerable.unfold","Enumerable.defer","Enumerable.forEach","Enumerable.map","Enumerable.max","Enumerable.min","Enumerable.asEnumerable","Enumerable.toLookup","Enumerable.toMap","Enumerable.toDictionary","Enumerable.toJoinedString","Enumerable.doAction","Enumerable.force","Enumerable.skip","Enumerable.skipWhile","Enumerable.take","Enumerable.takeWhile","Enumerable.takeUntil","Enumerable.takeExceptLast","Enumerable.takeFromLast","Enumerable.traverseBreadthFirst","Enumerable.traverseDepthFirst","Enumerable.flatten","Enumerable.pairwise","Enumerable.scan","Enumerable.select","Enumerable.selectMany","Enumerable.choose","Enumerable.where","Enumerable.ofType","Enumerable.except","Enumerable.distinct","Enumerable.distinctUntilChanged","Enumerable.reverse","Enumerable.shuffle","Enumerable.count","Enumerable.all","Enumerable.every","Enumerable.any","Enumerable.some","Enumerable.isEmpty","Enumerable.contains","Enumerable.indexOf","Enumerable.lastIndexOf","Enumerable.defaultIfEmpty","Enumerable.zip","Enumerable.zipMultiple","Enumerable.join","Enumerable.groupJoin","Enumerable.concatWith","Enumerable.merge","Enumerable.concat","Enumerable.insertAt","Enumerable.alternateMultiple","Enumerable.alternateSingle","Enumerable.alternate","Enumerable.intersect","Enumerable.sequenceEqual","Enumerable.union","Enumerable.orderBy","Enumerable.orderUsing","Enumerable.orderUsingReversed","Enumerable.orderByDescending","Enumerable.groupBy","Enumerable.partitionBy","Enumerable.buffer","Enumerable.aggregate","Enumerable.average","Enumerable.maxBy","Enumerable.minBy","Enumerable.sum","Enumerable.product","Enumerable.elementAt","Enumerable.elementAtOrDefault","Enumerable.first","Enumerable.firstOrDefault","Enumerable.last","Enumerable.lastOrDefault","Enumerable.single","Enumerable.singleOrDefault","Enumerable.share","Enumerable.memoize","Enumerable.catchError","Enumerable.finallyAction","ArrayEnumerable","ArrayEnumerable.constructor","ArrayEnumerable._onDispose","ArrayEnumerable.source","ArrayEnumerable.toArray","ArrayEnumerable.asEnumerable","ArrayEnumerable.forEach","ArrayEnumerable.any","ArrayEnumerable.count","ArrayEnumerable.elementAt","ArrayEnumerable.elementAtOrDefault","ArrayEnumerable.first","ArrayEnumerable.firstOrDefault","ArrayEnumerable.last","ArrayEnumerable.lastOrDefault","ArrayEnumerable.skip","ArrayEnumerable.takeExceptLast","ArrayEnumerable.takeFromLast","ArrayEnumerable.reverse","ArrayEnumerable.memoize","ArrayEnumerable.sequenceEqual","ArrayEnumerable.toJoinedString","Grouping","Grouping.constructor","Grouping.key","Lookup","Lookup.constructor","Lookup.count","Lookup.get","Lookup.contains","Lookup.getEnumerator","WhereEnumerable","WhereEnumerable.constructor","WhereEnumerable.where","WhereEnumerable.select","WhereEnumerable.getEnumerator","WhereEnumerable._onDispose","WhereSelectEnumerable","WhereSelectEnumerable.constructor","WhereSelectEnumerable.where","WhereSelectEnumerable.select","WhereSelectEnumerable.getEnumerator","WhereSelectEnumerable._onDispose","OrderedEnumerable","OrderedEnumerable.constructor","OrderedEnumerable.createOrderedEnumerable","OrderedEnumerable.thenBy","OrderedEnumerable.thenUsing","OrderedEnumerable.thenByDescending","OrderedEnumerable.thenUsingReversed","OrderedEnumerable.getEnumerator","OrderedEnumerable._onDispose","createSortContext","throwIfDisposed"],"mappings":"AAAA;;;;GAIG;;;;;;;;;;;;;;IAEH,+CAA+C;IAC/C,mDAAmD;IACnD,8DAA8D;IAC9D,yEAAyE;IACzE,yEAAyE;IACzE,0EAA0E;IAC1E,IAAY,MAAM,WAAM,mBAAmB,CAAC,CAAA;IAC5C,IAAY,MAAM,WAAM,qCAAqC,CAAC,CAAA;IAC9D,IAAY,YAAY,WAAM,qCAAqC,CAAC,CAAA;IACpE,IAAY,UAAU,WAAM,8CAA8C,CAAC,CAAA;IAC3E,sBAAiB,iBAAiB,CAAC,CAAA;IACnC,wBAAoB,mBAAmB,CAAC,CAAA;IACxC,0BAA0B,qBAAqB,CAAC,CAAA;IAChD,gCAA4B,mDAAmD,CAAC,CAAA;IAChF,+BAA2B,kDAAkD,CAAC,CAAA;IAC9E,2BAAuB,+CAA+C,CAAC,CAAA;IACvE,sBAAkB,6BAA6B,CAAC,CAAA;IAChD,wBAA2C,8BAA8B,CAAC,CAAA;IAC1E,+BAA2B,qCAAqC,CAAC,CAAA;IAEjE,wCAAoC,8CAA8C,CAAC,CAAA;IAEnF,iCAA6B,gDAAgD,CAAC,CAAA;IAE9E,IAAO,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC;IACxC,IAAO,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC;IAK9C,YAAY,CAAC;IAIb;QAA4BA,iCAAaA;QAAzCA;YAA4BC,8BAAaA;QAWzCA,CAACA;QATAD,+BAAOA,GAAPA,UAAWA,CAAGA,EAAEA,CAAGA;YAElBE,MAAMA,CAACA,CAACA,GAACA,CAACA,GAAGA,CAACA,GAAGA,CAACA,CAACA;QACpBA,CAACA;QAEDF,8BAAMA,GAANA,UAAUA,CAAGA,EAAEA,CAAGA;YAEjBG,MAAMA,CAACA,CAACA,GAACA,CAACA,GAAGA,CAACA,GAAGA,CAACA,CAACA;QACpBA,CAACA;QACFH,oBAACA;IAADA,CAACA,AAXD,EAA4B,mBAAa,EAWxC;IAED,IAAI,SAAS,GAAG,IAAI,aAAa,EAAE,CAAC;IACpC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEzB,IACC,MAAM,GAAmB,QAAQ,EACjC,cAAc,GAAG,eAAe,EAChC,sBAAsB,GAAG,yBAAyB,CAAC;IAqBpD;QACQI,8BAAcA;QAGrBA,oBACWA,kBAAuCA,EACjDA,SAAqBA;YAErBC,kBAAMA,SAASA,CAACA,CAACA;YAHPA,uBAAkBA,GAAlBA,kBAAkBA,CAAqBA;QAIlDA,CAACA;QAKMD,oBAASA,GAAhBA,UAAoBA,KAAeA;YAElCE,MAAMA,CAACA,IAAIA,eAAeA,CAAIA,KAAKA,CAACA,CAACA;QACtCA,CAACA;QAOMF,eAAIA,GAAXA,UAAeA,MAAiCA;YAE/CG,IAAIA,IAAIA,GAAGA,eAAIA,CAACA,EAAEA,CAACA,MAAMA,CAACA,CAACA;YAC3BA,EAAEA,CAAAA,CAACA,IAAIA,CAACA,QAAQA,CAACA,CACjBA,CAACA;gBACAA,EAAEA,CAAAA,CAACA,MAAMA,YAAYA,UAAUA,CAACA;oBAC/BA,MAAMA,CAACA,MAAMA,CAACA;gBAEfA,EAAEA,CAAAA,CAACA,MAAMA,YAAYA,KAAKA,CAACA;oBAC1BA,MAAMA,CAACA,IAAIA,eAAeA,CAAIA,MAAMA,CAACA,CAACA;gBAEvCA,EAAEA,CAAAA,CAACA,IAAIA,CAACA,MAAMA,CAACA,cAAcA,CAACA,CAACA,UAAUA,CAACA;oBACzCA,MAAMA,CAACA,IAAIA,UAAUA,CAACA,cAAIA,OAAiBA,MAAOA,CAACA,aAAaA,EAAEA,EAAxCA,CAAwCA,CAACA,CAACA;gBAErEA,EAAEA,CAAAA,CAACA,IAAIA,CAACA,MAAMA,CAACA,MAAMA,CAACA,CAACA,aAAaA,CAACA;oBACpCA,MAAMA,CAACA,IAAIA,eAAeA,CAAeA,MAAMA,CAACA,CAACA;YACnDA,CAACA;YAEDA,MAAMA,IAAIA,KAAKA,CAACA,sBAAsBA,CAACA,CAACA;QACzCA,CAACA;QAEMH,kBAAOA,GAAdA,UAAkBA,MAAiCA;YAElDI,IAAIA,IAAIA,GAAGA,eAAIA,CAACA,EAAEA,CAACA,MAAMA,CAACA,CAACA;YAC3BA,EAAEA,CAAAA,CAACA,IAAIA,CAACA,QAAQA,CAACA,CACjBA,CAACA;gBACAA,EAAEA,CAAAA,CAACA,MAAMA,YAAYA,KAAKA,CAACA;oBAC1BA,MAAMA,CAACA,MAAMA,CAACA,KAAKA,EAAEA,CAACA;gBAEvBA,EAAEA,CAAAA,CAACA,IAAIA,CAACA,MAAMA,CAACA,MAAMA,CAACA,CAACA,aAAaA,CAACA;oBACpCA,MAAMA,GAAGA,IAAIA,eAAeA,CAAeA,MAAMA,CAACA,CAACA;gBAEpDA,EAAEA,CAAAA,CAACA,MAAMA,YAAYA,UAAUA,CAACA;oBAC/BA,MAAMA,CAACA,MAAMA,CAACA,OAAOA,EAAEA,CAACA;gBAEzBA,EAAEA,CAAAA,CAACA,IAAIA,CAACA,MAAMA,CAACA,cAAcA,CAACA,CAACA,UAAUA,CAACA,CAC1CA,CAACA;oBACAA,IAAIA,MAAMA,GAAOA,EAAEA,CAACA;oBACpBA,iBAAiBA,CACCA,MAAOA,CAACA,aAAaA,EAAEA,EAAEA,UAACA,CAACA,EAAEA,CAACA;wBAE9CA,MAAMA,CAACA,CAACA,CAACA,GAAGA,CAACA,CAACA;oBACfA,CAACA,CACDA,CAACA;oBACFA,MAAMA,CAACA,MAAMA,CAACA;gBACfA,CAACA;YACFA,CAACA;YAEDA,MAAMA,IAAIA,KAAKA,CAACA,sBAAsBA,CAACA,CAACA;QACzCA,CAACA;QAIDJ,kCAAaA,GAAbA;YAGCK,IAAIA,CAACA,eAAeA,EAAEA,CAACA;YAEvBA,MAAMA,CAACA,IAAIA,CAACA,kBAAkBA,EAAEA,CAACA;QAClCA,CAACA;QAKSL,+BAAUA,GAApBA;YAECM,gBAAKA,CAACA,UAAUA,WAAEA,CAACA;YACnBA,IAAIA,CAACA,kBAAkBA,GAAGA,IAAIA,CAACA;QAChCA,CAACA;QAMMN,iBAAMA,GAAbA,UAAiBA,MAAgBA;YAEhCO,MAAMA,CAACA,IAAIA,UAAUA,CACpBA,cAAMA,OAAAA,IAAIA,wBAAcA,CACvBA,IAAIA,EACJA,UAACA,OAAOA;uBACPA,OAAOA,CAACA,WAAWA,CAACA,MAAMA,CAACA,iBAAOA,CAACA,MAAMA,CAACA,MAAMA,CAACA,MAAMA,CAACA,CAACA,CAACA;YAA1DA,CAA0DA,CAC3DA,EAJKA,CAILA,CACDA,CAACA;QACHA,CAACA;QAEMP,gBAAKA,GAAZA,UAAgBA,MAAgBA;YAE/BQ,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAECA,IAAIA,KAAKA,GAAUA,CAACA,CAACA;gBACrBA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;oBAECA,KAAKA,GAAGA,CAACA,CAACA;gBACXA,CAACA,EACDA,UAACA,OAAOA;oBAEPA,EAAEA,CAAAA,CAACA,KAAKA,IAAEA,MAAMA,CAACA,MAAMA,CAACA;wBAACA,KAAKA,GAAGA,CAACA,CAACA;oBACnCA,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAACA,MAAMA,CAACA,KAAKA,EAAEA,CAACA,CAACA,CAACA;gBAC7CA,CAACA,CACDA,CAACA;YACHA,CAACA,CACDA,CAACA;QACHA,CAACA;QAEMR,gBAAKA,GAAZA;YAECS,MAAMA,CAACA,IAAIA,UAAUA,CACpBA,cAAMA,OAAAA,IAAIA,wBAAcA,CACvBA,IAAIA,EACJA,SAASA,CAACA,KAAKA,CACfA,EAHKA,CAGLA,CACDA,CAACA;QACHA,CAACA;QAEMT,iBAAMA,GAAbA,UAAiBA,OAASA,EAAEA,KAAuBA;YAAvBU,qBAAuBA,GAAvBA,gBAAuBA;YAElDA,EAAEA,CAAAA,CAACA,KAAKA,CAACA,KAAKA,CAACA,IAAIA,KAAKA,IAAEA,CAACA,CAACA;gBAC3BA,MAAMA,CAACA,UAAUA,CAACA,KAAKA,EAAKA,CAACA;YAE9BA,MAAMA,CAACA,QAAQA,CAACA,KAAKA,CAACA,IAAIA,iBAAOA,CAACA,MAAMA,CAACA,KAAKA,EAAEA,OAAOA,CAACA;kBACrDA,IAAIA,UAAUA,CAChBA;oBAECA,IAAIA,CAACA,GAAUA,KAAKA,CAACA;oBACrBA,IAAIA,KAAKA,GAAUA,CAACA,CAACA;oBAErBA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;wBAECA,KAAKA,GAAGA,CAACA,CAACA;oBACXA,CAACA,EAEDA,UAACA,OAAOA,IAAIA,OAAAA,CAACA,KAAKA,EAAEA,GAACA,CAACA,CAACA,IAAIA,OAAOA,CAACA,WAAWA,CAACA,OAAOA,CAACA,EAA3CA,CAA2CA,CACvDA,CAACA;gBACHA,CAACA,CACDA;kBACEA,IAAIA,UAAUA,CAChBA;2BACCA,IAAIA,wBAAcA,CACjBA,IAAIA,EACJA,UAACA,OAAOA,IAAIA,OAAAA,OAAOA,CAACA,WAAWA,CAACA,OAAOA,CAACA,EAA5BA,CAA4BA,CACxCA;gBAHDA,CAGCA,CACFA,CAACA;QACHA,CAACA;QAGMV,6BAAkBA,GAAzBA,UACCA,WAAmBA,EACnBA,SAA6BA;YAG7BW,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAECA,IAAIA,OAASA,CAACA;gBACdA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;oBAECA,OAAOA,GAAGA,WAAWA,EAAEA,CAACA;gBACzBA,CAACA,EAEDA,UAACA,OAAOA,IAAIA,OAAAA,OAAOA,CAACA,WAAWA,CAACA,OAAOA,CAACA,EAA5BA,CAA4BA,EAExCA;oBAECA,SAASA,CAACA,OAAOA,CAACA,CAACA;gBACpBA,CAACA,CACDA,CAACA;YACHA,CAACA,CACDA,CAACA;QACHA,CAACA;QAEMX,eAAIA,GAAXA,UAAeA,OAASA;YAEvBY,MAAMA,CAACA,UAAUA,CAACA,MAAMA,CAAIA,OAAOA,EAAEA,CAACA,CAACA,CAACA;QACzCA,CAACA;QAGMZ,gBAAKA,GAAZA,UACCA,KAAgBA,EAChBA,KAAuBA,EACvBA,IAAeA;YAFfa,qBAAgBA,GAAhBA,SAAgBA;YAChBA,qBAAuBA,GAAvBA,gBAAuBA;YACvBA,oBAAeA,GAAfA,QAAeA;YAGfA,EAAEA,CAAAA,CAACA,CAACA,QAAQA,CAACA,KAAKA,CAACA,CAACA;gBACnBA,MAAMA,IAAIA,KAAKA,CAACA,kCAAkCA,CAACA,CAACA;YAErDA,EAAEA,CAAAA,CAACA,KAAKA,CAACA,KAAKA,CAACA,IAAIA,KAAKA,IAAEA,CAACA,CAACA;gBAC3BA,MAAMA,CAACA,UAAUA,CAACA,KAAKA,EAAUA,CAACA;YAEnCA,EAAEA,CAAAA,CAACA,CAACA,QAAQA,CAACA,IAAIA,CAACA,CAACA;gBAClBA,MAAMA,IAAIA,KAAKA,CAACA,iCAAiCA,CAACA,CAACA;YAEpDA,MAAMA,CAACA,QAAQA,CAACA,KAAKA,CAACA,IAAIA,iBAAOA,CAACA,MAAMA,CAACA,KAAKA,EAAEA,OAAOA,CAACA;kBACrDA,IAAIA,UAAUA,CAChBA;oBAECA,IAAIA,KAAYA,CAACA;oBACjBA,IAAIA,CAACA,GAAUA,KAAKA,CAACA;oBACrBA,IAAIA,KAAKA,GAAUA,CAACA,CAACA;oBAErBA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;wBAECA,KAAKA,GAAGA,CAACA,CAACA;wBACVA,KAAKA,GAAGA,KAAKA,CAACA;oBACfA,CAACA,EAEDA,UAACA,OAAOA;wBAEPA,IAAIA,MAAMA,GACLA,KAAKA,EAAEA,GAACA,CAACA;+BACNA,OAAOA,CAACA,WAAWA,CAACA,KAAKA,CAACA,CAACA;wBAEnCA,EAAEA,CAAAA,CAACA,MAAMA,IAAIA,KAAKA,GAACA,KAAKA,CAACA;4BACxBA,KAAKA,IAAIA,IAAIA,CAACA;wBAEfA,MAAMA,CAACA,MAAMA,CAACA;oBACfA,CAACA,CACDA,CAACA;gBACHA,CAACA,CAACA;kBAEAA,IAAIA,UAAUA,CAChBA;oBAECA,IAAIA,KAAYA,CAACA;oBAEjBA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;wBAECA,KAAKA,GAAGA,KAAKA,CAACA;oBACfA,CAACA,EAEDA,UAACA,OAAOA;wBAEPA,IAAIA,OAAOA,GAAUA,KAAKA,CAACA;wBAC3BA,KAAKA,IAAIA,IAAIA,CAACA;wBACdA,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAACA,OAAOA,CAACA,CAACA;oBACrCA,CAACA,CACDA,CAACA;gBACHA,CAACA,CACDA,CAACA;QACHA,CAACA;QAEMb,oBAASA,GAAhBA,UACCA,KAAgBA,EAChBA,KAAuBA,EACvBA,IAAeA;YAFfc,qBAAgBA,GAAhBA,SAAgBA;YAChBA,qBAAuBA,GAAvBA,gBAAuBA;YACvBA,oBAAeA,GAAfA,QAAeA;YAEfA,IAAIA,GAAGA,IAAIA,CAACA,GAAGA,CAACA,IAAIA,CAACA,GAAEA,CAACA,CAACA,CAACA;YAE1BA,MAAMA,CAACA,UAAUA,CAACA,KAAKA,CAACA,KAAKA,EAAEA,KAAKA,EAAEA,IAAIA,CAACA,CAACA;QAC7CA,CAACA;QAGMd,qBAAUA,GAAjBA,UACCA,KAAgBA,EAChBA,IAAeA;YADfe,qBAAgBA,GAAhBA,SAAgBA;YAChBA,oBAAeA,GAAfA,QAAeA;YAEfA,MAAMA,CAACA,UAAUA,CAACA,KAAKA,CAACA,KAAKA,EAAEA,QAAQA,EAAEA,IAAIA,CAACA,CAACA;QAChDA,CAACA;QAEMf,6BAAkBA,GAAzBA,UACCA,KAAgBA,EAChBA,IAAeA;YADfgB,qBAAgBA,GAAhBA,SAAgBA;YAChBA,oBAAeA,GAAfA,QAAeA;YAEfA,MAAMA,CAACA,UAAUA,CAACA,SAASA,CAACA,KAAKA,EAAEA,QAAQA,EAAEA,IAAIA,CAACA,CAACA;QACpDA,CAACA;QAEMhB,kBAAOA,GAAdA,UACCA,KAAgBA,EAChBA,EAAoBA,EACpBA,IAAeA;YAFfiB,qBAAgBA,GAAhBA,SAAgBA;YAChBA,kBAAoBA,GAApBA,aAAoBA;YACpBA,oBAAeA,GAAfA,QAAeA;YAEfA,EAAEA,CAAAA,CAACA,CAACA,QAAQA,CAACA,KAAKA,CAACA,CAACA;gBACnBA,MAAMA,IAAIA,KAAKA,CAACA,kCAAkCA,CAACA,CAACA;YAErDA,EAAEA,CAAAA,CAACA,KAAKA,CAACA,EAAEA,CAACA,CAACA;gBACZA,MAAMA,IAAIA,KAAKA,CAACA,+BAA+BA,CAACA,CAACA;YAElDA,EAAEA,CAAAA,CAACA,CAACA,QAAQA,CAACA,IAAIA,CAACA,CAACA;gBAClBA,MAAMA,IAAIA,KAAKA,CAACA,iCAAiCA,CAACA,CAACA;YAGpDA,IAAIA,GAAGA,IAAIA,CAACA,GAAGA,CAACA,IAAIA,CAACA,CAACA;YAGtBA,EAAEA,CAAAA,CAACA,CAACA,QAAQA,CAACA,EAAEA,CAACA,CAACA;gBAChBA,MAAMA,CAACA,UAAUA,CAACA,KAAKA,CAACA,KAAKA,EAAEA,QAAQA,EAAEA,CAACA,KAAKA,GAACA,EAAEA,CAACA,GAAGA,CAACA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA,IAAIA,CAACA,CAACA,CAACA;YAE1EA,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAECA,IAAIA,KAAYA,CAACA;gBAEjBA,MAAMA,CAACA,KAAKA,GAACA,EAAEA;sBAEZA,IAAIA,wBAAcA,CACpBA;wBAECA,KAAKA,GAAGA,KAAKA,CAACA;oBACfA,CAACA,EAEDA,UAACA,OAAOA;wBAEPA,IAAIA,MAAMA,GAAWA,KAAKA,IAAEA,EAAEA,IAAIA,OAAOA,CAACA,WAAWA,CAACA,KAAKA,CAACA,CAACA;wBAE7DA,EAAEA,CAAAA,CAACA,MAAMA,CAACA;4BACTA,KAAKA,IAAIA,IAAIA,CAACA;wBAEfA,MAAMA,CAACA,MAAMA,CAACA;oBACfA,CAACA,CAACA;sBAEAA,IAAIA,wBAAcA,CACpBA;wBAECA,KAAKA,GAAGA,KAAKA,CAACA;oBACfA,CAACA,EAEDA,UAACA,OAAOA;wBAEPA,IAAIA,MAAMA,GAAWA,KAAKA,IAAEA,EAAEA,IAAIA,OAAOA,CAACA,WAAWA,CAACA,KAAKA,CAACA,CAACA;wBAE7DA,EAAEA,CAAAA,CAACA,MAAMA,CAACA;4BACTA,KAAKA,IAAIA,IAAIA,CAACA;wBAEfA,MAAMA,CAACA,MAAMA,CAACA;oBACfA,CAACA,CACDA,CAACA;YACHA,CAACA,CACDA,CAACA;QACHA,CAACA;QAEMjB,kBAAOA,GAAdA,UAAeA,KAAYA,EAAEA,OAAWA,EAAEA,KAAiBA;YAAjBkB,qBAAiBA,GAAjBA,UAAiBA;YAG1DA,IAAIA,IAAIA,GAAGA,OAAOA,KAAKA,CAACA;YACxBA,EAAEA,CAAAA,CAACA,IAAIA,IAAEA,eAAIA,CAACA,MAAMA,CAACA;gBACpBA,MAAMA,IAAIA,KAAKA,CAACA,sCAAsCA,GAAGA,IAAIA,GAAGA,IAAIA,CAACA,CAACA;YAEvEA,EAAEA,CAAAA,CAACA,OAAOA,YAAYA,MAAMA,CAACA,CAC7BA,CAACA;gBACAA,KAAKA,IAAIA,CAACA,OAAOA,CAACA,UAAUA,CAACA,GAAGA,GAAGA,GAAGA,EAAEA,CAACA;gBACzCA,KAAKA,IAAIA,CAACA,OAAOA,CAACA,SAASA,CAACA,GAAGA,GAAGA,GAAGA,EAAEA,CAACA;gBACxCA,OAAOA,GAAGA,OAAOA,CAACA,MAAMA,CAACA;YAC1BA,CAACA;YAEDA,EAAEA,CAAAA,CAACA,KAAKA,CAACA,OAAOA,CAACA,GAAGA,CAACA,KAAIA,CAACA,CAACA,CAACA;gBAACA,KAAKA,IAAIA,GAAGA,CAACA;YAE1CA,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAECA,IAAIA,KAAYA,CAACA;gBACjBA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;oBAECA,KAAKA,GAAGA,IAAIA,MAAMA,CAACA,OAAOA,EAAEA,KAAKA,CAACA,CAACA;gBACpCA,CAACA,EAEDA,UAACA,OAAOA;oBAGPA,IAAIA,KAAKA,GAAGA,KAAKA,CAACA,IAAIA,CAACA,KAAKA,CAACA,CAACA;oBAC9BA,MAAMA,CAACA,CAACA,KAAKA,KAAGA,IAAIA,CAACA,GAAGA,OAAOA,CAACA,WAAWA,CAACA,KAAKA,CAACA,GAAGA,KAAKA,CAACA;gBAC5DA,CAACA,CACDA,CAACA;YACHA,CAACA,CACDA,CAACA;QACHA,CAACA;QAEMlB,mBAAQA,GAAfA,UAAmBA,OAA4BA,EAAEA,KAAuBA;YAAvBmB,qBAAuBA,GAAvBA,gBAAuBA;YAGvEA,EAAEA,CAAAA,CAACA,KAAKA,CAACA,KAAKA,CAACA,IAAIA,KAAKA,IAAEA,CAACA,CAACA;gBAC3BA,MAAMA,CAACA,UAAUA,CAACA,KAAKA,EAAKA,CAACA;YAE9BA,MAAMA,CAACA,QAAQA,CAACA,KAAKA,CAACA,IAAIA,iBAAOA,CAACA,MAAMA,CAACA,KAAKA,EAAEA,OAAOA,CAACA;kBAErDA,IAAIA,UAAUA,CAChBA;oBAECA,IAAIA,CAACA,GAAUA,KAAKA,CAACA;oBACrBA,IAAIA,KAAKA,GAAUA,CAACA,CAACA;oBAErBA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;wBAECA,KAAKA,GAAGA,CAACA,CAACA;oBACXA,CAACA,EAEDA,UAACA,OAAOA;wBAEPA,IAAIA,OAAOA,GAAUA,KAAKA,EAAEA,CAACA;wBAC7BA,MAAMA,CAACA,OAAOA,GAACA,CAACA,IAAIA,OAAOA,CAACA,WAAWA,CAACA,OAAOA,CAACA,OAAOA,CAACA,CAACA,CAACA;oBAC3DA,CAACA,CACDA,CAACA;gBACHA,CAACA,CAACA;kBAEAA,IAAIA,UAAUA,CAChBA;oBAECA,IAAIA,KAAKA,GAAUA,CAACA,CAACA;oBACrBA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;wBAECA,KAAKA,GAAGA,CAACA,CAACA;oBACXA,CAACA,EAEDA,UAACA,OAAOA,IAAIA,OAAAA,OAAOA,CAACA,WAAWA,CAACA,OAAOA,CAACA,KAAKA,EAAEA,CAACA,CAACA,EAArCA,CAAqCA,CACjDA,CAACA;gBACHA,CAACA,CAACA,CAACA;QACLA,CAACA;QAEMnB,iBAAMA,GAAbA,UAAiBA,IAAMA,EAAEA,YAA2BA,EAAEA,QAAwBA;YAAxBoB,wBAAwBA,GAAxBA,gBAAwBA;YAE7EA,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAECA,IAAIA,KAAKA,GAAUA,CAACA,CAACA;gBACrBA,IAAIA,KAAOA,CAACA;gBACZA,IAAIA,OAAeA,CAACA;gBACpBA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;oBAECA,KAAKA,GAAGA,CAACA,CAACA;oBACVA,KAAKA,GAAGA,IAAIA,CAACA;oBACbA,OAAOA,GAAGA,CAACA,QAAQA,CAACA;gBACrBA,CAACA,EAEDA,UAACA,OAAOA;oBAEPA,IAAIA,CAACA,GAAGA,KAAKA,EAAEA,CAACA;oBAChBA,EAAEA,CAAAA,CAACA,OAAOA,CAACA;wBACVA,OAAOA,GAAGA,KAAKA,CAACA;oBACjBA,IAAIA;wBACHA,KAAKA,GAAGA,YAAYA,CAACA,KAAKA,EAAEA,CAACA,CAACA,CAACA;oBAChCA,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAACA,KAAKA,CAACA,CAACA;gBACnCA,CAACA,CACDA,CAACA;YACHA,CAACA,CACDA,CAACA;QACHA,CAACA;QAEMpB,gBAAKA,GAAZA,UAAgBA,iBAAsCA;YAGrDqB,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAECA,IAAIA,UAAyBA,CAACA;gBAE9BA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;oBAECA,UAAUA,GAAGA,iBAAiBA,EAAEA,CAACA,aAAaA,EAAEA,CAACA;gBAClDA,CAACA,EAEDA,UAACA,OAAOA,IAAIA,OAAAA,UAAUA,CAACA,QAAQA,EAAEA,IAAIA,OAAOA,CAACA,WAAWA,CAACA,UAAUA,CAACA,OAAOA,CAACA,EAAhEA,CAAgEA,EAC5EA;oBAECA,iBAAOA,CAACA,UAAUA,CAACA,CAACA;gBACrBA,CAACA,CACDA,CAACA;YACHA,CAACA,CACDA,CAACA;QACHA,CAACA;QAEMrB,kBAAOA,GAAdA,UACCA,UAAqCA,EACrCA,MAAwCA;YAExCsB,EAAEA,CAAAA,CAACA,UAAUA,CAACA,CACdA,CAACA;gBACAA,eAAKA,CAACA,UAAUA,CAACA,IAAIA,CAACA,UAAUA,CAACA,EAAEA,UAAAA,CAACA;oBAEnCA,UAAUA,CAACA,OAAOA,CAACA,CAACA,EAAEA,MAAMA,CAACA,CAACA;gBAC/BA,CAACA,CAACA,CAACA;YACJA,CAACA;QACFA,CAACA;QAEMtB,cAAGA,GAAVA,UACEA,UAAqCA,EACrCA,QAA4BA;YAE7BuB,MAAMA,CAACA,UAAUA,IAAIA,eAAKA,CAACA,UAAUA,CAACA,IAAIA,CAACA,UAAUA,CAACA,EAAEA,UAAAA,CAACA;gBAExDA,IAAIA,MAAMA,GAAaA,EAAEA,CAACA;gBAC1BA,UAAUA,CAACA,OAAOA,CAACA,CAACA,EAAEA,UAACA,CAACA,EAACA,CAACA;oBACzBA,MAAMA,CAACA,CAACA,CAACA,GAACA,QAAQA,CAACA,CAACA,CAACA,CAACA;gBACvBA,CAACA,CAACA,CAACA;gBACHA,MAAMA,CAACA,MAAMA,CAACA;YACfA,CAACA,CAACA,CAACA;QAEJA,CAACA;QAGMvB,cAAGA,GAAVA,UAAWA,MAAyBA;YAEnCwB,MAAMA,CAACA,MAAMA;iBACXA,SAASA,CAACA,UAAAA,CAACA,IAAGA,OAAAA,CAACA,IAAGA,CAACA,QAAQA,EAAbA,CAAaA,EAAEA,IAAIA,CAACA;iBAClCA,SAASA,CAACA,SAASA,CAACA,OAAOA,CAACA,CAACA;QAChCA,CAACA;QAEMxB,cAAGA,GAAVA,UAAWA,MAAyBA;YAEnCyB,MAAMA,CAACA,MAAMA;iBACXA,SAASA,CAACA,UAAAA,CAACA,IAAGA,OAAAA,CAACA,IAAGA,CAACA,QAAQA,EAAbA,CAAaA,EAAEA,IAAIA,CAACA;iBAClCA,SAASA,CAACA,SAASA,CAACA,MAAMA,CAACA,CAACA;QAC/BA,CAACA;QAODzB,4BAAOA,GAAPA,UAAQA,MAA+BA;YAGtCsB,IAAIA,CAACA,GAAGA,IAAIA,CAACA;YACbA,CAACA,CAACA,eAAeA,EAAEA,CAACA;YAEpBA,IAAIA,KAAKA,GAAUA,CAACA,CAACA;YAErBA,eAAKA,CACJA,CAACA,CAACA,aAAaA,EAAEA,EAAEA,UAAAA,CAACA;gBAGnBA,OAAMA,CAACA,CAACA,eAAeA,EAAEA,IAAIA,CAACA,CAACA,QAAQA,EAAEA,EACzCA,CAACA;oBACAA,EAAEA,CAAAA,CAAMA,MAAMA,CAACA,CAACA,CAACA,OAAOA,EAAEA,KAAKA,EAAEA,CAACA,KAAGA,KAAKA,CAACA;wBAC1CA,KAAKA,CAACA;gBACRA,CAACA;YACFA,CAACA,CACDA,CAACA;QACHA,CAACA;QAGDtB,4BAAOA,GAAPA,UAAQA,SAAuBA;YAE9BI,IAAIA,MAAMA,GAAOA,EAAEA,CAACA;YAEpBA,EAAEA,CAAAA,CAACA,SAASA,CAACA;gBAACA,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA,SAASA,CAACA,CAACA,OAAOA,EAAEA,CAACA;YAErDA,IAAIA,CAACA,OAAOA,CAACA,UAACA,CAACA,EAAEA,CAACA;gBAEjBA,MAAMA,CAACA,CAACA,CAACA,GAAGA,CAACA,CAAAA;YACdA,CAACA,CAACA,CAACA;YAEHA,MAAMA,CAACA,MAAMA,CAACA;QACfA,CAACA;QAGDJ,iCAAYA,GAAZA;YAEC0B,IAAIA,CAACA,GAAGA,IAAIA,CAACA;YACbA,MAAMA,CAACA,IAAIA,UAAUA,CAAIA,cAAMA,OAAAA,CAACA,CAACA,aAAaA,EAAEA,EAAjBA,CAAiBA,CAACA,CAACA;QACnDA,CAACA;QAGD1B,6BAAQA,GAARA,UACCA,WAA6BA,EAC7BA,eAAwDA,EACxDA,eAA6DA;YAD7D2B,+BAAwDA,GAAxDA,kBAAsCA,SAASA,CAACA,QAAQA;YACxDA,+BAA6DA,GAA7DA,kBAA2CA,SAASA,CAACA,QAAQA;YAG7DA,IAAIA,IAAIA,GAA8BA,IAAIA,oBAAUA,CAAiBA,eAAeA,CAACA,CAACA;YACtFA,IAAIA,CAACA,OAAOA,CACXA,UAAAA,CAACA;gBAEAA,IAAIA,GAAGA,GAAGA,WAAWA,CAACA,CAACA,CAACA,CAACA;gBACzBA,IAAIA,OAAOA,GAAGA,eAAeA,CAACA,CAACA,CAACA,CAACA;gBAEjCA,IAAIA,KAAKA,GAAGA,IAAIA,CAACA,QAAQA,CAACA,GAAGA,CAACA,CAACA;gBAC/BA,EAAEA,CAAAA,CAACA,KAAKA,KAAGA,SAASA,CAACA;oBAACA,KAAKA,CAACA,IAAIA,CAACA,OAAOA,CAACA,CAACA;gBAC1CA,IAAIA;oBAACA,IAAIA,CAACA,aAAaA,CAACA,GAAGA,EAAEA,CAACA,OAAOA,CAACA,CAACA,CAACA;YACzCA,CAACA,CACDA,CAACA;YACFA,MAAMA,CAACA,IAAIA,MAAMA,CAAeA,IAAIA,CAACA,CAACA;QACvCA,CAACA;QAED3B,0BAAKA,GAALA,UACCA,WAA+BA,EAC/BA,eAAoCA;YAEpC4B,IAAIA,GAAGA,GAAiBA,EAAEA,CAACA;YAC3BA,IAAIA,CAACA,OAAOA,CAACA,UAAAA,CAACA;gBAEbA,GAAGA,CAACA,WAAWA,CAACA,CAACA,CAACA,CAACA,GAAGA,eAAeA,CAACA,CAACA,CAACA,CAACA;YAC1CA,CAACA,CAACA,CAACA;YACHA,MAAMA,CAACA,GAAGA,CAACA;QACZA,CAACA;QAED5B,iCAAYA,GAAZA,UACCA,WAA6BA,EAC7BA,eAAmCA,EACnCA,eAA6DA;YAA7D6B,+BAA6DA,GAA7DA,kBAA2CA,SAASA,CAACA,QAAQA;YAE7DA,IAAIA,IAAIA,GAA4BA,IAAIA,oBAAUA,CAAeA,eAAeA,CAACA,CAACA;YAClFA,IAAIA,CAACA,OAAOA,CAACA,UAAAA,CAACA,IAAGA,OAAAA,IAAIA,CAACA,aAAaA,CAACA,WAAWA,CAACA,CAACA,CAACA,EAAEA,eAAeA,CAACA,CAACA,CAACA,CAACA,EAAtDA,CAAsDA,CAACA,CAACA;YACzEA,MAAMA,CAACA,IAAIA,CAACA;QACbA,CAACA;QAED7B,mCAAcA,GAAdA,UAAeA,SAAqBA,EAAEA,QAAiDA;YAAxE8B,yBAAqBA,GAArBA,cAAqBA;YAAEA,wBAAiDA,GAAjDA,WAA+BA,SAASA,CAACA,QAAQA;YAEtFA,MAAMA,CAACA,IAAIA,CAACA,MAAMA,CAACA,QAAQA,CAACA,CAACA,OAAOA,EAAEA,CAACA,IAAIA,CAACA,SAASA,CAACA,CAACA;QACxDA,CAACA;QAWD9B,6BAAQA,GAARA,UACCA,MAAqFA;YAGrF+B,IAAIA,CAACA,GAAGA,IAAIA,EAAEA,QAAQA,GAAGA,CAACA,CAACA,CAACA,eAAeA,EAAEA,CAACA;YAE9CA,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAECA,IAAIA,UAAyBA,CAACA;gBAC9BA,IAAIA,KAAKA,GAAUA,CAACA,CAACA;gBAErBA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;oBAECA,eAAeA,CAACA,QAAQA,CAACA,CAACA;oBAE1BA,KAAKA,GAAGA,CAACA,CAACA;oBACVA,UAAUA,GAAGA,CAACA,CAACA,aAAaA,EAAEA,CAACA;gBAChCA,CAACA,EAEDA,UAACA,OAAOA;oBAEPA,eAAeA,CAACA,QAAQA,CAACA,CAACA;oBAE1BA,OAAMA,UAAUA,CAACA,QAAQA,EAAEA,EAC3BA,CAACA;wBACAA,IAAIA,YAAYA,GAAQA,MAAMA,CAACA,UAAUA,CAACA,OAAOA,EAAEA,KAAKA,EAAEA,CAACA,CAACA;wBAE5DA,EAAEA,CAAAA,CAACA,YAAYA,KAAGA,KAAKA,IAAIA,YAAYA,KAAGA,CAAsBA,CAACA;4BAChEA,MAAMA,CAACA,OAAOA,CAACA,UAAUA,EAAEA,CAACA;wBAE7BA,EAAEA,CAAAA,CAACA,YAAYA,KAAGA,CAAqBA,CAACA;4BACvCA,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAACA,UAAUA,CAACA,OAAOA,CAACA,CAACA;oBAGjDA,CAACA;oBACDA,MAAMA,CAACA,KAAKA,CAACA;gBACdA,CAACA,EAEDA;oBAECA,iBAAOA,CAACA,UAAUA,CAACA,CAACA;gBACrBA,CAACA,CACDA,CAACA;YAEHA,CAACA,EAGDA;gBAECA,QAAQA,GAAGA,IAAIA,CAACA;YACjBA,CAACA,CACDA,CAACA;QACHA,CAACA;QAED/B,0BAAKA,GAALA,UAAMA,aAAuDA;YAAvDgC,6BAAuDA,GAAvDA,iBAAuDA;YAG5DA,IAAIA,CAACA,eAAeA,EAAEA,CAACA;YAEvBA,IAAIA,CAACA,QAAQA,CAACA,UAAAA,OAAOA,IAAIA,OAAAA,aAAaA,EAAbA,CAAaA,CAACA,CAACA;QACzCA,CAACA;QAGDhC,yBAAIA,GAAJA,UAAKA,KAAYA;YAEhBiC,IAAIA,CAACA,GAAGA,IAAIA,CAACA;YAEbA,CAACA,CAACA,eAAeA,EAAEA,CAACA;YAEpBA,EAAEA,CAAAA,CAACA,CAACA,KAAKA,IAAIA,KAAKA,CAACA,KAAKA,CAACA,IAAIA,KAAKA,GAACA,CAACA,CAACA;gBACpCA,MAAMA,CAACA,CAACA,CAACA;YAEVA,EAAEA,CAAAA,CAACA,CAACA,QAAQA,CAACA,KAAKA,CAACA,CAACA;gBACnBA,MAAMA,CAACA,UAAUA,CAACA,KAAKA,EAAKA,CAACA;YAE9BA,iBAAOA,CAACA,MAAMA,CAACA,KAAKA,EAAEA,OAAOA,CAACA,CAACA;YAE/BA,IAAIA,CAACA,GAAUA,KAAKA,CAACA;YAErBA,MAAMA,CAACA,IAAIA,CAACA,QAAQA,CACnBA,UAACA,OAASA,EAAEA,KAAaA;uBACxBA,KAAKA,GAACA,CAACA;sBACJA,CAAqBA;sBACrBA,CAAuBA;YAF1BA,CAE0BA,CAC3BA,CAACA;QACHA,CAACA;QAEDjC,8BAASA,GAATA,UAAUA,SAAsBA;YAG/BkC,IAAIA,CAACA,eAAeA,EAAEA,CAACA;YAEvBA,IAAIA,QAAQA,GAAWA,IAAIA,CAACA;YAE5BA,MAAMA,CAACA,IAAIA,CAACA,QAAQA,CACnBA,UAACA,OAASA,EAAEA,KAAaA;gBAExBA,EAAEA,CAAAA,CAACA,QAAQA,CAACA;oBACXA,QAAQA,GAAGA,SAASA,CAACA,OAAOA,EAAEA,KAAKA,CAACA,CAACA;gBAEtCA,MAAMA,CAACA,QAAQA;sBACZA,CAAqBA;sBACrBA,CAAuBA,CAACA;YAC5BA,CAACA,CACDA,CAACA;QACHA,CAACA;QAEDlC,yBAAIA,GAAJA,UAAKA,KAAYA;YAEhBmC,EAAEA,CAAAA,CAACA,CAACA,KAAKA,IAAIA,KAAKA,CAACA,KAAKA,CAACA,IAAIA,KAAKA,GAACA,CAACA,CAACA;gBACpCA,MAAMA,CAACA,UAAUA,CAACA,KAAKA,EAAKA,CAACA;YAE9BA,IAAIA,CAACA,GAAGA,IAAIA,CAACA;YACbA,CAACA,CAACA,eAAeA,EAAEA,CAACA;YAEpBA,EAAEA,CAAAA,CAACA,CAACA,QAAQA,CAACA,KAAKA,CAACA,CAACA;gBACnBA,MAAMA,CAACA,CAACA,CAACA;YAEVA,iBAAOA,CAACA,MAAMA,CAACA,KAAKA,EAAEA,OAAOA,CAACA,CAACA;YAC/BA,IAAIA,CAACA,GAAGA,KAAKA,CAACA;YAGdA,MAAMA,CAACA,CAACA,CAACA,QAAQA,CAACA,UAACA,OAASA,EAAEA,KAAaA,IAAKA,OAAAA,KAAKA,GAACA,CAACA,EAAPA,CAAOA,CAACA,CAACA;QAC1DA,CAACA;QAEDnC,8BAASA,GAATA,UAAUA,SAAsBA;YAG/BoC,IAAIA,CAACA,eAAeA,EAAEA,CAACA;YAEvBA,MAAMA,CAACA,IAAIA,CAACA,QAAQA,CACnBA,UAACA,OAASA,EAAEA,KAAaA;uBACxBA,SAASA,CAACA,OAAOA,EAAEA,KAAKA,CAACA;sBACtBA,CAAuBA;sBACvBA,CAAsBA;YAFzBA,CAEyBA,CAC1BA,CAACA;QACHA,CAACA;QAGDpC,8BAASA,GAATA,UAAUA,SAAsBA,EAAEA,iBAA0BA;YAG3DqC,IAAIA,CAACA,eAAeA,EAAEA,CAACA;YAEvBA,EAAEA,CAAAA,CAACA,CAACA,iBAAiBA,CAACA;gBACrBA,MAAMA,CAACA,IAAIA,CAACA,QAAQA,CACnBA,UAACA,OAASA,EAAEA,KAAaA;2BACxBA,SAASA,CAACA,OAAOA,EAAEA,KAAKA,CAACA;0BACtBA,CAAsBA;0BACtBA,CAAuBA;gBAF1BA,CAE0BA,CAC3BA,CAACA;YAEHA,IAAIA,KAAKA,GAAWA,KAAKA,CAACA;YAC1BA,MAAMA,CAACA,IAAIA,CAACA,QAAQA,CACnBA,UAACA,OAASA,EAAEA,KAAaA;gBAExBA,EAAEA,CAAAA,CAACA,KAAKA,CAACA;oBACRA,MAAMA,CAACA,CAAsBA,CAACA;gBAE/BA,KAAKA,GAAGA,SAASA,CAACA,OAAOA,EAAEA,KAAKA,CAACA,CAACA;gBAElCA,MAAMA,CAACA,CAAuBA,CAACA;YAChCA,CAACA,CACDA,CAACA;QACHA,CAACA;QAEDrC,mCAAcA,GAAdA,UAAeA,KAAgBA;YAAhBsC,qBAAgBA,GAAhBA,SAAgBA;YAE9BA,IAAIA,CAACA,GAAGA,IAAIA,CAACA;YAEbA,EAAEA,CAAAA,CAACA,CAACA,KAAKA,IAAIA,KAAKA,CAACA,KAAKA,CAACA,IAAIA,KAAKA,IAAEA,CAACA,CAACA;gBACrCA,MAAMA,CAACA,CAACA,CAACA;YAEVA,EAAEA,CAAAA,CAACA,CAACA,QAAQA,CAACA,KAAKA,CAACA,CAACA;gBACnBA,MAAMA,CAACA,UAAUA,CAACA,KAAKA,EAAKA,CAACA;YAE9BA,iBAAOA,CAACA,MAAMA,CAACA,KAAKA,EAAEA,OAAOA,CAACA,CAACA;YAC/BA,IAAIA,CAACA,GAAGA,KAAKA,CAACA;YAEdA,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAECA,IAAIA,UAAyBA,CAACA;gBAC9BA,IAAIA,CAAUA,CAACA;gBAEfA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;oBAECA,UAAUA,GAAGA,CAACA,CAACA,aAAaA,EAAEA,CAACA;oBAC/BA,CAACA,GAAGA,IAAIA,eAAKA,EAAKA,CAACA;gBACpBA,CAACA,EAEDA,UAACA,OAAOA;oBAEPA,OAAMA,UAAUA,CAACA,QAAQA,EAAEA,EAC3BA,CAACA;wBAEAA,CAACA,CAACA,OAAOA,CAACA,UAAUA,CAACA,OAAOA,CAACA,CAACA;wBAG9BA,EAAEA,CAAAA,CAACA,CAACA,CAACA,KAAKA,GAACA,CAACA,CAACA;4BAEZA,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAACA,CAACA,CAACA,OAAOA,EAAEA,CAACA,CAACA;oBAC1CA,CAACA;oBACDA,MAAMA,CAACA,KAAKA,CAACA;gBACdA,CAACA,EAEDA;oBAECA,iBAAOA,CAACA,UAAUA,EAAEA,CAACA,CAACA,CAACA;gBACxBA,CAACA,CACDA,CAACA;YACHA,CAACA,CACDA,CAACA;QACHA,CAACA;QAEDtC,iCAAYA,GAAZA,UAAaA,KAAYA;YAExBuC,EAAEA,CAAAA,CAACA,CAACA,KAAKA,IAAIA,KAAKA,CAACA,KAAKA,CAACA,IAAIA,KAAKA,IAAEA,CAACA,CAACA;gBACrCA,MAAMA,CAACA,UAAUA,CAACA,KAAKA,EAAKA,CAACA;YAE9BA,IAAIA,CAACA,GAAGA,IAAIA,CAACA;YAEbA,EAAEA,CAAAA,CAACA,CAACA,QAAQA,CAACA,KAAKA,CAACA,CAACA;gBACnBA,MAAMA,CAACA,CAACA,CAACA,OAAOA,EAAEA,CAACA;YAEpBA,iBAAOA,CAACA,MAAMA,CAACA,KAAKA,EAAEA,OAAOA,CAACA,CAACA;YAE/BA,MAAMA,CAACA,CAACA,CAACA,OAAOA,EAAEA,CAACA,IAAIA,CAACA,KAAKA,CAACA,CAACA;QAChCA,CAACA;QAMDvC,yCAAoBA,GAApBA,UACCA,IAAsCA,EACtCA,cAAuDA;YAEvDwC,IAAIA,CAACA,GAAGA,IAAIA,CAACA;YAEbA,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAECA,IAAIA,UAA2BA,CAACA;gBAChCA,IAAIA,SAASA,GAAUA,CAACA,CAACA;gBACzBA,IAAIA,MAAYA,EAAEA,GAAUA,CAACA;gBAE7BA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;oBAECA,SAASA,GAAGA,CAACA,CAACA;oBACdA,MAAMA,GAAGA,EAAEA,CAACA;oBACZA,GAAGA,GAAGA,CAACA,CAACA;oBACRA,UAAUA,GAAGA,CAACA,CAACA,aAAaA,EAAEA,CAACA;gBAChCA,CAACA,EAEDA,UAACA,OAAOA;oBAEPA,OAAMA,IAAIA,EACVA,CAACA;wBACAA,EAAEA,CAAAA,CAACA,UAAUA,CAACA,QAAQA,EAAEA,CAACA,CACzBA,CAACA;4BACAA,MAAMA,CAACA,GAAGA,EAAEA,CAACA,GAAGA,UAAUA,CAACA,OAAOA,CAACA;4BACnCA,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAACA,cAAcA,CAACA,UAAUA,CAACA,OAAOA,EAAEA,SAASA,CAACA,CAACA,CAACA;wBAC3EA,CAACA;wBAEDA,EAAEA,CAAAA,CAACA,CAACA,GAAGA,CAACA;4BACPA,MAAMA,CAACA,OAAOA,CAACA,UAAUA,EAAEA,CAACA;wBAE7BA,IAAIA,IAAIA,GAAGA,UAAUA;6BACnBA,SAASA,CAAIA,MAAMA,CAACA;6BACpBA,UAAUA,CAACA,IAAIA,CAACA,CAACA;wBAEnBA,EAAEA,CAAAA,CAACA,CAACA,IAAIA,CAACA,GAAGA,EAAEA,CAACA,CACfA,CAACA;4BACAA,MAAMA,CAACA,OAAOA,CAACA,UAAUA,EAAEA,CAACA;wBAC7BA,CAACA;wBACDA,IAAIA,CACJA,CAACA;4BACAA,SAASA,EAAEA,CAACA;4BACZA,MAAMA,GAAGA,EAAEA,CAACA;4BACZA,GAAGA,GAAGA,CAACA,CAACA;4BACRA,UAAUA,CAACA,OAAOA,EAAEA,CAACA;4BACrBA,UAAUA,GAAGA,IAAIA,CAACA,aAAaA,EAAEA,CAACA;wBACnCA,CAACA;oBACFA,CAACA;gBACFA,CAACA,EAEDA;oBAECA,iBAAOA,CAACA,UAAUA,CAACA,CAACA;oBACpBA,MAAMA,CAACA,MAAMA,GAAGA,CAACA,CAACA;gBACnBA,CAACA,CACDA,CAACA;YACHA,CAACA,CACDA,CAACA;QACHA,CAACA;QAGDxC,uCAAkBA,GAAlBA,UACCA,IAAsCA,EACtCA,cAAuDA;YAEvDyC,IAAIA,CAACA,GAAGA,IAAIA,CAACA;YAEbA,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAGCA,IAAIA,eAAeA,GAAsBA,EAAEA,CAACA;gBAC5CA,IAAIA,UAA2BA,CAACA;gBAChCA,IAAIA,GAAUA,CAACA;gBAEfA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;oBAECA,UAAUA,GAAGA,CAACA,CAACA,aAAaA,EAAEA,CAACA;oBAC/BA,GAAGA,GAAGA,CAACA,CAACA;gBACTA,CAACA,EAEDA,UAACA,OAAOA;oBAEPA,OAAMA,IAAIA,EACVA,CAACA;wBACAA,EAAEA,CAAAA,CAACA,UAAUA,CAACA,QAAQA,EAAEA,CAACA,CACzBA,CAACA;4BACAA,IAAIA,KAAKA,GAAGA,cAAcA,CAACA,UAAUA,CAACA,OAAOA,EAAEA,GAAGA,CAACA,CAACA;4BACpDA,eAAeA,CAACA,GAAGA,EAAEA,CAACA,GAAGA,UAAUA,CAACA;4BACpCA,UAAUA,GAAGA,IAAIA,CAACA,UAAUA,CAACA,OAAOA,CAACA,CAACA,aAAaA,EAAEA,CAACA;4BACtDA,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAACA,KAAKA,CAACA,CAACA;wBACnCA,CAACA;wBAEDA,EAAEA,CAAAA,CAACA,GAAGA,IAAEA,CAACA,CAACA;4BAACA,MAAMA,CAACA,KAAKA,CAACA;wBAExBA,UAAUA,CAACA,OAAOA,EAAEA,CAACA;wBACrBA,UAAUA,GAAGA,eAAeA,CAACA,EAAEA,GAAGA,CAACA,CAACA;wBACpCA,eAAeA,CAACA,MAAMA,GAAGA,GAAGA,CAACA;oBAC9BA,CAACA;gBACFA,CAACA,EAEDA;oBAECA,IACAA,CAACA;wBACAA,iBAAOA,CAACA,UAAUA,CAACA,CAACA;oBACrBA,CAACA;4BAEDA,CAACA;wBACAA,sBAAYA,CAACA,eAAeA,CAACA,CAACA;oBAC/BA,CAACA;gBACFA,CAACA,CACDA,CAACA;YACHA,CAACA,CACDA,CAACA;QACHA,CAACA;QAGDzC,4BAAOA,GAAPA;YAEC0C,IAAIA,CAACA,GAAGA,IAAIA,CAACA;YAEbA,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAECA,IAAIA,UAA2BA,CAACA;gBAChCA,IAAIA,gBAAgBA,GAAoBA,IAAIA,CAACA;gBAE7CA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;oBAECA,UAAUA,GAAGA,CAACA,CAACA,aAAaA,EAAEA,CAACA;gBAChCA,CAACA,EAEDA,UAACA,OAAOA;oBAEPA,OAAMA,IAAIA,EACVA,CAACA;wBACAA,EAAEA,CAAAA,CAACA,gBAAgBA,IAAEA,IAAIA,CAACA,CAC1BA,CAACA;4BACAA,EAAEA,CAAAA,CAACA,gBAAgBA,CAACA,QAAQA,EAAEA,CAACA,CAC/BA,CAACA;gCACAA,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAACA,gBAAgBA,CAACA,OAAOA,CAACA,CAACA;4BACtDA,CAACA;4BACDA,IAAIA,CACJA,CAACA;gCACAA,gBAAgBA,GAAGA,IAAIA,CAACA;4BACzBA,CAACA;wBACFA,CAACA;wBAEDA,EAAEA,CAAAA,CAACA,UAAUA,CAACA,QAAQA,EAAEA,CAACA,CACzBA,CAACA;4BACAA,IAAIA,CAACA,GAAGA,UAAUA,CAACA,OAAOA,CAACA;4BAC3BA,EAAEA,CAAAA,CAACA,CAACA,YAAYA,KAAKA,CAACA,CACtBA,CAACA;gCACAA,gBAAgBA,CAACA,OAAOA,EAAEA,CAACA;gCAC3BA,gBAAgBA,GAAGA,UAAUA,CAACA,SAASA,CAAMA,CAACA,CAACA;qCAC7CA,UAAUA,CAACA,SAASA,CAACA,QAAQA,CAACA;qCAC9BA,OAAOA,EAAEA;qCACTA,aAAaA,EAAEA,CAACA;gCAClBA,QAAQA,CAACA;4BACVA,CAACA;4BACDA,IAAIA,CACJA,CAACA;gCACAA,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAACA,UAAUA,CAACA,OAAOA,CAACA,CAACA;4BAChDA,CAACA;wBACFA,CAACA;wBAEDA,MAAMA,CAACA,KAAKA,CAACA;oBACdA,CAACA;gBACFA,CAACA,EAEDA;oBAECA,iBAAOA,CAACA,UAAUA,EAAEA,gBAAgBA,CAACA,CAACA;gBACvCA,CAACA,CACDA,CAACA;YACHA,CAACA,CACDA,CAACA;QACHA,CAACA;QAGD1C,6BAAQA,GAARA,UAAkBA,QAAuCA;YAExD2C,IAAIA,CAACA,GAAGA,IAAIA,CAACA;YAEbA,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAECA,IAAIA,UAAyBA,CAACA;gBAE9BA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;oBAECA,UAAUA,GAAGA,CAACA,CAACA,aAAaA,EAAEA,CAACA;oBAC/BA,UAAUA,CAACA,QAAQA,EAAEA,CAACA;gBACvBA,CAACA,EAEDA,UAACA,OAAOA;oBAEPA,IAAIA,IAAIA,GAAGA,UAAUA,CAACA,OAAOA,CAACA;oBAC9BA,MAAMA,CAACA,UAAUA,CAACA,QAAQA,EAAEA;2BACxBA,OAAOA,CAACA,WAAWA,CAACA,QAAQA,CAACA,IAAIA,EAAEA,UAAUA,CAACA,OAAOA,CAACA,CAACA,CAACA;gBAC7DA,CAACA,EAEDA;oBAECA,iBAAOA,CAACA,UAAUA,CAACA,CAACA;gBACrBA,CAACA,CACDA,CAACA;YACHA,CAACA,CACDA,CAACA;QACHA,CAACA;QAED3C,yBAAIA,GAAJA,UAAKA,IAAoBA,EAAEA,IAAOA;YAGjC4C,IAAIA,SAASA,GAAGA,IAAIA,KAAGA,SAASA,CAACA;YACjCA,IAAIA,CAACA,GAAGA,IAAIA,CAACA;YAEbA,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAECA,IAAIA,UAAyBA,CAACA;gBAC9BA,IAAIA,KAAOA,CAACA;gBACZA,IAAIA,OAAeA,CAACA;gBAEpBA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;oBAECA,UAAUA,GAAGA,CAACA,CAACA,aAAaA,EAAEA,CAACA;oBAC/BA,OAAOA,GAAGA,IAAIA,CAACA;gBAChBA,CAACA,EAEDA,UAACA,OAAOA;oBAEPA,EAAEA,CAAAA,CAACA,OAAOA,CAACA,CACXA,CAACA;wBACAA,OAAOA,GAAGA,KAAKA,CAACA;wBAEhBA,MAAMA,CAACA,SAASA;8BACbA,OAAOA,CAACA,WAAWA,CAACA,KAAKA,GAAGA,IAAIA,CAACA;8BACjCA,UAAUA,CAACA,QAAQA,EAAEA,IAAIA,OAAOA,CAACA,WAAWA,CAACA,KAAKA;kCAClDA,UAAUA,CAACA,OAAOA,CAACA,CAACA;oBACxBA,CAACA;oBAEDA,MAAMA,CAACA,CAACA,UAAUA,CAACA,QAAQA,EAAEA,CAACA;0BAC3BA,OAAOA,CAACA,WAAWA,CAACA,KAAKA,GAAGA,IAAIA,CAACA,KAAKA,EAAEA,UAAUA,CAACA,OAAOA,CAACA,CAACA;0BAC5DA,KAAKA,CAACA;gBACVA,CAACA,EAEDA;oBAECA,iBAAOA,CAACA,UAAUA,CAACA,CAACA;gBACrBA,CAACA,CACDA,CAACA;YACHA,CAACA,CACDA,CAACA;QACHA,CAACA;QAKD5C,2BAAMA,GAANA,UAAgBA,QAA6BA;YAG5C6C,IAAIA,CAACA,GAAGA,IAAIA,EAAEA,QAAQA,GAAGA,CAACA,CAACA,CAACA,eAAeA,EAAEA,CAACA;YAE9CA,EAAEA,CAAAA,CAACA,QAAQA,CAACA,MAAMA,GAACA,CAACA,CAACA;gBACpBA,MAAMA,CAACA,IAAIA,qBAAqBA,CAACA,CAACA,EAAEA,IAAIA,EAAEA,QAAQA,CAACA,CAACA;YAErDA,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAECA,IAAIA,UAAyBA,CAACA;gBAC9BA,IAAIA,KAAKA,GAAUA,CAACA,CAACA;gBAErBA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;oBAECA,eAAeA,CAACA,QAAQA,CAACA,CAACA;oBAE1BA,KAAKA,GAAGA,CAACA,CAACA;oBACVA,UAAUA,GAAGA,CAACA,CAACA,aAAaA,EAAEA,CAACA;gBAChCA,CAACA,EAEDA,UAACA,OAAOA;oBAEPA,eAAeA,CAACA,QAAQA,CAACA,CAACA;oBAE1BA,MAAMA,CAACA,UAAUA,CAACA,QAAQA,EAAEA;0BACzBA,OAAOA,CAACA,WAAWA,CAACA,QAAQA,CAACA,UAAUA,CAACA,OAAOA,EAAEA,KAAKA,EAAEA,CAACA,CAACA;0BAC1DA,KAAKA,CAACA;gBACVA,CAACA,EAEDA;oBAECA,iBAAOA,CAACA,UAAUA,CAACA,CAACA;gBACrBA,CAACA,CACDA,CAACA;YACHA,CAACA,EAEDA;gBAECA,QAAQA,GAAGA,IAAIA,CAACA;YACjBA,CAACA,CACDA,CAACA;QACHA,CAACA;QASD7C,+BAAUA,GAAVA,UACCA,kBAAmCA,EACnCA,cAAuDA;YAEvD8C,IAAIA,CAACA,GAAGA,IAAIA,CAACA;YACbA,EAAEA,CAAAA,CAACA,CAACA,cAAcA,CAACA;gBAClBA,cAAcA,GAAGA,UAACA,CAACA,EAAEA,CAACA,IAAKA,OAAAA,CAACA,EAADA,CAACA,CAACA;YAE9BA,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAECA,IAAIA,UAAyBA,CAACA;gBAC9BA,IAAIA,gBAAiCA,CAACA;gBACtCA,IAAIA,KAAKA,GAAUA,CAACA,CAACA;gBAErBA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;oBAECA,UAAUA,GAAGA,CAACA,CAACA,aAAaA,EAAEA,CAACA;oBAC/BA,gBAAgBA,GAAGA,SAASA,CAACA;oBAC7BA,KAAKA,GAAGA,CAACA,CAACA;gBACXA,CAACA,EAEDA,UAACA,OAAOA;oBAIPA,EAAEA,CAAAA,CAACA,gBAAgBA,KAAGA,SAASA,IAAIA,CAACA,UAAUA,CAACA,QAAQA,EAAEA,CAACA;wBACzDA,MAAMA,CAACA,KAAKA,CAACA;oBAGdA,GACAA,CAACA;wBAGAA,EAAEA,CAAAA,CAACA,CAACA,gBAAgBA,CAACA,CACrBA,CAACA;4BACAA,IAAIA,SAASA,GAAGA,kBAAkBA,CAACA,UAAUA,CAACA,OAAOA,EAAEA,KAAKA,EAAEA,CAACA,CAACA;4BAGhEA,EAAEA,CAAAA,CAACA,CAACA,SAASA,CAACA;gCACbA,QAAQA,CAACA;4BAEVA,gBAAgBA,GAAGA,UAAUA,CAACA,IAAIA,CAACA,SAASA,CAACA,CAACA;wBAC/CA,CAACA;wBAEDA,EAAEA,CAAAA,CAACA,gBAAgBA,CAACA,QAAQA,EAAEA,CAACA;4BAC9BA,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CACzBA,cAAcA,CACbA,UAAUA,CAACA,OAAOA,EAAEA,gBAAgBA,CAACA,OAAOA,CAC5CA,CACDA,CAACA;wBAIHA,gBAAgBA,CAACA,OAAOA,EAAEA,CAACA;wBAC3BA,gBAAgBA,GAAGA,IAAIA,CAACA;oBAEzBA,CAACA,QACKA,UAAUA,CAACA,QAAQA,EAAEA,EAAEA;oBAE7BA,MAAMA,CAACA,KAAKA,CAACA;gBACdA,CAACA,EAEDA;oBAECA,iBAAOA,CAACA,UAAUA,EAAEA,gBAAgBA,CAACA,CAACA;oBACtCA,UAAUA,GAAGA,IAAIA,CAACA;oBAClBA,gBAAgBA,GAAGA,IAAIA,CAACA;gBACzBA,CAACA,CACDA,CAACA;YACHA,CAACA,CACDA,CAACA;QACHA,CAACA;QAED9C,2BAAMA,GAANA,UAAgBA,QAA6BA;YAG5C+C,IAAIA,CAACA,GAAGA,IAAIA,EAAEA,QAAQA,GAAGA,CAACA,CAACA,CAACA,eAAeA,EAAEA,CAACA;YAE9CA,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAECA,IAAIA,UAAyBA,CAACA;gBAC9BA,IAAIA,KAAKA,GAAUA,CAACA,CAACA;gBAErBA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;oBAECA,eAAeA,CAACA,QAAQA,CAACA,CAACA;oBAE1BA,KAAKA,GAAGA,CAACA,CAACA;oBACVA,UAAUA,GAAGA,CAACA,CAACA,aAAaA,EAAEA,CAACA;gBAChCA,CAACA,EAEDA,UAACA,OAAOA;oBAEPA,eAAeA,CAACA,QAAQA,CAACA,CAACA;oBAE1BA,OAAMA,UAAUA,CAACA,QAAQA,EAAEA,EAC3BA,CAACA;wBACAA,IAAIA,MAAMA,GAAGA,QAAQA,CAACA,UAAUA,CAACA,OAAOA,EAAEA,KAAKA,EAAEA,CAACA,CAACA;wBACnDA,EAAEA,CAAAA,CAACA,MAAMA,KAAGA,IAAIA,IAAIA,MAAMA,KAAGA,SAASA,CAACA;4BACtCA,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAACA,MAAMA,CAACA,CAACA;oBACrCA,CAACA;oBAEDA,MAAMA,CAACA,KAAKA,CAACA;gBACdA,CAACA,EAEDA;oBAECA,iBAAOA,CAACA,UAAUA,CAACA,CAACA;gBACrBA,CAACA,CACDA,CAACA;YACHA,CAACA,EAEDA;gBAECA,QAAQA,GAAGA,IAAIA,CAACA;YACjBA,CAACA,CACDA,CAACA;QACHA,CAACA;QAED/C,0BAAKA,GAALA,UAAMA,SAAsBA;YAG3BgD,IAAIA,CAACA,GAAGA,IAAIA,EAAEA,QAAQA,GAAGA,CAACA,CAACA,CAACA,eAAeA,EAAEA,CAACA;YAE9CA,EAAEA,CAAAA,CAACA,SAASA,CAACA,MAAMA,GAACA,CAACA,CAACA;gBACrBA,MAAMA,CAACA,IAAIA,eAAeA,CAACA,CAACA,EAAEA,SAASA,CAACA,CAACA;YAE1CA,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAECA,IAAIA,UAAyBA,CAACA;gBAC9BA,IAAIA,KAAKA,GAAUA,CAACA,CAACA;gBAErBA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;oBAECA,eAAeA,CAACA,QAAQA,CAACA,CAACA;oBAE1BA,KAAKA,GAAGA,CAACA,CAACA;oBACVA,UAAUA,GAAGA,CAACA,CAACA,aAAaA,EAAEA,CAACA;gBAChCA,CAACA,EAEDA,UAACA,OAAOA;oBAEPA,eAAeA,CAACA,QAAQA,CAACA,CAACA;oBAE1BA,OAAMA,UAAUA,CAACA,QAAQA,EAAEA,EAC3BA,CAACA;wBACAA,EAAEA,CAAAA,CAACA,SAASA,CAACA,UAAUA,CAACA,OAAOA,EAAEA,KAAKA,EAAEA,CAACA,CAACA;4BACzCA,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAACA,UAAUA,CAACA,OAAOA,CAACA,CAACA;oBACjDA,CAACA;oBACDA,MAAMA,CAACA,KAAKA,CAACA;gBACdA,CAACA,EAEDA;oBAECA,iBAAOA,CAACA,UAAUA,CAACA,CAACA;gBACrBA,CAACA,CACDA,CAACA;YACHA,CAACA,EAEDA;gBAECA,QAAQA,GAAGA,IAAIA,CAACA;YACjBA,CAACA,CACDA,CAACA;QAEHA,CAACA;QAGDhD,2BAAMA,GAANA,UAAcA,IAAQA;YAErBiD,IAAIA,QAAeA,CAACA;YACpBA,MAAMA,CAAAA,CAAMA,IAAIA,CAACA,CACjBA,CAACA;gBACAA,KAAKA,MAAMA;oBACVA,QAAQA,GAAGA,eAAIA,CAACA,MAAMA,CAACA;oBACvBA,KAAKA,CAACA;gBACPA,KAAKA,MAAMA;oBACVA,QAAQA,GAAGA,eAAIA,CAACA,MAAMA,CAACA;oBACvBA,KAAKA,CAACA;gBACPA,KAAKA,OAAOA;oBACXA,QAAQA,GAAGA,eAAIA,CAACA,OAAOA,CAACA;oBACxBA,KAAKA,CAACA;gBACPA,KAAKA,QAAQA;oBACZA,QAAQA,GAAGA,eAAIA,CAACA,QAAQA,CAACA;oBACzBA,KAAKA,CAACA;gBACPA;oBACCA,MAAMA,CAAkBA,IAAIA;yBAC1BA,KAAKA,CAACA,UAAAA,CAACA,IAAEA,OAAAA,CAACA,YAAYA,IAAIA,EAAjBA,CAAiBA,CAACA,CAACA;YAChCA,CAACA;YACDA,MAAMA,CAAkBA,IAAIA;iBAC1BA,KAAKA,CAACA,UAAAA,CAACA,IAAEA,OAAAA,OAAOA,CAACA,KAAGA,QAAQA,EAAnBA,CAAmBA,CAACA,CAACA;QACjCA,CAACA;QAEDjD,2BAAMA,GAANA,UACCA,MAAqBA,EACrBA,eAAsCA;YAEtCkD,IAAIA,CAACA,GAAGA,IAAIA,EAAEA,QAAQA,GAAGA,CAACA,CAACA,CAACA,eAAeA,EAAEA,CAACA;YAE9CA,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAECA,IAAIA,UAAyBA,CAACA;gBAC9BA,IAAIA,IAA2BA,CAACA;gBAEhCA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;oBAECA,eAAeA,CAACA,QAAQA,CAACA,CAACA;oBAC1BA,UAAUA,GAAGA,CAACA,CAACA,aAAaA,EAAEA,CAACA;oBAC/BA,IAAIA,GAAGA,IAAIA,oBAAUA,CAAaA,eAAeA,CAACA,CAACA;oBACnDA,EAAEA,CAAAA,CAACA,MAAMA,CAACA;wBACTA,UAAUA,CAACA,OAAOA,CAACA,MAAMA,EAAEA,UAAAA,GAAGA,IAAIA,OAAAA,IAAIA,CAACA,aAAaA,CAACA,GAAGA,EAAEA,IAAIA,CAACA,EAA7BA,CAA6BA,CAACA,CAACA;gBACnEA,CAACA,EAEDA,UAACA,OAAOA;oBAEPA,eAAeA,CAACA,QAAQA,CAACA,CAACA;oBAC1BA,OAAMA,UAAUA,CAACA,QAAQA,EAAEA,EAC3BA,CAACA;wBACAA,IAAIA,OAAOA,GAAGA,UAAUA,CAACA,OAAOA,CAACA;wBACjCA,EAAEA,CAAAA,CAACA,CAACA,IAAIA,CAACA,WAAWA,CAACA,OAAOA,CAACA,CAACA,CAC9BA,CAACA;4BACAA,IAAIA,CAACA,aAAaA,CAACA,OAAOA,EAAEA,IAAIA,CAACA,CAACA;4BAClCA,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAACA,OAAOA,CAACA,CAACA;wBACrCA,CAACA;oBACFA,CAACA;oBACDA,MAAMA,CAACA,KAAKA,CAACA;gBACdA,CAACA,EAEDA;oBAECA,iBAAOA,CAACA,UAAUA,CAACA,CAACA;oBACpBA,IAAIA,CAACA,KAAKA,EAAEA,CAACA;gBACdA,CAACA,CACDA,CAACA;YACHA,CAACA,EAEDA;gBAECA,QAAQA,GAAGA,IAAIA,CAACA;YACjBA,CAACA,CACDA,CAACA;QACHA,CAACA;QAEDlD,6BAAQA,GAARA,UAASA,eAA+BA;YAEvCmD,MAAMA,CAACA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,EAAEA,eAAeA,CAACA,CAACA;QAC3CA,CAACA;QAGDnD,yCAAoBA,GAApBA,UAA+BA,eAAsCA;YAGpEoD,IAAIA,CAACA,GAAGA,IAAIA,EAAEA,QAAQA,GAAGA,CAACA,CAACA,CAACA,eAAeA,EAAEA,CAACA;YAE9CA,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAECA,IAAIA,UAAyBA,CAACA;gBAC9BA,IAAIA,UAAmBA,CAACA;gBACxBA,IAAIA,OAAOA,GAAWA,IAAIA,CAACA;gBAE3BA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;oBAECA,eAAeA,CAACA,QAAQA,CAACA,CAACA;oBAC1BA,UAAUA,GAAGA,CAACA,CAACA,aAAaA,EAAEA,CAACA;gBAChCA,CAACA,EAEDA,UAACA,OAAOA;oBAEPA,eAAeA,CAACA,QAAQA,CAACA,CAACA;oBAC1BA,OAAMA,UAAUA,CAACA,QAAQA,EAAEA,EAC3BA,CAACA;wBACAA,IAAIA,GAAGA,GAAGA,eAAeA,CAACA,UAAUA,CAACA,OAAOA,CAACA,CAACA;wBAE9CA,EAAEA,CAAAA,CAACA,OAAOA,CAACA,CACXA,CAACA;4BACAA,OAAOA,GAAGA,KAAKA,CAACA;wBACjBA,CAACA;wBACDA,IAAIA,CAACA,EAAEA,CAAAA,CAACA,UAAUA,KAAGA,GAAGA,CAACA,CACzBA,CAACA;4BACAA,QAAQA,CAACA;wBACVA,CAACA;wBAEDA,UAAUA,GAAGA,GAAGA,CAACA;wBACjBA,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAACA,UAAUA,CAACA,OAAOA,CAACA,CAACA;oBAChDA,CAACA;oBACDA,MAAMA,CAACA,KAAKA,CAACA;gBACdA,CAACA,EAEDA;oBAECA,iBAAOA,CAACA,UAAUA,CAACA,CAACA;gBACrBA,CAACA,CACDA,CAACA;YACHA,CAACA,EAEDA;gBAECA,QAAQA,GAAGA,IAAIA,CAACA;YACjBA,CAACA,CACDA,CAACA;QACHA,CAACA;QAEDpD,4BAAOA,GAAPA;YAECqD,IAAIA,CAACA,GAAGA,IAAIA,EAAEA,QAAQA,GAAGA,CAACA,CAACA,CAACA,eAAeA,EAAEA,CAACA;YAE9CA,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAECA,IAAIA,MAAUA,CAACA;gBACfA,IAAIA,KAAKA,GAAUA,CAACA,CAACA;gBAErBA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;oBAECA,eAAeA,CAACA,QAAQA,CAACA,CAACA;oBAC1BA,MAAMA,GAAGA,CAACA,CAACA,OAAOA,EAAEA,CAACA;oBACrBA,KAAKA,GAAGA,MAAMA,CAACA,MAAMA,CAACA;gBACvBA,CAACA,EAEDA,UAACA,OAAOA;2BACRA,KAAKA,GAACA,CAACA;2BACJA,OAAOA,CAACA,WAAWA,CAACA,MAAMA,CAACA,EAAEA,KAAKA,CAACA,CAACA;gBADvCA,CACuCA,EAEvCA;oBAECA,MAAMA,CAACA,MAAMA,GAAGA,CAACA,CAACA;gBACnBA,CAACA,CACDA,CAACA;YACHA,CAACA,EAEDA;gBAECA,QAAQA,GAAGA,IAAIA,CAACA;YACjBA,CAACA,CACDA,CAACA;QACHA,CAACA;QAEDrD,4BAAOA,GAAPA;YAECsD,IAAIA,CAACA,GAAGA,IAAIA,EAAEA,QAAQA,GAAGA,CAACA,CAACA,CAACA,eAAeA,EAAEA,CAACA;YAE9CA,MAAMA,CAACA,IAAIA,UAAUA,CACpBA;gBAECA,IAAIA,MAAUA,CAACA;gBACfA,IAAIA,QAAeA,CAACA;gBACpBA,IAAIA,GAAUA,CAACA;gBAEfA,MAAMA,CAACA,IAAIA,wBAAcA,CACxBA;oBAECA,eAAeA,CAACA,QAAQA,CAACA,CAACA;oBAC1BA,MAAMA,GAAGA,CAACA,CAACA,OAAOA,EAAEA,CAACA;oBACrBA,QAAQA,GAAGA,GAAGA,GAAGA,MAAMA,CAACA,MAAMA,CAACA;gBAChCA,CAACA,EAEDA,UAACA,OAAOA;oBAGPA,EAAEA,CAAAA,CAACA,CAACA,GAAGA,CAACA;wBACPA,MAAMA,CAACA,OAAOA,CAACA,UAAUA,EAAEA,CAACA;oBAE7BA,IAAIA,aAAaA,GAAGA,iBAAOA,CAACA,MAAMA,CAACA,GAAGA,CAACA,CAACA;oBACxCA,IAAIA,aAAaA,GAAGA,MAAMA,CAACA,aAAaA,CAACA,CAACA;oBAE1CA,MAAMA,CAACA,aAAaA,CAACA,GAAGA,MAAMA,CAACA,EAAEA,GAAGA,CAACA,CAACA;oBACtCA,MAAMA,CAACA,GAAGA,CAACA,GAAGA,IAAIA,CAACA;oBAEnBA,EAAEA,CAAAA,CAACA,GAAGA,GAACA,EAAEA,IAAEA,CAACA,CAACA;wBACZA,MAAMA,CAACA,MAAMA,GAAGA,GAAGA,CAACA;oBAErBA,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAACA,aAAaA,CAACA,CAACA;gBAC3CA,CAACA,EAEDA;oBAECA,MAAMA,CAACA,MAAMA,GAAGA,CAACA,CAACA;gBACnBA,CAACA,CACDA,CAACA;YACHA,CAACA,EAEDA;gBAECA,QAAQA,GAAGA,IAAIA,CAACA;YACjBA,CAACA,CACDA,CAACA;QACHA,CAACA;QAEDtD,0BAAKA,GAALA,UAAMA,SAAuBA;YAG5BuD,IAAIA,CAACA,GAAGA,IAAIA,CAACA;YACbA,CAACA,CAACA,eAAeA,EAAEA,CAACA;YAEpBA,IAAIA,KAAKA,GAAUA,CAACA,CAACA;YACrBA,EAAEA,CAAAA,CAACA,SAASA,CAACA,CACbA,CAACA;gBACAA,CAACA,CAACA,OAAOA,CAACA,UAACA,CAACA,EAAEA,CAACA;oBAEdA,EAAEA,CAAAA,CAACA,SAASA,CAACA,CAACA,EAAEA,CAACA,CAACA,CAACA;wBAAAA,EAAEA,KAAKA,CAACA;gBAC5BA,CAACA,CAACA,CAACA;YACJA,CAACA;YACDA,IAAIA,CACJA,CAACA;gBACAA,CAACA,CAACA,OAAOA,CAACA;oBAETA,EAAEA,KAAKA,CAACA;gBACTA,CAACA,CAACA,CAACA;YACJA,CAACA;YAEDA,MAAMA,CAACA,KAAKA,CAACA;QACdA,CAACA;QAGDvD,wBAAGA,GAAHA,UAAIA,SAAsBA;YAEzBwD,IAAIA,MAAMA,GAAGA,IAAIA,CAACA;YAClBA,IAAIA,CAACA,OAAOA,CAACA,UAAAA,CAACA;gBAEbA,EAAEA,CAAAA,CAACA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,CACjBA,CAACA;oBACAA,MAAMA,GAAGA,KAAKA,CAACA;oBACfA,MAAMA,CAACA,KAAKA,CAACA;gBACdA,CAACA;YACFA,CAACA,CAACA,CAACA;YACHA,MAAMA,CAACA,MAAMA,CAACA;QACfA,CAACA;QAGDxD,0BAAKA,GAALA,UAAMA,SAAsBA;YAE3ByD,MAAMA,CAACA,IAAIA,CAACA,GAAGA,CAACA,SA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"} \ No newline at end of file diff --git a/source/System.Linq/Linq.ts b/source/System.Linq/Linq.ts index 6defbae3..3e66e580 100644 --- a/source/System.Linq/Linq.ts +++ b/source/System.Linq/Linq.ts @@ -25,10 +25,13 @@ import {dispose, disposeThese, using} from '../System/Disposable/Utility'; import DisposableBase from '../System/Disposable/DisposableBase'; import ArgumentException from '../System/Exceptions/ArgumentException'; import ObjectDisposedException from '../System/Disposable/ObjectDisposedException'; +import Order from "../System/Collections/Sorting/Order"; +import KeySortedContext from "../System/Collections/Sorting/KeySortedContext"; import enumeratorFrom = Enumerator.from; import enumeratorForEach = Enumerator.forEach; + type Comparable = Primitive|IComparable; 'use strict'; @@ -52,9 +55,9 @@ var Functions = new LinqFunctions(); Object.freeze(Functions); const -LENGTH = 'length', -GET_ENUMERATOR = 'getEnumerator', -UNSUPPORTED_ENUMERABLE = "Unsupported enumerable."; + LENGTH = 'length', + GET_ENUMERATOR = 'getEnumerator', + UNSUPPORTED_ENUMERABLE = "Unsupported enumerable."; // #endregion // TODO: Create UnsupportedEnumerableException. @@ -569,7 +572,7 @@ extends DisposableBase implements IEnumerable } static forEach( - enumerable:IEnumerable, + enumerable:IEnumerable | IArray, action:(element:T, index?:number) => any):void { if(enumerable) @@ -581,6 +584,21 @@ extends DisposableBase implements IEnumerable } } + static map( + enumerable:IEnumerable | IArray, + selector:Selector):TResult[] { + + return enumerable && using(Enumerator.from(enumerable), e=> + { + var result:TResult[] = []; + Enumerator.forEach(e, (e,i)=>{ + result[i]=selector(e); + }); + return result; + }); + + } + // Slightly optimized versions for numbers. static max(values:Enumerable):number { @@ -653,7 +671,7 @@ extends DisposableBase implements IEnumerable var dict:Dictionary = new Dictionary(compareSelector); this.forEach( - x=> + x=> { var key = keySelector(x); var element = elementSelector(x); @@ -2353,9 +2371,9 @@ extends DisposableBase implements IEnumerable { return using( this.getEnumerator(), - e1=> using( + e1=> using( Enumerable.from(second).getEnumerator(), - e2=> + e2=> { while(e1.moveNext()) { @@ -2439,12 +2457,20 @@ extends DisposableBase implements IEnumerable orderBy(keySelector:Selector = Functions.Identity):IOrderedEnumerable { - return new OrderedEnumerable(this, keySelector, false); + return new OrderedEnumerable(this, keySelector, Order.Ascending); + } + + orderUsing(comparison:Comparison):IOrderedEnumerable { + return new OrderedEnumerable(this, null, Order.Ascending, null, comparison); + } + + orderUsingReversed(comparison:Comparison):IOrderedEnumerable { + return new OrderedEnumerable(this, null, Order.Descending, null, comparison); } orderByDescending(keySelector:Selector = Functions.Identity):IOrderedEnumerable { - return new OrderedEnumerable(this, keySelector, true); + return new OrderedEnumerable(this, keySelector, Order.Descending); } /* @@ -2718,7 +2744,7 @@ extends DisposableBase implements IEnumerable var sumInfinite = 0; // Needs more investigation since we are really trying to retain signs. this.forEach( - x=> + x=> { var value = selector(x); if(isNaN(value)) @@ -2742,7 +2768,7 @@ extends DisposableBase implements IEnumerable var result = 1, exists:boolean = false; this.forEach( - x=> + x=> { exists = true; var value = selector(x); @@ -2846,7 +2872,7 @@ extends DisposableBase implements IEnumerable var value:T = undefined; var found:boolean = false; _.forEach( - x => + x => { value = x; found = true; @@ -2866,7 +2892,7 @@ extends DisposableBase implements IEnumerable var value:T = undefined; var found = false; _.forEach( - x => + x => { value = x; found = true; @@ -2884,7 +2910,7 @@ extends DisposableBase implements IEnumerable var value:T = undefined; var found:boolean = false; _.forEach( - x => + x => { found = true; value = x; @@ -2903,7 +2929,7 @@ extends DisposableBase implements IEnumerable var value:T = undefined; var found:boolean = false; _.forEach( - x=> + x=> { found = true; value = x; @@ -2920,7 +2946,7 @@ extends DisposableBase implements IEnumerable var value:T = undefined; var found:boolean = false; _.forEach( - x=> + x=> { if(!found) { @@ -2944,7 +2970,7 @@ extends DisposableBase implements IEnumerable var value:T = undefined; var found:boolean = false; _.forEach( - x=> + x=> { if(!found) { @@ -3613,6 +3639,8 @@ extends Enumerable { thenBy(keySelector:(value:T) => any):IOrderedEnumerable; thenByDescending(keySelector:(value:T) => any):IOrderedEnumerable; + thenUsing(comparison:Comparison):IOrderedEnumerable; + thenUsingReversed(comparison:Comparison):IOrderedEnumerable } class OrderedEnumerable @@ -3622,28 +3650,36 @@ extends Enumerable implements IOrderedEnumerable constructor( private source:IEnumerable, public keySelector:(value:T) => TOrderBy, - public descending:boolean, + public order:Order, public parent?:OrderedEnumerable, - public comparer:Comparison = Values.compare) + public comparer:Comparison = Values.compare) { super(null); } private createOrderedEnumerable( keySelector:(value:T) => TOrderBy, - descending:boolean):IOrderedEnumerable + order:Order):IOrderedEnumerable { - return new OrderedEnumerable(this.source, keySelector, descending, this); + return new OrderedEnumerable(this.source, keySelector, order, this); } thenBy(keySelector:(value:T) => TOrderBy):IOrderedEnumerable { - return this.createOrderedEnumerable(keySelector, false); + return this.createOrderedEnumerable(keySelector, Order.Ascending); + } + + thenUsing(comparison:Comparison):IOrderedEnumerable { + return new OrderedEnumerable(this.source, null, Order.Ascending, this, comparison); } thenByDescending(keySelector:(value:T) => TOrderBy):IOrderedEnumerable { - return this.createOrderedEnumerable(keySelector, true); + return this.createOrderedEnumerable(keySelector, Order.Descending); + } + + thenUsingReversed(comparison:Comparison):IOrderedEnumerable { + return new OrderedEnumerable(this.source, null, Order.Descending, this, comparison); } getEnumerator():EnumeratorBase @@ -3657,19 +3693,8 @@ extends Enumerable implements IOrderedEnumerable () => { index = 0; - buffer = []; - indexes = []; - Enumerable.forEach( - _.source, (item, i) => - { - buffer[i] = item; - indexes[i] = i; - } - ); - var sortContext = SortContext.create(_, null, _.comparer); - sortContext.generateKeys(buffer); - - indexes.sort((a, b) => sortContext.compare(a, b)); + buffer = Enumerable.toArray(_.source); + indexes = createSortContext(_).generateSortedIndexes(buffer); }, (yielder)=> @@ -3696,79 +3721,35 @@ extends Enumerable implements IOrderedEnumerable super._onDispose(); this.source = null; this.keySelector = null; - this.descending = null; + this.order = null; this.parent = null; } -} +} -class SortContext +/** + * Recursively builds a SortContext chain. + * @param orderedEnumerable + * @param currentContext + * @returns {any} + */ +function createSortContext( + orderedEnumerable:OrderedEnumerable, + currentContext:IComparer = null):KeySortedContext { - keys:TOrderBy[]; + var context = new KeySortedContext( + currentContext, + orderedEnumerable.keySelector, + orderedEnumerable.order, + orderedEnumerable.comparer); - constructor( - public keySelector:(value:T) => TOrderBy, - public descending:boolean, - public child:SortContext, - public comparison:Comparison = Values.compare) - { - this.keys = null; - } - - static create( - orderedEnumerable:OrderedEnumerable, - currentContext:SortContext = null, - comparison:Comparison = Values.compare):SortContext - { - var context:SortContext - = new SortContext( - orderedEnumerable.keySelector, - orderedEnumerable.descending, - currentContext, - comparison - ); - - if(orderedEnumerable.parent) - return SortContext.create(orderedEnumerable.parent, context); - - return context; - } - - generateKeys(source:IArray):void - { - var _ = this; - var len = source.length; - var keySelector:(value:T) => TOrderBy = _.keySelector; - var keys = new Array(len); - for(let i = 0; i +interface IArray // ArrayLike { length: number; [index: number]: T; diff --git a/source/System/Collections/Array/Sort.js.map b/source/System/Collections/Array/Sort.js.map index 470a16b3..b7a02fb6 100644 --- a/source/System/Collections/Array/Sort.js.map +++ b/source/System/Collections/Array/Sort.js.map @@ -1 +1 @@ -{"version":3,"file":"Sort.js","sourceRoot":"","sources":["Sort.ts"],"names":["ensureArray","createComparer"],"mappings":"AAAA;;;GAGG;;;;;;;;;IAEH,+CAA+C;IAE/C,sBAAiB,aAAa,CAAC,CAAA;IAC/B,wBAAoC,eAAe,CAAC,CAAA;IAWpD,qBAAwB,KAAW;QAElCA,MAAMA,CAACA,KAAKA,YAAYA,KAAKA;cACrBA,KAAKA;cACVA,CAAIA,KAAKA,CAACA,CAACA;IACfA,CAACA;IAyBD,wBACC,QAA4C,EAC5C,KAAuC,EACvC,eAAyB;QADzBC,qBAAuCA,GAAvCA,SAAuCA;QACvCA,+BAAyBA,GAAzBA,qBAAyBA;QAEzBA,IAAIA,gBAAgBA,GAAGA,CAACA,eAAIA,CAACA,SAASA,CAACA,eAAeA,CAACA,CAACA;QAExDA,MAAMA,CAACA,UAACA,CAAmBA,EAAEA,CAAmBA;YAG/CA,IAAIA,MAAMA,GAAGA,WAAWA,CAACA,QAAQA,CAACA,CAACA,CAACA,CAACA,CAACA;YACtCA,IAAIA,MAAMA,GAAGA,WAAWA,CAACA,QAAQA,CAACA,CAACA,CAACA,CAACA,CAACA;YACtCA,IAAIA,GAAGA,GAAGA,IAAIA,CAACA,GAAGA,CAACA,MAAMA,CAACA,MAAMA,EAAEA,MAAMA,CAACA,MAAMA,CAACA,CAACA;YAEjDA,IAAIA,MAAMA,GAAWA,KAAKA,YAAYA,KAAKA,GAAYA,KAAKA,GAAGA,IAAIA,CAACA;YACpEA,GAAGA,CAAAA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAACA,GAAGA,EAAEA,CAACA,EAAEA,EACzBA,CAACA;gBACAA,IAAIA,EAAEA,GAAGA,MAAMA,CAACA,CAACA,CAACA,EAAEA,EAAEA,GAAGA,MAAMA,CAACA,CAACA,CAACA,EAC9BA,CAACA,GAAIA,MAAMA;sBACRA,CAACA,CAACA,GAACA,MAAMA,CAACA,MAAMA,GAAGA,MAAMA,CAACA,CAACA,CAACA,GAAGA,CAAeA,CAACA;sBACxCA,KAAKA,CAACA;gBAEpBA,EAAEA,CAAAA,CAACA,gBAAgBA,CAACA,CACpBA,CAACA;oBACAA,EAAEA,CAAAA,CAACA,eAAIA,CAACA,SAASA,CAACA,EAAEA,CAACA,CAACA;wBACrBA,EAAEA,GAAGA,eAAeA,CAACA;oBACtBA,EAAEA,CAAAA,CAACA,eAAIA,CAACA,SAASA,CAACA,EAAEA,CAACA,CAACA;wBACrBA,EAAEA,GAAGA,eAAeA,CAACA;gBAEvBA,CAACA;gBAEDA,IAAIA,CAACA,GAAGA,iBAAOA,CAACA,EAAEA,EAAEA,EAAEA,CAACA,CAACA;gBACxBA,EAAEA,CAAAA,CAACA,CAACA,KAAGA,CAAmBA,CAACA;oBAC1BA,MAAMA,CAACA,CAACA,GAACA,CAACA,CAACA;YAEbA,CAACA;YAEDA,MAAMA,CAACA,CAACA,CAACA;QACVA,CAACA,CAACA;IACHA,CAACA;IAvCe,sBAAc,iBAuC7B;IAGkB,eAAO;IACP,UAAE,kBAJpB;IAKA"} \ No newline at end of file +{"version":3,"file":"Sort.js","sourceRoot":"","sources":["Sort.ts"],"names":["ensureArray","createComparer"],"mappings":"AAAA;;;GAGG;;;;;;;;;IAEH,+CAA+C;IAE/C,sBAAiB,aAAa,CAAC,CAAA;IAC/B,wBAAoC,eAAe,CAAC,CAAA;IAGpD,qBAAwB,KAAW;QAElCA,MAAMA,CAACA,KAAKA,YAAYA,KAAKA;cACrBA,KAAKA;cACVA,CAAIA,KAAKA,CAACA,CAACA;IACfA,CAACA;IAyBD,wBACC,QAA4C,EAC5C,KAAuC,EACvC,eAAyB;QADzBC,qBAAuCA,GAAvCA,SAAuCA;QACvCA,+BAAyBA,GAAzBA,qBAAyBA;QAEzBA,IAAIA,gBAAgBA,GAAGA,CAACA,eAAIA,CAACA,SAASA,CAACA,eAAeA,CAACA,CAACA;QAExDA,MAAMA,CAACA,UAACA,CAAmBA,EAAEA,CAAmBA;YAG/CA,IAAIA,MAAMA,GAAGA,WAAWA,CAACA,QAAQA,CAACA,CAACA,CAACA,CAACA,CAACA;YACtCA,IAAIA,MAAMA,GAAGA,WAAWA,CAACA,QAAQA,CAACA,CAACA,CAACA,CAACA,CAACA;YACtCA,IAAIA,GAAGA,GAAGA,IAAIA,CAACA,GAAGA,CAACA,MAAMA,CAACA,MAAMA,EAAEA,MAAMA,CAACA,MAAMA,CAACA,CAACA;YAEjDA,IAAIA,MAAMA,GAAWA,KAAKA,YAAYA,KAAKA,GAAYA,KAAKA,GAAGA,IAAIA,CAACA;YACpEA,GAAGA,CAAAA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAACA,GAAGA,EAAEA,CAACA,EAAEA,EACzBA,CAACA;gBACAA,IAAIA,EAAEA,GAAGA,MAAMA,CAACA,CAACA,CAACA,EAAEA,EAAEA,GAAGA,MAAMA,CAACA,CAACA,CAACA,EAC9BA,CAACA,GAAIA,MAAMA;sBACRA,CAACA,CAACA,GAACA,MAAMA,CAACA,MAAMA,GAAGA,MAAMA,CAACA,CAACA,CAACA,GAAGA,CAAeA,CAACA;sBACxCA,KAAKA,CAACA;gBAEpBA,EAAEA,CAAAA,CAACA,gBAAgBA,CAACA,CACpBA,CAACA;oBACAA,EAAEA,CAAAA,CAACA,eAAIA,CAACA,SAASA,CAACA,EAAEA,CAACA,CAACA;wBACrBA,EAAEA,GAAGA,eAAeA,CAACA;oBACtBA,EAAEA,CAAAA,CAACA,eAAIA,CAACA,SAASA,CAACA,EAAEA,CAACA,CAACA;wBACrBA,EAAEA,GAAGA,eAAeA,CAACA;gBAEvBA,CAACA;gBAEDA,IAAIA,CAACA,GAAGA,iBAAOA,CAACA,EAAEA,EAAEA,EAAEA,CAACA,CAACA;gBACxBA,EAAEA,CAAAA,CAACA,CAACA,KAAGA,CAAmBA,CAACA;oBAC1BA,MAAMA,CAACA,CAACA,GAACA,CAACA,CAACA;YAEbA,CAACA;YAEDA,MAAMA,CAACA,CAACA,CAACA;QACVA,CAACA,CAACA;IACHA,CAACA;IAvCe,sBAAc,iBAuC7B;IAGkB,eAAO;IACP,UAAE,kBAJpB;IAKA"} \ No newline at end of file diff --git a/source/System/Collections/Array/Sort.ts b/source/System/Collections/Array/Sort.ts index da88be6e..e42ccc24 100644 --- a/source/System/Collections/Array/Sort.ts +++ b/source/System/Collections/Array/Sort.ts @@ -7,15 +7,7 @@ import Type from '../../Types'; import {compare,CompareResult} from '../../Compare'; - -/** - * Enum representation of sorting order. - */ -export const enum Order -{ - Ascending = +1, - Descending = -1 -} +import Order from '../Sorting/Order'; function ensureArray(value:T|T[]):T[] { diff --git a/source/System/Collections/Sorting/KeySortedContext.js b/source/System/Collections/Sorting/KeySortedContext.js new file mode 100644 index 00000000..1464ba94 --- /dev/null +++ b/source/System/Collections/Sorting/KeySortedContext.js @@ -0,0 +1,47 @@ +/* + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md + */ +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +}; +(function (deps, factory) { + if (typeof module === 'object' && typeof module.exports === 'object') { + var v = factory(require, exports); if (v !== undefined) module.exports = v; + } + else if (typeof define === 'function' && define.amd) { + define(deps, factory); + } +})(["require", "exports", '../../Compare', "./SortContext", "../../Functions"], function (require, exports) { + /// + /// + /// + /// + var Values = require('../../Compare'); + var SortContext_1 = require("./SortContext"); + var Functions_1 = require("../../Functions"); + var KeySortedContext = (function (_super) { + __extends(KeySortedContext, _super); + function KeySortedContext(next, _keySelector, order, comparer) { + if (order === void 0) { order = 1; } + if (comparer === void 0) { comparer = Values.compare; } + _super.call(this, next, comparer, order); + this._keySelector = _keySelector; + } + KeySortedContext.prototype.compare = function (a, b) { + var _ = this, ks = _._keySelector; + if (!ks || ks == Functions_1.default.Identity) + return _super.prototype.compare.call(this, a, b); + var d = Values.compare(ks(a), ks(b)); + if (d == 0 && _._next) + return _._next.compare(a, b); + return _._order * d; + }; + return KeySortedContext; + })(SortContext_1.default); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = KeySortedContext; +}); +//# sourceMappingURL=KeySortedContext.js.map \ No newline at end of file diff --git a/source/System/Collections/Sorting/KeySortedContext.js.map b/source/System/Collections/Sorting/KeySortedContext.js.map new file mode 100644 index 00000000..9eab93cb --- /dev/null +++ b/source/System/Collections/Sorting/KeySortedContext.js.map @@ -0,0 +1 @@ +{"version":3,"file":"KeySortedContext.js","sourceRoot":"","sources":["KeySortedContext.ts"],"names":["KeySortedContext","KeySortedContext.constructor","KeySortedContext.compare"],"mappings":"AAAA;;;GAGG;;;;;;;;;;;;;;IAEH,+CAA+C;IAC/C,yCAAyC;IACzC,2CAA2C;IAC3C,2CAA2C;IAC3C,IAAY,MAAM,WAAM,eACxB,CAAC,CADsC;IAEvC,4BAAwB,eAAe,CAAC,CAAA;IACxC,0BAAsB,iBAAiB,CAAC,CAAA;IAIxC;QAC2DA,oCAAcA;QAExEA,0BACCA,IAAiBA,EACPA,YAA6BA,EACvCA,KAA6BA,EAC7BA,QAAuCA;YADvCC,qBAA6BA,GAA7BA,SAA6BA;YAC7BA,wBAAuCA,GAAvCA,WAAyBA,MAAMA,CAACA,OAAOA;YAEvCA,kBAAMA,IAAIA,EAAEA,QAAQA,EAAEA,KAAKA,CAACA,CAACA;YAJnBA,iBAAYA,GAAZA,YAAYA,CAAiBA;QAKxCA,CAACA;QAEDD,kCAAOA,GAAPA,UAAQA,CAAGA,EAAEA,CAAGA;YAEfE,IAAIA,CAACA,GAAGA,IAAIA,EAAEA,EAAEA,GAAGA,CAACA,CAACA,YAAYA,CAACA;YAClCA,EAAEA,CAAAA,CAACA,CAACA,EAAEA,IAAIA,EAAEA,IAAEA,mBAASA,CAACA,QAAQA,CAACA;gBAACA,MAAMA,CAACA,gBAAKA,CAACA,OAAOA,YAACA,CAACA,EAAEA,CAACA,CAACA,CAACA;YAE7DA,IAAIA,CAACA,GAAGA,MAAMA,CAACA,OAAOA,CAAMA,EAAEA,CAACA,CAACA,CAACA,EAAOA,EAAEA,CAACA,CAACA,CAACA,CAACA,CAACA;YAC/CA,EAAEA,CAAAA,CAACA,CAACA,IAAEA,CAACA,IAAIA,CAACA,CAACA,KAAKA,CAACA;gBAACA,MAAMA,CAACA,CAACA,CAACA,KAAKA,CAACA,OAAOA,CAACA,CAACA,EAAEA,CAACA,CAACA,CAACA;YACjDA,MAAMA,CAACA,CAACA,CAACA,MAAMA,GAACA,CAACA,CAACA;QACnBA,CAACA;QACFF,uBAACA;IAADA,CAACA,AArBD,EAC2D,qBAAW,EAoBrE;IArBD;sCAqBC,CAAA"} \ No newline at end of file diff --git a/source/System/Collections/Sorting/KeySortedContext.ts b/source/System/Collections/Sorting/KeySortedContext.ts new file mode 100644 index 00000000..429ac7ef --- /dev/null +++ b/source/System/Collections/Sorting/KeySortedContext.ts @@ -0,0 +1,38 @@ +/* + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md + */ + +/// +/// +/// +/// +import * as Values from '../../Compare' +import Order from './Order' +import SortContext from "./SortContext"; +import Functions from "../../Functions"; + +type Comparable = Primitive|IComparable + +export default +class KeySortedContext extends SortContext +{ + constructor( + next:IComparer, + protected _keySelector:Selector, + order:Order = Order.Ascending, + comparer:Comparison = Values.compare) + { + super(next, comparer, order); + } + + compare(a:T, b:T):number + { + var _ = this, ks = _._keySelector; + if(!ks || ks==Functions.Identity) return super.compare(a, b); + // We force here since it can be a Primitive or IComparable + var d = Values.compare(ks(a), ks(b)); + if(d==0 && _._next) return _._next.compare(a, b); + return _._order*d; + } +} diff --git a/source/System/Collections/Sorting/Order.js b/source/System/Collections/Sorting/Order.js new file mode 100644 index 00000000..19fcb6af --- /dev/null +++ b/source/System/Collections/Sorting/Order.js @@ -0,0 +1,10 @@ +(function (deps, factory) { + if (typeof module === 'object' && typeof module.exports === 'object') { + var v = factory(require, exports); if (v !== undefined) module.exports = v; + } + else if (typeof define === 'function' && define.amd) { + define(deps, factory); + } +})(["require", "exports"], function (require, exports) { +}); +//# sourceMappingURL=Order.js.map \ No newline at end of file diff --git a/source/System/Collections/Sorting/Order.js.map b/source/System/Collections/Sorting/Order.js.map new file mode 100644 index 00000000..9598b756 --- /dev/null +++ b/source/System/Collections/Sorting/Order.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Order.js","sourceRoot":"","sources":["Order.ts"],"names":[],"mappings":";;;;;;;;IAOC"} \ No newline at end of file diff --git a/source/System/Collections/Sorting/Order.ts b/source/System/Collections/Sorting/Order.ts new file mode 100644 index 00000000..42054258 --- /dev/null +++ b/source/System/Collections/Sorting/Order.ts @@ -0,0 +1,10 @@ +/** + * Enum representation of sorting order. + */ +const enum Order +{ + Ascending = +1, + Descending = -1 +} + +export default Order; \ No newline at end of file diff --git a/source/System/Collections/Sorting/SortContext.js b/source/System/Collections/Sorting/SortContext.js new file mode 100644 index 00000000..70e4e84d --- /dev/null +++ b/source/System/Collections/Sorting/SortContext.js @@ -0,0 +1,50 @@ +/* + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md + */ +(function (deps, factory) { + if (typeof module === 'object' && typeof module.exports === 'object') { + var v = factory(require, exports); if (v !== undefined) module.exports = v; + } + else if (typeof define === 'function' && define.amd) { + define(deps, factory); + } +})(["require", "exports", '../../Compare'], function (require, exports) { + /// + /// + /// + var Values = require('../../Compare'); + var SortContext = (function () { + function SortContext(_next, _comparer, _order) { + if (_comparer === void 0) { _comparer = Values.compare; } + if (_order === void 0) { _order = 1; } + this._next = _next; + this._comparer = _comparer; + this._order = _order; + } + Object.defineProperty(SortContext.prototype, "order", { + get: function () { return this._order; }, + enumerable: true, + configurable: true + }); + SortContext.prototype.generateSortedIndexes = function (source) { + var _this = this; + if (source == null) + return []; + var result = source.map(function (s, i) { return i; }); + result.sort(function (a, b) { return _this.compare(source[a], source[b]); }); + return result; + }; + SortContext.prototype.compare = function (a, b) { + var _ = this; + var d = _._comparer(a, b); + if (d == 0 && _._next) + return _._next.compare(a, b); + return _._order * d; + }; + return SortContext; + })(); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = SortContext; +}); +//# sourceMappingURL=SortContext.js.map \ No newline at end of file diff --git a/source/System/Collections/Sorting/SortContext.js.map b/source/System/Collections/Sorting/SortContext.js.map new file mode 100644 index 00000000..5b76cb2f --- /dev/null +++ b/source/System/Collections/Sorting/SortContext.js.map @@ -0,0 +1 @@ +{"version":3,"file":"SortContext.js","sourceRoot":"","sources":["SortContext.ts"],"names":["SortContext","SortContext.constructor","SortContext.order","SortContext.generateSortedIndexes","SortContext.compare"],"mappings":"AAAA;;;GAGG;;;;;;;;;IAEH,+CAA+C;IAC/C,yCAAyC;IACzC,2CAA2C;IAC3C,IAAY,MAAM,WAAM,eACxB,CAAC,CADsC;IAKvC;QAWCA,qBACWA,KAAkBA,EAClBA,SAAwCA,EACxCA,MAA8BA;YADxCC,yBAAkDA,GAAlDA,YAAoCA,MAAMA,CAACA,OAAOA;YAClDA,sBAAwCA,GAAxCA,UAAwCA;YAF9BA,UAAKA,GAALA,KAAKA,CAAaA;YAClBA,cAASA,GAATA,SAASA,CAA+BA;YACxCA,WAAMA,GAANA,MAAMA,CAAwBA;QAEzCA,CAACA;QARDD,sBAAIA,8BAAKA;iBAATA,cACEE,MAAMA,CAACA,IAAIA,CAACA,MAAMA,CAACA,CAACA,CAACA;;;WAAAF;QAevBA,2CAAqBA,GAArBA,UAAsBA,MAAUA;YAAhCG,iBAMCA;YAJAA,EAAEA,CAAAA,CAACA,MAAMA,IAAEA,IAAIA,CAACA;gBAACA,MAAMA,CAACA,EAAEA,CAACA;YAC3BA,IAAIA,MAAMA,GAAYA,MAAMA,CAACA,GAAGA,CAACA,UAACA,CAACA,EAAEA,CAACA,IAAGA,OAAAA,CAACA,EAADA,CAACA,CAACA,CAACA;YAC5CA,MAAMA,CAACA,IAAIA,CAACA,UAACA,CAACA,EAAEA,CAACA,IAAKA,OAAAA,KAAIA,CAACA,OAAOA,CAACA,MAAMA,CAACA,CAACA,CAACA,EAAEA,MAAMA,CAACA,CAACA,CAACA,CAACA,EAAlCA,CAAkCA,CAACA,CAACA;YAC1DA,MAAMA,CAACA,MAAMA,CAACA;QACfA,CAACA;QAQDH,6BAAOA,GAAPA,UAAQA,CAAGA,EAAEA,CAAGA;YAEfI,IAAIA,CAACA,GAAGA,IAAIA,CAACA;YACbA,IAAIA,CAACA,GAAGA,CAACA,CAACA,SAASA,CAACA,CAACA,EAAEA,CAACA,CAACA,CAACA;YAC1BA,EAAEA,CAAAA,CAACA,CAACA,IAAEA,CAACA,IAAIA,CAACA,CAACA,KAAKA,CAACA;gBAACA,MAAMA,CAACA,CAACA,CAACA,KAAKA,CAACA,OAAOA,CAACA,CAACA,EAAEA,CAACA,CAACA,CAACA;YACjDA,MAAMA,CAACA,CAACA,CAACA,MAAMA,GAACA,CAACA,CAACA;QACnBA,CAACA;QACFJ,kBAACA;IAADA,CAACA,AA7CD,IA6CC;IA7CD;iCA6CC,CAAA"} \ No newline at end of file diff --git a/source/System/Collections/Sorting/SortContext.ts b/source/System/Collections/Sorting/SortContext.ts new file mode 100644 index 00000000..2d4eb600 --- /dev/null +++ b/source/System/Collections/Sorting/SortContext.ts @@ -0,0 +1,59 @@ +/* + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md + */ + +/// +/// +/// +import * as Values from '../../Compare' +import Order from './Order' +import Integer from '../../Integer' +import forEach from "../Enumeration/forEach" + +export default +class SortContext implements IComparer +{ + + /** + * Direction of the comparison. + * @type {Order} + */ + get order():Order + { return this._order; } + + constructor( + protected _next:IComparer, + protected _comparer:Comparison = Values.compare, + protected _order:Order = Order.Ascending) + { + } + + + /** + * Generates an array of indexes from the source in order of their expected sort without modifying the source. + * @param source + * @returns {number[]} + */ + generateSortedIndexes(source:T[]):number[] + { + if(source==null) return []; + var result:number[] = source.map((s, i)=>i); + result.sort((a, b) => this.compare(source[a], source[b])); + return result; + } + + /** + * Compares two values based upon SortContext parameters. + * @param a + * @param b + * @returns {any} + */ + compare(a:T, b:T):number + { + var _ = this; + var d = _._comparer(a, b); + if(d==0 && _._next) return _._next.compare(a, b); + return _._order*d; + } +} diff --git a/source/System/IComparer.js b/source/System/IComparer.js new file mode 100644 index 00000000..40bf73f1 --- /dev/null +++ b/source/System/IComparer.js @@ -0,0 +1,6 @@ +/* + * @author electricessence / https://github.com/electricessence/ + * Based upon .NET source. + * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md + */ +//# sourceMappingURL=IComparer.js.map \ No newline at end of file diff --git a/source/System/IComparer.js.map b/source/System/IComparer.js.map new file mode 100644 index 00000000..ee4e020d --- /dev/null +++ b/source/System/IComparer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"IComparer.js","sourceRoot":"","sources":["IComparer.ts"],"names":[],"mappings":"AAAA;;;;GAIG"} \ No newline at end of file diff --git a/source/System/IComparer.ts b/source/System/IComparer.ts new file mode 100644 index 00000000..ec86bd94 --- /dev/null +++ b/source/System/IComparer.ts @@ -0,0 +1,10 @@ +/* + * @author electricessence / https://github.com/electricessence/ + * Based upon .NET source. + * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md + */ + +interface IComparer +{ + compare(a:T, b:T):number; +}