From 7be5cbac485aeb22f8700d74c3f8ec69413d711b Mon Sep 17 00:00:00 2001 From: electricessence Date: Fri, 20 May 2016 18:27:26 -0700 Subject: [PATCH] Added support for generators (Iterable). Altered forEach to return a number instead of true, false, or other. Includes Promise prototype. --- bower.json | 2 +- dist/commonjs/System.Linq/Linq.d.ts | 4 +- dist/commonjs/System.Linq/Linq.js | 18 ++- dist/commonjs/System.Linq/Linq.js.map | 2 +- .../System/Collections/CollectionBase.d.ts | 2 +- .../System/Collections/CollectionBase.js | 9 +- .../System/Collections/CollectionBase.js.map | 2 +- .../Collections/Enumeration/Enumerator.d.ts | 12 +- .../Collections/Enumeration/Enumerator.js | 129 +++++++-------- .../Collections/Enumeration/Enumerator.js.map | 2 +- .../Enumeration/EnumeratorBase.d.ts | 3 + .../Collections/Enumeration/EnumeratorBase.js | 49 ++++-- .../Enumeration/EnumeratorBase.js.map | 2 +- .../System/Collections/LinkedList.d.ts | 2 +- .../commonjs/System/Collections/LinkedList.js | 2 +- .../System/Collections/LinkedList.js.map | 2 +- .../System/Collections/LinkedNodeList.d.ts | 2 +- .../System/Collections/LinkedNodeList.js | 1 + .../System/Collections/LinkedNodeList.js.map | 2 +- dist/commonjs/System/Collections/List.d.ts | 2 +- dist/commonjs/System/Collections/List.js | 2 +- dist/commonjs/System/Collections/List.js.map | 2 +- dist/commonjs/System/Collections/Queue.d.ts | 2 +- dist/commonjs/System/Collections/Queue.js | 2 +- dist/commonjs/System/Collections/Queue.js.map | 2 +- dist/commonjs/System/Collections/SetBase.d.ts | 2 +- dist/commonjs/System/Collections/SetBase.js | 9 +- .../System/Collections/SetBase.js.map | 2 +- dist/commonjs/System/Functions.d.ts | 8 +- dist/commonjs/System/Functions.js.map | 2 +- .../System/Text/RegexMatchEnumerator.js | 4 +- .../System/Text/RegexMatchEnumerator.js.map | 2 +- package.json | 2 +- source/System.Linq/Linq.js | 24 +-- source/System.Linq/Linq.js.map | 2 +- source/System.Linq/Linq.ts | 17 +- source/System/Collections/CollectionBase.js | 10 +- .../System/Collections/CollectionBase.js.map | 2 +- source/System/Collections/CollectionBase.ts | 12 +- .../Enumeration/EmptyEnumerator.js | 30 ++++ .../Enumeration/EmptyEnumerator.js.map | 1 + .../Enumeration/EmptyEnumerator.ts | 29 ++++ .../Collections/Enumeration/Enumerator.js | 118 +++++++------- .../Collections/Enumeration/Enumerator.js.map | 2 +- .../Collections/Enumeration/Enumerator.ts | 148 +++++++++--------- .../Collections/Enumeration/EnumeratorBase.js | 68 +++++--- .../Enumeration/EnumeratorBase.js.map | 2 +- .../Collections/Enumeration/EnumeratorBase.ts | 72 ++++++--- .../Enumeration/IEnumerateEach.d.ts | 2 +- .../Collections/Enumeration/IEnumerator.d.ts | 10 +- .../Collections/Enumeration/IIterator.d.ts | 3 +- .../Enumeration/InfiniteEnumerator.js | 47 ++++++ .../Enumeration/InfiniteEnumerator.js.map | 1 + .../Enumeration/InfiniteEnumerator.ts | 55 +++++++ .../Enumeration/IteratorEnumerator.js | 57 +++++++ .../Enumeration/IteratorEnumerator.js.map | 1 + .../Enumeration/IteratorEnumerator.ts | 60 +++++++ .../Collections/Enumeration/IteratorResult.js | 36 +++++ .../Enumeration/IteratorResult.js.map | 1 + .../Collections/Enumeration/IteratorResult.ts | 28 ++++ .../Enumeration/SimpleEnumerableBase.js | 74 +++++++++ .../Enumeration/SimpleEnumerableBase.js.map | 1 + .../Enumeration/SimpleEnumerableBase.ts | 93 +++++++++++ source/System/Collections/LinkedList.js | 7 +- source/System/Collections/LinkedList.js.map | 2 +- source/System/Collections/LinkedList.ts | 7 +- source/System/Collections/LinkedNodeList.js | 1 + .../System/Collections/LinkedNodeList.js.map | 2 +- source/System/Collections/LinkedNodeList.ts | 4 +- source/System/Collections/List.js | 2 +- source/System/Collections/List.js.map | 2 +- source/System/Collections/List.ts | 4 +- source/System/Collections/Queue.js | 2 +- source/System/Collections/Queue.js.map | 2 +- source/System/Collections/Queue.ts | 4 +- source/System/Collections/SetBase.js | 16 +- source/System/Collections/SetBase.js.map | 2 +- source/System/Collections/SetBase.ts | 17 +- source/System/Functions.js.map | 2 +- source/System/Functions.ts | 8 +- source/System/Promises/Promise.js.map | 2 +- source/System/Promises/README.md | 3 + source/System/Text/RegexMatchEnumerator.js | 6 +- .../System/Text/RegexMatchEnumerator.js.map | 2 +- source/System/Text/RegexMatchEnumerator.ts | 4 +- .../Collections/Enumeration/Enumerator.js | 30 +++- .../Collections/Enumeration/Enumerator.js.map | 2 +- .../Collections/Enumeration/Enumerator.ts | 32 +++- 88 files changed, 1052 insertions(+), 409 deletions(-) create mode 100644 source/System/Collections/Enumeration/EmptyEnumerator.js create mode 100644 source/System/Collections/Enumeration/EmptyEnumerator.js.map create mode 100644 source/System/Collections/Enumeration/EmptyEnumerator.ts create mode 100644 source/System/Collections/Enumeration/InfiniteEnumerator.js create mode 100644 source/System/Collections/Enumeration/InfiniteEnumerator.js.map create mode 100644 source/System/Collections/Enumeration/InfiniteEnumerator.ts create mode 100644 source/System/Collections/Enumeration/IteratorEnumerator.js create mode 100644 source/System/Collections/Enumeration/IteratorEnumerator.js.map create mode 100644 source/System/Collections/Enumeration/IteratorEnumerator.ts create mode 100644 source/System/Collections/Enumeration/IteratorResult.js create mode 100644 source/System/Collections/Enumeration/IteratorResult.js.map create mode 100644 source/System/Collections/Enumeration/IteratorResult.ts create mode 100644 source/System/Collections/Enumeration/SimpleEnumerableBase.js create mode 100644 source/System/Collections/Enumeration/SimpleEnumerableBase.js.map create mode 100644 source/System/Collections/Enumeration/SimpleEnumerableBase.ts create mode 100644 source/System/Promises/README.md diff --git a/bower.json b/bower.json index 2d87cae4..ee49e2bf 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "typescript-dotnet", - "version": "2.13.3", + "version": "2.13.4", "ignore": [ ".bowercc", ".gitignore", diff --git a/dist/commonjs/System.Linq/Linq.d.ts b/dist/commonjs/System.Linq/Linq.d.ts index eb598fc4..7629c83e 100644 --- a/dist/commonjs/System.Linq/Linq.d.ts +++ b/dist/commonjs/System.Linq/Linq.d.ts @@ -105,7 +105,7 @@ export declare class Enumerable extends InfiniteEnumerable { static generate(factory: (index?: number) => T): InfiniteEnumerable; static generate(factory: (index?: number) => T, count: number): FiniteEnumerable; static unfold(seed: T, valueFactory: Selector, skipSeed?: Boolean): InfiniteEnumerable; - static forEach(enumerable: IEnumerableOrArray, action: (element: T, index?: number) => any): void; + static forEach(enumerable: IEnumerableOrArray, action: (element: T, index?: number) => any, max?: number): number; static map(enumerable: IEnumerableOrArray, selector: Selector): TResult[]; static max(values: FiniteEnumerable): number; static min(values: FiniteEnumerable): number; @@ -117,7 +117,7 @@ export declare class Enumerable extends InfiniteEnumerable { takeUntil(predicate: Predicate, includeUntilValue?: boolean): Enumerable; forEach(action: Predicate | Action): void; toArray(predicate?: Predicate): T[]; - copyTo(target: T[], index?: number): T[]; + copyTo(target: T[], index?: number, count?: number): T[]; toLookup(keySelector: Selector, elementSelector?: Selector, compareSelector?: Selector): ILookup; toMap(keySelector: Selector, elementSelector: Selector): IMap; toDictionary(keySelector: Selector, elementSelector: Selector, compareSelector?: Selector): Dictionary; diff --git a/dist/commonjs/System.Linq/Linq.js b/dist/commonjs/System.Linq/Linq.js index 119fb640..dd8078ec 100644 --- a/dist/commonjs/System.Linq/Linq.js +++ b/dist/commonjs/System.Linq/Linq.js @@ -21,6 +21,7 @@ var Values = require("../System/Compare"); var Arrays = require("../System/Collections/Array/Compare"); var ArrayUtility = require("../System/Collections/Array/Utility"); var Enumerator_1 = require("../System/Collections/Enumeration/Enumerator"); +var EmptyEnumerator_1 = require("../System/Collections/Enumeration/EmptyEnumerator"); var Types_1 = require("../System/Types"); var Integer_1 = require("../System/Integer"); var Functions_1 = require("../System/Functions"); @@ -68,7 +69,7 @@ var LinqFunctions = function (_Functions_1$Function) { var Functions = new LinqFunctions(); Object.freeze(Functions); function getEmptyEnumerator() { - return Enumerator_1.empty; + return EmptyEnumerator_1.EmptyEnumerator; } var InfiniteEnumerable = function (_DisposableBase_1$Dis) { @@ -310,7 +311,7 @@ var InfiniteEnumerable = function (_DisposableBase_1$Dis) { var value = resultSelector(enumerator.current, len); enumeratorStack[len++] = enumerator; var e = Enumerable.fromAny(childrenSelector(enumerator.current)); - enumerator = e ? e.getEnumerator() : Enumerator_1.empty; + enumerator = e ? e.getEnumerator() : EmptyEnumerator_1.EmptyEnumerator; return yielder.yieldReturn(value); } if (len == 0) return false; @@ -564,7 +565,7 @@ var InfiniteEnumerable = function (_DisposableBase_1$Dis) { enumerator = _.getEnumerator(); keys = new Dictionary_1.Dictionary(compareSelector); if (second) Enumerator_1.forEach(second, function (key) { - return keys.addByKeyValue(key, true); + keys.addByKeyValue(key, true); }); }, function (yielder) { throwIfDisposed(disposed); @@ -1096,13 +1097,14 @@ var Enumerable = function (_InfiniteEnumerable) { key: "copyTo", value: function copyTo(target) { var index = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1]; + var count = arguments.length <= 2 || arguments[2] === undefined ? Infinity : arguments[2]; this.throwIfDisposed(); if (!target) throw new ArgumentNullException_1.ArgumentNullException("target"); Integer_1.Integer.assertZeroOrGreater(index); Enumerator_1.forEach(this, function (x, i) { target[i + index] = x; - }); + }, count); return target; } }, { @@ -1961,7 +1963,9 @@ var Enumerable = function (_InfiniteEnumerable) { }, { key: "forEach", value: function forEach(enumerable, action) { - Enumerator_1.forEach(enumerable, action); + var max = arguments.length <= 2 || arguments[2] === undefined ? Infinity : arguments[2]; + + return Enumerator_1.forEach(enumerable, action, max); } }, { key: "map", @@ -2077,9 +2081,11 @@ var ArrayEnumerable = function (_FiniteEnumerable) { }, { key: "forEach", value: function forEach(action) { + var max = arguments.length <= 1 || arguments[1] === undefined ? Infinity : arguments[1]; + var _ = this; _.throwIfDisposed(); - Enumerator_1.forEach(_._source, action); + return Enumerator_1.forEach(_._source, action, max); } }, { key: "any", diff --git a/dist/commonjs/System.Linq/Linq.js.map b/dist/commonjs/System.Linq/Linq.js.map index 6978ee7d..d49a2890 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.js","System.Linq/Linq.ts"],"names":[],"mappings":"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","file":"System.Linq/Linq.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Original: http://linqjs.codeplex.com/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst Values = require(\"../System/Compare\");\nconst Arrays = require(\"../System/Collections/Array/Compare\");\nconst ArrayUtility = require(\"../System/Collections/Array/Utility\");\nconst Enumerator_1 = require(\"../System/Collections/Enumeration/Enumerator\");\nconst Types_1 = require(\"../System/Types\");\nconst Integer_1 = require(\"../System/Integer\");\nconst Functions_1 = require(\"../System/Functions\");\nconst ArrayEnumerator_1 = require(\"../System/Collections/Enumeration/ArrayEnumerator\");\nconst EnumeratorBase_1 = require(\"../System/Collections/Enumeration/EnumeratorBase\");\nconst Dictionary_1 = require(\"../System/Collections/Dictionaries/Dictionary\");\nconst Queue_1 = require(\"../System/Collections/Queue\");\nconst dispose_1 = require(\"../System/Disposable/dispose\");\nconst DisposableBase_1 = require(\"../System/Disposable/DisposableBase\");\nconst UnsupportedEnumerableException_1 = require(\"../System/Collections/Enumeration/UnsupportedEnumerableException\");\nconst ObjectDisposedException_1 = require(\"../System/Disposable/ObjectDisposedException\");\nconst KeySortedContext_1 = require(\"../System/Collections/Sorting/KeySortedContext\");\nconst ArgumentNullException_1 = require(\"../System/Exceptions/ArgumentNullException\");\nconst ArgumentOutOfRangeException_1 = require(\"../System/Exceptions/ArgumentOutOfRangeException\");\nconst INVALID_DEFAULT = {};\nconst VOID0 = void 0;\nconst BREAK = element => 0;\nclass LinqFunctions extends Functions_1.Functions {\n Greater(a, b) {\n return a > b ? a : b;\n }\n Lesser(a, b) {\n return a < b ? a : b;\n }\n}\nvar Functions = new LinqFunctions();\nObject.freeze(Functions);\nfunction getEmptyEnumerator() {\n return Enumerator_1.empty;\n}\nclass InfiniteEnumerable extends DisposableBase_1.DisposableBase {\n constructor(_enumeratorFactory, finalizer) {\n super(finalizer);\n this._enumeratorFactory = _enumeratorFactory;\n this._isEndless = true;\n }\n get isEndless() {\n return this._isEndless;\n }\n getEnumerator() {\n this.throwIfDisposed();\n return this._enumeratorFactory();\n }\n _onDispose() {\n super._onDispose();\n this._enumeratorFactory = null;\n }\n asEnumerable() {\n var _ = this;\n _.throwIfDisposed();\n return new InfiniteEnumerable(() => _.getEnumerator());\n }\n doAction(action, initializer, isEndless = this.isEndless) {\n var _ = this, disposed = !_.throwIfDisposed();\n return new Enumerable(() => {\n var enumerator;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n throwIfDisposed(disposed);\n if (initializer)\n initializer();\n index = 0;\n enumerator = _.getEnumerator();\n }, (yielder) => {\n throwIfDisposed(disposed);\n while (enumerator.moveNext()) {\n var actionResult = action(enumerator.current, index++);\n if (actionResult === false || actionResult === 0)\n return yielder.yieldBreak();\n if (actionResult !== 2)\n return yielder.yieldReturn(enumerator.current);\n }\n return false;\n }, () => {\n dispose_1.dispose(enumerator);\n }, isEndless);\n }, () => {\n disposed = true;\n }, isEndless);\n }\n force() {\n this.throwIfDisposed();\n this.doAction(BREAK)\n .getEnumerator()\n .moveNext();\n }\n skip(count) {\n var _ = this;\n _.throwIfDisposed();\n if (!isFinite(count))\n return Enumerable.empty();\n Integer_1.Integer.assert(count, \"count\");\n return this.doAction((element, index) => index < count\n ? 2\n : 1);\n }\n take(count) {\n if (!(count > 0))\n return Enumerable.empty();\n var _ = this;\n _.throwIfDisposed();\n if (!isFinite(count))\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException('count', count, 'Must be finite.');\n Integer_1.Integer.assert(count, \"count\");\n return _.doAction((element, index) => index < count, null, false);\n }\n elementAt(index) {\n var v = this.elementAtOrDefault(index, INVALID_DEFAULT);\n if (v === INVALID_DEFAULT)\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException('index', index, \"is greater than or equal to the number of elements in source\");\n return v;\n }\n elementAtOrDefault(index, defaultValue = null) {\n var _ = this;\n _.throwIfDisposed();\n Integer_1.Integer.assertZeroOrGreater(index, 'index');\n var n = index;\n return dispose_1.using(this.getEnumerator(), e => {\n var i = 0;\n while (e.moveNext()) {\n if (i == n)\n return e.current;\n i++;\n }\n return defaultValue;\n });\n }\n first() {\n var v = this.firstOrDefault(INVALID_DEFAULT);\n if (v === INVALID_DEFAULT)\n throw new Error(\"first:The sequence is empty.\");\n return v;\n }\n firstOrDefault(defaultValue = null) {\n var _ = this;\n _.throwIfDisposed();\n return dispose_1.using(this.getEnumerator(), e => e.moveNext() ? e.current : defaultValue);\n }\n single() {\n var _ = this;\n _.throwIfDisposed();\n return dispose_1.using(this.getEnumerator(), e => {\n if (e.moveNext()) {\n var value = e.current;\n if (!e.moveNext())\n return value;\n throw new Error(\"single:sequence contains more than one element.\");\n }\n throw new Error(\"single:The sequence is empty.\");\n });\n }\n singleOrDefault(defaultValue = null) {\n var _ = this;\n _.throwIfDisposed();\n return dispose_1.using(this.getEnumerator(), e => {\n if (e.moveNext()) {\n var value = e.current;\n if (!e.moveNext())\n return value;\n }\n return defaultValue;\n });\n }\n any() {\n var _ = this;\n _.throwIfDisposed();\n return dispose_1.using(this.getEnumerator(), e => e.moveNext());\n }\n isEmpty() {\n return !this.any();\n }\n traverseBreadthFirst(childrenSelector, resultSelector = Functions.Identity) {\n var _ = this, isEndless = _._isEndless || null;\n return new Enumerable(() => {\n var enumerator;\n var nestLevel = 0;\n var buffer, len;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n nestLevel = 0;\n buffer = [];\n len = 0;\n enumerator = _.getEnumerator();\n }, (yielder) => {\n while (true) {\n if (enumerator.moveNext()) {\n buffer[len++] = enumerator.current;\n return yielder.yieldReturn(resultSelector(enumerator.current, nestLevel));\n }\n if (!len)\n return yielder.yieldBreak();\n var next = Enumerable\n .from(buffer)\n .selectMany(childrenSelector);\n if (!next.any()) {\n return yielder.yieldBreak();\n }\n else {\n nestLevel++;\n buffer = [];\n len = 0;\n enumerator.dispose();\n enumerator = next.getEnumerator();\n }\n }\n }, () => {\n dispose_1.dispose(enumerator);\n buffer.length = 0;\n }, isEndless);\n }, null, isEndless);\n }\n traverseDepthFirst(childrenSelector, resultSelector = Functions.Identity) {\n var _ = this, isEndless = _._isEndless || null;\n return new Enumerable(() => {\n var enumeratorStack = [];\n var enumerator;\n var len;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n len = 0;\n }, (yielder) => {\n while (true) {\n if (enumerator.moveNext()) {\n let value = resultSelector(enumerator.current, len);\n enumeratorStack[len++] = enumerator;\n let e = Enumerable.fromAny(childrenSelector(enumerator.current));\n enumerator = e ? e.getEnumerator() : Enumerator_1.empty;\n return yielder.yieldReturn(value);\n }\n if (len == 0)\n return false;\n enumerator.dispose();\n enumerator = enumeratorStack[--len];\n enumeratorStack.length = len;\n }\n }, () => {\n try {\n dispose_1.dispose(enumerator);\n }\n finally {\n dispose_1.dispose.these(enumeratorStack);\n }\n }, isEndless);\n }, null, isEndless);\n }\n flatten() {\n var _ = this, isEndless = _._isEndless || null;\n return new Enumerable(() => {\n var enumerator;\n var middleEnumerator = null;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n }, (yielder) => {\n while (true) {\n if (middleEnumerator) {\n if (middleEnumerator.moveNext()) {\n return yielder.yieldReturn(middleEnumerator.current);\n }\n else {\n middleEnumerator.dispose();\n middleEnumerator = null;\n }\n }\n if (enumerator.moveNext()) {\n var c = enumerator.current;\n var e = !Types_1.Type.isString(c) && Enumerable.fromAny(c);\n if (e) {\n middleEnumerator\n = e\n .selectMany(Functions.Identity)\n .flatten()\n .getEnumerator();\n continue;\n }\n else {\n return yielder.yieldReturn(c);\n }\n }\n return yielder.yieldBreak();\n }\n }, () => {\n dispose_1.dispose(enumerator, middleEnumerator);\n }, isEndless);\n }, null, isEndless);\n }\n pairwise(selector) {\n var _ = this;\n return new Enumerable(() => {\n var enumerator;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n enumerator.moveNext();\n }, (yielder) => {\n var prev = enumerator.current;\n return enumerator.moveNext()\n && yielder.yieldReturn(selector(prev, enumerator.current));\n }, () => {\n dispose_1.dispose(enumerator);\n }, _._isEndless);\n }, null, _._isEndless);\n }\n scan(func, seed) {\n var isUseSeed = seed !== VOID0;\n var _ = this;\n return new Enumerable(() => {\n var enumerator;\n var value;\n var isFirst;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n isFirst = true;\n }, (yielder) => {\n if (isFirst) {\n isFirst = false;\n return isUseSeed\n ? yielder.yieldReturn(value = seed)\n : enumerator.moveNext() && yielder.yieldReturn(value\n = enumerator.current);\n }\n return (enumerator.moveNext())\n ? yielder.yieldReturn(value = func(value, enumerator.current))\n : false;\n }, () => {\n dispose_1.dispose(enumerator);\n }, _._isEndless);\n }, null, _._isEndless);\n }\n select(selector) {\n var _ = this, disposed = !_.throwIfDisposed();\n return new Enumerable(() => {\n var enumerator;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n throwIfDisposed(disposed);\n index = 0;\n enumerator = _.getEnumerator();\n }, (yielder) => {\n throwIfDisposed(disposed);\n return enumerator.moveNext()\n ? yielder.yieldReturn(selector(enumerator.current, index++))\n : yielder.yieldBreak();\n }, () => {\n dispose_1.dispose(enumerator);\n }, _._isEndless);\n }, () => {\n disposed = true;\n }, _._isEndless);\n }\n _selectMany(collectionSelector, resultSelector) {\n var _ = this, isEndless = _._isEndless || null;\n if (!resultSelector)\n resultSelector = (a, b) => b;\n return new Enumerable(() => {\n var enumerator;\n var middleEnumerator;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n middleEnumerator = undefined;\n index = 0;\n }, (yielder) => {\n if (middleEnumerator === VOID0 && !enumerator.moveNext())\n return false;\n do {\n if (!middleEnumerator) {\n var middleSeq = collectionSelector(enumerator.current, index++);\n if (!middleSeq)\n continue;\n middleEnumerator = Enumerator_1.from(middleSeq);\n }\n if (middleEnumerator.moveNext())\n return yielder.yieldReturn(resultSelector(enumerator.current, middleEnumerator.current));\n middleEnumerator.dispose();\n middleEnumerator = null;\n } while (enumerator.moveNext());\n return false;\n }, () => {\n dispose_1.dispose(enumerator, middleEnumerator);\n enumerator = null;\n middleEnumerator = null;\n }, isEndless);\n }, null, isEndless);\n }\n selectMany(collectionSelector, resultSelector) {\n return this._selectMany(collectionSelector, resultSelector);\n }\n _choose(selector) {\n var _ = this, disposed = !_.throwIfDisposed();\n return new Enumerable(() => {\n var enumerator;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n throwIfDisposed(disposed);\n index = 0;\n enumerator = _.getEnumerator();\n }, (yielder) => {\n throwIfDisposed(disposed);\n while (enumerator.moveNext()) {\n var result = selector(enumerator.current, index++);\n if (result !== null && result !== VOID0)\n return yielder.yieldReturn(result);\n }\n return false;\n }, () => {\n dispose_1.dispose(enumerator);\n }, _._isEndless);\n }, () => {\n disposed = true;\n }, _._isEndless);\n }\n choose(selector = Functions.Identity) {\n return this._choose(selector);\n }\n where(predicate) {\n var _ = this, disposed = !_.throwIfDisposed();\n return new Enumerable(() => {\n var enumerator;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n throwIfDisposed(disposed);\n index = 0;\n enumerator = _.getEnumerator();\n }, (yielder) => {\n throwIfDisposed(disposed);\n while (enumerator.moveNext()) {\n if (predicate(enumerator.current, index++))\n return yielder.yieldReturn(enumerator.current);\n }\n return false;\n }, () => {\n dispose_1.dispose(enumerator);\n }, _._isEndless);\n }, () => {\n disposed = true;\n }, _._isEndless);\n }\n ofType(type) {\n var typeName;\n switch (type) {\n case Number:\n typeName = Types_1.Type.NUMBER;\n break;\n case String:\n typeName = Types_1.Type.STRING;\n break;\n case Boolean:\n typeName = Types_1.Type.BOOLEAN;\n break;\n case Function:\n typeName = Types_1.Type.FUNCTION;\n break;\n default:\n return this\n .where(x => x instanceof type);\n }\n return this\n .choose()\n .where(x => (typeof x) === typeName);\n }\n except(second, compareSelector) {\n var _ = this, disposed = !_.throwIfDisposed();\n return new Enumerable(() => {\n var enumerator;\n var keys;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n throwIfDisposed(disposed);\n enumerator = _.getEnumerator();\n keys = new Dictionary_1.Dictionary(compareSelector);\n if (second)\n Enumerator_1.forEach(second, key => keys.addByKeyValue(key, true));\n }, (yielder) => {\n throwIfDisposed(disposed);\n while (enumerator.moveNext()) {\n var current = enumerator.current;\n if (!keys.containsKey(current)) {\n keys.addByKeyValue(current, true);\n return yielder.yieldReturn(current);\n }\n }\n return false;\n }, () => {\n dispose_1.dispose(enumerator);\n keys.clear();\n }, _._isEndless);\n }, () => {\n disposed = true;\n }, _._isEndless);\n }\n distinct(compareSelector) {\n return this.except(null, compareSelector);\n }\n distinctUntilChanged(compareSelector = Functions.Identity) {\n var _ = this, disposed = !_.throwIfDisposed();\n return new Enumerable(() => {\n var enumerator;\n var compareKey;\n var initial = true;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n throwIfDisposed(disposed);\n enumerator = _.getEnumerator();\n }, (yielder) => {\n throwIfDisposed(disposed);\n while (enumerator.moveNext()) {\n var key = compareSelector(enumerator.current);\n if (initial) {\n initial = false;\n }\n else if (Values.areEqual(compareKey, key)) {\n continue;\n }\n compareKey = key;\n return yielder.yieldReturn(enumerator.current);\n }\n return false;\n }, () => {\n dispose_1.dispose(enumerator);\n }, _._isEndless);\n }, () => {\n disposed = true;\n }, _._isEndless);\n }\n defaultIfEmpty(defaultValue = null) {\n var _ = this, disposed = !_.throwIfDisposed();\n return new Enumerable(() => {\n var enumerator;\n var isFirst;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n isFirst = true;\n throwIfDisposed(disposed);\n enumerator = _.getEnumerator();\n }, (yielder) => {\n throwIfDisposed(disposed);\n if (enumerator.moveNext()) {\n isFirst = false;\n return yielder.yieldReturn(enumerator.current);\n }\n else if (isFirst) {\n isFirst = false;\n return yielder.yieldReturn(defaultValue);\n }\n return false;\n }, () => {\n dispose_1.dispose(enumerator);\n }, _._isEndless);\n }, null, _._isEndless);\n }\n zip(second, resultSelector) {\n var _ = this;\n _.throwIfDisposed();\n return new Enumerable(() => {\n var firstEnumerator;\n var secondEnumerator;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n index = 0;\n firstEnumerator = _.getEnumerator();\n secondEnumerator = Enumerator_1.from(second);\n }, (yielder) => firstEnumerator.moveNext()\n && secondEnumerator.moveNext()\n && yielder.yieldReturn(resultSelector(firstEnumerator.current, secondEnumerator.current, index++)), () => {\n dispose_1.dispose(firstEnumerator, secondEnumerator);\n });\n });\n }\n zipMultiple(second, resultSelector) {\n var _ = this;\n _.throwIfDisposed();\n if (!second.length)\n return Enumerable.empty();\n return new Enumerable(() => {\n var secondTemp;\n var firstEnumerator;\n var secondEnumerator;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n secondTemp = new Queue_1.Queue(second);\n index = 0;\n firstEnumerator = _.getEnumerator();\n secondEnumerator = null;\n }, (yielder) => {\n if (firstEnumerator.moveNext()) {\n while (true) {\n while (!secondEnumerator) {\n if (secondTemp.count) {\n var next = secondTemp.dequeue();\n if (next)\n secondEnumerator = Enumerator_1.from(next);\n }\n else\n return yielder.yieldBreak();\n }\n if (secondEnumerator.moveNext())\n return yielder.yieldReturn(resultSelector(firstEnumerator.current, secondEnumerator.current, index++));\n secondEnumerator.dispose();\n secondEnumerator = null;\n }\n }\n return yielder.yieldBreak();\n }, () => {\n dispose_1.dispose(firstEnumerator, secondTemp);\n });\n });\n }\n join(inner, outerKeySelector, innerKeySelector, resultSelector, compareSelector = Functions.Identity) {\n var _ = this;\n return new Enumerable(() => {\n var outerEnumerator;\n var lookup;\n var innerElements = null;\n var innerCount = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n outerEnumerator = _.getEnumerator();\n lookup = Enumerable.from(inner)\n .toLookup(innerKeySelector, Functions.Identity, compareSelector);\n }, (yielder) => {\n while (true) {\n if (innerElements != null) {\n var innerElement = innerElements[innerCount++];\n if (innerElement !== VOID0)\n return yielder.yieldReturn(resultSelector(outerEnumerator.current, innerElement));\n innerElement = null;\n innerCount = 0;\n }\n if (outerEnumerator.moveNext()) {\n var key = outerKeySelector(outerEnumerator.current);\n innerElements = lookup.get(key);\n }\n else {\n return yielder.yieldBreak();\n }\n }\n }, () => {\n dispose_1.dispose(outerEnumerator);\n });\n });\n }\n groupJoin(inner, outerKeySelector, innerKeySelector, resultSelector, compareSelector = Functions.Identity) {\n var _ = this;\n return new Enumerable(() => {\n var enumerator;\n var lookup = null;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n lookup = Enumerable.from(inner)\n .toLookup(innerKeySelector, Functions.Identity, compareSelector);\n }, (yielder) => enumerator.moveNext()\n && yielder.yieldReturn(resultSelector(enumerator.current, lookup.get(outerKeySelector(enumerator.current)))), () => {\n dispose_1.dispose(enumerator);\n });\n });\n }\n merge(enumerables) {\n var _ = this, isEndless = _._isEndless || null;\n if (!enumerables || enumerables.length == 0)\n return _;\n return new Enumerable(() => {\n var enumerator;\n var queue;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n queue = new Queue_1.Queue(enumerables);\n }, (yielder) => {\n while (true) {\n while (!enumerator && queue.count) {\n enumerator = Enumerator_1.from(queue.dequeue());\n }\n if (enumerator && enumerator.moveNext())\n return yielder.yieldReturn(enumerator.current);\n if (enumerator) {\n enumerator.dispose();\n enumerator = null;\n continue;\n }\n return yielder.yieldBreak();\n }\n }, () => {\n dispose_1.dispose(enumerator, queue);\n }, isEndless);\n }, null, isEndless);\n }\n concat(...enumerables) {\n return this.merge(enumerables);\n }\n union(second, compareSelector = Functions.Identity) {\n var _ = this, isEndless = _._isEndless || null;\n return new Enumerable(() => {\n var firstEnumerator;\n var secondEnumerator;\n var keys;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n firstEnumerator = _.getEnumerator();\n keys = new Dictionary_1.Dictionary(compareSelector);\n }, (yielder) => {\n var current;\n if (secondEnumerator === VOID0) {\n while (firstEnumerator.moveNext()) {\n current = firstEnumerator.current;\n if (!keys.containsKey(current)) {\n keys.addByKeyValue(current, null);\n return yielder.yieldReturn(current);\n }\n }\n secondEnumerator = Enumerator_1.from(second);\n }\n while (secondEnumerator.moveNext()) {\n current = secondEnumerator.current;\n if (!keys.containsKey(current)) {\n keys.addByKeyValue(current, null);\n return yielder.yieldReturn(current);\n }\n }\n return false;\n }, () => {\n dispose_1.dispose(firstEnumerator, secondEnumerator);\n }, isEndless);\n }, null, isEndless);\n }\n insertAt(index, other) {\n Integer_1.Integer.assertZeroOrGreater(index, 'index');\n var n = index;\n var _ = this, isEndless = _._isEndless || null;\n _.throwIfDisposed();\n return new Enumerable(() => {\n var firstEnumerator;\n var secondEnumerator;\n var count = 0;\n var isEnumerated = false;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n count = 0;\n firstEnumerator = _.getEnumerator();\n secondEnumerator = Enumerator_1.from(other);\n isEnumerated = false;\n }, (yielder) => {\n if (count == n) {\n isEnumerated = true;\n if (secondEnumerator.moveNext())\n return yielder.yieldReturn(secondEnumerator.current);\n }\n if (firstEnumerator.moveNext()) {\n count++;\n return yielder.yieldReturn(firstEnumerator.current);\n }\n return !isEnumerated\n && secondEnumerator.moveNext()\n && yielder.yieldReturn(secondEnumerator.current);\n }, () => {\n dispose_1.dispose(firstEnumerator, secondEnumerator);\n }, isEndless);\n }, null, isEndless);\n }\n alternateMultiple(sequence) {\n var _ = this;\n return new Enumerable(() => {\n var buffer, mode, enumerator, alternateEnumerator;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n alternateEnumerator = new ArrayEnumerator_1.ArrayEnumerator(Enumerable.toArray(sequence));\n enumerator = _.getEnumerator();\n var hasAtLeastOne = enumerator.moveNext();\n mode = hasAtLeastOne\n ? 1\n : 0;\n if (hasAtLeastOne)\n buffer = enumerator.current;\n }, (yielder) => {\n switch (mode) {\n case 0:\n return yielder.yieldBreak();\n case 2:\n if (alternateEnumerator.moveNext())\n return yielder.yieldReturn(alternateEnumerator.current);\n alternateEnumerator.reset();\n mode = 1;\n break;\n }\n var latest = buffer;\n var another = enumerator.moveNext();\n mode = another\n ? 2\n : 0;\n if (another)\n buffer = enumerator.current;\n return yielder.yieldReturn(latest);\n }, () => {\n dispose_1.dispose(enumerator, alternateEnumerator);\n }, _._isEndless);\n }, null, _._isEndless);\n }\n alternateSingle(value) {\n return this.alternateMultiple(Enumerable.make(value));\n }\n alternate(...sequence) {\n return this.alternateMultiple(sequence);\n }\n catchError(handler) {\n var _ = this, disposed = !_.throwIfDisposed();\n return new Enumerable(() => {\n var enumerator;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n try {\n throwIfDisposed(disposed);\n enumerator = _.getEnumerator();\n }\n catch (e) {\n }\n }, (yielder) => {\n try {\n throwIfDisposed(disposed);\n if (enumerator.moveNext())\n return yielder.yieldReturn(enumerator.current);\n }\n catch (e) {\n handler(e);\n }\n return false;\n }, () => {\n dispose_1.dispose(enumerator);\n });\n });\n }\n finallyAction(action) {\n var _ = this, disposed = !_.throwIfDisposed();\n return new Enumerable(() => {\n var enumerator;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n throwIfDisposed(disposed);\n enumerator = _.getEnumerator();\n }, (yielder) => {\n throwIfDisposed(disposed);\n return (enumerator.moveNext())\n ? yielder.yieldReturn(enumerator.current)\n : false;\n }, () => {\n try {\n dispose_1.dispose(enumerator);\n }\n finally {\n action();\n }\n });\n });\n }\n buffer(size) {\n if (size < 1 || !isFinite(size))\n throw new Error(\"Invalid buffer size.\");\n Integer_1.Integer.assert(size, \"size\");\n var _ = this, len;\n return new Enumerable(() => {\n var enumerator;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n }, (yielder) => {\n var array = ArrayUtility.initialize(size);\n len = 0;\n while (len < size && enumerator.moveNext()) {\n array[len++] = enumerator.current;\n }\n array.length = len;\n return len && yielder.yieldReturn(array);\n }, () => {\n dispose_1.dispose(enumerator);\n }, _._isEndless);\n }, null, _._isEndless);\n }\n share() {\n var _ = this;\n _.throwIfDisposed();\n var sharedEnumerator;\n return new Enumerable(() => {\n return sharedEnumerator || (sharedEnumerator = _.getEnumerator());\n }, () => {\n dispose_1.dispose(sharedEnumerator);\n }, _._isEndless);\n }\n}\nexports.InfiniteEnumerable = InfiniteEnumerable;\nclass Enumerable extends InfiniteEnumerable {\n constructor(enumeratorFactory, finalizer, isEndless = null) {\n super(enumeratorFactory, finalizer);\n this._isEndless = isEndless;\n }\n static from(source) {\n var e = Enumerable.fromAny(source);\n if (!e)\n throw new UnsupportedEnumerableException_1.UnsupportedEnumerableException();\n return e;\n }\n static fromAny(source, defaultEnumerable = null) {\n if (Types_1.Type.isObject(source) || Types_1.Type.isString(source)) {\n if (source instanceof Enumerable)\n return source;\n if (Types_1.Type.isArrayLike(source))\n return new ArrayEnumerable(source);\n if (Enumerator_1.isEnumerable(source))\n return new Enumerable(() => source.getEnumerator(), null, source.isEndless);\n }\n return defaultEnumerable;\n }\n static fromOrEmpty(source) {\n return Enumerable.fromAny(source) || Enumerable.empty();\n }\n static toArray(source) {\n if (source instanceof Enumerable)\n return source.toArray();\n return Enumerator_1.toArray(source);\n }\n static choice(values) {\n var len = values && values.length;\n if (!len || !isFinite(len))\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException('length', length);\n return new InfiniteEnumerable(() => new EnumeratorBase_1.EnumeratorBase(null, (yielder) => yielder.yieldReturn(Integer_1.Integer.random.select(values)), true));\n }\n static chooseFrom(...args) {\n return Enumerable.choice(args);\n }\n static cycle(values) {\n var len = values && values.length;\n if (!len || !isFinite(len))\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException('length', length);\n return new InfiniteEnumerable(() => {\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n index = 0;\n }, (yielder) => {\n if (index >= values.length)\n index = 0;\n return yielder.yieldReturn(values[index++]);\n }, true);\n });\n }\n static cycleThrough(...args) {\n return Enumerable.cycle(args);\n }\n static empty() {\n return new FiniteEnumerable(getEmptyEnumerator);\n }\n static repeat(element, count = Infinity) {\n if (!(count > 0))\n return Enumerable.empty();\n return isFinite(count) && Integer_1.Integer.assert(count, \"count\")\n ? new FiniteEnumerable(() => {\n var c = count;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => { index = 0; }, (yielder) => (index++ < c) && yielder.yieldReturn(element), null, false);\n })\n : new Enumerable(() => new EnumeratorBase_1.EnumeratorBase(null, (yielder) => yielder.yieldReturn(element), true));\n }\n static repeatWithFinalize(initializer, finalizer) {\n return new InfiniteEnumerable(() => {\n var element;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n element = initializer();\n }, (yielder) => yielder.yieldReturn(element), () => {\n finalizer(element);\n }, true);\n });\n }\n static make(element) {\n return Enumerable.repeat(element, 1);\n }\n static range(start, count, step = 1) {\n if (!isFinite(start))\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException(\"start\", start, \"Must be a finite number.\");\n if (!(count > 0))\n return Enumerable.empty();\n if (!step)\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException(\"step\", step, \"Must be a valid value\");\n if (!isFinite(step))\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException(\"step\", step, \"Must be a finite number.\");\n Integer_1.Integer.assert(count, \"count\");\n return new FiniteEnumerable(() => {\n var value;\n var c = count;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n index = 0;\n value = start;\n }, (yielder) => {\n var result = index++ < c\n && yielder.yieldReturn(value);\n if (result && index < count)\n value += step;\n return result;\n }, false);\n });\n }\n static rangeDown(start, count, step = 1) {\n step = Math.abs(step) * -1;\n return Enumerable.range(start, count, step);\n }\n static toInfinity(start = 0, step = 1) {\n if (!isFinite(start))\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException(\"start\", start, \"Must be a finite number.\");\n if (!step)\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException(\"step\", step, \"Must be a valid value\");\n if (!isFinite(step))\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException(\"step\", step, \"Must be a finite number.\");\n return new InfiniteEnumerable(() => {\n var value;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n value = start;\n }, (yielder) => {\n var current = value;\n value += step;\n return yielder.yieldReturn(current);\n }, true);\n });\n }\n static toNegativeInfinity(start = 0, step = 1) {\n return Enumerable.toInfinity(start, -step);\n }\n static rangeTo(start, to, step = 1) {\n if (isNaN(to) || !isFinite(to))\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException(\"to\", to, \"Must be a finite number.\");\n if (step && !isFinite(step))\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException(\"step\", step, \"Must be a finite non-zero number.\");\n step = Math.abs(step);\n return new FiniteEnumerable(() => {\n var value;\n return new EnumeratorBase_1.EnumeratorBase(() => { value = start; }, start < to\n ?\n yielder => {\n var result = value <= to && yielder.yieldReturn(value);\n if (result)\n value += step;\n return result;\n }\n :\n yielder => {\n var result = value >= to && yielder.yieldReturn(value);\n if (result)\n value -= step;\n return result;\n }, false);\n });\n }\n static matches(input, pattern, flags = \"\") {\n if (input === null || input === VOID0)\n throw new ArgumentNullException_1.ArgumentNullException(\"input\");\n var type = typeof input;\n if (type != Types_1.Type.STRING)\n throw new Error(\"Cannot exec RegExp matches of type '\" + type + \"'.\");\n if (pattern instanceof RegExp) {\n flags += (pattern.ignoreCase) ? \"i\" : \"\";\n flags += (pattern.multiline) ? \"m\" : \"\";\n pattern = pattern.source;\n }\n if (flags.indexOf(\"g\") === -1)\n flags += \"g\";\n return new FiniteEnumerable(() => {\n var regex;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n regex = new RegExp(pattern, flags);\n }, (yielder) => {\n var match = regex.exec(input);\n return (match !== null) ? yielder.yieldReturn(match) : false;\n });\n });\n }\n static generate(factory, count = Infinity) {\n if (isNaN(count) || count <= 0)\n return Enumerable.empty();\n return isFinite(count) && Integer_1.Integer.assert(count, \"count\")\n ?\n new FiniteEnumerable(() => {\n var c = count;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n index = 0;\n }, (yielder) => {\n var current = index++;\n return current < c && yielder.yieldReturn(factory(current));\n }, false);\n })\n :\n new InfiniteEnumerable(() => {\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n index = 0;\n }, (yielder) => yielder.yieldReturn(factory(index++)), true);\n });\n }\n static unfold(seed, valueFactory, skipSeed = false) {\n return new InfiniteEnumerable(() => {\n var index = 0;\n var value;\n var isFirst;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n index = 0;\n value = seed;\n isFirst = !skipSeed;\n }, (yielder) => {\n var i = index++;\n if (isFirst)\n isFirst = false;\n else\n value = valueFactory(value, i);\n return yielder.yieldReturn(value);\n }, true);\n });\n }\n static forEach(enumerable, action) {\n Enumerator_1.forEach(enumerable, action);\n }\n static map(enumerable, selector) {\n return Enumerator_1.map(enumerable, selector);\n }\n static max(values) {\n return values\n .takeUntil(v => v == +Infinity, true)\n .aggregate(Functions.Greater);\n }\n static min(values) {\n return values\n .takeUntil(v => v == -Infinity, true)\n .aggregate(Functions.Lesser);\n }\n static weave(enumerables) {\n if (!enumerables)\n throw new ArgumentNullException_1.ArgumentNullException('enumerables');\n return new Enumerable(() => {\n var queue;\n var mainEnumerator;\n var index;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n index = 0;\n queue = new Queue_1.Queue();\n mainEnumerator = Enumerator_1.from(enumerables);\n }, (yielder) => {\n let e;\n if (mainEnumerator) {\n while (!e && mainEnumerator.moveNext()) {\n let c = mainEnumerator.current;\n e = nextEnumerator(queue, c && Enumerator_1.from(c));\n }\n if (!e)\n mainEnumerator = null;\n }\n while (!e && queue.count) {\n e = nextEnumerator(queue, queue.dequeue());\n }\n return e\n ? yielder.yieldReturn(e.current)\n : yielder.yieldBreak();\n }, () => {\n dispose_1.dispose.these(queue.dump());\n dispose_1.dispose(mainEnumerator, queue);\n mainEnumerator = null;\n queue = null;\n });\n });\n }\n doAction(action, initializer, isEndless = this.isEndless) {\n return super.doAction(action, initializer, isEndless);\n }\n skip(count) {\n return super.skip(count);\n }\n skipWhile(predicate) {\n this.throwIfDisposed();\n return this.doAction((element, index) => predicate(element, index)\n ? 2\n : 1);\n }\n takeWhile(predicate) {\n this.throwIfDisposed();\n if (!predicate)\n throw new ArgumentNullException_1.ArgumentNullException('predicate');\n return this.doAction((element, index) => predicate(element, index)\n ? 1\n : 0, null, null);\n }\n takeUntil(predicate, includeUntilValue) {\n this.throwIfDisposed();\n if (!predicate)\n throw new ArgumentNullException_1.ArgumentNullException('predicate');\n if (!includeUntilValue)\n return this.doAction((element, index) => predicate(element, index)\n ? 0\n : 1, null, null);\n var found = false;\n return this.doAction((element, index) => {\n if (found)\n return 0;\n found = predicate(element, index);\n return 1;\n }, () => {\n found = false;\n }, null);\n }\n forEach(action) {\n var _ = this;\n _.throwIfDisposed();\n Enumerator_1.throwIfEndless(_.isEndless);\n var index = 0;\n dispose_1.using(_.getEnumerator(), e => {\n Enumerator_1.throwIfEndless(e.isEndless);\n while (_.throwIfDisposed() && e.moveNext()) {\n if (action(e.current, index++) === false)\n break;\n }\n });\n }\n toArray(predicate) {\n return predicate\n ? this.where(predicate).toArray()\n : this.copyTo([]);\n }\n copyTo(target, index = 0) {\n this.throwIfDisposed();\n if (!target)\n throw new ArgumentNullException_1.ArgumentNullException(\"target\");\n Integer_1.Integer.assertZeroOrGreater(index);\n Enumerator_1.forEach(this, (x, i) => {\n target[i + index] = x;\n });\n return target;\n }\n toLookup(keySelector, elementSelector = Functions.Identity, compareSelector = Functions.Identity) {\n var dict = new Dictionary_1.Dictionary(compareSelector);\n this.forEach(x => {\n var key = keySelector(x);\n var element = elementSelector(x);\n var array = dict.getValue(key);\n if (array !== VOID0)\n array.push(element);\n else\n dict.addByKeyValue(key, [element]);\n });\n return new Lookup(dict);\n }\n toMap(keySelector, elementSelector) {\n var obj = {};\n this.forEach((x, i) => {\n obj[keySelector(x, i)] = elementSelector(x, i);\n });\n return obj;\n }\n toDictionary(keySelector, elementSelector, compareSelector = Functions.Identity) {\n var dict = new Dictionary_1.Dictionary(compareSelector);\n this.forEach((x, i) => dict.addByKeyValue(keySelector(x, i), elementSelector(x, i)));\n return dict;\n }\n toJoinedString(separator = \"\", selector = Functions.Identity) {\n return this.select(selector).toArray().join(separator);\n }\n takeExceptLast(count = 1) {\n var _ = this;\n if (!(count > 0))\n return _;\n if (!isFinite(count))\n return Enumerable.empty();\n Integer_1.Integer.assert(count, \"count\");\n var c = count;\n return new Enumerable(() => {\n var enumerator;\n var q;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n q = new Queue_1.Queue();\n }, (yielder) => {\n while (enumerator.moveNext()) {\n q.enqueue(enumerator.current);\n if (q.count > c)\n return yielder.yieldReturn(q.dequeue());\n }\n return false;\n }, () => {\n dispose_1.dispose(enumerator, q);\n });\n });\n }\n skipToLast(count) {\n if (!(count > 0))\n return Enumerable.empty();\n var _ = this;\n if (!isFinite(count))\n return _;\n Integer_1.Integer.assert(count, \"count\");\n return _.reverse()\n .take(count)\n .reverse();\n }\n where(predicate) {\n return super.where(predicate);\n }\n select(selector) {\n return super.select(selector);\n }\n selectMany(collectionSelector, resultSelector) {\n return this._selectMany(collectionSelector, resultSelector);\n }\n choose(selector = Functions.Identity) {\n return this._choose(selector);\n }\n reverse() {\n var _ = this, disposed = !_.throwIfDisposed();\n Enumerator_1.throwIfEndless(_._isEndless);\n return new Enumerable(() => {\n var buffer;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n throwIfDisposed(disposed);\n buffer = _.toArray();\n index = buffer.length;\n }, (yielder) => index && yielder.yieldReturn(buffer[--index]), () => {\n buffer.length = 0;\n });\n }, () => {\n disposed = true;\n });\n }\n shuffle() {\n var _ = this, disposed = !_.throwIfDisposed();\n Enumerator_1.throwIfEndless(_._isEndless);\n return new Enumerable(() => {\n var buffer;\n var capacity;\n var len;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n throwIfDisposed(disposed);\n buffer = _.toArray();\n capacity = len = buffer.length;\n }, (yielder) => {\n if (!len)\n return yielder.yieldBreak();\n var selectedIndex = Integer_1.Integer.random(len);\n var selectedValue = buffer[selectedIndex];\n buffer[selectedIndex] = buffer[--len];\n buffer[len] = null;\n if (len % 32 == 0)\n buffer.length = len;\n return yielder.yieldReturn(selectedValue);\n }, () => {\n buffer.length = 0;\n });\n }, () => {\n disposed = true;\n });\n }\n count(predicate) {\n var count = 0;\n this.forEach(predicate\n ?\n (x, i) => {\n if (predicate(x, i))\n ++count;\n }\n :\n () => {\n ++count;\n });\n return count;\n }\n all(predicate) {\n if (!predicate)\n throw new ArgumentNullException_1.ArgumentNullException(\"predicate\");\n var result = true;\n this.forEach((x, i) => {\n if (!predicate(x, i)) {\n result = false;\n return false;\n }\n });\n return result;\n }\n every(predicate) {\n return this.all(predicate);\n }\n any(predicate) {\n if (!predicate)\n return super.any();\n var result = false;\n this.forEach((x, i) => {\n result = predicate(x, i);\n return !result;\n });\n return result;\n }\n some(predicate) {\n return this.any(predicate);\n }\n contains(value, compareSelector) {\n return compareSelector\n ? this.any(v => compareSelector(v) === compareSelector(value))\n : this.any(v => v === value);\n }\n indexOf(value, compareSelector) {\n var found = -1;\n this.forEach(compareSelector\n ?\n (element, i) => {\n if (Values.areEqual(compareSelector(element, i), compareSelector(value, i), true)) {\n found = i;\n return false;\n }\n }\n :\n (element, i) => {\n if (Values.areEqual(element, value, true)) {\n found = i;\n return false;\n }\n });\n return found;\n }\n lastIndexOf(value, compareSelector) {\n var result = -1;\n this.forEach(compareSelector\n ?\n (element, i) => {\n if (Values.areEqual(compareSelector(element, i), compareSelector(value, i), true))\n result\n = i;\n }\n :\n (element, i) => {\n if (Values.areEqual(element, value, true))\n result = i;\n });\n return result;\n }\n merge(enumerables) {\n return super.merge(enumerables);\n }\n concat(...enumerables) {\n return this.merge(enumerables);\n }\n intersect(second, compareSelector) {\n var _ = this;\n return new Enumerable(() => {\n var enumerator;\n var keys;\n var outs;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n keys = new Dictionary_1.Dictionary(compareSelector);\n outs = new Dictionary_1.Dictionary(compareSelector);\n Enumerator_1.forEach(second, key => {\n keys.addByKeyValue(key, true);\n });\n }, (yielder) => {\n while (enumerator.moveNext()) {\n var current = enumerator.current;\n if (!outs.containsKey(current) && keys.containsKey(current)) {\n outs.addByKeyValue(current, true);\n return yielder.yieldReturn(current);\n }\n }\n return yielder.yieldBreak();\n }, () => {\n dispose_1.dispose(enumerator, keys, outs);\n }, _._isEndless);\n }, null, _._isEndless);\n }\n sequenceEqual(second, equalityComparer = Values.areEqual) {\n return dispose_1.using(this.getEnumerator(), e1 => dispose_1.using(Enumerator_1.from(second), e2 => {\n Enumerator_1.throwIfEndless(e1.isEndless && e2.isEndless);\n while (e1.moveNext()) {\n if (!e2.moveNext() || !equalityComparer(e1.current, e2.current))\n return false;\n }\n return !e2.moveNext();\n }));\n }\n ofType(type) {\n return super.ofType(type);\n }\n except(second, compareSelector) {\n return super.except(second, compareSelector);\n }\n distinct(compareSelector) {\n return super.distinct(compareSelector);\n }\n distinctUntilChanged(compareSelector = Functions.Identity) {\n return super.distinctUntilChanged(compareSelector);\n }\n orderBy(keySelector = Functions.Identity) {\n return new OrderedEnumerable(this, keySelector, 1);\n }\n orderUsing(comparison) {\n return new OrderedEnumerable(this, null, 1, null, comparison);\n }\n orderUsingReversed(comparison) {\n return new OrderedEnumerable(this, null, -1, null, comparison);\n }\n orderByDescending(keySelector = Functions.Identity) {\n return new OrderedEnumerable(this, keySelector, -1);\n }\n buffer(size) {\n return super.buffer(size);\n }\n groupBy(keySelector, elementSelector, compareSelector) {\n if (!elementSelector)\n elementSelector = Functions.Identity;\n return new Enumerable(() => this.toLookup(keySelector, elementSelector, compareSelector)\n .getEnumerator());\n }\n partitionBy(keySelector, elementSelector, resultSelector = (key, elements) => new Grouping(key, elements), compareSelector = Functions.Identity) {\n var _ = this;\n if (!elementSelector)\n elementSelector = Functions.Identity;\n return new Enumerable(() => {\n var enumerator;\n var key;\n var compareKey;\n var group;\n var len;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n if (enumerator.moveNext()) {\n key = keySelector(enumerator.current);\n compareKey = compareSelector(key);\n group = [elementSelector(enumerator.current)];\n len = 1;\n }\n else\n group = null;\n }, (yielder) => {\n if (!group)\n return yielder.yieldBreak();\n var hasNext, c;\n while ((hasNext = enumerator.moveNext())) {\n c = enumerator.current;\n if (compareKey === compareSelector(keySelector(c)))\n group[len++] = elementSelector(c);\n else\n break;\n }\n var result = resultSelector(key, group);\n if (hasNext) {\n c = enumerator.current;\n key = keySelector(c);\n compareKey = compareSelector(key);\n group = [elementSelector(c)];\n len = 1;\n }\n else {\n group = null;\n }\n return yielder.yieldReturn(result);\n }, () => {\n dispose_1.dispose(enumerator);\n group = null;\n });\n });\n }\n aggregate(func, seed) {\n return this.scan(func, seed).lastOrDefault();\n }\n average(selector = Types_1.Type.numberOrNaN) {\n var count = 0;\n var sum = this.sum((e, i) => {\n count++;\n return selector(e, i);\n });\n return (isNaN(sum) || !count)\n ? NaN\n : (sum / count);\n }\n max() {\n return this.aggregate(Functions.Greater);\n }\n min() {\n return this.aggregate(Functions.Lesser);\n }\n maxBy(keySelector = Functions.Identity) {\n return this.aggregate((a, b) => (keySelector(a) > keySelector(b)) ? a : b);\n }\n minBy(keySelector = Functions.Identity) {\n return this.aggregate((a, b) => (keySelector(a) < keySelector(b)) ? a : b);\n }\n sum(selector = Types_1.Type.numberOrNaN) {\n var sum = 0;\n var sumInfinite = 0;\n this.forEach(x => {\n var value = selector(x);\n if (isNaN(value)) {\n sum = NaN;\n return false;\n }\n if (isFinite(value))\n sum += value;\n else\n sumInfinite +=\n value > 0 ?\n (+1) :\n (-1);\n });\n return isNaN(sum) ? NaN : (sumInfinite ? (sumInfinite * Infinity) : sum);\n }\n product(selector = Types_1.Type.numberOrNaN) {\n var result = 1, exists = false;\n this.forEach((x, i) => {\n exists = true;\n var value = selector(x, i);\n if (isNaN(value)) {\n result = NaN;\n return false;\n }\n if (value == 0) {\n result = 0;\n return false;\n }\n result *= value;\n });\n return (exists && isNaN(result)) ? NaN : result;\n }\n quotient(selector = Types_1.Type.numberOrNaN) {\n var count = 0;\n var result = NaN;\n this.forEach((x, i) => {\n var value = selector(x, i);\n count++;\n if (count === 1) {\n result = value;\n }\n else {\n if (isNaN(value) || value === 0 || !isFinite(value)) {\n result = NaN;\n return false;\n }\n result /= value;\n }\n });\n if (count === 1)\n result = NaN;\n return result;\n }\n last() {\n var _ = this;\n _.throwIfDisposed();\n var value = undefined;\n var found = false;\n _.forEach(x => {\n found = true;\n value = x;\n });\n if (!found)\n throw new Error(\"last:No element satisfies the condition.\");\n return value;\n }\n lastOrDefault(defaultValue = null) {\n var _ = this;\n _.throwIfDisposed();\n var value = undefined;\n var found = false;\n _.forEach(x => {\n found = true;\n value = x;\n });\n return (!found) ? defaultValue : value;\n }\n share() {\n return super.share();\n }\n catchError(handler) {\n return super.catchError(handler);\n }\n finallyAction(action) {\n return super.finallyAction(action);\n }\n memoize() {\n var _ = this, disposed = !_.throwIfDisposed();\n var cache;\n var enumerator;\n return new Enumerable(() => {\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n throwIfDisposed(disposed);\n if (!enumerator)\n enumerator = _.getEnumerator();\n if (!cache)\n cache = [];\n index = 0;\n }, (yielder) => {\n throwIfDisposed(disposed);\n var i = index++;\n if (i >= cache.length) {\n return (enumerator.moveNext())\n ? yielder.yieldReturn(cache[i] = enumerator.current)\n : false;\n }\n return yielder.yieldReturn(cache[i]);\n });\n }, () => {\n disposed = true;\n if (cache)\n cache.length = 0;\n cache = null;\n dispose_1.dispose(enumerator);\n enumerator = null;\n });\n }\n}\nexports.Enumerable = Enumerable;\nclass FiniteEnumerable extends Enumerable {\n constructor(enumeratorFactory, finalizer) {\n super(enumeratorFactory, finalizer, false);\n }\n}\nexports.FiniteEnumerable = FiniteEnumerable;\nclass ArrayEnumerable extends FiniteEnumerable {\n constructor(source) {\n super(() => {\n _.throwIfDisposed();\n return new ArrayEnumerator_1.ArrayEnumerator(() => {\n _.throwIfDisposed(\"The underlying ArrayEnumerable was disposed.\", \"ArrayEnumerator\");\n return _._source;\n });\n });\n var _ = this;\n _._disposableObjectName = \"ArrayEnumerable\";\n _._source = source;\n }\n _onDispose() {\n super._onDispose();\n this._source = null;\n }\n get source() {\n return this._source;\n }\n toArray() {\n var _ = this;\n _.throwIfDisposed();\n return Enumerator_1.toArray(_._source);\n }\n asEnumerable() {\n return new ArrayEnumerable(this._source);\n }\n forEach(action) {\n var _ = this;\n _.throwIfDisposed();\n Enumerator_1.forEach(_._source, action);\n }\n any(predicate) {\n var _ = this;\n _.throwIfDisposed();\n var source = _._source, len = source.length;\n return len && (!predicate || super.any(predicate));\n }\n count(predicate) {\n var _ = this;\n _.throwIfDisposed();\n var source = _._source, len = source.length;\n return len && (predicate ? super.count(predicate) : len);\n }\n elementAtOrDefault(index, defaultValue = null) {\n var _ = this;\n _.throwIfDisposed();\n Integer_1.Integer.assertZeroOrGreater(index, 'index');\n var source = _._source;\n return index < source.length\n ? source[index]\n : defaultValue;\n }\n last() {\n var _ = this;\n _.throwIfDisposed();\n var source = _._source, len = source.length;\n return (len)\n ? source[len - 1]\n : super.last();\n }\n lastOrDefault(defaultValue = null) {\n var _ = this;\n _.throwIfDisposed();\n var source = _._source, len = source.length;\n return len\n ? source[len - 1]\n : defaultValue;\n }\n skip(count) {\n var _ = this;\n if (!(count > 0))\n return _;\n return new Enumerable(() => new ArrayEnumerator_1.ArrayEnumerator(() => _._source, count));\n }\n takeExceptLast(count = 1) {\n var _ = this;\n return _.take(_._source.length - count);\n }\n skipToLast(count) {\n if (!(count > 0))\n return Enumerable.empty();\n var _ = this;\n if (!isFinite(count))\n return _;\n var len = _._source\n ? _._source.length\n : 0;\n return _.skip(len - count);\n }\n reverse() {\n var _ = this;\n return new Enumerable(() => new ArrayEnumerator_1.ArrayEnumerator(() => _._source, _._source\n ? (_._source.length - 1)\n : 0, -1));\n }\n memoize() {\n return this.asEnumerable();\n }\n sequenceEqual(second, equalityComparer = Values.areEqual) {\n if (Types_1.Type.isArrayLike(second))\n return Arrays.areEqual(this.source, second, true, equalityComparer);\n if (second instanceof ArrayEnumerable)\n return second.sequenceEqual(this.source, equalityComparer);\n return super.sequenceEqual(second, equalityComparer);\n }\n toJoinedString(separator = \"\", selector = Functions.Identity) {\n var s = this._source;\n return !selector && Array.isArray(s)\n ? s.join(separator)\n : super.toJoinedString(separator, selector);\n }\n}\nclass Grouping extends ArrayEnumerable {\n constructor(_groupKey, elements) {\n super(elements);\n this._groupKey = _groupKey;\n }\n get key() {\n return this._groupKey;\n }\n}\nclass Lookup {\n constructor(_dictionary) {\n this._dictionary = _dictionary;\n }\n get count() {\n return this._dictionary.count;\n }\n get(key) {\n return this._dictionary.getValue(key);\n }\n contains(key) {\n return this._dictionary.containsKey(key);\n }\n getEnumerator() {\n var _ = this;\n var enumerator;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _._dictionary.getEnumerator();\n }, (yielder) => {\n if (!enumerator.moveNext())\n return false;\n var current = enumerator.current;\n return yielder.yieldReturn(new Grouping(current.key, current.value));\n }, () => {\n dispose_1.dispose(enumerator);\n });\n }\n}\nclass OrderedEnumerable extends FiniteEnumerable {\n constructor(source, keySelector, order, parent, comparer = Values.compare) {\n super(null);\n this.source = source;\n this.keySelector = keySelector;\n this.order = order;\n this.parent = parent;\n this.comparer = comparer;\n Enumerator_1.throwIfEndless(source && source.isEndless);\n }\n createOrderedEnumerable(keySelector, order) {\n return new OrderedEnumerable(this.source, keySelector, order, this);\n }\n thenBy(keySelector) {\n return this.createOrderedEnumerable(keySelector, 1);\n }\n thenUsing(comparison) {\n return new OrderedEnumerable(this.source, null, 1, this, comparison);\n }\n thenByDescending(keySelector) {\n return this.createOrderedEnumerable(keySelector, -1);\n }\n thenUsingReversed(comparison) {\n return new OrderedEnumerable(this.source, null, -1, this, comparison);\n }\n getEnumerator() {\n var _ = this;\n var buffer;\n var indexes;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n index = 0;\n buffer = Enumerable.toArray(_.source);\n indexes = createSortContext(_).generateSortedIndexes(buffer);\n }, (yielder) => {\n return (index < indexes.length)\n ? yielder.yieldReturn(buffer[indexes[index++]])\n : false;\n }, () => {\n if (buffer)\n buffer.length = 0;\n buffer = null;\n if (indexes)\n indexes.length = 0;\n indexes = null;\n }, false);\n }\n _onDispose() {\n super._onDispose();\n this.source = null;\n this.keySelector = null;\n this.order = null;\n this.parent = null;\n }\n}\nfunction nextEnumerator(queue, e) {\n if (e) {\n if (e.moveNext()) {\n queue.enqueue(e);\n }\n else {\n dispose_1.dispose(e);\n e = null;\n }\n }\n return e;\n}\nfunction createSortContext(orderedEnumerable, currentContext = null) {\n var context = new KeySortedContext_1.KeySortedContext(currentContext, orderedEnumerable.keySelector, orderedEnumerable.order, orderedEnumerable.comparer);\n if (orderedEnumerable.parent)\n return createSortContext(orderedEnumerable.parent, context);\n return context;\n}\nfunction throwIfDisposed(disposed) {\n if (disposed)\n throw new ObjectDisposedException_1.ObjectDisposedException(\"Enumerable\");\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = Enumerable;\n","/*!\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\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 {\r\n\tempty as EmptyEnumerator,\r\n\tfrom as enumeratorFrom,\r\n\tforEach,\r\n\ttoArray,\r\n\tmap,\r\n\tisEnumerable,\r\n\tthrowIfEndless\r\n} from \"../System/Collections/Enumeration/Enumerator\";\r\nimport {Type} from \"../System/Types\";\r\nimport {Integer} from \"../System/Integer\";\r\nimport {Functions as 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, using} from \"../System/Disposable/dispose\";\r\nimport {DisposableBase} from \"../System/Disposable/DisposableBase\";\r\nimport {UnsupportedEnumerableException} from \"../System/Collections/Enumeration/UnsupportedEnumerableException\";\r\nimport {ObjectDisposedException} from \"../System/Disposable/ObjectDisposedException\";\r\nimport {KeySortedContext} from \"../System/Collections/Sorting/KeySortedContext\";\r\nimport {ArgumentNullException} from \"../System/Exceptions/ArgumentNullException\";\r\nimport {ArgumentOutOfRangeException} from \"../System/Exceptions/ArgumentOutOfRangeException\";\r\nimport {IEnumerator} from \"../System/Collections/Enumeration/IEnumerator\";\r\nimport {IEnumerable} from \"../System/Collections/Enumeration/IEnumerable\";\r\nimport {Action, Predicate, Selector, EqualityComparison, Comparison} from \"../System/FunctionTypes\";\r\nimport {IEnumerableOrArray} from \"../System/Collections/IEnumerableOrArray\";\r\nimport {IArray} from \"../System/Collections/Array/IArray\";\r\nimport {IMap} from \"../System/Collections/Dictionaries/IDictionary\";\r\nimport {Comparable} from \"../System/IComparable\";\r\nimport {IComparer} from \"../System/IComparer\";\r\nimport {IKeyValuePair} from \"../System/KeyValuePair\";\r\nimport {Order} from \"../System/Collections/Sorting/Order\";\r\n\r\n// #region Local Constants.\r\n\r\nconst INVALID_DEFAULT:any = {}; // create a private unique instance for referencing.\r\nconst VOID0:any = void 0;\r\nconst BREAK:(e:any)=>EnumerableAction = element => EnumerableAction.Break;\r\n\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\r\n{\r\n\treturn EmptyEnumerator;\r\n}\r\n\r\n// #endregion\r\n\r\n/**\r\n * Defined values for doAction.\r\n */\r\nexport const enum EnumerableAction\r\n{\r\n\tBreak = 0,\r\n\tReturn = 1,\r\n\tSkip = 2\r\n}\r\n\r\n/*\r\n * NOTE: About InfiniteEnumerable and Enumerable.\r\n * There may seem like there's extra overrides here and they may seem unnecessary.\r\n * But after closer inspection you'll see the type chain is retained and\r\n * infinite enumerables are prevented from having features that finite ones have.\r\n *\r\n * I'm not sure if it's the best option to just use overrides, but it honors the typing properly.\r\n */\r\n\r\nexport class InfiniteEnumerable\r\nextends DisposableBase implements IEnumerable\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\tthis._isEndless = true;\r\n\t}\r\n\r\n\tprotected _isEndless:boolean;\r\n\tget isEndless():boolean\r\n\t{\r\n\t\treturn this._isEndless;\r\n\t}\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(); // Just in case.\r\n\t\tthis._enumeratorFactory = null;\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\t// Return a default (unfiltered) enumerable.\r\n\tasEnumerable():InfiniteEnumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\t\treturn new InfiniteEnumerable(() => _.getEnumerator());\r\n\t}\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,\r\n\t\tinitializer?:()=>void,\r\n\t\tisEndless:boolean = this.isEndless):InfiniteEnumerable\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\tif(initializer) initializer();\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\t// May need a way to propagate isEndless\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\r\n\t\t\t\t\tisEndless\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\r\n\t\t\tisEndless\r\n\t\t);\r\n\t}\r\n\r\n\r\n\tforce():void\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tthis.doAction(BREAK)\r\n\t\t\t.getEnumerator()\r\n\t\t\t.moveNext();\r\n\r\n\t}\r\n\r\n\t// #region Indexing/Paging methods.\r\n\tskip(count:number):InfiniteEnumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\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\treturn this.doAction(\r\n\t\t\t(element:T, index?:number) =>\r\n\t\t\t\tindex\r\n\t{\r\n\t\tif(!(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))\r\n\t\t\tthrow new ArgumentOutOfRangeException('count', count, 'Must be finite.');\r\n\r\n\t\tInteger.assert(count, \"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\r\n\t\t\t{\r\n\t\t\t\tvar i = 0;\r\n\t\t\t\twhile(e.moveNext())\r\n\t\t\t\t{\r\n\t\t\t\t\tif(i==n) return e.current;\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn defaultValue;\r\n\t\t\t});\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 v = this.firstOrDefault(INVALID_DEFAULT);\r\n\t\tif(v===INVALID_DEFAULT) throw new Error(\"first:The sequence is empty.\");\r\n\t\treturn v;\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\treturn using(\r\n\t\t\tthis.getEnumerator(),\r\n\t\t\te=> e.moveNext() ? e.current : defaultValue\r\n\t\t);\r\n\t}\r\n\r\n\r\n\tsingle():T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\treturn using(\r\n\t\t\tthis.getEnumerator(),\r\n\t\t\te=>\r\n\t\t\t{\r\n\t\t\t\tif(e.moveNext())\r\n\t\t\t\t{\r\n\t\t\t\t\tvar value = e.current;\r\n\t\t\t\t\tif(!e.moveNext()) return value;\r\n\t\t\t\t\tthrow new Error(\"single:sequence contains more than one element.\");\r\n\t\t\t\t}\r\n\t\t\t\tthrow new Error(\"single:The sequence is empty.\");\r\n\t\t\t}\r\n\t\t);\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\treturn using(\r\n\t\t\tthis.getEnumerator(),\r\n\t\t\te=>\r\n\t\t\t{\r\n\t\t\t\tif(e.moveNext())\r\n\t\t\t\t{\r\n\t\t\t\t\tvar value = e.current;\r\n\t\t\t\t\tif(!e.moveNext()) return value;\r\n\t\t\t\t}\r\n\t\t\t\treturn defaultValue;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tany():boolean\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\treturn using(\r\n\t\t\tthis.getEnumerator(),\r\n\t\t\te=> e.moveNext()\r\n\t\t);\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\t// #endregion\r\n\r\n\r\n\t// #region Projection and Filtering Methods\r\n\r\n\ttraverseBreadthFirst(\r\n\t\tchildrenSelector:(element:T) => IEnumerableOrArray):Enumerable;\r\n\r\n\ttraverseBreadthFirst(\r\n\t\tchildrenSelector:(element:T|TNode) => IEnumerableOrArray):Enumerable;\r\n\r\n\ttraverseBreadthFirst(\r\n\t\tchildrenSelector:(element:T) => IEnumerableOrArray,\r\n\t\tresultSelector?:(element:T, nestLevel?:number) => TResult):Enumerable;\r\n\r\n\ttraverseBreadthFirst(\r\n\t\tchildrenSelector:(element:T|TNode) => IEnumerableOrArray,\r\n\t\tresultSelector?:(element:TNode, nestLevel?:number) => TResult):Enumerable;\r\n\r\n\ttraverseBreadthFirst(\r\n\t\tchildrenSelector:(element:T|TNode) => IEnumerableOrArray,\r\n\t\tresultSelector:(\r\n\t\t\telement:TNode,\r\n\t\t\tnestLevel?:number) => any = Functions.Identity):Enumerable\r\n\t{\r\n\t\tvar _ = this, isEndless = _._isEndless || null; // Is endless is not affirmative if false.\r\n\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.from(buffer)\r\n\t\t\t\t\t\t\t\t.selectMany(childrenSelector);\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\r\n\t\t\t\t\tisEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\r\n\t\t\tisEndless\r\n\t\t);\r\n\t}\r\n\r\n\r\n\ttraverseDepthFirst(\r\n\t\tchildrenSelector:(element:T) => IEnumerableOrArray):Enumerable;\r\n\r\n\ttraverseDepthFirst(\r\n\t\tchildrenSelector:(element:T|TNode) => IEnumerableOrArray):Enumerable;\r\n\r\n\ttraverseDepthFirst(\r\n\t\tchildrenSelector:(element:T) => IEnumerableOrArray,\r\n\t\tresultSelector?:(element:T, nestLevel?:number) => TResult):Enumerable;\r\n\r\n\ttraverseDepthFirst(\r\n\t\tchildrenSelector:(element:T|TNode) => IEnumerableOrArray,\r\n\t\tresultSelector?:(element:TNode, nestLevel?:number) => TResult):Enumerable;\r\n\r\n\ttraverseDepthFirst(\r\n\t\tchildrenSelector:(element:T|TNode) => IEnumerableOrArray,\r\n\t\tresultSelector:(\r\n\t\t\telement:TNode,\r\n\t\t\tnestLevel?:number) => any = Functions.Identity):Enumerable\r\n\t{\r\n\t\tvar _ = this, isEndless = _._isEndless || null; // Is endless is not affirmative if false.\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\tlet 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\tlet e = Enumerable.fromAny(childrenSelector(enumerator.current));\r\n\t\t\t\t\t\t\t\tenumerator = e ? e.getEnumerator() : EmptyEnumerator;\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\tdispose.these(enumeratorStack);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\tisEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\t\t\tisEndless\r\n\t\t);\r\n\t}\r\n\r\n\r\n\tflatten():Enumerable\r\n\t{\r\n\t\tvar _ = this, isEndless = _._isEndless || null; // Is endless is not affirmative if false.;\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)\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.dispose();\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\t// Because strings are enumerable, we can get stuck in an infinite loop.\r\n\t\t\t\t\t\t\t\t// Treat strings as primitives here.\r\n\t\t\t\t\t\t\t\tvar e = !Type.isString(c) && Enumerable.fromAny(c);\r\n\t\t\t\t\t\t\t\tif(e)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tmiddleEnumerator\r\n\t\t\t\t\t\t\t\t\t\t= e\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(c);\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 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, middleEnumerator);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\tisEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\t\t\tisEndless\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\r\n\t\t\t\t\t_._isEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\r\n\t\t\t_._isEndless\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!==VOID0; // 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\r\n\t\t\t\t\t_._isEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\r\n\t\t\t_._isEndless\r\n\t\t);\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\tselect(selector:Selector):InfiniteEnumerable\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 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: 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\r\n\t\t\t\t\t_._isEndless\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\r\n\t\t\t_._isEndless\r\n\t\t);\r\n\t}\r\n\r\n\t/*\r\n\tpublic static IEnumerable SelectMany(\r\n\t\tthis IEnumerable source,\r\n\t\tFunc> collectionSelector,\r\n\t\tFunc resultSelector)\r\n\t */\r\n\r\n\tprotected _selectMany(\r\n\t\tcollectionSelector:Selector>,\r\n\t\tresultSelector?:(collection:T, element:TElement) => TResult):Enumerable\r\n\t{\r\n\t\tvar _ = this, isEndless = _._isEndless || null; // Do second enumeration, it will be indeterminate if false.\r\n\t\tif(!resultSelector)\r\n\t\t\tresultSelector = (a:T, b:any) => 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===VOID0 && !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 = enumeratorFrom(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\r\n\t\t\t\t\tisEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\r\n\t\t\tisEndless\r\n\t\t);\r\n\t}\r\n\r\n\tselectMany(\r\n\t\tcollectionSelector:Selector>):InfiniteEnumerable;\r\n\r\n\tselectMany(\r\n\t\tcollectionSelector:Selector>,\r\n\t\tresultSelector:(collection:T, element:TElement) => TResult):InfiniteEnumerable;\r\n\r\n\tselectMany(\r\n\t\tcollectionSelector:Selector>,\r\n\t\tresultSelector?:(collection:T, element:any) => TResult):InfiniteEnumerable\r\n\t{\r\n\t\treturn this._selectMany(collectionSelector, resultSelector);\r\n\t}\r\n\r\n\tprotected _choose(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!==VOID0)\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\r\n\t\t\t\t\t_._isEndless\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\r\n\t\t\t_._isEndless\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns selected values that are not null or undefined.\r\n\t */\r\n\tchoose():InfiniteEnumerable;\r\n\tchoose(selector?:Selector):InfiniteEnumerable\r\n\tchoose(selector:Selector = Functions.Identity):InfiniteEnumerable\r\n\t{\r\n\t\treturn this._choose(selector)\r\n\t}\r\n\r\n\twhere(predicate:Predicate):InfiniteEnumerable\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\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\r\n\t\t\t\t\t_._isEndless\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\r\n\t\t\t_._isEndless\r\n\t\t);\r\n\r\n\t}\r\n\r\n\tofType(type:{ new (...params:any[]):TType }):InfiniteEnumerable;\r\n\tofType(type:any):InfiniteEnumerable\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.choose()\r\n\t\t\t.where(x=>(typeof x)===typeName);\r\n\t}\r\n\r\n\texcept(\r\n\t\tsecond:IEnumerableOrArray,\r\n\t\tcompareSelector?:Selector):InfiniteEnumerable\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\tforEach(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\r\n\t\t\t\t\t_._isEndless\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\r\n\t\t\t_._isEndless\r\n\t\t);\r\n\t}\r\n\r\n\tdistinct(compareSelector?:(value:T) => T):InfiniteEnumerable\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,1,1] results in [0,1,2,0,1];\r\n\tdistinctUntilChanged(compareSelector:Selector = Functions.Identity):InfiniteEnumerable\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(Values.areEqual(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\r\n\t\t\t\t\t_._isEndless\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\r\n\t\t\t_._isEndless\r\n\t\t);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns a single default value if empty.\r\n\t * @param defaultValue\r\n\t * @returns {Enumerable}\r\n\t */\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\r\n\t\t\t\t\t_._isEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\r\n\t\t\t_._isEndless\r\n\t\t);\r\n\t}\r\n\r\n\tzip(\r\n\t\tsecond:IEnumerableOrArray,\r\n\t\tresultSelector:(first:T, second:TSecond, index?:number) => TResult):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\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)=> firstEnumerator.moveNext()\r\n\t\t\t\t\t&& secondEnumerator.moveNext()\r\n\t\t\t\t\t&& yielder.yieldReturn(resultSelector(firstEnumerator.current, secondEnumerator.current, index++)),\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\tzipMultiple(\r\n\t\tsecond:IArray>,\r\n\t\tresultSelector:(first:T, second:TSecond, index?:number) => TResult):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\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\r\n\t// #region Join Methods\r\n\r\n\tjoin(\r\n\t\tinner:IEnumerableOrArray,\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!==VOID0)\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:IEnumerableOrArray,\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\r\n\tmerge(enumerables:IArray>):InfiniteEnumerable\r\n\t{\r\n\t\tvar _ = this, isEndless = _._isEndless || null;\r\n\r\n\t\tif(!enumerables || enumerables.length==0)\r\n\t\t\treturn _;\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>;\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>(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\r\n\t\t\t\t\tisEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\t\t\tisEndless\r\n\t\t);\r\n\t}\r\n\r\n\tconcat(...enumerables:Array>):InfiniteEnumerable\r\n\t{\r\n\t\treturn this.merge(enumerables);\r\n\t}\r\n\r\n\r\n\tunion(\r\n\t\tsecond:IEnumerableOrArray,\r\n\t\tcompareSelector:Selector = Functions.Identity):Enumerable\r\n\t{\r\n\t\tvar _ = this, isEndless = _._isEndless || null;\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); // Acting as a HashSet.\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===VOID0)\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 = enumeratorFrom(second);\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\r\n\t\t\t\t\tisEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\r\n\t\t\tisEndless\r\n\t\t);\r\n\t}\r\n\r\n\tinsertAt(index:number, other:IEnumerableOrArray):Enumerable\r\n\t{\r\n\t\tInteger.assertZeroOrGreater(index, 'index');\r\n\t\tvar n:number = index;\r\n\r\n\t\tvar _ = this, isEndless = _._isEndless || null;\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\r\n\t\t\t\t\tisEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\r\n\t\t\tisEndless\r\n\t\t);\r\n\t}\r\n\r\n\r\n\talternateMultiple(sequence:IEnumerableOrArray):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\r\n\t\t\t\t\t_._isEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\r\n\t\t\t_._isEndless\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\t// #region Error Handling\r\n\tcatchError(handler:(e:any) => void):InfiniteEnumerable\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):InfiniteEnumerable\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\tbuffer(size:number):InfiniteEnumerable\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\r\n\t\t\t\t\t_._isEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\r\n\t\t\t_._isEndless\r\n\t\t);\r\n\t}\r\n\r\n\r\n\tshare():InfiniteEnumerable\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 sharedEnumerator || (sharedEnumerator = _.getEnumerator());\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\r\n\t\t\t_._isEndless\r\n\t\t);\r\n\t}\r\n\r\n\r\n}\r\n\r\n\r\n/**\r\n * Enumerable 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 InfiniteEnumerable\r\n{\r\n\r\n\tconstructor(\r\n\t\tenumeratorFactory:() => IEnumerator,\r\n\t\tfinalizer?:() => void,\r\n\t\tisEndless:boolean = null)\r\n\t{\r\n\t\tsuper(enumeratorFactory, finalizer);\r\n\t\tthis._isEndless = isEndless;\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:IEnumerableOrArray):Enumerable\r\n\t{\r\n\t\tvar e = Enumerable.fromAny(source);\r\n\t\tif(!e) throw new UnsupportedEnumerableException();\r\n\t\treturn e;\r\n\t}\r\n\r\n\tstatic fromAny(\r\n\t\tsource:any):Enumerable\r\n\r\n\tstatic fromAny(\r\n\t\tsource:IEnumerableOrArray,\r\n\t\tdefaultEnumerable?:Enumerable):Enumerable\r\n\r\n\tstatic fromAny(\r\n\t\tsource:any,\r\n\t\tdefaultEnumerable?:Enumerable):Enumerable\r\n\r\n\tstatic fromAny(\r\n\t\tsource:any,\r\n\t\tdefaultEnumerable:Enumerable = null):Enumerable\r\n\t{\r\n\t\tif(Type.isObject(source) || Type.isString(source))\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(Type.isArrayLike(source))\r\n\t\t\t\treturn new ArrayEnumerable(source);\r\n\r\n\t\t\tif(isEnumerable(source))\r\n\t\t\t\treturn new Enumerable(\r\n\t\t\t\t\t()=>source.getEnumerator(),\r\n\t\t\t\t\tnull, source.isEndless);\r\n\t\t}\r\n\r\n\t\treturn defaultEnumerable;\r\n\t}\r\n\r\n\tstatic fromOrEmpty(source:IEnumerableOrArray):Enumerable\r\n\t{\r\n\t\treturn Enumerable.fromAny(source) || Enumerable.empty();\r\n\t}\r\n\r\n\t/**\r\n\t * Static helper for converting enumerables to an array.\r\n\t * @param source\r\n\t * @returns {any}\r\n\t */\r\n\tstatic toArray(source:IEnumerableOrArray):T[]\r\n\t{\r\n\t\tif(source instanceof Enumerable)\r\n\t\t\treturn source.toArray();\r\n\r\n\t\treturn toArray(source);\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t// #region Static Methods...\r\n\tstatic choice(values:IArray):InfiniteEnumerable\r\n\t{\r\n\t\tvar len = values && values.length;\r\n\t\t// We could return empty if no length, but that would break the typing and produce unexpected results.\r\n\t\t// Enforcing that there must be at least 1 choice is key.\r\n\t\tif(!len || !isFinite(len))\r\n\t\t\tthrow new ArgumentOutOfRangeException('length', length);\r\n\r\n\t\treturn new InfiniteEnumerable(\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(Integer.random.select(values)),\r\n\t\t\t\ttrue // Is endless!\r\n\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\tstatic chooseFrom(...args:T[]):InfiniteEnumerable\r\n\t{\r\n\t\treturn Enumerable.choice(args);\r\n\t}\r\n\r\n\tstatic cycle(values:IArray):InfiniteEnumerable\r\n\t{\r\n\t\tvar len = values && values.length;\r\n\t\t// We could return empty if no length, but that would break the typing and produce unexpected results.\r\n\t\t// Enforcing that there must be at least 1 choice is key.\r\n\t\tif(!len || !isFinite(len))\r\n\t\t\tthrow new ArgumentOutOfRangeException('length', length);\r\n\r\n\t\treturn new InfiniteEnumerable(\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}, // 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\ttrue // Is endless!\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic cycleThrough(...args:T[]):InfiniteEnumerable\r\n\t{\r\n\t\treturn Enumerable.cycle(args);\r\n\t}\r\n\r\n\tstatic empty():FiniteEnumerable\r\n\t{\r\n\t\t// Could be single static instance, but for safety, we'll make a new one.\r\n\t\treturn new FiniteEnumerable(getEmptyEnumerator);\r\n\t}\r\n\r\n\tstatic repeat(element:T):InfiniteEnumerable;\r\n\tstatic repeat(element:T, count:number):FiniteEnumerable;\r\n\tstatic repeat(element:T, count:number = Infinity):Enumerable\r\n\t{\r\n\t\tif(!(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 FiniteEnumerable(\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() => { index = 0; },\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\ttrue // Is endless!\r\n\t\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\t// Note: this enumeration is endless but can be disposed/cancelled and finalized.\r\n\tstatic repeatWithFinalize(\r\n\t\tinitializer:() => T,\r\n\t\tfinalizer:(element:T) => void):InfiniteEnumerable\r\n\t{\r\n\r\n\t\treturn new InfiniteEnumerable(\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\r\n\t\t\t\t\ttrue // Is endless!\r\n\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates an enumerable of one element.\r\n\t * @param element\r\n\t * @returns {FiniteEnumerable}\r\n\t */\r\n\tstatic make(element:T):FiniteEnumerable\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\r\n\tstatic range(\r\n\t\tstart:number,\r\n\t\tcount:number,\r\n\t\tstep:number = 1):FiniteEnumerable\r\n\t{\r\n\t\tif(!isFinite(start))\r\n\t\t\tthrow new ArgumentOutOfRangeException(\"start\", start, \"Must be a finite number.\");\r\n\r\n\t\tif(!(count>0))\r\n\t\t\treturn Enumerable.empty();\r\n\r\n\t\tif(!step)\r\n\t\t\tthrow new ArgumentOutOfRangeException(\"step\", step, \"Must be a valid value\");\r\n\r\n\t\tif(!isFinite(step))\r\n\t\t\tthrow new ArgumentOutOfRangeException(\"step\", step, \"Must be a finite number.\");\r\n\r\n\t\tInteger.assert(count, \"count\");\r\n\r\n\t\treturn new FiniteEnumerable(\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{\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):InfiniteEnumerable\r\n\t{\r\n\t\tif(!isFinite(start))\r\n\t\t\tthrow new ArgumentOutOfRangeException(\"start\", start, \"Must be a finite number.\");\r\n\r\n\t\tif(!step)\r\n\t\t\tthrow new ArgumentOutOfRangeException(\"step\", step, \"Must be a valid value\");\r\n\r\n\t\tif(!isFinite(step))\r\n\t\t\tthrow new ArgumentOutOfRangeException(\"step\", step, \"Must be a finite number.\");\r\n\r\n\t\treturn new InfiniteEnumerable(\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\r\n\t\t\t\t\ttrue // Is endless!\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic toNegativeInfinity(\r\n\t\tstart:number = 0,\r\n\t\tstep:number = 1):InfiniteEnumerable\r\n\t{\r\n\t\treturn Enumerable.toInfinity(start, -step);\r\n\t}\r\n\r\n\tstatic rangeTo(\r\n\t\tstart:number,\r\n\t\tto:number,\r\n\t\tstep:number = 1):FiniteEnumerable\r\n\t{\r\n\t\tif(isNaN(to) || !isFinite(to))\r\n\t\t\tthrow new ArgumentOutOfRangeException(\"to\", to, \"Must be a finite number.\");\r\n\r\n\t\tif(step && !isFinite(step))\r\n\t\t\tthrow new ArgumentOutOfRangeException(\"step\", step, \"Must be a finite non-zero number.\");\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\treturn new FiniteEnumerable(\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(() => { value = start; },\r\n\t\t\t\t\tstart\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar result:boolean = value<=to && yielder.yieldReturn(value);\r\n\r\n\t\t\t\t\t\t\tif(result)\r\n\t\t\t\t\t\t\t\tvalue += step;\r\n\r\n\t\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t:\r\n\t\t\t\t\t\tyielder=>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar result:boolean = value>=to && yielder.yieldReturn(value);\r\n\r\n\t\t\t\t\t\t\tif(result)\r\n\t\t\t\t\t\t\t\tvalue -= step;\r\n\r\n\t\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t, false);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic matches(input:string, pattern:any, flags:string = \"\"):FiniteEnumerable\r\n\t{\r\n\t\tif(input===null || input===VOID0)\r\n\t\t\tthrow new ArgumentNullException(\"input\");\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 FiniteEnumerable(\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):InfiniteEnumerable;\r\n\tstatic generate(factory:(index?:number) => T, count:number):FiniteEnumerable;\r\n\tstatic generate(factory:(index?:number) => T, count:number = Infinity):InfiniteEnumerable\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\t\t\t?\r\n\t\t\tnew FiniteEnumerable(\r\n\t\t\t\t() =>\r\n\t\t\t\t{\r\n\t\t\t\t\tvar c:number = count;\r\n\t\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t\t() =>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t\t},\r\n\r\n\t\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar current:number = index++;\r\n\t\t\t\t\t\t\treturn current(\r\n\t\t\t\t() =>\r\n\t\t\t\t{\r\n\t\t\t\t\tvar index:number = 0;\r\n\t\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t\t() =>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t\t},\r\n\r\n\t\t\t\t\t\t(yielder)=> yielder.yieldReturn(factory(index++)),\r\n\r\n\t\t\t\t\t\ttrue // Is endless!\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t}\r\n\r\n\tstatic unfold(\r\n\t\tseed:T,\r\n\t\tvalueFactory:Selector,\r\n\t\tskipSeed:Boolean = false):InfiniteEnumerable\r\n\t{\r\n\t\treturn new InfiniteEnumerable(\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\r\n\t\t\t\t\ttrue // Is endless!\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:IEnumerableOrArray,\r\n\t\taction:(element:T, index?:number) => any):void\r\n\t{\r\n\t\t// Will properly dispose created enumerable.\r\n\t\t// Will throw if enumerable is endless.\r\n\t\tforEach(enumerable, action);\r\n\t}\r\n\r\n\tstatic map(\r\n\t\tenumerable:IEnumerableOrArray,\r\n\t\tselector:Selector):TResult[]\r\n\t{\r\n\t\t// Will properly dispose created enumerable.\r\n\t\t// Will throw if enumerable is endless.\r\n\t\treturn map(enumerable, selector);\r\n\r\n\t}\r\n\r\n\t// Slightly optimized versions for numbers.\r\n\tstatic max(values:FiniteEnumerable):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:FiniteEnumerable):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\r\n\t/**\r\n\t * Takes any set of collections of the same type and weaves them together.\r\n\t * @param enumerables\r\n\t * @returns {Enumerable}\r\n\t */\r\n\tstatic weave(\r\n\t\tenumerables:IEnumerableOrArray>):Enumerable\r\n\t{\r\n\t\tif(!enumerables)\r\n\t\t\tthrow new ArgumentNullException('enumerables');\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar queue:Queue>;\r\n\t\t\t\tvar mainEnumerator:IEnumerator>;\r\n\t\t\t\tvar index: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\tindex = 0;\r\n\t\t\t\t\t\tqueue = new Queue>();\r\n\t\t\t\t\t\tmainEnumerator = enumeratorFrom(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\tlet e:IEnumerator;\r\n\r\n\t\t\t\t\t\t// First pass...\r\n\t\t\t\t\t\tif(mainEnumerator)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\twhile(!e && mainEnumerator.moveNext())\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tlet c = mainEnumerator.current;\r\n\t\t\t\t\t\t\t\te = nextEnumerator(queue, c && enumeratorFrom(c));\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(!e)\r\n\t\t\t\t\t\t\t\tmainEnumerator = null;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\twhile(!e && queue.count)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\te = nextEnumerator(queue, queue.dequeue());\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn e\r\n\t\t\t\t\t\t\t? yielder.yieldReturn(e.current)\r\n\t\t\t\t\t\t\t: yielder.yieldBreak();\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.these(queue.dump());\r\n\t\t\t\t\t\tdispose(mainEnumerator, queue);\r\n\t\t\t\t\t\tmainEnumerator = null;\r\n\t\t\t\t\t\tqueue = 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\tdoAction(\r\n\t\taction:Action|Predicate|Selector|Selector,\r\n\t\tinitializer?:()=>void,\r\n\t\tisEndless:boolean = this.isEndless):Enumerable\r\n\t{\r\n\t\treturn >super.doAction(action, initializer, isEndless);\r\n\t}\r\n\r\n// #region Indexing/Paging methods.\r\n\r\n\tskip(count:number):Enumerable\r\n\t{\r\n\t\treturn >super.skip(count);\r\n\t}\r\n\r\n\tskipWhile(predicate:Predicate):Enumerable\r\n\t{\r\n\t\tthis.throwIfDisposed();\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.Skip\r\n\t\t\t\t\t: EnumerableAction.Return\r\n\t\t);\r\n\t}\r\n\r\n\ttakeWhile(predicate:Predicate):Enumerable\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tif(!predicate)\r\n\t\t\tthrow new ArgumentNullException('predicate');\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\tnull,\r\n\t\t\tnull // We don't know the state if it is endless or not.\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\t\tthis.throwIfDisposed();\r\n\r\n\t\tif(!predicate)\r\n\t\t\tthrow new ArgumentNullException('predicate');\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\tnull,\r\n\t\t\t\tnull // We don't know the state if it is endless or not.\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\t\t\t\treturn EnumerableAction.Return;\r\n\t\t\t},\r\n\t\t\t()=>\r\n\t\t\t{\r\n\t\t\t\tfound = false;\r\n\t\t\t},\r\n\t\t\tnull // We don't know the state if it is endless or not.\r\n\t\t);\r\n\t}\r\n\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\t\tthrowIfEndless(_.isEndless);\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\tthrowIfEndless(e.isEndless);\r\n\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\treturn predicate\r\n\t\t\t? this.where(predicate).toArray()\r\n\t\t\t: this.copyTo([]);\r\n\t}\r\n\r\n\tcopyTo(target:T[], index:number = 0):T[]\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tif(!target) throw new ArgumentNullException(\"target\");\r\n\t\tInteger.assertZeroOrGreater(index);\r\n\r\n\t\t// If not exposing an action that could cause dispose, then use forEach utility instead.\r\n\t\tforEach(this, (x, i)=>\r\n\t\t{\r\n\t\t\ttarget[i + index] = x\r\n\t\t});\r\n\r\n\t\treturn target;\r\n\t}\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\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!==VOID0) 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, i)=>\r\n\t\t{\r\n\t\t\tobj[keySelector(x, i)] = elementSelector(x, i);\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, i)=> dict.addByKeyValue(keySelector(x, i), elementSelector(x, i)));\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\ttakeExceptLast(count:number = 1):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\tif(!(count>0)) // Out of bounds?\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\tskipToLast(count:number):Enumerable\r\n\t{\r\n\t\tif(!(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.\r\n\t\t\treturn _;\r\n\r\n\t\tInteger.assert(count, \"count\");\r\n\r\n\t\t// This sets up the query so nothing is done until move next is called.\r\n\t\treturn _.reverse()\r\n\t\t\t.take(count)\r\n\t\t\t.reverse();\r\n\t}\r\n\r\n\t// To help with type guarding.\r\n\r\n\twhere(predicate:Predicate):Enumerable\r\n\t{\r\n\t\treturn >super.where(predicate);\r\n\t}\r\n\r\n\tselect(selector:Selector):Enumerable\r\n\t{\r\n\t\treturn >super.select(selector);\r\n\t}\r\n\r\n\tselectMany(\r\n\t\tcollectionSelector:Selector>):Enumerable;\r\n\r\n\r\n\tselectMany(\r\n\t\tcollectionSelector: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:T, element:any)=>TResult):Enumerable\r\n\t{\r\n\t\treturn this._selectMany(collectionSelector, resultSelector);\r\n\t}\r\n\r\n\tchoose():Enumerable;\r\n\tchoose(selector?:Selector):Enumerable\r\n\tchoose(selector:Selector = Functions.Identity):Enumerable\r\n\t{\r\n\t\treturn this._choose(selector);\r\n\t}\r\n\r\n\treverse():Enumerable\r\n\t{\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\t\tthrowIfEndless(_._isEndless); // Cannot reverse an endless collection...\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)=> index && 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\t\tthrowIfEndless(_._isEndless); // Cannot shuffle an endless collection...\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\t\tvar count:number = 0;\r\n\t\tthis.forEach(\r\n\t\t\tpredicate\r\n\r\n\t\t\t\t?\r\n\t\t\t\t(x, i) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif(predicate(x, i))++count;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t:\r\n\t\t\t\t() =>\r\n\t\t\t\t{\r\n\t\t\t\t\t++count;\r\n\t\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\tif(!predicate)\r\n\t\t\tthrow new ArgumentNullException(\"predicate\");\r\n\r\n\t\tvar result = true;\r\n\t\tthis.forEach((x, i) =>\r\n\t\t{\r\n\t\t\tif(!predicate(x, i))\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\tif(!predicate)\r\n\t\t\treturn super.any();\r\n\r\n\t\tvar result = false;\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\tthis.forEach(\r\n\t\t\t(x, i) =>\r\n\t\t\t{\r\n\t\t\t\tresult = predicate(x, i); // 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\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\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\t\tthis.forEach(\r\n\t\t\tcompareSelector\r\n\t\t\t\t?\r\n\t\t\t\t(element:T, i?:number) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif(Values.areEqual(compareSelector(element, i), compareSelector(value, i), true))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfound = i;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t:\r\n\t\t\t\t(element:T, i?:number) =>\r\n\t\t\t\t{\r\n\t\t\t\t\t// Why? Because NaN doesn't equal NaN. :P\r\n\t\t\t\t\tif(Values.areEqual(element, value, true))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfound = i;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\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\t\tthis.forEach(\r\n\t\t\tcompareSelector\r\n\t\t\t\t?\r\n\t\t\t\t(element:T, i?:number) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif(Values.areEqual(compareSelector(element, i), compareSelector(value, i), true)) result\r\n\t\t\t\t\t\t= i;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t:\r\n\t\t\t\t(element:T, i?:number) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif(Values.areEqual(element, value, true)) result = i;\r\n\t\t\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tmerge(enumerables:IArray>):Enumerable\r\n\t{\r\n\t\treturn >super.merge(enumerables);\r\n\t}\r\n\r\n\tconcat(...enumerables:Array>):Enumerable\r\n\t{\r\n\t\treturn this.merge(enumerables);\r\n\t}\r\n\r\n\r\n\tintersect(\r\n\t\tsecond:IEnumerableOrArray,\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\tforEach(second, key=>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tkeys.addByKeyValue(key, true);\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\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, keys, outs);\r\n\t\t\t\t\t},\r\n\t\t\t\t\t_._isEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\t\t\t_._isEndless\r\n\t\t);\r\n\t}\r\n\r\n\tsequenceEqual(\r\n\t\tsecond:IEnumerableOrArray,\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\tenumeratorFrom(second),\r\n\t\t\t\te2=>\r\n\t\t\t\t{\r\n\t\t\t\t\t// if both are endless, this will never evaluate.\r\n\t\t\t\t\tthrowIfEndless(e1.isEndless && e2.isEndless);\r\n\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:IEnumerableOrArray,\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\r\n\t// #endregion\r\n\r\n\r\n\tofType(type:{ new (...params:any[]):TType }):Enumerable;\r\n\tofType(type:any):Enumerable\r\n\t{\r\n\t\treturn >super.ofType(type);\r\n\t}\r\n\r\n\texcept(\r\n\t\tsecond:IEnumerableOrArray,\r\n\t\tcompareSelector?:Selector):Enumerable\r\n\t{\r\n\t\treturn >super.except(second, compareSelector);\r\n\t}\r\n\r\n\tdistinct(compareSelector?:(value:T)=>T):Enumerable\r\n\t{\r\n\t\treturn >super.distinct(compareSelector);\r\n\t}\r\n\r\n\tdistinctUntilChanged(compareSelector:Selector = Functions.Identity):Enumerable\r\n\t{\r\n\t\treturn >super.distinctUntilChanged(compareSelector);\r\n\t}\r\n\r\n// #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{\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{\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\tbuffer(size:number):Enumerable\r\n\t{\r\n\t\treturn >super.buffer(size);\r\n\t}\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>\r\n\t{\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() => this.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\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 count = 0;\r\n\t\tvar sum = this.sum((e, i)=>\r\n\t\t{\r\n\t\t\tcount++;\r\n\t\t\treturn selector(e, i);\r\n\t\t});\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 +=\r\n\t\t\t\t\t\tvalue>0 ?\r\n\t\t\t\t\t\t\t(+1) :\r\n\t\t\t\t\t\t\t(-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(x, i)=>\r\n\t\t\t{\r\n\t\t\t\texists = true;\r\n\t\t\t\tvar value = selector(x, i);\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/**\r\n\t * Takes the first number and divides it by all following.\r\n\t * @param selector\r\n\t * @returns {number}\r\n\t */\r\n\tquotient(selector:Selector = Type.numberOrNaN):number\r\n\t{\r\n\t\tvar count = 0;\r\n\t\tvar result:number = NaN;\r\n\r\n\t\tthis.forEach(\r\n\t\t\t(x, i)=>\r\n\t\t\t{\r\n\t\t\t\tvar value = selector(x, i);\r\n\t\t\t\tcount++;\r\n\r\n\t\t\t\tif(count===1)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult = value;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif(isNaN(value) || value===0 || !isFinite(value))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tresult = NaN;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tresult /= value;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tif(count===1)\r\n\t\t\tresult = NaN;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\t// #region Single Value Return...\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\t// #endregion\r\n\r\n\tshare():Enumerable\r\n\t{\r\n\t\treturn >super.share();\r\n\t}\r\n\r\n\r\n\tcatchError(handler:(e:any)=>void):Enumerable\r\n\t{\r\n\t\treturn >super.catchError(handler);\r\n\t}\r\n\r\n\r\n\tfinallyAction(action:()=>void):Enumerable\r\n\t{\r\n\t\treturn >super.finallyAction(action);\r\n\t}\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\r\n}\r\n\r\n\r\n// Provided for type guarding.\r\nexport class FiniteEnumerable\r\nextends Enumerable\r\n{\r\n\tconstructor(\r\n\t\tenumeratorFactory:() => IEnumerator,\r\n\t\tfinalizer?:() => void)\r\n\t{\r\n\t\tsuper(enumeratorFactory, finalizer, false);\r\n\t}\r\n\r\n}\r\n\r\nclass ArrayEnumerable\r\nextends FiniteEnumerable\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; // Should never 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 _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\treturn toArray(_._source);\r\n\t}\r\n\r\n\tasEnumerable():ArrayEnumerable\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\tforEach(_._source, action);\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.length;\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.length;\r\n\t\treturn len && (predicate ? super.count(predicate) : len);\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\t\tInteger.assertZeroOrGreater(index, 'index');\r\n\r\n\t\tvar source = _._source;\r\n\t\treturn index\r\n\t{\r\n\r\n\t\tvar _ = this;\r\n\r\n\t\tif(!(count>0))\r\n\t\t\treturn _;\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;\r\n\t\treturn _.take(_._source.length - count);\r\n\t}\r\n\r\n\tskipToLast(count:number):Enumerable\r\n\t{\r\n\t\tif(!(count>0))\r\n\t\t\treturn Enumerable.empty();\r\n\r\n\t\tvar _ = this;\r\n\t\tif(!isFinite(count))\r\n\t\t\treturn _;\r\n\r\n\t\tvar 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 this.asEnumerable();\r\n\t}\r\n\r\n\tsequenceEqual(\r\n\t\tsecond:IEnumerableOrArray,\r\n\t\tequalityComparer:EqualityComparison = Values.areEqual):boolean\r\n\t{\r\n\t\tif(Type.isArrayLike(second))\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 && Array.isArray(s)\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\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\nexport interface IOrderedEnumerable\r\nextends FiniteEnumerable\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 FiniteEnumerable 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\tthrowIfEndless(source && source.isEndless);\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{\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{\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\r\n\t\t\tfalse\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// A private static helper for the weave function.\r\nfunction nextEnumerator(queue:Queue>, e:IEnumerator):IEnumerator\r\n{\r\n\tif(e)\r\n\t{\r\n\t\tif(e.moveNext())\r\n\t\t{\r\n\t\t\tqueue.enqueue(e);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tdispose(e);\r\n\t\t\te = null;\r\n\t\t}\r\n\t}\r\n\treturn e;\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):void\r\n{\r\n\tif(disposed) throw new ObjectDisposedException(\"Enumerable\");\r\n}\r\n// #endregion\r\n\r\nexport default Enumerable;\r\n"]} \ No newline at end of file +{"version":3,"sources":["System.Linq/Linq.js","System.Linq/Linq.ts"],"names":[],"mappings":"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","file":"System.Linq/Linq.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Original: http://linqjs.codeplex.com/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst Values = require(\"../System/Compare\");\nconst Arrays = require(\"../System/Collections/Array/Compare\");\nconst ArrayUtility = require(\"../System/Collections/Array/Utility\");\nconst Enumerator_1 = require(\"../System/Collections/Enumeration/Enumerator\");\nconst EmptyEnumerator_1 = require(\"../System/Collections/Enumeration/EmptyEnumerator\");\nconst Types_1 = require(\"../System/Types\");\nconst Integer_1 = require(\"../System/Integer\");\nconst Functions_1 = require(\"../System/Functions\");\nconst ArrayEnumerator_1 = require(\"../System/Collections/Enumeration/ArrayEnumerator\");\nconst EnumeratorBase_1 = require(\"../System/Collections/Enumeration/EnumeratorBase\");\nconst Dictionary_1 = require(\"../System/Collections/Dictionaries/Dictionary\");\nconst Queue_1 = require(\"../System/Collections/Queue\");\nconst dispose_1 = require(\"../System/Disposable/dispose\");\nconst DisposableBase_1 = require(\"../System/Disposable/DisposableBase\");\nconst UnsupportedEnumerableException_1 = require(\"../System/Collections/Enumeration/UnsupportedEnumerableException\");\nconst ObjectDisposedException_1 = require(\"../System/Disposable/ObjectDisposedException\");\nconst KeySortedContext_1 = require(\"../System/Collections/Sorting/KeySortedContext\");\nconst ArgumentNullException_1 = require(\"../System/Exceptions/ArgumentNullException\");\nconst ArgumentOutOfRangeException_1 = require(\"../System/Exceptions/ArgumentOutOfRangeException\");\nconst INVALID_DEFAULT = {};\nconst VOID0 = void 0;\nconst BREAK = element => 0;\nclass LinqFunctions extends Functions_1.Functions {\n Greater(a, b) {\n return a > b ? a : b;\n }\n Lesser(a, b) {\n return a < b ? a : b;\n }\n}\nvar Functions = new LinqFunctions();\nObject.freeze(Functions);\nfunction getEmptyEnumerator() {\n return EmptyEnumerator_1.EmptyEnumerator;\n}\nclass InfiniteEnumerable extends DisposableBase_1.DisposableBase {\n constructor(_enumeratorFactory, finalizer) {\n super(finalizer);\n this._enumeratorFactory = _enumeratorFactory;\n this._isEndless = true;\n }\n get isEndless() {\n return this._isEndless;\n }\n getEnumerator() {\n this.throwIfDisposed();\n return this._enumeratorFactory();\n }\n _onDispose() {\n super._onDispose();\n this._enumeratorFactory = null;\n }\n asEnumerable() {\n var _ = this;\n _.throwIfDisposed();\n return new InfiniteEnumerable(() => _.getEnumerator());\n }\n doAction(action, initializer, isEndless = this.isEndless) {\n var _ = this, disposed = !_.throwIfDisposed();\n return new Enumerable(() => {\n var enumerator;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n throwIfDisposed(disposed);\n if (initializer)\n initializer();\n index = 0;\n enumerator = _.getEnumerator();\n }, (yielder) => {\n throwIfDisposed(disposed);\n while (enumerator.moveNext()) {\n var actionResult = action(enumerator.current, index++);\n if (actionResult === false || actionResult === 0)\n return yielder.yieldBreak();\n if (actionResult !== 2)\n return yielder.yieldReturn(enumerator.current);\n }\n return false;\n }, () => {\n dispose_1.dispose(enumerator);\n }, isEndless);\n }, () => {\n disposed = true;\n }, isEndless);\n }\n force() {\n this.throwIfDisposed();\n this.doAction(BREAK)\n .getEnumerator()\n .moveNext();\n }\n skip(count) {\n var _ = this;\n _.throwIfDisposed();\n if (!isFinite(count))\n return Enumerable.empty();\n Integer_1.Integer.assert(count, \"count\");\n return this.doAction((element, index) => index < count\n ? 2\n : 1);\n }\n take(count) {\n if (!(count > 0))\n return Enumerable.empty();\n var _ = this;\n _.throwIfDisposed();\n if (!isFinite(count))\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException('count', count, 'Must be finite.');\n Integer_1.Integer.assert(count, \"count\");\n return _.doAction((element, index) => index < count, null, false);\n }\n elementAt(index) {\n var v = this.elementAtOrDefault(index, INVALID_DEFAULT);\n if (v === INVALID_DEFAULT)\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException('index', index, \"is greater than or equal to the number of elements in source\");\n return v;\n }\n elementAtOrDefault(index, defaultValue = null) {\n var _ = this;\n _.throwIfDisposed();\n Integer_1.Integer.assertZeroOrGreater(index, 'index');\n var n = index;\n return dispose_1.using(this.getEnumerator(), e => {\n var i = 0;\n while (e.moveNext()) {\n if (i == n)\n return e.current;\n i++;\n }\n return defaultValue;\n });\n }\n first() {\n var v = this.firstOrDefault(INVALID_DEFAULT);\n if (v === INVALID_DEFAULT)\n throw new Error(\"first:The sequence is empty.\");\n return v;\n }\n firstOrDefault(defaultValue = null) {\n var _ = this;\n _.throwIfDisposed();\n return dispose_1.using(this.getEnumerator(), e => e.moveNext() ? e.current : defaultValue);\n }\n single() {\n var _ = this;\n _.throwIfDisposed();\n return dispose_1.using(this.getEnumerator(), e => {\n if (e.moveNext()) {\n var value = e.current;\n if (!e.moveNext())\n return value;\n throw new Error(\"single:sequence contains more than one element.\");\n }\n throw new Error(\"single:The sequence is empty.\");\n });\n }\n singleOrDefault(defaultValue = null) {\n var _ = this;\n _.throwIfDisposed();\n return dispose_1.using(this.getEnumerator(), e => {\n if (e.moveNext()) {\n var value = e.current;\n if (!e.moveNext())\n return value;\n }\n return defaultValue;\n });\n }\n any() {\n var _ = this;\n _.throwIfDisposed();\n return dispose_1.using(this.getEnumerator(), e => e.moveNext());\n }\n isEmpty() {\n return !this.any();\n }\n traverseBreadthFirst(childrenSelector, resultSelector = Functions.Identity) {\n var _ = this, isEndless = _._isEndless || null;\n return new Enumerable(() => {\n var enumerator;\n var nestLevel = 0;\n var buffer, len;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n nestLevel = 0;\n buffer = [];\n len = 0;\n enumerator = _.getEnumerator();\n }, (yielder) => {\n while (true) {\n if (enumerator.moveNext()) {\n buffer[len++] = enumerator.current;\n return yielder.yieldReturn(resultSelector(enumerator.current, nestLevel));\n }\n if (!len)\n return yielder.yieldBreak();\n var next = Enumerable\n .from(buffer)\n .selectMany(childrenSelector);\n if (!next.any()) {\n return yielder.yieldBreak();\n }\n else {\n nestLevel++;\n buffer = [];\n len = 0;\n enumerator.dispose();\n enumerator = next.getEnumerator();\n }\n }\n }, () => {\n dispose_1.dispose(enumerator);\n buffer.length = 0;\n }, isEndless);\n }, null, isEndless);\n }\n traverseDepthFirst(childrenSelector, resultSelector = Functions.Identity) {\n var _ = this, isEndless = _._isEndless || null;\n return new Enumerable(() => {\n var enumeratorStack = [];\n var enumerator;\n var len;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n len = 0;\n }, (yielder) => {\n while (true) {\n if (enumerator.moveNext()) {\n let value = resultSelector(enumerator.current, len);\n enumeratorStack[len++] = enumerator;\n let e = Enumerable.fromAny(childrenSelector(enumerator.current));\n enumerator = e ? e.getEnumerator() : EmptyEnumerator_1.EmptyEnumerator;\n return yielder.yieldReturn(value);\n }\n if (len == 0)\n return false;\n enumerator.dispose();\n enumerator = enumeratorStack[--len];\n enumeratorStack.length = len;\n }\n }, () => {\n try {\n dispose_1.dispose(enumerator);\n }\n finally {\n dispose_1.dispose.these(enumeratorStack);\n }\n }, isEndless);\n }, null, isEndless);\n }\n flatten() {\n var _ = this, isEndless = _._isEndless || null;\n return new Enumerable(() => {\n var enumerator;\n var middleEnumerator = null;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n }, (yielder) => {\n while (true) {\n if (middleEnumerator) {\n if (middleEnumerator.moveNext()) {\n return yielder.yieldReturn(middleEnumerator.current);\n }\n else {\n middleEnumerator.dispose();\n middleEnumerator = null;\n }\n }\n if (enumerator.moveNext()) {\n var c = enumerator.current;\n var e = !Types_1.Type.isString(c) && Enumerable.fromAny(c);\n if (e) {\n middleEnumerator\n = e\n .selectMany(Functions.Identity)\n .flatten()\n .getEnumerator();\n continue;\n }\n else {\n return yielder.yieldReturn(c);\n }\n }\n return yielder.yieldBreak();\n }\n }, () => {\n dispose_1.dispose(enumerator, middleEnumerator);\n }, isEndless);\n }, null, isEndless);\n }\n pairwise(selector) {\n var _ = this;\n return new Enumerable(() => {\n var enumerator;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n enumerator.moveNext();\n }, (yielder) => {\n var prev = enumerator.current;\n return enumerator.moveNext()\n && yielder.yieldReturn(selector(prev, enumerator.current));\n }, () => {\n dispose_1.dispose(enumerator);\n }, _._isEndless);\n }, null, _._isEndless);\n }\n scan(func, seed) {\n var isUseSeed = seed !== VOID0;\n var _ = this;\n return new Enumerable(() => {\n var enumerator;\n var value;\n var isFirst;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n isFirst = true;\n }, (yielder) => {\n if (isFirst) {\n isFirst = false;\n return isUseSeed\n ? yielder.yieldReturn(value = seed)\n : enumerator.moveNext() && yielder.yieldReturn(value\n = enumerator.current);\n }\n return (enumerator.moveNext())\n ? yielder.yieldReturn(value = func(value, enumerator.current))\n : false;\n }, () => {\n dispose_1.dispose(enumerator);\n }, _._isEndless);\n }, null, _._isEndless);\n }\n select(selector) {\n var _ = this, disposed = !_.throwIfDisposed();\n return new Enumerable(() => {\n var enumerator;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n throwIfDisposed(disposed);\n index = 0;\n enumerator = _.getEnumerator();\n }, (yielder) => {\n throwIfDisposed(disposed);\n return enumerator.moveNext()\n ? yielder.yieldReturn(selector(enumerator.current, index++))\n : yielder.yieldBreak();\n }, () => {\n dispose_1.dispose(enumerator);\n }, _._isEndless);\n }, () => {\n disposed = true;\n }, _._isEndless);\n }\n _selectMany(collectionSelector, resultSelector) {\n var _ = this, isEndless = _._isEndless || null;\n if (!resultSelector)\n resultSelector = (a, b) => b;\n return new Enumerable(() => {\n var enumerator;\n var middleEnumerator;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n middleEnumerator = undefined;\n index = 0;\n }, (yielder) => {\n if (middleEnumerator === VOID0 && !enumerator.moveNext())\n return false;\n do {\n if (!middleEnumerator) {\n var middleSeq = collectionSelector(enumerator.current, index++);\n if (!middleSeq)\n continue;\n middleEnumerator = Enumerator_1.from(middleSeq);\n }\n if (middleEnumerator.moveNext())\n return yielder.yieldReturn(resultSelector(enumerator.current, middleEnumerator.current));\n middleEnumerator.dispose();\n middleEnumerator = null;\n } while (enumerator.moveNext());\n return false;\n }, () => {\n dispose_1.dispose(enumerator, middleEnumerator);\n enumerator = null;\n middleEnumerator = null;\n }, isEndless);\n }, null, isEndless);\n }\n selectMany(collectionSelector, resultSelector) {\n return this._selectMany(collectionSelector, resultSelector);\n }\n _choose(selector) {\n var _ = this, disposed = !_.throwIfDisposed();\n return new Enumerable(() => {\n var enumerator;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n throwIfDisposed(disposed);\n index = 0;\n enumerator = _.getEnumerator();\n }, (yielder) => {\n throwIfDisposed(disposed);\n while (enumerator.moveNext()) {\n var result = selector(enumerator.current, index++);\n if (result !== null && result !== VOID0)\n return yielder.yieldReturn(result);\n }\n return false;\n }, () => {\n dispose_1.dispose(enumerator);\n }, _._isEndless);\n }, () => {\n disposed = true;\n }, _._isEndless);\n }\n choose(selector = Functions.Identity) {\n return this._choose(selector);\n }\n where(predicate) {\n var _ = this, disposed = !_.throwIfDisposed();\n return new Enumerable(() => {\n var enumerator;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n throwIfDisposed(disposed);\n index = 0;\n enumerator = _.getEnumerator();\n }, (yielder) => {\n throwIfDisposed(disposed);\n while (enumerator.moveNext()) {\n if (predicate(enumerator.current, index++))\n return yielder.yieldReturn(enumerator.current);\n }\n return false;\n }, () => {\n dispose_1.dispose(enumerator);\n }, _._isEndless);\n }, () => {\n disposed = true;\n }, _._isEndless);\n }\n ofType(type) {\n var typeName;\n switch (type) {\n case Number:\n typeName = Types_1.Type.NUMBER;\n break;\n case String:\n typeName = Types_1.Type.STRING;\n break;\n case Boolean:\n typeName = Types_1.Type.BOOLEAN;\n break;\n case Function:\n typeName = Types_1.Type.FUNCTION;\n break;\n default:\n return this\n .where(x => x instanceof type);\n }\n return this\n .choose()\n .where(x => (typeof x) === typeName);\n }\n except(second, compareSelector) {\n var _ = this, disposed = !_.throwIfDisposed();\n return new Enumerable(() => {\n var enumerator;\n var keys;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n throwIfDisposed(disposed);\n enumerator = _.getEnumerator();\n keys = new Dictionary_1.Dictionary(compareSelector);\n if (second)\n Enumerator_1.forEach(second, key => { keys.addByKeyValue(key, true); });\n }, (yielder) => {\n throwIfDisposed(disposed);\n while (enumerator.moveNext()) {\n var current = enumerator.current;\n if (!keys.containsKey(current)) {\n keys.addByKeyValue(current, true);\n return yielder.yieldReturn(current);\n }\n }\n return false;\n }, () => {\n dispose_1.dispose(enumerator);\n keys.clear();\n }, _._isEndless);\n }, () => {\n disposed = true;\n }, _._isEndless);\n }\n distinct(compareSelector) {\n return this.except(null, compareSelector);\n }\n distinctUntilChanged(compareSelector = Functions.Identity) {\n var _ = this, disposed = !_.throwIfDisposed();\n return new Enumerable(() => {\n var enumerator;\n var compareKey;\n var initial = true;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n throwIfDisposed(disposed);\n enumerator = _.getEnumerator();\n }, (yielder) => {\n throwIfDisposed(disposed);\n while (enumerator.moveNext()) {\n var key = compareSelector(enumerator.current);\n if (initial) {\n initial = false;\n }\n else if (Values.areEqual(compareKey, key)) {\n continue;\n }\n compareKey = key;\n return yielder.yieldReturn(enumerator.current);\n }\n return false;\n }, () => {\n dispose_1.dispose(enumerator);\n }, _._isEndless);\n }, () => {\n disposed = true;\n }, _._isEndless);\n }\n defaultIfEmpty(defaultValue = null) {\n var _ = this, disposed = !_.throwIfDisposed();\n return new Enumerable(() => {\n var enumerator;\n var isFirst;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n isFirst = true;\n throwIfDisposed(disposed);\n enumerator = _.getEnumerator();\n }, (yielder) => {\n throwIfDisposed(disposed);\n if (enumerator.moveNext()) {\n isFirst = false;\n return yielder.yieldReturn(enumerator.current);\n }\n else if (isFirst) {\n isFirst = false;\n return yielder.yieldReturn(defaultValue);\n }\n return false;\n }, () => {\n dispose_1.dispose(enumerator);\n }, _._isEndless);\n }, null, _._isEndless);\n }\n zip(second, resultSelector) {\n var _ = this;\n _.throwIfDisposed();\n return new Enumerable(() => {\n var firstEnumerator;\n var secondEnumerator;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n index = 0;\n firstEnumerator = _.getEnumerator();\n secondEnumerator = Enumerator_1.from(second);\n }, (yielder) => firstEnumerator.moveNext()\n && secondEnumerator.moveNext()\n && yielder.yieldReturn(resultSelector(firstEnumerator.current, secondEnumerator.current, index++)), () => {\n dispose_1.dispose(firstEnumerator, secondEnumerator);\n });\n });\n }\n zipMultiple(second, resultSelector) {\n var _ = this;\n _.throwIfDisposed();\n if (!second.length)\n return Enumerable.empty();\n return new Enumerable(() => {\n var secondTemp;\n var firstEnumerator;\n var secondEnumerator;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n secondTemp = new Queue_1.Queue(second);\n index = 0;\n firstEnumerator = _.getEnumerator();\n secondEnumerator = null;\n }, (yielder) => {\n if (firstEnumerator.moveNext()) {\n while (true) {\n while (!secondEnumerator) {\n if (secondTemp.count) {\n var next = secondTemp.dequeue();\n if (next)\n secondEnumerator = Enumerator_1.from(next);\n }\n else\n return yielder.yieldBreak();\n }\n if (secondEnumerator.moveNext())\n return yielder.yieldReturn(resultSelector(firstEnumerator.current, secondEnumerator.current, index++));\n secondEnumerator.dispose();\n secondEnumerator = null;\n }\n }\n return yielder.yieldBreak();\n }, () => {\n dispose_1.dispose(firstEnumerator, secondTemp);\n });\n });\n }\n join(inner, outerKeySelector, innerKeySelector, resultSelector, compareSelector = Functions.Identity) {\n var _ = this;\n return new Enumerable(() => {\n var outerEnumerator;\n var lookup;\n var innerElements = null;\n var innerCount = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n outerEnumerator = _.getEnumerator();\n lookup = Enumerable.from(inner)\n .toLookup(innerKeySelector, Functions.Identity, compareSelector);\n }, (yielder) => {\n while (true) {\n if (innerElements != null) {\n var innerElement = innerElements[innerCount++];\n if (innerElement !== VOID0)\n return yielder.yieldReturn(resultSelector(outerEnumerator.current, innerElement));\n innerElement = null;\n innerCount = 0;\n }\n if (outerEnumerator.moveNext()) {\n var key = outerKeySelector(outerEnumerator.current);\n innerElements = lookup.get(key);\n }\n else {\n return yielder.yieldBreak();\n }\n }\n }, () => {\n dispose_1.dispose(outerEnumerator);\n });\n });\n }\n groupJoin(inner, outerKeySelector, innerKeySelector, resultSelector, compareSelector = Functions.Identity) {\n var _ = this;\n return new Enumerable(() => {\n var enumerator;\n var lookup = null;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n lookup = Enumerable.from(inner)\n .toLookup(innerKeySelector, Functions.Identity, compareSelector);\n }, (yielder) => enumerator.moveNext()\n && yielder.yieldReturn(resultSelector(enumerator.current, lookup.get(outerKeySelector(enumerator.current)))), () => {\n dispose_1.dispose(enumerator);\n });\n });\n }\n merge(enumerables) {\n var _ = this, isEndless = _._isEndless || null;\n if (!enumerables || enumerables.length == 0)\n return _;\n return new Enumerable(() => {\n var enumerator;\n var queue;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n queue = new Queue_1.Queue(enumerables);\n }, (yielder) => {\n while (true) {\n while (!enumerator && queue.count) {\n enumerator = Enumerator_1.from(queue.dequeue());\n }\n if (enumerator && enumerator.moveNext())\n return yielder.yieldReturn(enumerator.current);\n if (enumerator) {\n enumerator.dispose();\n enumerator = null;\n continue;\n }\n return yielder.yieldBreak();\n }\n }, () => {\n dispose_1.dispose(enumerator, queue);\n }, isEndless);\n }, null, isEndless);\n }\n concat(...enumerables) {\n return this.merge(enumerables);\n }\n union(second, compareSelector = Functions.Identity) {\n var _ = this, isEndless = _._isEndless || null;\n return new Enumerable(() => {\n var firstEnumerator;\n var secondEnumerator;\n var keys;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n firstEnumerator = _.getEnumerator();\n keys = new Dictionary_1.Dictionary(compareSelector);\n }, (yielder) => {\n var current;\n if (secondEnumerator === VOID0) {\n while (firstEnumerator.moveNext()) {\n current = firstEnumerator.current;\n if (!keys.containsKey(current)) {\n keys.addByKeyValue(current, null);\n return yielder.yieldReturn(current);\n }\n }\n secondEnumerator = Enumerator_1.from(second);\n }\n while (secondEnumerator.moveNext()) {\n current = secondEnumerator.current;\n if (!keys.containsKey(current)) {\n keys.addByKeyValue(current, null);\n return yielder.yieldReturn(current);\n }\n }\n return false;\n }, () => {\n dispose_1.dispose(firstEnumerator, secondEnumerator);\n }, isEndless);\n }, null, isEndless);\n }\n insertAt(index, other) {\n Integer_1.Integer.assertZeroOrGreater(index, 'index');\n var n = index;\n var _ = this, isEndless = _._isEndless || null;\n _.throwIfDisposed();\n return new Enumerable(() => {\n var firstEnumerator;\n var secondEnumerator;\n var count = 0;\n var isEnumerated = false;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n count = 0;\n firstEnumerator = _.getEnumerator();\n secondEnumerator = Enumerator_1.from(other);\n isEnumerated = false;\n }, (yielder) => {\n if (count == n) {\n isEnumerated = true;\n if (secondEnumerator.moveNext())\n return yielder.yieldReturn(secondEnumerator.current);\n }\n if (firstEnumerator.moveNext()) {\n count++;\n return yielder.yieldReturn(firstEnumerator.current);\n }\n return !isEnumerated\n && secondEnumerator.moveNext()\n && yielder.yieldReturn(secondEnumerator.current);\n }, () => {\n dispose_1.dispose(firstEnumerator, secondEnumerator);\n }, isEndless);\n }, null, isEndless);\n }\n alternateMultiple(sequence) {\n var _ = this;\n return new Enumerable(() => {\n var buffer, mode, enumerator, alternateEnumerator;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n alternateEnumerator = new ArrayEnumerator_1.ArrayEnumerator(Enumerable.toArray(sequence));\n enumerator = _.getEnumerator();\n var hasAtLeastOne = enumerator.moveNext();\n mode = hasAtLeastOne\n ? 1\n : 0;\n if (hasAtLeastOne)\n buffer = enumerator.current;\n }, (yielder) => {\n switch (mode) {\n case 0:\n return yielder.yieldBreak();\n case 2:\n if (alternateEnumerator.moveNext())\n return yielder.yieldReturn(alternateEnumerator.current);\n alternateEnumerator.reset();\n mode = 1;\n break;\n }\n var latest = buffer;\n var another = enumerator.moveNext();\n mode = another\n ? 2\n : 0;\n if (another)\n buffer = enumerator.current;\n return yielder.yieldReturn(latest);\n }, () => {\n dispose_1.dispose(enumerator, alternateEnumerator);\n }, _._isEndless);\n }, null, _._isEndless);\n }\n alternateSingle(value) {\n return this.alternateMultiple(Enumerable.make(value));\n }\n alternate(...sequence) {\n return this.alternateMultiple(sequence);\n }\n catchError(handler) {\n var _ = this, disposed = !_.throwIfDisposed();\n return new Enumerable(() => {\n var enumerator;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n try {\n throwIfDisposed(disposed);\n enumerator = _.getEnumerator();\n }\n catch (e) {\n }\n }, (yielder) => {\n try {\n throwIfDisposed(disposed);\n if (enumerator.moveNext())\n return yielder.yieldReturn(enumerator.current);\n }\n catch (e) {\n handler(e);\n }\n return false;\n }, () => {\n dispose_1.dispose(enumerator);\n });\n });\n }\n finallyAction(action) {\n var _ = this, disposed = !_.throwIfDisposed();\n return new Enumerable(() => {\n var enumerator;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n throwIfDisposed(disposed);\n enumerator = _.getEnumerator();\n }, (yielder) => {\n throwIfDisposed(disposed);\n return (enumerator.moveNext())\n ? yielder.yieldReturn(enumerator.current)\n : false;\n }, () => {\n try {\n dispose_1.dispose(enumerator);\n }\n finally {\n action();\n }\n });\n });\n }\n buffer(size) {\n if (size < 1 || !isFinite(size))\n throw new Error(\"Invalid buffer size.\");\n Integer_1.Integer.assert(size, \"size\");\n var _ = this, len;\n return new Enumerable(() => {\n var enumerator;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n }, (yielder) => {\n var array = ArrayUtility.initialize(size);\n len = 0;\n while (len < size && enumerator.moveNext()) {\n array[len++] = enumerator.current;\n }\n array.length = len;\n return len && yielder.yieldReturn(array);\n }, () => {\n dispose_1.dispose(enumerator);\n }, _._isEndless);\n }, null, _._isEndless);\n }\n share() {\n var _ = this;\n _.throwIfDisposed();\n var sharedEnumerator;\n return new Enumerable(() => {\n return sharedEnumerator || (sharedEnumerator = _.getEnumerator());\n }, () => {\n dispose_1.dispose(sharedEnumerator);\n }, _._isEndless);\n }\n}\nexports.InfiniteEnumerable = InfiniteEnumerable;\nclass Enumerable extends InfiniteEnumerable {\n constructor(enumeratorFactory, finalizer, isEndless = null) {\n super(enumeratorFactory, finalizer);\n this._isEndless = isEndless;\n }\n static from(source) {\n var e = Enumerable.fromAny(source);\n if (!e)\n throw new UnsupportedEnumerableException_1.UnsupportedEnumerableException();\n return e;\n }\n static fromAny(source, defaultEnumerable = null) {\n if (Types_1.Type.isObject(source) || Types_1.Type.isString(source)) {\n if (source instanceof Enumerable)\n return source;\n if (Types_1.Type.isArrayLike(source))\n return new ArrayEnumerable(source);\n if (Enumerator_1.isEnumerable(source))\n return new Enumerable(() => source.getEnumerator(), null, source.isEndless);\n }\n return defaultEnumerable;\n }\n static fromOrEmpty(source) {\n return Enumerable.fromAny(source) || Enumerable.empty();\n }\n static toArray(source) {\n if (source instanceof Enumerable)\n return source.toArray();\n return Enumerator_1.toArray(source);\n }\n static choice(values) {\n var len = values && values.length;\n if (!len || !isFinite(len))\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException('length', length);\n return new InfiniteEnumerable(() => new EnumeratorBase_1.EnumeratorBase(null, (yielder) => yielder.yieldReturn(Integer_1.Integer.random.select(values)), true));\n }\n static chooseFrom(...args) {\n return Enumerable.choice(args);\n }\n static cycle(values) {\n var len = values && values.length;\n if (!len || !isFinite(len))\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException('length', length);\n return new InfiniteEnumerable(() => {\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n index = 0;\n }, (yielder) => {\n if (index >= values.length)\n index = 0;\n return yielder.yieldReturn(values[index++]);\n }, true);\n });\n }\n static cycleThrough(...args) {\n return Enumerable.cycle(args);\n }\n static empty() {\n return new FiniteEnumerable(getEmptyEnumerator);\n }\n static repeat(element, count = Infinity) {\n if (!(count > 0))\n return Enumerable.empty();\n return isFinite(count) && Integer_1.Integer.assert(count, \"count\")\n ? new FiniteEnumerable(() => {\n var c = count;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => { index = 0; }, (yielder) => (index++ < c) && yielder.yieldReturn(element), null, false);\n })\n : new Enumerable(() => new EnumeratorBase_1.EnumeratorBase(null, (yielder) => yielder.yieldReturn(element), true));\n }\n static repeatWithFinalize(initializer, finalizer) {\n return new InfiniteEnumerable(() => {\n var element;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n element = initializer();\n }, (yielder) => yielder.yieldReturn(element), () => {\n finalizer(element);\n }, true);\n });\n }\n static make(element) {\n return Enumerable.repeat(element, 1);\n }\n static range(start, count, step = 1) {\n if (!isFinite(start))\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException(\"start\", start, \"Must be a finite number.\");\n if (!(count > 0))\n return Enumerable.empty();\n if (!step)\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException(\"step\", step, \"Must be a valid value\");\n if (!isFinite(step))\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException(\"step\", step, \"Must be a finite number.\");\n Integer_1.Integer.assert(count, \"count\");\n return new FiniteEnumerable(() => {\n var value;\n var c = count;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n index = 0;\n value = start;\n }, (yielder) => {\n var result = index++ < c\n && yielder.yieldReturn(value);\n if (result && index < count)\n value += step;\n return result;\n }, false);\n });\n }\n static rangeDown(start, count, step = 1) {\n step = Math.abs(step) * -1;\n return Enumerable.range(start, count, step);\n }\n static toInfinity(start = 0, step = 1) {\n if (!isFinite(start))\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException(\"start\", start, \"Must be a finite number.\");\n if (!step)\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException(\"step\", step, \"Must be a valid value\");\n if (!isFinite(step))\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException(\"step\", step, \"Must be a finite number.\");\n return new InfiniteEnumerable(() => {\n var value;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n value = start;\n }, (yielder) => {\n var current = value;\n value += step;\n return yielder.yieldReturn(current);\n }, true);\n });\n }\n static toNegativeInfinity(start = 0, step = 1) {\n return Enumerable.toInfinity(start, -step);\n }\n static rangeTo(start, to, step = 1) {\n if (isNaN(to) || !isFinite(to))\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException(\"to\", to, \"Must be a finite number.\");\n if (step && !isFinite(step))\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException(\"step\", step, \"Must be a finite non-zero number.\");\n step = Math.abs(step);\n return new FiniteEnumerable(() => {\n var value;\n return new EnumeratorBase_1.EnumeratorBase(() => { value = start; }, start < to\n ?\n yielder => {\n var result = value <= to && yielder.yieldReturn(value);\n if (result)\n value += step;\n return result;\n }\n :\n yielder => {\n var result = value >= to && yielder.yieldReturn(value);\n if (result)\n value -= step;\n return result;\n }, false);\n });\n }\n static matches(input, pattern, flags = \"\") {\n if (input === null || input === VOID0)\n throw new ArgumentNullException_1.ArgumentNullException(\"input\");\n var type = typeof input;\n if (type != Types_1.Type.STRING)\n throw new Error(\"Cannot exec RegExp matches of type '\" + type + \"'.\");\n if (pattern instanceof RegExp) {\n flags += (pattern.ignoreCase) ? \"i\" : \"\";\n flags += (pattern.multiline) ? \"m\" : \"\";\n pattern = pattern.source;\n }\n if (flags.indexOf(\"g\") === -1)\n flags += \"g\";\n return new FiniteEnumerable(() => {\n var regex;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n regex = new RegExp(pattern, flags);\n }, (yielder) => {\n var match = regex.exec(input);\n return (match !== null) ? yielder.yieldReturn(match) : false;\n });\n });\n }\n static generate(factory, count = Infinity) {\n if (isNaN(count) || count <= 0)\n return Enumerable.empty();\n return isFinite(count) && Integer_1.Integer.assert(count, \"count\")\n ?\n new FiniteEnumerable(() => {\n var c = count;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n index = 0;\n }, (yielder) => {\n var current = index++;\n return current < c && yielder.yieldReturn(factory(current));\n }, false);\n })\n :\n new InfiniteEnumerable(() => {\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n index = 0;\n }, (yielder) => yielder.yieldReturn(factory(index++)), true);\n });\n }\n static unfold(seed, valueFactory, skipSeed = false) {\n return new InfiniteEnumerable(() => {\n var index = 0;\n var value;\n var isFirst;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n index = 0;\n value = seed;\n isFirst = !skipSeed;\n }, (yielder) => {\n var i = index++;\n if (isFirst)\n isFirst = false;\n else\n value = valueFactory(value, i);\n return yielder.yieldReturn(value);\n }, true);\n });\n }\n static forEach(enumerable, action, max = Infinity) {\n return Enumerator_1.forEach(enumerable, action, max);\n }\n static map(enumerable, selector) {\n return Enumerator_1.map(enumerable, selector);\n }\n static max(values) {\n return values\n .takeUntil(v => v == +Infinity, true)\n .aggregate(Functions.Greater);\n }\n static min(values) {\n return values\n .takeUntil(v => v == -Infinity, true)\n .aggregate(Functions.Lesser);\n }\n static weave(enumerables) {\n if (!enumerables)\n throw new ArgumentNullException_1.ArgumentNullException('enumerables');\n return new Enumerable(() => {\n var queue;\n var mainEnumerator;\n var index;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n index = 0;\n queue = new Queue_1.Queue();\n mainEnumerator = Enumerator_1.from(enumerables);\n }, (yielder) => {\n let e;\n if (mainEnumerator) {\n while (!e && mainEnumerator.moveNext()) {\n let c = mainEnumerator.current;\n e = nextEnumerator(queue, c && Enumerator_1.from(c));\n }\n if (!e)\n mainEnumerator = null;\n }\n while (!e && queue.count) {\n e = nextEnumerator(queue, queue.dequeue());\n }\n return e\n ? yielder.yieldReturn(e.current)\n : yielder.yieldBreak();\n }, () => {\n dispose_1.dispose.these(queue.dump());\n dispose_1.dispose(mainEnumerator, queue);\n mainEnumerator = null;\n queue = null;\n });\n });\n }\n doAction(action, initializer, isEndless = this.isEndless) {\n return super.doAction(action, initializer, isEndless);\n }\n skip(count) {\n return super.skip(count);\n }\n skipWhile(predicate) {\n this.throwIfDisposed();\n return this.doAction((element, index) => predicate(element, index)\n ? 2\n : 1);\n }\n takeWhile(predicate) {\n this.throwIfDisposed();\n if (!predicate)\n throw new ArgumentNullException_1.ArgumentNullException('predicate');\n return this.doAction((element, index) => predicate(element, index)\n ? 1\n : 0, null, null);\n }\n takeUntil(predicate, includeUntilValue) {\n this.throwIfDisposed();\n if (!predicate)\n throw new ArgumentNullException_1.ArgumentNullException('predicate');\n if (!includeUntilValue)\n return this.doAction((element, index) => predicate(element, index)\n ? 0\n : 1, null, null);\n var found = false;\n return this.doAction((element, index) => {\n if (found)\n return 0;\n found = predicate(element, index);\n return 1;\n }, () => {\n found = false;\n }, null);\n }\n forEach(action) {\n var _ = this;\n _.throwIfDisposed();\n Enumerator_1.throwIfEndless(_.isEndless);\n var index = 0;\n dispose_1.using(_.getEnumerator(), e => {\n Enumerator_1.throwIfEndless(e.isEndless);\n while (_.throwIfDisposed() && e.moveNext()) {\n if (action(e.current, index++) === false)\n break;\n }\n });\n }\n toArray(predicate) {\n return predicate\n ? this.where(predicate).toArray()\n : this.copyTo([]);\n }\n copyTo(target, index = 0, count = Infinity) {\n this.throwIfDisposed();\n if (!target)\n throw new ArgumentNullException_1.ArgumentNullException(\"target\");\n Integer_1.Integer.assertZeroOrGreater(index);\n Enumerator_1.forEach(this, (x, i) => {\n target[i + index] = x;\n }, count);\n return target;\n }\n toLookup(keySelector, elementSelector = Functions.Identity, compareSelector = Functions.Identity) {\n var dict = new Dictionary_1.Dictionary(compareSelector);\n this.forEach(x => {\n var key = keySelector(x);\n var element = elementSelector(x);\n var array = dict.getValue(key);\n if (array !== VOID0)\n array.push(element);\n else\n dict.addByKeyValue(key, [element]);\n });\n return new Lookup(dict);\n }\n toMap(keySelector, elementSelector) {\n var obj = {};\n this.forEach((x, i) => {\n obj[keySelector(x, i)] = elementSelector(x, i);\n });\n return obj;\n }\n toDictionary(keySelector, elementSelector, compareSelector = Functions.Identity) {\n var dict = new Dictionary_1.Dictionary(compareSelector);\n this.forEach((x, i) => dict.addByKeyValue(keySelector(x, i), elementSelector(x, i)));\n return dict;\n }\n toJoinedString(separator = \"\", selector = Functions.Identity) {\n return this.select(selector).toArray().join(separator);\n }\n takeExceptLast(count = 1) {\n var _ = this;\n if (!(count > 0))\n return _;\n if (!isFinite(count))\n return Enumerable.empty();\n Integer_1.Integer.assert(count, \"count\");\n var c = count;\n return new Enumerable(() => {\n var enumerator;\n var q;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n q = new Queue_1.Queue();\n }, (yielder) => {\n while (enumerator.moveNext()) {\n q.enqueue(enumerator.current);\n if (q.count > c)\n return yielder.yieldReturn(q.dequeue());\n }\n return false;\n }, () => {\n dispose_1.dispose(enumerator, q);\n });\n });\n }\n skipToLast(count) {\n if (!(count > 0))\n return Enumerable.empty();\n var _ = this;\n if (!isFinite(count))\n return _;\n Integer_1.Integer.assert(count, \"count\");\n return _.reverse()\n .take(count)\n .reverse();\n }\n where(predicate) {\n return super.where(predicate);\n }\n select(selector) {\n return super.select(selector);\n }\n selectMany(collectionSelector, resultSelector) {\n return this._selectMany(collectionSelector, resultSelector);\n }\n choose(selector = Functions.Identity) {\n return this._choose(selector);\n }\n reverse() {\n var _ = this, disposed = !_.throwIfDisposed();\n Enumerator_1.throwIfEndless(_._isEndless);\n return new Enumerable(() => {\n var buffer;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n throwIfDisposed(disposed);\n buffer = _.toArray();\n index = buffer.length;\n }, (yielder) => index && yielder.yieldReturn(buffer[--index]), () => {\n buffer.length = 0;\n });\n }, () => {\n disposed = true;\n });\n }\n shuffle() {\n var _ = this, disposed = !_.throwIfDisposed();\n Enumerator_1.throwIfEndless(_._isEndless);\n return new Enumerable(() => {\n var buffer;\n var capacity;\n var len;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n throwIfDisposed(disposed);\n buffer = _.toArray();\n capacity = len = buffer.length;\n }, (yielder) => {\n if (!len)\n return yielder.yieldBreak();\n var selectedIndex = Integer_1.Integer.random(len);\n var selectedValue = buffer[selectedIndex];\n buffer[selectedIndex] = buffer[--len];\n buffer[len] = null;\n if (len % 32 == 0)\n buffer.length = len;\n return yielder.yieldReturn(selectedValue);\n }, () => {\n buffer.length = 0;\n });\n }, () => {\n disposed = true;\n });\n }\n count(predicate) {\n var count = 0;\n this.forEach(predicate\n ?\n (x, i) => {\n if (predicate(x, i))\n ++count;\n }\n :\n () => {\n ++count;\n });\n return count;\n }\n all(predicate) {\n if (!predicate)\n throw new ArgumentNullException_1.ArgumentNullException(\"predicate\");\n var result = true;\n this.forEach((x, i) => {\n if (!predicate(x, i)) {\n result = false;\n return false;\n }\n });\n return result;\n }\n every(predicate) {\n return this.all(predicate);\n }\n any(predicate) {\n if (!predicate)\n return super.any();\n var result = false;\n this.forEach((x, i) => {\n result = predicate(x, i);\n return !result;\n });\n return result;\n }\n some(predicate) {\n return this.any(predicate);\n }\n contains(value, compareSelector) {\n return compareSelector\n ? this.any(v => compareSelector(v) === compareSelector(value))\n : this.any(v => v === value);\n }\n indexOf(value, compareSelector) {\n var found = -1;\n this.forEach(compareSelector\n ?\n (element, i) => {\n if (Values.areEqual(compareSelector(element, i), compareSelector(value, i), true)) {\n found = i;\n return false;\n }\n }\n :\n (element, i) => {\n if (Values.areEqual(element, value, true)) {\n found = i;\n return false;\n }\n });\n return found;\n }\n lastIndexOf(value, compareSelector) {\n var result = -1;\n this.forEach(compareSelector\n ?\n (element, i) => {\n if (Values.areEqual(compareSelector(element, i), compareSelector(value, i), true))\n result\n = i;\n }\n :\n (element, i) => {\n if (Values.areEqual(element, value, true))\n result = i;\n });\n return result;\n }\n merge(enumerables) {\n return super.merge(enumerables);\n }\n concat(...enumerables) {\n return this.merge(enumerables);\n }\n intersect(second, compareSelector) {\n var _ = this;\n return new Enumerable(() => {\n var enumerator;\n var keys;\n var outs;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n keys = new Dictionary_1.Dictionary(compareSelector);\n outs = new Dictionary_1.Dictionary(compareSelector);\n Enumerator_1.forEach(second, key => {\n keys.addByKeyValue(key, true);\n });\n }, (yielder) => {\n while (enumerator.moveNext()) {\n var current = enumerator.current;\n if (!outs.containsKey(current) && keys.containsKey(current)) {\n outs.addByKeyValue(current, true);\n return yielder.yieldReturn(current);\n }\n }\n return yielder.yieldBreak();\n }, () => {\n dispose_1.dispose(enumerator, keys, outs);\n }, _._isEndless);\n }, null, _._isEndless);\n }\n sequenceEqual(second, equalityComparer = Values.areEqual) {\n return dispose_1.using(this.getEnumerator(), e1 => dispose_1.using(Enumerator_1.from(second), e2 => {\n Enumerator_1.throwIfEndless(e1.isEndless && e2.isEndless);\n while (e1.moveNext()) {\n if (!e2.moveNext() || !equalityComparer(e1.current, e2.current))\n return false;\n }\n return !e2.moveNext();\n }));\n }\n ofType(type) {\n return super.ofType(type);\n }\n except(second, compareSelector) {\n return super.except(second, compareSelector);\n }\n distinct(compareSelector) {\n return super.distinct(compareSelector);\n }\n distinctUntilChanged(compareSelector = Functions.Identity) {\n return super.distinctUntilChanged(compareSelector);\n }\n orderBy(keySelector = Functions.Identity) {\n return new OrderedEnumerable(this, keySelector, 1);\n }\n orderUsing(comparison) {\n return new OrderedEnumerable(this, null, 1, null, comparison);\n }\n orderUsingReversed(comparison) {\n return new OrderedEnumerable(this, null, -1, null, comparison);\n }\n orderByDescending(keySelector = Functions.Identity) {\n return new OrderedEnumerable(this, keySelector, -1);\n }\n buffer(size) {\n return super.buffer(size);\n }\n groupBy(keySelector, elementSelector, compareSelector) {\n if (!elementSelector)\n elementSelector = Functions.Identity;\n return new Enumerable(() => this.toLookup(keySelector, elementSelector, compareSelector)\n .getEnumerator());\n }\n partitionBy(keySelector, elementSelector, resultSelector = (key, elements) => new Grouping(key, elements), compareSelector = Functions.Identity) {\n var _ = this;\n if (!elementSelector)\n elementSelector = Functions.Identity;\n return new Enumerable(() => {\n var enumerator;\n var key;\n var compareKey;\n var group;\n var len;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _.getEnumerator();\n if (enumerator.moveNext()) {\n key = keySelector(enumerator.current);\n compareKey = compareSelector(key);\n group = [elementSelector(enumerator.current)];\n len = 1;\n }\n else\n group = null;\n }, (yielder) => {\n if (!group)\n return yielder.yieldBreak();\n var hasNext, c;\n while ((hasNext = enumerator.moveNext())) {\n c = enumerator.current;\n if (compareKey === compareSelector(keySelector(c)))\n group[len++] = elementSelector(c);\n else\n break;\n }\n var result = resultSelector(key, group);\n if (hasNext) {\n c = enumerator.current;\n key = keySelector(c);\n compareKey = compareSelector(key);\n group = [elementSelector(c)];\n len = 1;\n }\n else {\n group = null;\n }\n return yielder.yieldReturn(result);\n }, () => {\n dispose_1.dispose(enumerator);\n group = null;\n });\n });\n }\n aggregate(func, seed) {\n return this.scan(func, seed).lastOrDefault();\n }\n average(selector = Types_1.Type.numberOrNaN) {\n var count = 0;\n var sum = this.sum((e, i) => {\n count++;\n return selector(e, i);\n });\n return (isNaN(sum) || !count)\n ? NaN\n : (sum / count);\n }\n max() {\n return this.aggregate(Functions.Greater);\n }\n min() {\n return this.aggregate(Functions.Lesser);\n }\n maxBy(keySelector = Functions.Identity) {\n return this.aggregate((a, b) => (keySelector(a) > keySelector(b)) ? a : b);\n }\n minBy(keySelector = Functions.Identity) {\n return this.aggregate((a, b) => (keySelector(a) < keySelector(b)) ? a : b);\n }\n sum(selector = Types_1.Type.numberOrNaN) {\n var sum = 0;\n var sumInfinite = 0;\n this.forEach(x => {\n var value = selector(x);\n if (isNaN(value)) {\n sum = NaN;\n return false;\n }\n if (isFinite(value))\n sum += value;\n else\n sumInfinite +=\n value > 0 ?\n (+1) :\n (-1);\n });\n return isNaN(sum) ? NaN : (sumInfinite ? (sumInfinite * Infinity) : sum);\n }\n product(selector = Types_1.Type.numberOrNaN) {\n var result = 1, exists = false;\n this.forEach((x, i) => {\n exists = true;\n var value = selector(x, i);\n if (isNaN(value)) {\n result = NaN;\n return false;\n }\n if (value == 0) {\n result = 0;\n return false;\n }\n result *= value;\n });\n return (exists && isNaN(result)) ? NaN : result;\n }\n quotient(selector = Types_1.Type.numberOrNaN) {\n var count = 0;\n var result = NaN;\n this.forEach((x, i) => {\n var value = selector(x, i);\n count++;\n if (count === 1) {\n result = value;\n }\n else {\n if (isNaN(value) || value === 0 || !isFinite(value)) {\n result = NaN;\n return false;\n }\n result /= value;\n }\n });\n if (count === 1)\n result = NaN;\n return result;\n }\n last() {\n var _ = this;\n _.throwIfDisposed();\n var value = undefined;\n var found = false;\n _.forEach(x => {\n found = true;\n value = x;\n });\n if (!found)\n throw new Error(\"last:No element satisfies the condition.\");\n return value;\n }\n lastOrDefault(defaultValue = null) {\n var _ = this;\n _.throwIfDisposed();\n var value = undefined;\n var found = false;\n _.forEach(x => {\n found = true;\n value = x;\n });\n return (!found) ? defaultValue : value;\n }\n share() {\n return super.share();\n }\n catchError(handler) {\n return super.catchError(handler);\n }\n finallyAction(action) {\n return super.finallyAction(action);\n }\n memoize() {\n var _ = this, disposed = !_.throwIfDisposed();\n var cache;\n var enumerator;\n return new Enumerable(() => {\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n throwIfDisposed(disposed);\n if (!enumerator)\n enumerator = _.getEnumerator();\n if (!cache)\n cache = [];\n index = 0;\n }, (yielder) => {\n throwIfDisposed(disposed);\n var i = index++;\n if (i >= cache.length) {\n return (enumerator.moveNext())\n ? yielder.yieldReturn(cache[i] = enumerator.current)\n : false;\n }\n return yielder.yieldReturn(cache[i]);\n });\n }, () => {\n disposed = true;\n if (cache)\n cache.length = 0;\n cache = null;\n dispose_1.dispose(enumerator);\n enumerator = null;\n });\n }\n}\nexports.Enumerable = Enumerable;\nclass FiniteEnumerable extends Enumerable {\n constructor(enumeratorFactory, finalizer) {\n super(enumeratorFactory, finalizer, false);\n }\n}\nexports.FiniteEnumerable = FiniteEnumerable;\nclass ArrayEnumerable extends FiniteEnumerable {\n constructor(source) {\n super(() => {\n _.throwIfDisposed();\n return new ArrayEnumerator_1.ArrayEnumerator(() => {\n _.throwIfDisposed(\"The underlying ArrayEnumerable was disposed.\", \"ArrayEnumerator\");\n return _._source;\n });\n });\n var _ = this;\n _._disposableObjectName = \"ArrayEnumerable\";\n _._source = source;\n }\n _onDispose() {\n super._onDispose();\n this._source = null;\n }\n get source() {\n return this._source;\n }\n toArray() {\n var _ = this;\n _.throwIfDisposed();\n return Enumerator_1.toArray(_._source);\n }\n asEnumerable() {\n return new ArrayEnumerable(this._source);\n }\n forEach(action, max = Infinity) {\n var _ = this;\n _.throwIfDisposed();\n return Enumerator_1.forEach(_._source, action, max);\n }\n any(predicate) {\n var _ = this;\n _.throwIfDisposed();\n var source = _._source, len = source.length;\n return len && (!predicate || super.any(predicate));\n }\n count(predicate) {\n var _ = this;\n _.throwIfDisposed();\n var source = _._source, len = source.length;\n return len && (predicate ? super.count(predicate) : len);\n }\n elementAtOrDefault(index, defaultValue = null) {\n var _ = this;\n _.throwIfDisposed();\n Integer_1.Integer.assertZeroOrGreater(index, 'index');\n var source = _._source;\n return index < source.length\n ? source[index]\n : defaultValue;\n }\n last() {\n var _ = this;\n _.throwIfDisposed();\n var source = _._source, len = source.length;\n return (len)\n ? source[len - 1]\n : super.last();\n }\n lastOrDefault(defaultValue = null) {\n var _ = this;\n _.throwIfDisposed();\n var source = _._source, len = source.length;\n return len\n ? source[len - 1]\n : defaultValue;\n }\n skip(count) {\n var _ = this;\n if (!(count > 0))\n return _;\n return new Enumerable(() => new ArrayEnumerator_1.ArrayEnumerator(() => _._source, count));\n }\n takeExceptLast(count = 1) {\n var _ = this;\n return _.take(_._source.length - count);\n }\n skipToLast(count) {\n if (!(count > 0))\n return Enumerable.empty();\n var _ = this;\n if (!isFinite(count))\n return _;\n var len = _._source\n ? _._source.length\n : 0;\n return _.skip(len - count);\n }\n reverse() {\n var _ = this;\n return new Enumerable(() => new ArrayEnumerator_1.ArrayEnumerator(() => _._source, _._source\n ? (_._source.length - 1)\n : 0, -1));\n }\n memoize() {\n return this.asEnumerable();\n }\n sequenceEqual(second, equalityComparer = Values.areEqual) {\n if (Types_1.Type.isArrayLike(second))\n return Arrays.areEqual(this.source, second, true, equalityComparer);\n if (second instanceof ArrayEnumerable)\n return second.sequenceEqual(this.source, equalityComparer);\n return super.sequenceEqual(second, equalityComparer);\n }\n toJoinedString(separator = \"\", selector = Functions.Identity) {\n var s = this._source;\n return !selector && Array.isArray(s)\n ? s.join(separator)\n : super.toJoinedString(separator, selector);\n }\n}\nclass Grouping extends ArrayEnumerable {\n constructor(_groupKey, elements) {\n super(elements);\n this._groupKey = _groupKey;\n }\n get key() {\n return this._groupKey;\n }\n}\nclass Lookup {\n constructor(_dictionary) {\n this._dictionary = _dictionary;\n }\n get count() {\n return this._dictionary.count;\n }\n get(key) {\n return this._dictionary.getValue(key);\n }\n contains(key) {\n return this._dictionary.containsKey(key);\n }\n getEnumerator() {\n var _ = this;\n var enumerator;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n enumerator = _._dictionary.getEnumerator();\n }, (yielder) => {\n if (!enumerator.moveNext())\n return false;\n var current = enumerator.current;\n return yielder.yieldReturn(new Grouping(current.key, current.value));\n }, () => {\n dispose_1.dispose(enumerator);\n });\n }\n}\nclass OrderedEnumerable extends FiniteEnumerable {\n constructor(source, keySelector, order, parent, comparer = Values.compare) {\n super(null);\n this.source = source;\n this.keySelector = keySelector;\n this.order = order;\n this.parent = parent;\n this.comparer = comparer;\n Enumerator_1.throwIfEndless(source && source.isEndless);\n }\n createOrderedEnumerable(keySelector, order) {\n return new OrderedEnumerable(this.source, keySelector, order, this);\n }\n thenBy(keySelector) {\n return this.createOrderedEnumerable(keySelector, 1);\n }\n thenUsing(comparison) {\n return new OrderedEnumerable(this.source, null, 1, this, comparison);\n }\n thenByDescending(keySelector) {\n return this.createOrderedEnumerable(keySelector, -1);\n }\n thenUsingReversed(comparison) {\n return new OrderedEnumerable(this.source, null, -1, this, comparison);\n }\n getEnumerator() {\n var _ = this;\n var buffer;\n var indexes;\n var index = 0;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n index = 0;\n buffer = Enumerable.toArray(_.source);\n indexes = createSortContext(_).generateSortedIndexes(buffer);\n }, (yielder) => {\n return (index < indexes.length)\n ? yielder.yieldReturn(buffer[indexes[index++]])\n : false;\n }, () => {\n if (buffer)\n buffer.length = 0;\n buffer = null;\n if (indexes)\n indexes.length = 0;\n indexes = null;\n }, false);\n }\n _onDispose() {\n super._onDispose();\n this.source = null;\n this.keySelector = null;\n this.order = null;\n this.parent = null;\n }\n}\nfunction nextEnumerator(queue, e) {\n if (e) {\n if (e.moveNext()) {\n queue.enqueue(e);\n }\n else {\n dispose_1.dispose(e);\n e = null;\n }\n }\n return e;\n}\nfunction createSortContext(orderedEnumerable, currentContext = null) {\n var context = new KeySortedContext_1.KeySortedContext(currentContext, orderedEnumerable.keySelector, orderedEnumerable.order, orderedEnumerable.comparer);\n if (orderedEnumerable.parent)\n return createSortContext(orderedEnumerable.parent, context);\n return context;\n}\nfunction throwIfDisposed(disposed) {\n if (disposed)\n throw new ObjectDisposedException_1.ObjectDisposedException(\"Enumerable\");\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = Enumerable;\n","/*!\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\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 {\r\n\tfrom as enumeratorFrom,\r\n\tforEach,\r\n\ttoArray,\r\n\tmap,\r\n\tisEnumerable,\r\n\tthrowIfEndless\r\n} from \"../System/Collections/Enumeration/Enumerator\";\r\nimport {EmptyEnumerator} from \"../System/Collections/Enumeration/EmptyEnumerator\";\r\nimport {Type} from \"../System/Types\";\r\nimport {Integer} from \"../System/Integer\";\r\nimport {Functions as 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, using} from \"../System/Disposable/dispose\";\r\nimport {DisposableBase} from \"../System/Disposable/DisposableBase\";\r\nimport {UnsupportedEnumerableException} from \"../System/Collections/Enumeration/UnsupportedEnumerableException\";\r\nimport {ObjectDisposedException} from \"../System/Disposable/ObjectDisposedException\";\r\nimport {KeySortedContext} from \"../System/Collections/Sorting/KeySortedContext\";\r\nimport {ArgumentNullException} from \"../System/Exceptions/ArgumentNullException\";\r\nimport {ArgumentOutOfRangeException} from \"../System/Exceptions/ArgumentOutOfRangeException\";\r\nimport {IEnumerator} from \"../System/Collections/Enumeration/IEnumerator\";\r\nimport {IEnumerable} from \"../System/Collections/Enumeration/IEnumerable\";\r\nimport {Action, Predicate, Selector, EqualityComparison, Comparison} from \"../System/FunctionTypes\";\r\nimport {IEnumerableOrArray} from \"../System/Collections/IEnumerableOrArray\";\r\nimport {IArray} from \"../System/Collections/Array/IArray\";\r\nimport {IMap} from \"../System/Collections/Dictionaries/IDictionary\";\r\nimport {Comparable} from \"../System/IComparable\";\r\nimport {IComparer} from \"../System/IComparer\";\r\nimport {IKeyValuePair} from \"../System/KeyValuePair\";\r\nimport {Order} from \"../System/Collections/Sorting/Order\";\r\n\r\n// #region Local Constants.\r\n\r\nconst INVALID_DEFAULT:any = {}; // create a private unique instance for referencing.\r\nconst VOID0:any = void 0;\r\nconst BREAK:(e:any)=>EnumerableAction = element => EnumerableAction.Break;\r\n\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\r\n{\r\n\treturn EmptyEnumerator;\r\n}\r\n\r\n// #endregion\r\n\r\n/**\r\n * Defined values for doAction.\r\n */\r\nexport const enum EnumerableAction\r\n{\r\n\tBreak = 0,\r\n\tReturn = 1,\r\n\tSkip = 2\r\n}\r\n\r\n/*\r\n * NOTE: About InfiniteEnumerable and Enumerable.\r\n * There may seem like there's extra overrides here and they may seem unnecessary.\r\n * But after closer inspection you'll see the type chain is retained and\r\n * infinite enumerables are prevented from having features that finite ones have.\r\n *\r\n * I'm not sure if it's the best option to just use overrides, but it honors the typing properly.\r\n */\r\n\r\nexport class InfiniteEnumerable\r\nextends DisposableBase implements IEnumerable\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\tthis._isEndless = true;\r\n\t}\r\n\r\n\tprotected _isEndless:boolean;\r\n\tget isEndless():boolean\r\n\t{\r\n\t\treturn this._isEndless;\r\n\t}\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(); // Just in case.\r\n\t\tthis._enumeratorFactory = null;\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\t// Return a default (unfiltered) enumerable.\r\n\tasEnumerable():InfiniteEnumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\t\treturn new InfiniteEnumerable(() => _.getEnumerator());\r\n\t}\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,\r\n\t\tinitializer?:()=>void,\r\n\t\tisEndless:boolean = this.isEndless):InfiniteEnumerable\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\tif(initializer) initializer();\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\t// May need a way to propagate isEndless\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\r\n\t\t\t\t\tisEndless\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\r\n\t\t\tisEndless\r\n\t\t);\r\n\t}\r\n\r\n\r\n\tforce():void\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tthis.doAction(BREAK)\r\n\t\t\t.getEnumerator()\r\n\t\t\t.moveNext();\r\n\r\n\t}\r\n\r\n\t// #region Indexing/Paging methods.\r\n\tskip(count:number):InfiniteEnumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\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\treturn this.doAction(\r\n\t\t\t(element:T, index?:number) =>\r\n\t\t\t\tindex\r\n\t{\r\n\t\tif(!(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))\r\n\t\t\tthrow new ArgumentOutOfRangeException('count', count, 'Must be finite.');\r\n\r\n\t\tInteger.assert(count, \"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\r\n\t\t\t{\r\n\t\t\t\tvar i = 0;\r\n\t\t\t\twhile(e.moveNext())\r\n\t\t\t\t{\r\n\t\t\t\t\tif(i==n) return e.current;\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn defaultValue;\r\n\t\t\t});\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 v = this.firstOrDefault(INVALID_DEFAULT);\r\n\t\tif(v===INVALID_DEFAULT) throw new Error(\"first:The sequence is empty.\");\r\n\t\treturn v;\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\treturn using(\r\n\t\t\tthis.getEnumerator(),\r\n\t\t\te=> e.moveNext() ? e.current : defaultValue\r\n\t\t);\r\n\t}\r\n\r\n\r\n\tsingle():T\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\treturn using(\r\n\t\t\tthis.getEnumerator(),\r\n\t\t\te=>\r\n\t\t\t{\r\n\t\t\t\tif(e.moveNext())\r\n\t\t\t\t{\r\n\t\t\t\t\tvar value = e.current;\r\n\t\t\t\t\tif(!e.moveNext()) return value;\r\n\t\t\t\t\tthrow new Error(\"single:sequence contains more than one element.\");\r\n\t\t\t\t}\r\n\t\t\t\tthrow new Error(\"single:The sequence is empty.\");\r\n\t\t\t}\r\n\t\t);\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\treturn using(\r\n\t\t\tthis.getEnumerator(),\r\n\t\t\te=>\r\n\t\t\t{\r\n\t\t\t\tif(e.moveNext())\r\n\t\t\t\t{\r\n\t\t\t\t\tvar value = e.current;\r\n\t\t\t\t\tif(!e.moveNext()) return value;\r\n\t\t\t\t}\r\n\t\t\t\treturn defaultValue;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tany():boolean\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\treturn using(\r\n\t\t\tthis.getEnumerator(),\r\n\t\t\te=> e.moveNext()\r\n\t\t);\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\t// #endregion\r\n\r\n\r\n\t// #region Projection and Filtering Methods\r\n\r\n\ttraverseBreadthFirst(\r\n\t\tchildrenSelector:(element:T) => IEnumerableOrArray):Enumerable;\r\n\r\n\ttraverseBreadthFirst(\r\n\t\tchildrenSelector:(element:T|TNode) => IEnumerableOrArray):Enumerable;\r\n\r\n\ttraverseBreadthFirst(\r\n\t\tchildrenSelector:(element:T) => IEnumerableOrArray,\r\n\t\tresultSelector?:(element:T, nestLevel?:number) => TResult):Enumerable;\r\n\r\n\ttraverseBreadthFirst(\r\n\t\tchildrenSelector:(element:T|TNode) => IEnumerableOrArray,\r\n\t\tresultSelector?:(element:TNode, nestLevel?:number) => TResult):Enumerable;\r\n\r\n\ttraverseBreadthFirst(\r\n\t\tchildrenSelector:(element:T|TNode) => IEnumerableOrArray,\r\n\t\tresultSelector:(\r\n\t\t\telement:TNode,\r\n\t\t\tnestLevel?:number) => any = Functions.Identity):Enumerable\r\n\t{\r\n\t\tvar _ = this, isEndless = _._isEndless || null; // Is endless is not affirmative if false.\r\n\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.from(buffer)\r\n\t\t\t\t\t\t\t\t.selectMany(childrenSelector);\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\r\n\t\t\t\t\tisEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\r\n\t\t\tisEndless\r\n\t\t);\r\n\t}\r\n\r\n\r\n\ttraverseDepthFirst(\r\n\t\tchildrenSelector:(element:T) => IEnumerableOrArray):Enumerable;\r\n\r\n\ttraverseDepthFirst(\r\n\t\tchildrenSelector:(element:T|TNode) => IEnumerableOrArray):Enumerable;\r\n\r\n\ttraverseDepthFirst(\r\n\t\tchildrenSelector:(element:T) => IEnumerableOrArray,\r\n\t\tresultSelector?:(element:T, nestLevel?:number) => TResult):Enumerable;\r\n\r\n\ttraverseDepthFirst(\r\n\t\tchildrenSelector:(element:T|TNode) => IEnumerableOrArray,\r\n\t\tresultSelector?:(element:TNode, nestLevel?:number) => TResult):Enumerable;\r\n\r\n\ttraverseDepthFirst(\r\n\t\tchildrenSelector:(element:T|TNode) => IEnumerableOrArray,\r\n\t\tresultSelector:(\r\n\t\t\telement:TNode,\r\n\t\t\tnestLevel?:number) => any = Functions.Identity):Enumerable\r\n\t{\r\n\t\tvar _ = this, isEndless = _._isEndless || null; // Is endless is not affirmative if false.\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\tlet 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\tlet e = Enumerable.fromAny(childrenSelector(enumerator.current));\r\n\t\t\t\t\t\t\t\tenumerator = e ? e.getEnumerator() : EmptyEnumerator;\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\tdispose.these(enumeratorStack);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\tisEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\t\t\tisEndless\r\n\t\t);\r\n\t}\r\n\r\n\r\n\tflatten():Enumerable\r\n\t{\r\n\t\tvar _ = this, isEndless = _._isEndless || null; // Is endless is not affirmative if false.;\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)\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.dispose();\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\t// Because strings are enumerable, we can get stuck in an infinite loop.\r\n\t\t\t\t\t\t\t\t// Treat strings as primitives here.\r\n\t\t\t\t\t\t\t\tvar e = !Type.isString(c) && Enumerable.fromAny(c);\r\n\t\t\t\t\t\t\t\tif(e)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tmiddleEnumerator\r\n\t\t\t\t\t\t\t\t\t\t= e\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(c);\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 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, middleEnumerator);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\tisEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\t\t\tisEndless\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\r\n\t\t\t\t\t_._isEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\r\n\t\t\t_._isEndless\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!==VOID0; // 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\r\n\t\t\t\t\t_._isEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\r\n\t\t\t_._isEndless\r\n\t\t);\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\tselect(selector:Selector):InfiniteEnumerable\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 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: 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\r\n\t\t\t\t\t_._isEndless\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\r\n\t\t\t_._isEndless\r\n\t\t);\r\n\t}\r\n\r\n\t/*\r\n\tpublic static IEnumerable SelectMany(\r\n\t\tthis IEnumerable source,\r\n\t\tFunc> collectionSelector,\r\n\t\tFunc resultSelector)\r\n\t */\r\n\r\n\tprotected _selectMany(\r\n\t\tcollectionSelector:Selector>,\r\n\t\tresultSelector?:(collection:T, element:TElement) => TResult):Enumerable\r\n\t{\r\n\t\tvar _ = this, isEndless = _._isEndless || null; // Do second enumeration, it will be indeterminate if false.\r\n\t\tif(!resultSelector)\r\n\t\t\tresultSelector = (a:T, b:any) => 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===VOID0 && !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 = enumeratorFrom(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\r\n\t\t\t\t\tisEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\r\n\t\t\tisEndless\r\n\t\t);\r\n\t}\r\n\r\n\tselectMany(\r\n\t\tcollectionSelector:Selector>):InfiniteEnumerable;\r\n\r\n\tselectMany(\r\n\t\tcollectionSelector:Selector>,\r\n\t\tresultSelector:(collection:T, element:TElement) => TResult):InfiniteEnumerable;\r\n\r\n\tselectMany(\r\n\t\tcollectionSelector:Selector>,\r\n\t\tresultSelector?:(collection:T, element:any) => TResult):InfiniteEnumerable\r\n\t{\r\n\t\treturn this._selectMany(collectionSelector, resultSelector);\r\n\t}\r\n\r\n\tprotected _choose(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!==VOID0)\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\r\n\t\t\t\t\t_._isEndless\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\r\n\t\t\t_._isEndless\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns selected values that are not null or undefined.\r\n\t */\r\n\tchoose():InfiniteEnumerable;\r\n\tchoose(selector?:Selector):InfiniteEnumerable\r\n\tchoose(selector:Selector = Functions.Identity):InfiniteEnumerable\r\n\t{\r\n\t\treturn this._choose(selector)\r\n\t}\r\n\r\n\twhere(predicate:Predicate):InfiniteEnumerable\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\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\r\n\t\t\t\t\t_._isEndless\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\r\n\t\t\t_._isEndless\r\n\t\t);\r\n\r\n\t}\r\n\r\n\tofType(type:{ new (...params:any[]):TType }):InfiniteEnumerable;\r\n\tofType(type:any):InfiniteEnumerable\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.choose()\r\n\t\t\t.where(x=>(typeof x)===typeName);\r\n\t}\r\n\r\n\texcept(\r\n\t\tsecond:IEnumerableOrArray,\r\n\t\tcompareSelector?:Selector):InfiniteEnumerable\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\tforEach(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\r\n\t\t\t\t\t_._isEndless\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\r\n\t\t\t_._isEndless\r\n\t\t);\r\n\t}\r\n\r\n\tdistinct(compareSelector?:(value:T) => T):InfiniteEnumerable\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,1,1] results in [0,1,2,0,1];\r\n\tdistinctUntilChanged(compareSelector:Selector = Functions.Identity):InfiniteEnumerable\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(Values.areEqual(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\r\n\t\t\t\t\t_._isEndless\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\r\n\t\t\t_._isEndless\r\n\t\t);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns a single default value if empty.\r\n\t * @param defaultValue\r\n\t * @returns {Enumerable}\r\n\t */\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\r\n\t\t\t\t\t_._isEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\r\n\t\t\t_._isEndless\r\n\t\t);\r\n\t}\r\n\r\n\tzip(\r\n\t\tsecond:IEnumerableOrArray,\r\n\t\tresultSelector:(first:T, second:TSecond, index?:number) => TResult):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\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)=> firstEnumerator.moveNext()\r\n\t\t\t\t\t&& secondEnumerator.moveNext()\r\n\t\t\t\t\t&& yielder.yieldReturn(resultSelector(firstEnumerator.current, secondEnumerator.current, index++)),\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\tzipMultiple(\r\n\t\tsecond:IArray>,\r\n\t\tresultSelector:(first:T, second:TSecond, index?:number) => TResult):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\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\r\n\t// #region Join Methods\r\n\r\n\tjoin(\r\n\t\tinner:IEnumerableOrArray,\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!==VOID0)\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:IEnumerableOrArray,\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\r\n\tmerge(enumerables:IArray>):InfiniteEnumerable\r\n\t{\r\n\t\tvar _ = this, isEndless = _._isEndless || null;\r\n\r\n\t\tif(!enumerables || enumerables.length==0)\r\n\t\t\treturn _;\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>;\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>(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\r\n\t\t\t\t\tisEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\t\t\tisEndless\r\n\t\t);\r\n\t}\r\n\r\n\tconcat(...enumerables:Array>):InfiniteEnumerable\r\n\t{\r\n\t\treturn this.merge(enumerables);\r\n\t}\r\n\r\n\r\n\tunion(\r\n\t\tsecond:IEnumerableOrArray,\r\n\t\tcompareSelector:Selector = Functions.Identity):Enumerable\r\n\t{\r\n\t\tvar _ = this, isEndless = _._isEndless || null;\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); // Acting as a HashSet.\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===VOID0)\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 = enumeratorFrom(second);\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\r\n\t\t\t\t\tisEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\r\n\t\t\tisEndless\r\n\t\t);\r\n\t}\r\n\r\n\tinsertAt(index:number, other:IEnumerableOrArray):Enumerable\r\n\t{\r\n\t\tInteger.assertZeroOrGreater(index, 'index');\r\n\t\tvar n:number = index;\r\n\r\n\t\tvar _ = this, isEndless = _._isEndless || null;\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\r\n\t\t\t\t\tisEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\r\n\t\t\tisEndless\r\n\t\t);\r\n\t}\r\n\r\n\r\n\talternateMultiple(sequence:IEnumerableOrArray):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\r\n\t\t\t\t\t_._isEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\r\n\t\t\t_._isEndless\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\t// #region Error Handling\r\n\tcatchError(handler:(e:any) => void):InfiniteEnumerable\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):InfiniteEnumerable\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\tbuffer(size:number):InfiniteEnumerable\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\r\n\t\t\t\t\t_._isEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\r\n\t\t\t_._isEndless\r\n\t\t);\r\n\t}\r\n\r\n\r\n\tshare():InfiniteEnumerable\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 sharedEnumerator || (sharedEnumerator = _.getEnumerator());\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\r\n\t\t\t_._isEndless\r\n\t\t);\r\n\t}\r\n\r\n\r\n}\r\n\r\n\r\n/**\r\n * Enumerable 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 InfiniteEnumerable\r\n{\r\n\r\n\tconstructor(\r\n\t\tenumeratorFactory:() => IEnumerator,\r\n\t\tfinalizer?:() => void,\r\n\t\tisEndless:boolean = null)\r\n\t{\r\n\t\tsuper(enumeratorFactory, finalizer);\r\n\t\tthis._isEndless = isEndless;\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:IEnumerableOrArray):Enumerable\r\n\t{\r\n\t\tvar e = Enumerable.fromAny(source);\r\n\t\tif(!e) throw new UnsupportedEnumerableException();\r\n\t\treturn e;\r\n\t}\r\n\r\n\tstatic fromAny(\r\n\t\tsource:any):Enumerable\r\n\r\n\tstatic fromAny(\r\n\t\tsource:IEnumerableOrArray,\r\n\t\tdefaultEnumerable?:Enumerable):Enumerable\r\n\r\n\tstatic fromAny(\r\n\t\tsource:any,\r\n\t\tdefaultEnumerable?:Enumerable):Enumerable\r\n\r\n\tstatic fromAny(\r\n\t\tsource:any,\r\n\t\tdefaultEnumerable:Enumerable = null):Enumerable\r\n\t{\r\n\t\tif(Type.isObject(source) || Type.isString(source))\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(Type.isArrayLike(source))\r\n\t\t\t\treturn new ArrayEnumerable(source);\r\n\r\n\t\t\tif(isEnumerable(source))\r\n\t\t\t\treturn new Enumerable(\r\n\t\t\t\t\t()=>source.getEnumerator(),\r\n\t\t\t\t\tnull, source.isEndless);\r\n\t\t}\r\n\r\n\t\treturn defaultEnumerable;\r\n\t}\r\n\r\n\tstatic fromOrEmpty(source:IEnumerableOrArray):Enumerable\r\n\t{\r\n\t\treturn Enumerable.fromAny(source) || Enumerable.empty();\r\n\t}\r\n\r\n\t/**\r\n\t * Static helper for converting enumerables to an array.\r\n\t * @param source\r\n\t * @returns {any}\r\n\t */\r\n\tstatic toArray(source:IEnumerableOrArray):T[]\r\n\t{\r\n\t\tif(source instanceof Enumerable)\r\n\t\t\treturn source.toArray();\r\n\r\n\t\treturn toArray(source);\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t// #region Static Methods...\r\n\tstatic choice(values:IArray):InfiniteEnumerable\r\n\t{\r\n\t\tvar len = values && values.length;\r\n\t\t// We could return empty if no length, but that would break the typing and produce unexpected results.\r\n\t\t// Enforcing that there must be at least 1 choice is key.\r\n\t\tif(!len || !isFinite(len))\r\n\t\t\tthrow new ArgumentOutOfRangeException('length', length);\r\n\r\n\t\treturn new InfiniteEnumerable(\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(Integer.random.select(values)),\r\n\t\t\t\ttrue // Is endless!\r\n\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\tstatic chooseFrom(...args:T[]):InfiniteEnumerable\r\n\t{\r\n\t\treturn Enumerable.choice(args);\r\n\t}\r\n\r\n\tstatic cycle(values:IArray):InfiniteEnumerable\r\n\t{\r\n\t\tvar len = values && values.length;\r\n\t\t// We could return empty if no length, but that would break the typing and produce unexpected results.\r\n\t\t// Enforcing that there must be at least 1 choice is key.\r\n\t\tif(!len || !isFinite(len))\r\n\t\t\tthrow new ArgumentOutOfRangeException('length', length);\r\n\r\n\t\treturn new InfiniteEnumerable(\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}, // 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\ttrue // Is endless!\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic cycleThrough(...args:T[]):InfiniteEnumerable\r\n\t{\r\n\t\treturn Enumerable.cycle(args);\r\n\t}\r\n\r\n\tstatic empty():FiniteEnumerable\r\n\t{\r\n\t\t// Could be single static instance, but for safety, we'll make a new one.\r\n\t\treturn new FiniteEnumerable(getEmptyEnumerator);\r\n\t}\r\n\r\n\tstatic repeat(element:T):InfiniteEnumerable;\r\n\tstatic repeat(element:T, count:number):FiniteEnumerable;\r\n\tstatic repeat(element:T, count:number = Infinity):Enumerable\r\n\t{\r\n\t\tif(!(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 FiniteEnumerable(\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() => { index = 0; },\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\ttrue // Is endless!\r\n\t\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\t// Note: this enumeration is endless but can be disposed/cancelled and finalized.\r\n\tstatic repeatWithFinalize(\r\n\t\tinitializer:() => T,\r\n\t\tfinalizer:(element:T) => void):InfiniteEnumerable\r\n\t{\r\n\r\n\t\treturn new InfiniteEnumerable(\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\r\n\t\t\t\t\ttrue // Is endless!\r\n\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates an enumerable of one element.\r\n\t * @param element\r\n\t * @returns {FiniteEnumerable}\r\n\t */\r\n\tstatic make(element:T):FiniteEnumerable\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\r\n\tstatic range(\r\n\t\tstart:number,\r\n\t\tcount:number,\r\n\t\tstep:number = 1):FiniteEnumerable\r\n\t{\r\n\t\tif(!isFinite(start))\r\n\t\t\tthrow new ArgumentOutOfRangeException(\"start\", start, \"Must be a finite number.\");\r\n\r\n\t\tif(!(count>0))\r\n\t\t\treturn Enumerable.empty();\r\n\r\n\t\tif(!step)\r\n\t\t\tthrow new ArgumentOutOfRangeException(\"step\", step, \"Must be a valid value\");\r\n\r\n\t\tif(!isFinite(step))\r\n\t\t\tthrow new ArgumentOutOfRangeException(\"step\", step, \"Must be a finite number.\");\r\n\r\n\t\tInteger.assert(count, \"count\");\r\n\r\n\t\treturn new FiniteEnumerable(\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{\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):InfiniteEnumerable\r\n\t{\r\n\t\tif(!isFinite(start))\r\n\t\t\tthrow new ArgumentOutOfRangeException(\"start\", start, \"Must be a finite number.\");\r\n\r\n\t\tif(!step)\r\n\t\t\tthrow new ArgumentOutOfRangeException(\"step\", step, \"Must be a valid value\");\r\n\r\n\t\tif(!isFinite(step))\r\n\t\t\tthrow new ArgumentOutOfRangeException(\"step\", step, \"Must be a finite number.\");\r\n\r\n\t\treturn new InfiniteEnumerable(\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\r\n\t\t\t\t\ttrue // Is endless!\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic toNegativeInfinity(\r\n\t\tstart:number = 0,\r\n\t\tstep:number = 1):InfiniteEnumerable\r\n\t{\r\n\t\treturn Enumerable.toInfinity(start, -step);\r\n\t}\r\n\r\n\tstatic rangeTo(\r\n\t\tstart:number,\r\n\t\tto:number,\r\n\t\tstep:number = 1):FiniteEnumerable\r\n\t{\r\n\t\tif(isNaN(to) || !isFinite(to))\r\n\t\t\tthrow new ArgumentOutOfRangeException(\"to\", to, \"Must be a finite number.\");\r\n\r\n\t\tif(step && !isFinite(step))\r\n\t\t\tthrow new ArgumentOutOfRangeException(\"step\", step, \"Must be a finite non-zero number.\");\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\treturn new FiniteEnumerable(\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(() => { value = start; },\r\n\t\t\t\t\tstart\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar result:boolean = value<=to && yielder.yieldReturn(value);\r\n\r\n\t\t\t\t\t\t\tif(result)\r\n\t\t\t\t\t\t\t\tvalue += step;\r\n\r\n\t\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t:\r\n\t\t\t\t\t\tyielder=>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar result:boolean = value>=to && yielder.yieldReturn(value);\r\n\r\n\t\t\t\t\t\t\tif(result)\r\n\t\t\t\t\t\t\t\tvalue -= step;\r\n\r\n\t\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t, false);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic matches(input:string, pattern:any, flags:string = \"\"):FiniteEnumerable\r\n\t{\r\n\t\tif(input===null || input===VOID0)\r\n\t\t\tthrow new ArgumentNullException(\"input\");\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 FiniteEnumerable(\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):InfiniteEnumerable;\r\n\tstatic generate(factory:(index?:number) => T, count:number):FiniteEnumerable;\r\n\tstatic generate(factory:(index?:number) => T, count:number = Infinity):InfiniteEnumerable\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\t\t\t?\r\n\t\t\tnew FiniteEnumerable(\r\n\t\t\t\t() =>\r\n\t\t\t\t{\r\n\t\t\t\t\tvar c:number = count;\r\n\t\t\t\t\tvar index:number = 0;\r\n\r\n\t\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t\t() =>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t\t},\r\n\r\n\t\t\t\t\t\t(yielder)=>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar current:number = index++;\r\n\t\t\t\t\t\t\treturn current(\r\n\t\t\t\t() =>\r\n\t\t\t\t{\r\n\t\t\t\t\tvar index:number = 0;\r\n\t\t\t\t\treturn new EnumeratorBase(\r\n\t\t\t\t\t\t() =>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tindex = 0;\r\n\t\t\t\t\t\t},\r\n\r\n\t\t\t\t\t\t(yielder)=> yielder.yieldReturn(factory(index++)),\r\n\r\n\t\t\t\t\t\ttrue // Is endless!\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t}\r\n\r\n\tstatic unfold(\r\n\t\tseed:T,\r\n\t\tvalueFactory:Selector,\r\n\t\tskipSeed:Boolean = false):InfiniteEnumerable\r\n\t{\r\n\t\treturn new InfiniteEnumerable(\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\r\n\t\t\t\t\ttrue // Is endless!\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:IEnumerableOrArray,\r\n\t\taction:(element:T, index?:number) => any,\r\n\t\tmax:number = Infinity):number\r\n\t{\r\n\t\t// Will properly dispose created enumerable.\r\n\t\t// Will throw if enumerable is endless.\r\n\t\treturn forEach(enumerable, action, max);\r\n\t}\r\n\r\n\tstatic map(\r\n\t\tenumerable:IEnumerableOrArray,\r\n\t\tselector:Selector):TResult[]\r\n\t{\r\n\t\t// Will properly dispose created enumerable.\r\n\t\t// Will throw if enumerable is endless.\r\n\t\treturn map(enumerable, selector);\r\n\r\n\t}\r\n\r\n\t// Slightly optimized versions for numbers.\r\n\tstatic max(values:FiniteEnumerable):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:FiniteEnumerable):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\r\n\t/**\r\n\t * Takes any set of collections of the same type and weaves them together.\r\n\t * @param enumerables\r\n\t * @returns {Enumerable}\r\n\t */\r\n\tstatic weave(\r\n\t\tenumerables:IEnumerableOrArray>):Enumerable\r\n\t{\r\n\t\tif(!enumerables)\r\n\t\t\tthrow new ArgumentNullException('enumerables');\r\n\r\n\t\treturn new Enumerable(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tvar queue:Queue>;\r\n\t\t\t\tvar mainEnumerator:IEnumerator>;\r\n\t\t\t\tvar index: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\tindex = 0;\r\n\t\t\t\t\t\tqueue = new Queue>();\r\n\t\t\t\t\t\tmainEnumerator = enumeratorFrom(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\tlet e:IEnumerator;\r\n\r\n\t\t\t\t\t\t// First pass...\r\n\t\t\t\t\t\tif(mainEnumerator)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\twhile(!e && mainEnumerator.moveNext())\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tlet c = mainEnumerator.current;\r\n\t\t\t\t\t\t\t\te = nextEnumerator(queue, c && enumeratorFrom(c));\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(!e)\r\n\t\t\t\t\t\t\t\tmainEnumerator = null;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\twhile(!e && queue.count)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\te = nextEnumerator(queue, queue.dequeue());\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn e\r\n\t\t\t\t\t\t\t? yielder.yieldReturn(e.current)\r\n\t\t\t\t\t\t\t: yielder.yieldBreak();\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.these(queue.dump());\r\n\t\t\t\t\t\tdispose(mainEnumerator, queue);\r\n\t\t\t\t\t\tmainEnumerator = null;\r\n\t\t\t\t\t\tqueue = 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\tdoAction(\r\n\t\taction:Action|Predicate|Selector|Selector,\r\n\t\tinitializer?:()=>void,\r\n\t\tisEndless:boolean = this.isEndless):Enumerable\r\n\t{\r\n\t\treturn >super.doAction(action, initializer, isEndless);\r\n\t}\r\n\r\n// #region Indexing/Paging methods.\r\n\r\n\tskip(count:number):Enumerable\r\n\t{\r\n\t\treturn >super.skip(count);\r\n\t}\r\n\r\n\tskipWhile(predicate:Predicate):Enumerable\r\n\t{\r\n\t\tthis.throwIfDisposed();\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.Skip\r\n\t\t\t\t\t: EnumerableAction.Return\r\n\t\t);\r\n\t}\r\n\r\n\ttakeWhile(predicate:Predicate):Enumerable\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tif(!predicate)\r\n\t\t\tthrow new ArgumentNullException('predicate');\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\tnull,\r\n\t\t\tnull // We don't know the state if it is endless or not.\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\t\tthis.throwIfDisposed();\r\n\r\n\t\tif(!predicate)\r\n\t\t\tthrow new ArgumentNullException('predicate');\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\tnull,\r\n\t\t\t\tnull // We don't know the state if it is endless or not.\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\t\t\t\treturn EnumerableAction.Return;\r\n\t\t\t},\r\n\t\t\t()=>\r\n\t\t\t{\r\n\t\t\t\tfound = false;\r\n\t\t\t},\r\n\t\t\tnull // We don't know the state if it is endless or not.\r\n\t\t);\r\n\t}\r\n\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\t\tthrowIfEndless(_.isEndless);\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\tthrowIfEndless(e.isEndless);\r\n\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\treturn predicate\r\n\t\t\t? this.where(predicate).toArray()\r\n\t\t\t: this.copyTo([]);\r\n\t}\r\n\r\n\tcopyTo(target:T[], index:number = 0, count:number = Infinity):T[]\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tif(!target) throw new ArgumentNullException(\"target\");\r\n\t\tInteger.assertZeroOrGreater(index);\r\n\r\n\t\t// If not exposing an action that could cause dispose, then use forEach utility instead.\r\n\t\tforEach(this, (x, i)=>\r\n\t\t{\r\n\t\t\ttarget[i + index] = x\r\n\t\t}, count);\r\n\r\n\t\treturn target;\r\n\t}\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\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!==VOID0) 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, i)=>\r\n\t\t{\r\n\t\t\tobj[keySelector(x, i)] = elementSelector(x, i);\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, i)=> dict.addByKeyValue(keySelector(x, i), elementSelector(x, i)));\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\ttakeExceptLast(count:number = 1):Enumerable\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\tif(!(count>0)) // Out of bounds?\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\tskipToLast(count:number):Enumerable\r\n\t{\r\n\t\tif(!(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.\r\n\t\t\treturn _;\r\n\r\n\t\tInteger.assert(count, \"count\");\r\n\r\n\t\t// This sets up the query so nothing is done until move next is called.\r\n\t\treturn _.reverse()\r\n\t\t\t.take(count)\r\n\t\t\t.reverse();\r\n\t}\r\n\r\n\t// To help with type guarding.\r\n\r\n\twhere(predicate:Predicate):Enumerable\r\n\t{\r\n\t\treturn >super.where(predicate);\r\n\t}\r\n\r\n\tselect(selector:Selector):Enumerable\r\n\t{\r\n\t\treturn >super.select(selector);\r\n\t}\r\n\r\n\tselectMany(\r\n\t\tcollectionSelector:Selector>):Enumerable;\r\n\r\n\r\n\tselectMany(\r\n\t\tcollectionSelector: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:T, element:any)=>TResult):Enumerable\r\n\t{\r\n\t\treturn this._selectMany(collectionSelector, resultSelector);\r\n\t}\r\n\r\n\tchoose():Enumerable;\r\n\tchoose(selector?:Selector):Enumerable\r\n\tchoose(selector:Selector = Functions.Identity):Enumerable\r\n\t{\r\n\t\treturn this._choose(selector);\r\n\t}\r\n\r\n\treverse():Enumerable\r\n\t{\r\n\t\tvar _ = this, disposed = !_.throwIfDisposed();\r\n\t\tthrowIfEndless(_._isEndless); // Cannot reverse an endless collection...\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)=> index && 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\t\tthrowIfEndless(_._isEndless); // Cannot shuffle an endless collection...\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\t\tvar count:number = 0;\r\n\t\tthis.forEach(\r\n\t\t\tpredicate\r\n\r\n\t\t\t\t?\r\n\t\t\t\t(x, i) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif(predicate(x, i))++count;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t:\r\n\t\t\t\t() =>\r\n\t\t\t\t{\r\n\t\t\t\t\t++count;\r\n\t\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\tif(!predicate)\r\n\t\t\tthrow new ArgumentNullException(\"predicate\");\r\n\r\n\t\tvar result = true;\r\n\t\tthis.forEach((x, i) =>\r\n\t\t{\r\n\t\t\tif(!predicate(x, i))\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\tif(!predicate)\r\n\t\t\treturn super.any();\r\n\r\n\t\tvar result = false;\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\tthis.forEach(\r\n\t\t\t(x, i) =>\r\n\t\t\t{\r\n\t\t\t\tresult = predicate(x, i); // 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\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\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\t\tthis.forEach(\r\n\t\t\tcompareSelector\r\n\t\t\t\t?\r\n\t\t\t\t(element:T, i?:number) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif(Values.areEqual(compareSelector(element, i), compareSelector(value, i), true))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfound = i;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t:\r\n\t\t\t\t(element:T, i?:number) =>\r\n\t\t\t\t{\r\n\t\t\t\t\t// Why? Because NaN doesn't equal NaN. :P\r\n\t\t\t\t\tif(Values.areEqual(element, value, true))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfound = i;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\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\t\tthis.forEach(\r\n\t\t\tcompareSelector\r\n\t\t\t\t?\r\n\t\t\t\t(element:T, i?:number) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif(Values.areEqual(compareSelector(element, i), compareSelector(value, i), true)) result\r\n\t\t\t\t\t\t= i;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t:\r\n\t\t\t\t(element:T, i?:number) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif(Values.areEqual(element, value, true)) result = i;\r\n\t\t\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tmerge(enumerables:IArray>):Enumerable\r\n\t{\r\n\t\treturn >super.merge(enumerables);\r\n\t}\r\n\r\n\tconcat(...enumerables:Array>):Enumerable\r\n\t{\r\n\t\treturn this.merge(enumerables);\r\n\t}\r\n\r\n\r\n\tintersect(\r\n\t\tsecond:IEnumerableOrArray,\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\tforEach(second, key=>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tkeys.addByKeyValue(key, true);\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\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, keys, outs);\r\n\t\t\t\t\t},\r\n\t\t\t\t\t_._isEndless\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tnull,\r\n\t\t\t_._isEndless\r\n\t\t);\r\n\t}\r\n\r\n\tsequenceEqual(\r\n\t\tsecond:IEnumerableOrArray,\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\tenumeratorFrom(second),\r\n\t\t\t\te2=>\r\n\t\t\t\t{\r\n\t\t\t\t\t// if both are endless, this will never evaluate.\r\n\t\t\t\t\tthrowIfEndless(e1.isEndless && e2.isEndless);\r\n\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:IEnumerableOrArray,\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\r\n\t// #endregion\r\n\r\n\r\n\tofType(type:{ new (...params:any[]):TType }):Enumerable;\r\n\tofType(type:any):Enumerable\r\n\t{\r\n\t\treturn >super.ofType(type);\r\n\t}\r\n\r\n\texcept(\r\n\t\tsecond:IEnumerableOrArray,\r\n\t\tcompareSelector?:Selector):Enumerable\r\n\t{\r\n\t\treturn >super.except(second, compareSelector);\r\n\t}\r\n\r\n\tdistinct(compareSelector?:(value:T)=>T):Enumerable\r\n\t{\r\n\t\treturn >super.distinct(compareSelector);\r\n\t}\r\n\r\n\tdistinctUntilChanged(compareSelector:Selector = Functions.Identity):Enumerable\r\n\t{\r\n\t\treturn >super.distinctUntilChanged(compareSelector);\r\n\t}\r\n\r\n// #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{\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{\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\tbuffer(size:number):Enumerable\r\n\t{\r\n\t\treturn >super.buffer(size);\r\n\t}\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>\r\n\t{\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() => this.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\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 count = 0;\r\n\t\tvar sum = this.sum((e, i)=>\r\n\t\t{\r\n\t\t\tcount++;\r\n\t\t\treturn selector(e, i);\r\n\t\t});\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 +=\r\n\t\t\t\t\t\tvalue>0 ?\r\n\t\t\t\t\t\t\t(+1) :\r\n\t\t\t\t\t\t\t(-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(x, i)=>\r\n\t\t\t{\r\n\t\t\t\texists = true;\r\n\t\t\t\tvar value = selector(x, i);\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/**\r\n\t * Takes the first number and divides it by all following.\r\n\t * @param selector\r\n\t * @returns {number}\r\n\t */\r\n\tquotient(selector:Selector = Type.numberOrNaN):number\r\n\t{\r\n\t\tvar count = 0;\r\n\t\tvar result:number = NaN;\r\n\r\n\t\tthis.forEach(\r\n\t\t\t(x, i)=>\r\n\t\t\t{\r\n\t\t\t\tvar value = selector(x, i);\r\n\t\t\t\tcount++;\r\n\r\n\t\t\t\tif(count===1)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult = value;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif(isNaN(value) || value===0 || !isFinite(value))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tresult = NaN;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tresult /= value;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tif(count===1)\r\n\t\t\tresult = NaN;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\t// #region Single Value Return...\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\t// #endregion\r\n\r\n\tshare():Enumerable\r\n\t{\r\n\t\treturn >super.share();\r\n\t}\r\n\r\n\r\n\tcatchError(handler:(e:any)=>void):Enumerable\r\n\t{\r\n\t\treturn >super.catchError(handler);\r\n\t}\r\n\r\n\r\n\tfinallyAction(action:()=>void):Enumerable\r\n\t{\r\n\t\treturn >super.finallyAction(action);\r\n\t}\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\r\n}\r\n\r\n\r\n// Provided for type guarding.\r\nexport class FiniteEnumerable\r\nextends Enumerable\r\n{\r\n\tconstructor(\r\n\t\tenumeratorFactory:() => IEnumerator,\r\n\t\tfinalizer?:() => void)\r\n\t{\r\n\t\tsuper(enumeratorFactory, finalizer, false);\r\n\t}\r\n\r\n}\r\n\r\nclass ArrayEnumerable\r\nextends FiniteEnumerable\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; // Should never 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 _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\treturn toArray(_._source);\r\n\t}\r\n\r\n\tasEnumerable():ArrayEnumerable\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, max:number = Infinity):number\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\r\n\t\treturn forEach(_._source, action, max);\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.length;\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.length;\r\n\t\treturn len && (predicate ? super.count(predicate) : len);\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\t\tInteger.assertZeroOrGreater(index, 'index');\r\n\r\n\t\tvar source = _._source;\r\n\t\treturn index\r\n\t{\r\n\r\n\t\tvar _ = this;\r\n\r\n\t\tif(!(count>0))\r\n\t\t\treturn _;\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;\r\n\t\treturn _.take(_._source.length - count);\r\n\t}\r\n\r\n\tskipToLast(count:number):Enumerable\r\n\t{\r\n\t\tif(!(count>0))\r\n\t\t\treturn Enumerable.empty();\r\n\r\n\t\tvar _ = this;\r\n\t\tif(!isFinite(count))\r\n\t\t\treturn _;\r\n\r\n\t\tvar 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 this.asEnumerable();\r\n\t}\r\n\r\n\tsequenceEqual(\r\n\t\tsecond:IEnumerableOrArray,\r\n\t\tequalityComparer:EqualityComparison = Values.areEqual):boolean\r\n\t{\r\n\t\tif(Type.isArrayLike(second))\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 && Array.isArray(s)\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\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\nexport interface IOrderedEnumerable\r\nextends FiniteEnumerable\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 FiniteEnumerable 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\tthrowIfEndless(source && source.isEndless);\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{\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{\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\r\n\t\t\tfalse\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// A private static helper for the weave function.\r\nfunction nextEnumerator(queue:Queue>, e:IEnumerator):IEnumerator\r\n{\r\n\tif(e)\r\n\t{\r\n\t\tif(e.moveNext())\r\n\t\t{\r\n\t\t\tqueue.enqueue(e);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tdispose(e);\r\n\t\t\te = null;\r\n\t\t}\r\n\t}\r\n\treturn e;\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):void\r\n{\r\n\tif(disposed) throw new ObjectDisposedException(\"Enumerable\");\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/CollectionBase.d.ts b/dist/commonjs/System/Collections/CollectionBase.d.ts index 9508abd6..7e353120 100644 --- a/dist/commonjs/System/Collections/CollectionBase.d.ts +++ b/dist/commonjs/System/Collections/CollectionBase.d.ts @@ -37,7 +37,7 @@ export declare abstract class CollectionBase extends DisposableBase implement importEntries(entries: IEnumerableOrArray): number; abstract getEnumerator(): IEnumerator; contains(entry: T): boolean; - forEach(action: Predicate | Action, useCopy?: boolean): void; + forEach(action: Predicate | Action, useCopy?: boolean): number; copyTo>(target: TTarget, index?: number): TTarget; toArray(): T[]; } diff --git a/dist/commonjs/System/Collections/CollectionBase.js b/dist/commonjs/System/Collections/CollectionBase.js index bb0843dc..9ae01425 100644 --- a/dist/commonjs/System/Collections/CollectionBase.js +++ b/dist/commonjs/System/Collections/CollectionBase.js @@ -225,10 +225,13 @@ var CollectionBase = function (_DisposableBase_1$Dis) { value: function forEach(action, useCopy) { if (useCopy) { var a = this.toArray(); - Enumerator_1.forEach(a, action); - a.length = 0; + try { + return Enumerator_1.forEach(a, action); + } finally { + a.length = 0; + } } else { - Enumerator_1.forEach(this.getEnumerator(), action); + return Enumerator_1.forEach(this.getEnumerator(), action); } } }, { diff --git a/dist/commonjs/System/Collections/CollectionBase.js.map b/dist/commonjs/System/Collections/CollectionBase.js.map index 762ae62b..9dcab367 100644 --- a/dist/commonjs/System/Collections/CollectionBase.js.map +++ b/dist/commonjs/System/Collections/CollectionBase.js.map @@ -1 +1 @@ -{"version":3,"sources":["System/Collections/CollectionBase.js","System/Collections/CollectionBase.ts"],"names":[],"mappings":";;;;AAIA;;;;;;;;;;;;ACCA,IAAA,eAAA,QAAsB,0BAAtB,CAAA;AACA,IAAA,YAAA,QAAuB,YAAvB,CAAA;AACA,IAAA,0BAAA,QAAoC,qCAApC,CAAA;AACA,IAAA,8BAAA,QAAwC,yCAAxC,CAAA;AACA,IAAA,mBAAA,QAA6B,8BAA7B,CAAA;AASA,IAAM,OAAO,gBAAP;IACA,OAAO,sCAAP;IACA,OAAO,uCAAP;;IAEN;;;AAIC,aAJD,cAIC,CACC,MADD,EAE6D;YAAlD,0EAA0C,UAAA,QAAA,gBAAQ;;8BAN9D,gBAM8D;;2EAN9D,4BAM8D;;AAAlD,cAAA,iBAAA,GAAA,iBAAA,CAAkD;AAG5D,YAAI,SAAJ,CAH4D;AAI5D,UAAE,qBAAF,GAA0B,IAA1B,CAJ4D;AAK5D,UAAE,cAAF,CAAiB,MAAjB,EAL4D;AAM5D,UAAE,gBAAF,GAAqB,CAArB,CAN4D;AAO5D,UAAE,cAAF,GAAmB,CAAnB,CAP4D;AAQ5D,UAAE,QAAF,GAAa,CAAb,CAR4D;;KAF7D;;iBAJD;;wCAyBwB;AAEtB,mBAAO,KAAP,CAFsB;;;;2CAUG;AAEzB,iBAAK,eAAL,CAAqB,IAArB,EAFyB;AAGzB,gBAAG,KAAK,aAAL,EAAH,EACC,MAAM,IAAI,4BAAA,yBAAA,CAA0B,IAA9B,CAAN,CADD;;;;sCAKa,SAAc;AAE3B,gBAAG,WAAS,KAAK,QAAL,EACX,MAAM,IAAI,4BAAA,yBAAA,CAA0B,0BAA9B,CAAN,CADD;;;;sCAWoB;;;4CAES,WAAkB;AAE/C,gBAAI,IAAI,IAAJ,CAF2C;AAG/C,gBAAG,SAAH,EAAc,EAAE,cAAF,GAAd;AACA,gBAAG,EAAE,cAAF,IAAoB,CAAC,KAAK,gBAAL,EACxB;AACC,kBAAE,cAAF,GAAmB,CAAnB,CADD;AAEC,kBAAE,QAAF,GAFD;AAGC,oBACA;AACC,sBAAE,WAAF,GADD;iBADA,CAIA,OAAM,EAAN,EACA;AAEC,4BAAQ,KAAR,CAAc,EAAd,EAFD;iBADA;AAKA,uBAAO,IAAP,CAZD;aADA;AAeA,mBAAO,KAAP,CAnB+C;;;;6CAsBpB;AAAU,iBAAK,cAAL,GAAV;;;;qCAUf,SAAsB;AAElC,gBAAG,CAAC,OAAD,EAAU,OAAO,KAAP,CAAb;AACA,gBAAI,IAAI,IAAJ,CAH8B;AAIlC,cAAE,gBAAF,GAJkC;AAKlC,cAAE,gBAAF,GALkC;AAMlC,gBAAI,UAAkB,KAAlB,CAN8B;AAQlC,gBACA;AACC,oBAAG,UAAU,SAAV,EACF,EAAE,cAAF,GADD;aAFD,SAMA;AACC,kBAAE,gBAAF,GADD;aANA;AAUA,cAAE,mBAAF,GAlBkC;AAoBlC,mBAAO,OAAP,CApBkC;;;;4BA8B/B,OAAO;AAEV,gBAAI,IAAI,IAAJ,CAFM;AAGV,cAAE,gBAAF,GAHU;AAIV,cAAE,gBAAF,GAJU;AAMV,gBACA;AAAE,oBAAG,EAAE,YAAF,CAAe,KAAf,CAAH,EAA0B,EAAE,cAAF,GAA1B;aADF,SAGA;AAAE,kBAAE,gBAAF,GAAF;aAHA;AAKA,cAAE,mBAAF,GAXU;;;;+BAgBJ,OAA8B;gBAArB,4DAAa,wBAAQ;;AAEpC,gBAAI,IAAI,IAAJ,CAFgC;AAGpC,cAAE,gBAAF,GAHoC;AAIpC,cAAE,gBAAF,GAJoC;AAMpC,gBAAI,CAAJ,CANoC;AAOpC,gBACA;AAAE,oBAAG,IAAI,EAAE,eAAF,CAAkB,KAAlB,EAAyB,GAAzB,CAAJ,EAAmC,EAAE,cAAF,GAAtC;aADF,SAGA;AAAE,kBAAE,gBAAF,GAAF;aAHA;AAKA,cAAE,mBAAF,GAZoC;AAapC,mBAAO,CAAP,CAboC;;;;gCAkBhC;AAEJ,gBAAI,IAAI,IAAJ,CAFA;AAGJ,cAAE,gBAAF,GAHI;AAIJ,cAAE,gBAAF,GAJI;AAMJ,gBAAI,CAAJ,CANI;AAOJ,gBACA;AAAE,oBAAG,IAAI,EAAE,cAAF,EAAJ,EAAwB,EAAE,cAAF,GAA3B;aADF,SAGA;AAAE,kBAAE,gBAAF,GAAF;aAHA;AAKA,cAAE,mBAAF,GAZI;AAcJ,mBAAO,CAAP,CAdI;;;;qCAiBe;AAEnB,uCA7KF,yDA6KE,CAFmB;AAGnB,iBAAK,cAAL,GAHmB;AAInB,iBAAK,QAAL,GAAgB,CAAhB,CAJmB;AAKnB,iBAAK,gBAAL,GAAwB,CAAxB,CALmB;AAMnB,iBAAK,cAAL,GAAsB,CAAtB,CANmB;;;;uCASK,SAA6B;;;AAErD,gBAAI,QAAQ,CAAR,CAFiD;AAGrD,gBAAG,OAAH,EACA;AACC,oBAAG,MAAM,OAAN,CAAc,OAAd,CAAH,EACA;;;;;;AAEC,6CAAa,iCAAb,oGACA;gCADQ,gBACR;;AACC,gCAAG,KAAK,YAAL,CAAkB,CAAlB,CAAH,EAAyB,QAAzB;yBAFD;;;;;;;;;;;;;;qBAFD;iBADA,MASA;AACC,iCAAA,OAAA,CAAQ,OAAR,EAAiB,aAAC;AAEjB,4BAAG,OAAK,YAAL,CAAkB,CAAlB,CAAH,EAAyB,QAAzB;qBAFgB,CAAjB,CADD;iBATA;aAFD;AAkBA,mBAAO,KAAP,CArBqD;;;;sCAwBxC,SAA6B;AAE1C,gBAAI,IAAI,IAAJ,CAFsC;AAG1C,cAAE,gBAAF,GAH0C;AAI1C,cAAE,gBAAF,GAJ0C;AAM1C,gBAAI,CAAJ,CAN0C;AAO1C,gBACA;AAAE,oBAAG,IAAI,EAAE,cAAF,CAAiB,OAAjB,CAAJ,EAA+B,EAAE,cAAF,GAAlC;aADF,SAGA;AAAE,kBAAE,gBAAF,GAAF;aAHA;AAKA,cAAE,mBAAF,GAZ0C;AAa1C,mBAAO,CAAP,CAb0C;;;;iCAmBlC,OAAO;AAEf,gBAAG,CAAC,KAAK,QAAL,EAAD,EAAkB,OAAO,KAAP,CAArB;AACA,gBAAI,QAAgB,KAAhB;gBAAuB,SAAS,KAAK,iBAAL,CAHrB;AAIf,iBAAK,OAAL,CAAa;uBAAK,EAAE,QAAQ,OAAO,KAAP,EAAc,CAAd,CAAR,CAAF;aAAL,CAAb,CAJe;AAKf,mBAAO,KAAP,CALe;;;;gCAQR,QAA+B,SAAgB;AAEtD,gBAAG,OAAH,EACA;AACC,oBAAI,IAAI,KAAK,OAAL,EAAJ,CADL;AAEC,6BAAA,OAAA,CAAQ,CAAR,EAAW,MAAX,EAFD;AAGC,kBAAE,MAAF,GAAW,CAAX,CAHD;aADA,MAOA;AACC,6BAAA,OAAA,CAAQ,KAAK,aAAL,EAAR,EAA8B,MAA9B,EADD;aAPA;;;;+BAaA,QACgB;gBAAhB,8DAAe,iBAAC;;AAEhB,gBAAG,CAAC,MAAD,EAAS,MAAM,IAAI,wBAAA,qBAAA,CAAsB,QAA1B,CAAN,CAAZ;AAEA,gBAAI,QAAQ,KAAK,QAAL,EAAR;gBAAyB,YAAY,QAAQ,KAAR,CAJzB;AAKhB,gBAAG,OAAO,MAAP,GAAc,SAAd,EAAyB,OAAO,MAAP,GAAgB,SAAhB,CAA5B;AAEA,gBAAI,IAAI,KAAK,aAAL,EAAJ,CAPY;AAQhB,mBAAM,EAAE,QAAF,EAAN,EACA;AACC,uBAAO,OAAP,IAAkB,EAAE,OAAF,CADnB;aADA;AAIA,mBAAO,MAAP,CAZgB;;;;kCAeV;AAEN,gBAAI,QAAQ,KAAK,QAAL,EAAR,CAFE;AAGN,mBAAO,KAAK,MAAL,CAAY,QAAM,KAAN,GAAc,IAAI,KAAJ,CAAa,KAAb,CAAd,GAAoC,EAApC,CAAnB,CAHM;;;;4BAlPE;AAER,mBAAO,KAAK,QAAL,EAAP,CAFQ;;;;4BAUK;AAEb,mBAAO,KAAK,aAAL,EAAP,CAFa;;;;4BAoDA;AAAa,mBAAO,KAAK,gBAAL,IAAuB,CAAvB,CAApB;;;;WAlFf;EACQ,iBAAA,cAAA;;AADc,QAAA,cAAA,GAAc,cAAd;AA+QtB,OAAA,cAAA,CAAA,OAAA,EAAA,YAAA,EAAA,EAAA,OAAA,IAAA,EAAA;ADjGA,QAAQ,OAAR,GCiGe,cDjGf","file":"System/Collections/CollectionBase.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst Enumerator_1 = require(\"./Enumeration/Enumerator\");\nconst Compare_1 = require(\"../Compare\");\nconst ArgumentNullException_1 = require(\"../Exceptions/ArgumentNullException\");\nconst InvalidOperationException_1 = require(\"../Exceptions/InvalidOperationException\");\nconst DisposableBase_1 = require(\"../Disposable/DisposableBase\");\nconst NAME = \"CollectionBase\", CMDC = \"Cannot modify a disposed collection.\", CMRO = \"Cannot modify a read-only collection.\";\nclass CollectionBase extends DisposableBase_1.DisposableBase {\n constructor(source, _equalityComparer = Compare_1.areEqual) {\n super();\n this._equalityComparer = _equalityComparer;\n var _ = this;\n _._disposableObjectName = NAME;\n _._importEntries(source);\n _._updateRecursion = 0;\n _._modifiedCount = 0;\n _._version = 0;\n }\n get count() {\n return this.getCount();\n }\n getIsReadOnly() {\n return false;\n }\n get isReadOnly() {\n return this.getIsReadOnly();\n }\n assertModifiable() {\n this.throwIfDisposed(CMDC);\n if (this.getIsReadOnly())\n throw new InvalidOperationException_1.InvalidOperationException(CMRO);\n }\n assertVersion(version) {\n if (version != this._version)\n throw new InvalidOperationException_1.InvalidOperationException(\"Collection was modified.\");\n }\n _onModified() { }\n _signalModification(increment) {\n var _ = this;\n if (increment)\n _._modifiedCount++;\n if (_._modifiedCount && !this._updateRecursion) {\n _._modifiedCount = 0;\n _._version++;\n try {\n _._onModified();\n }\n catch (ex) {\n console.error(ex);\n }\n return true;\n }\n return false;\n }\n _incrementModified() { this._modifiedCount++; }\n get isUpdating() { return this._updateRecursion != 0; }\n handleUpdate(closure) {\n if (!closure)\n return false;\n var _ = this;\n _.assertModifiable();\n _._updateRecursion++;\n var updated = false;\n try {\n if (updated = closure())\n _._modifiedCount++;\n }\n finally {\n _._updateRecursion--;\n }\n _._signalModification();\n return updated;\n }\n add(entry) {\n var _ = this;\n _.assertModifiable();\n _._updateRecursion++;\n try {\n if (_._addInternal(entry))\n _._modifiedCount++;\n }\n finally {\n _._updateRecursion--;\n }\n _._signalModification();\n }\n remove(entry, max = Infinity) {\n var _ = this;\n _.assertModifiable();\n _._updateRecursion++;\n var n;\n try {\n if (n = _._removeInternal(entry, max))\n _._modifiedCount++;\n }\n finally {\n _._updateRecursion--;\n }\n _._signalModification();\n return n;\n }\n clear() {\n var _ = this;\n _.assertModifiable();\n _._updateRecursion++;\n var n;\n try {\n if (n = _._clearInternal())\n _._modifiedCount++;\n }\n finally {\n _._updateRecursion--;\n }\n _._signalModification();\n return n;\n }\n _onDispose() {\n super._onDispose();\n this._clearInternal();\n this._version = 0;\n this._updateRecursion = 0;\n this._modifiedCount = 0;\n }\n _importEntries(entries) {\n var added = 0;\n if (entries) {\n if (Array.isArray(entries)) {\n for (let e of entries) {\n if (this._addInternal(e))\n added++;\n }\n }\n else {\n Enumerator_1.forEach(entries, e => {\n if (this._addInternal(e))\n added++;\n });\n }\n }\n return added;\n }\n importEntries(entries) {\n var _ = this;\n _.assertModifiable();\n _._updateRecursion++;\n var n;\n try {\n if (n = _._importEntries(entries))\n _._modifiedCount++;\n }\n finally {\n _._updateRecursion--;\n }\n _._signalModification();\n return n;\n }\n contains(entry) {\n if (!this.getCount())\n return false;\n var found = false, equals = this._equalityComparer;\n this.forEach(e => !(found = equals(entry, e)));\n return found;\n }\n forEach(action, useCopy) {\n if (useCopy) {\n var a = this.toArray();\n Enumerator_1.forEach(a, action);\n a.length = 0;\n }\n else {\n Enumerator_1.forEach(this.getEnumerator(), action);\n }\n }\n copyTo(target, index = 0) {\n if (!target)\n throw new ArgumentNullException_1.ArgumentNullException('target');\n var count = this.getCount(), newLength = count + index;\n if (target.length < newLength)\n target.length = newLength;\n var e = this.getEnumerator();\n while (e.moveNext()) {\n target[index++] = e.current;\n }\n return target;\n }\n toArray() {\n var count = this.getCount();\n return this.copyTo(count > 65536 ? new Array(count) : []);\n }\n}\nexports.CollectionBase = CollectionBase;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = CollectionBase;\n","/*!\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\nimport {forEach} from \"./Enumeration/Enumerator\";\r\nimport {areEqual} from \"../Compare\";\r\nimport {ArgumentNullException} from \"../Exceptions/ArgumentNullException\";\r\nimport {InvalidOperationException} from \"../Exceptions/InvalidOperationException\";\r\nimport {DisposableBase} from \"../Disposable/DisposableBase\";\r\nimport {ICollection} from \"./ICollection\";\r\nimport {IEnumerator} from \"./Enumeration/IEnumerator\";\r\nimport {IEnumerateEach} from \"./Enumeration/IEnumerateEach\";\r\nimport {EqualityComparison, Predicate, Action} from \"../FunctionTypes\";\r\nimport {IEnumerableOrArray} from \"./IEnumerableOrArray\";\r\nimport {IArray} from \"./Array/IArray\";\r\n\r\n//noinspection SpellCheckingInspection\r\nconst NAME = \"CollectionBase\",\r\n CMDC = \"Cannot modify a disposed collection.\",\r\n CMRO = \"Cannot modify a read-only collection.\";\r\n\r\nexport abstract class CollectionBase\r\nextends DisposableBase implements ICollection, IEnumerateEach\r\n{\r\n\r\n\tconstructor(\r\n\t\tsource?:IEnumerableOrArray,\r\n\t\tprotected _equalityComparer:EqualityComparison = areEqual)\r\n\t{\r\n\t\tsuper();\r\n\t\tvar _ = this;\r\n\t\t_._disposableObjectName = NAME;\r\n\t\t_._importEntries(source);\r\n\t\t_._updateRecursion = 0;\r\n\t\t_._modifiedCount = 0;\r\n\t\t_._version = 0;\r\n\t}\r\n\r\n\r\n\tprotected abstract getCount():number;\r\n\r\n\tget count():number\r\n\t{\r\n\t\treturn this.getCount();\r\n\t}\r\n\r\n\tprotected getIsReadOnly():boolean\r\n\t{\r\n\t\treturn false;\r\n\t}\r\n\r\n\tget isReadOnly():boolean\r\n\t{\r\n\t\treturn this.getIsReadOnly();\r\n\t}\r\n\r\n\tprotected assertModifiable():void\r\n\t{\r\n\t\tthis.throwIfDisposed(CMDC);\r\n\t\tif(this.getIsReadOnly())\r\n\t\t\tthrow new InvalidOperationException(CMRO);\r\n\t}\r\n\r\n\tprotected _version:number; // Provides an easy means of tracking changes and invalidating enumerables.\r\n\tassertVersion(version:number):void\r\n\t{\r\n\t\tif(version!=this._version)\r\n\t\t\tthrow new InvalidOperationException(\"Collection was modified.\");\r\n\t}\r\n\r\n\t/*\r\n\t * Note: Avoid changing modified count by any means but ++;\r\n\t * If setting modified count by the result of a closure it may be a negative number or NaN and ruin the pattern.\r\n\t */\r\n\tprivate _modifiedCount:number;\r\n\tprivate _updateRecursion:number;\r\n\r\n\tprotected _onModified():void {}\r\n\r\n\tprotected _signalModification(increment?:boolean):boolean\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tif(increment) _._modifiedCount++;\r\n\t\tif(_._modifiedCount && !this._updateRecursion)\r\n\t\t{\r\n\t\t\t_._modifiedCount = 0;\r\n\t\t\t_._version++;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t_._onModified();\r\n\t\t\t}\r\n\t\t\tcatch(ex)\r\n\t\t\t{\r\n\t\t\t\t// Avoid fatal errors which may have been caused by consumer.\r\n\t\t\t\tconsole.error(ex);\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tprotected _incrementModified():void { this._modifiedCount++; }\r\n\r\n\tget isUpdating():boolean { return this._updateRecursion!=0; }\r\n\r\n\t/**\r\n\t * Takes a closure that if returning true will propagate an update signal.\r\n\t * Multiple update operations can be occurring at once or recursively and the onModified signal will only occur once they're done.\r\n\t * @param closure\r\n\t * @returns {boolean}\r\n\t */\r\n\thandleUpdate(closure?:() => boolean):boolean\r\n\t{\r\n\t\tif(!closure) return false;\r\n\t\tvar _ = this;\r\n\t\t_.assertModifiable();\r\n\t\t_._updateRecursion++;\r\n\t\tvar updated:boolean = false;\r\n\r\n\t\ttry\r\n\t\t{\r\n\t\t\tif(updated = closure())\r\n\t\t\t\t_._modifiedCount++;\r\n\t\t}\r\n\t\tfinally\r\n\t\t{\r\n\t\t\t_._updateRecursion--;\r\n\t\t}\r\n\r\n\t\t_._signalModification();\r\n\r\n\t\treturn updated;\r\n\t}\r\n\r\n\tprotected abstract _addInternal(entry:T):boolean;\r\n\r\n\t/*\r\n\t * Note: for a slight amount more code, we avoid creating functions/closures.\r\n\t * Calling handleUpdate is the correct pattern, but if possible avoid creating another function scope.\r\n\t */\r\n\r\n\tadd(entry:T):void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.assertModifiable();\r\n\t\t_._updateRecursion++;\r\n\r\n\t\ttry\r\n\t\t{ if(_._addInternal(entry)) _._modifiedCount++; }\r\n\t\tfinally\r\n\t\t{ _._updateRecursion--; }\r\n\r\n\t\t_._signalModification();\r\n\t}\r\n\r\n\tprotected abstract _removeInternal(entry:T, max?:number):number;\r\n\r\n\tremove(entry:T, max:number = Infinity):number\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.assertModifiable();\r\n\t\t_._updateRecursion++;\r\n\r\n\t\tvar n:number;\r\n\t\ttry\r\n\t\t{ if(n = _._removeInternal(entry, max)) _._modifiedCount++; }\r\n\t\tfinally\r\n\t\t{ _._updateRecursion--; }\r\n\r\n\t\t_._signalModification();\r\n\t\treturn n;\r\n\t}\r\n\r\n\tprotected abstract _clearInternal():number;\r\n\r\n\tclear():number\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.assertModifiable();\r\n\t\t_._updateRecursion++;\r\n\r\n\t\tvar n:number;\r\n\t\ttry\r\n\t\t{ if(n = _._clearInternal()) _._modifiedCount++; }\r\n\t\tfinally\r\n\t\t{ _._updateRecursion--; }\r\n\r\n\t\t_._signalModification();\r\n\r\n\t\treturn n;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._clearInternal();\r\n\t\tthis._version = 0;\r\n\t\tthis._updateRecursion = 0;\r\n\t\tthis._modifiedCount = 0;\r\n\t}\r\n\r\n\tprotected _importEntries(entries:IEnumerableOrArray):number\r\n\t{\r\n\t\tvar added = 0;\r\n\t\tif(entries)\r\n\t\t{\r\n\t\t\tif(Array.isArray(entries))\r\n\t\t\t{\r\n\t\t\t\t// Optimize for avoiding a new closure.\r\n\t\t\t\tfor(let e of entries)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(this._addInternal(e)) added++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tforEach(entries, e=>\r\n\t\t\t\t{\r\n\t\t\t\t\tif(this._addInternal(e)) added++;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn added;\r\n\t}\r\n\r\n\timportEntries(entries:IEnumerableOrArray):number\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.assertModifiable();\r\n\t\t_._updateRecursion++;\r\n\r\n\t\tvar n:number;\r\n\t\ttry\r\n\t\t{ if(n = _._importEntries(entries)) _._modifiedCount++; }\r\n\t\tfinally\r\n\t\t{ _._updateRecursion--; }\r\n\r\n\t\t_._signalModification();\r\n\t\treturn n;\r\n\t}\r\n\r\n\t// Fundamentally the most important part of the collection.\r\n\tabstract getEnumerator():IEnumerator;\r\n\r\n\tcontains(entry:T):boolean\r\n\t{\r\n\t\tif(!this.getCount()) return false;\r\n\t\tvar found:boolean = false, equals = this._equalityComparer;\r\n\t\tthis.forEach(e => !(found = equals(entry, e)));\r\n\t\treturn found;\r\n\t}\r\n\r\n\tforEach(action:Predicate|Action, useCopy?:boolean):void\r\n\t{\r\n\t\tif(useCopy)\r\n\t\t{\r\n\t\t\tvar a = this.toArray();\r\n\t\t\tforEach(a, action);\r\n\t\t\ta.length = 0;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tforEach(this.getEnumerator(), action);\r\n\t\t}\r\n\t}\r\n\r\n\tcopyTo>(\r\n\t\ttarget:TTarget,\r\n\t\tindex:number = 0):TTarget\r\n\t{\r\n\t\tif(!target) throw new ArgumentNullException('target');\r\n\r\n\t\tvar count = this.getCount(), newLength = count + index;\r\n\t\tif(target.length65536 ? new Array(count) : []);\r\n\t}\r\n\r\n\r\n}\r\n\r\nexport default CollectionBase;"]} \ No newline at end of file +{"version":3,"sources":["System/Collections/CollectionBase.js","System/Collections/CollectionBase.ts"],"names":[],"mappings":"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","file":"System/Collections/CollectionBase.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst Enumerator_1 = require(\"./Enumeration/Enumerator\");\nconst Compare_1 = require(\"../Compare\");\nconst ArgumentNullException_1 = require(\"../Exceptions/ArgumentNullException\");\nconst InvalidOperationException_1 = require(\"../Exceptions/InvalidOperationException\");\nconst DisposableBase_1 = require(\"../Disposable/DisposableBase\");\nconst NAME = \"CollectionBase\", CMDC = \"Cannot modify a disposed collection.\", CMRO = \"Cannot modify a read-only collection.\";\nclass CollectionBase extends DisposableBase_1.DisposableBase {\n constructor(source, _equalityComparer = Compare_1.areEqual) {\n super();\n this._equalityComparer = _equalityComparer;\n var _ = this;\n _._disposableObjectName = NAME;\n _._importEntries(source);\n _._updateRecursion = 0;\n _._modifiedCount = 0;\n _._version = 0;\n }\n get count() {\n return this.getCount();\n }\n getIsReadOnly() {\n return false;\n }\n get isReadOnly() {\n return this.getIsReadOnly();\n }\n assertModifiable() {\n this.throwIfDisposed(CMDC);\n if (this.getIsReadOnly())\n throw new InvalidOperationException_1.InvalidOperationException(CMRO);\n }\n assertVersion(version) {\n if (version != this._version)\n throw new InvalidOperationException_1.InvalidOperationException(\"Collection was modified.\");\n }\n _onModified() { }\n _signalModification(increment) {\n var _ = this;\n if (increment)\n _._modifiedCount++;\n if (_._modifiedCount && !this._updateRecursion) {\n _._modifiedCount = 0;\n _._version++;\n try {\n _._onModified();\n }\n catch (ex) {\n console.error(ex);\n }\n return true;\n }\n return false;\n }\n _incrementModified() { this._modifiedCount++; }\n get isUpdating() { return this._updateRecursion != 0; }\n handleUpdate(closure) {\n if (!closure)\n return false;\n var _ = this;\n _.assertModifiable();\n _._updateRecursion++;\n var updated = false;\n try {\n if (updated = closure())\n _._modifiedCount++;\n }\n finally {\n _._updateRecursion--;\n }\n _._signalModification();\n return updated;\n }\n add(entry) {\n var _ = this;\n _.assertModifiable();\n _._updateRecursion++;\n try {\n if (_._addInternal(entry))\n _._modifiedCount++;\n }\n finally {\n _._updateRecursion--;\n }\n _._signalModification();\n }\n remove(entry, max = Infinity) {\n var _ = this;\n _.assertModifiable();\n _._updateRecursion++;\n var n;\n try {\n if (n = _._removeInternal(entry, max))\n _._modifiedCount++;\n }\n finally {\n _._updateRecursion--;\n }\n _._signalModification();\n return n;\n }\n clear() {\n var _ = this;\n _.assertModifiable();\n _._updateRecursion++;\n var n;\n try {\n if (n = _._clearInternal())\n _._modifiedCount++;\n }\n finally {\n _._updateRecursion--;\n }\n _._signalModification();\n return n;\n }\n _onDispose() {\n super._onDispose();\n this._clearInternal();\n this._version = 0;\n this._updateRecursion = 0;\n this._modifiedCount = 0;\n }\n _importEntries(entries) {\n var added = 0;\n if (entries) {\n if (Array.isArray(entries)) {\n for (let e of entries) {\n if (this._addInternal(e))\n added++;\n }\n }\n else {\n Enumerator_1.forEach(entries, e => {\n if (this._addInternal(e))\n added++;\n });\n }\n }\n return added;\n }\n importEntries(entries) {\n var _ = this;\n _.assertModifiable();\n _._updateRecursion++;\n var n;\n try {\n if (n = _._importEntries(entries))\n _._modifiedCount++;\n }\n finally {\n _._updateRecursion--;\n }\n _._signalModification();\n return n;\n }\n contains(entry) {\n if (!this.getCount())\n return false;\n var found = false, equals = this._equalityComparer;\n this.forEach(e => !(found = equals(entry, e)));\n return found;\n }\n forEach(action, useCopy) {\n if (useCopy) {\n var a = this.toArray();\n try {\n return Enumerator_1.forEach(a, action);\n }\n finally {\n a.length = 0;\n }\n }\n else {\n return Enumerator_1.forEach(this.getEnumerator(), action);\n }\n }\n copyTo(target, index = 0) {\n if (!target)\n throw new ArgumentNullException_1.ArgumentNullException('target');\n var count = this.getCount(), newLength = count + index;\n if (target.length < newLength)\n target.length = newLength;\n var e = this.getEnumerator();\n while (e.moveNext()) {\n target[index++] = e.current;\n }\n return target;\n }\n toArray() {\n var count = this.getCount();\n return this.copyTo(count > 65536 ? new Array(count) : []);\n }\n}\nexports.CollectionBase = CollectionBase;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = CollectionBase;\n","/*!\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\nimport {forEach} from \"./Enumeration/Enumerator\";\r\nimport {areEqual} from \"../Compare\";\r\nimport {ArgumentNullException} from \"../Exceptions/ArgumentNullException\";\r\nimport {InvalidOperationException} from \"../Exceptions/InvalidOperationException\";\r\nimport {DisposableBase} from \"../Disposable/DisposableBase\";\r\nimport {ICollection} from \"./ICollection\";\r\nimport {IEnumerator} from \"./Enumeration/IEnumerator\";\r\nimport {IEnumerateEach} from \"./Enumeration/IEnumerateEach\";\r\nimport {EqualityComparison, Predicate, Action} from \"../FunctionTypes\";\r\nimport {IEnumerableOrArray} from \"./IEnumerableOrArray\";\r\nimport {IArray} from \"./Array/IArray\";\r\n\r\n//noinspection SpellCheckingInspection\r\nconst NAME = \"CollectionBase\",\r\n CMDC = \"Cannot modify a disposed collection.\",\r\n CMRO = \"Cannot modify a read-only collection.\";\r\n\r\nexport abstract class CollectionBase\r\nextends DisposableBase implements ICollection, IEnumerateEach\r\n{\r\n\r\n\tconstructor(\r\n\t\tsource?:IEnumerableOrArray,\r\n\t\tprotected _equalityComparer:EqualityComparison = areEqual)\r\n\t{\r\n\t\tsuper();\r\n\t\tvar _ = this;\r\n\t\t_._disposableObjectName = NAME;\r\n\t\t_._importEntries(source);\r\n\t\t_._updateRecursion = 0;\r\n\t\t_._modifiedCount = 0;\r\n\t\t_._version = 0;\r\n\t}\r\n\r\n\r\n\tprotected abstract getCount():number;\r\n\r\n\tget count():number\r\n\t{\r\n\t\treturn this.getCount();\r\n\t}\r\n\r\n\tprotected getIsReadOnly():boolean\r\n\t{\r\n\t\treturn false;\r\n\t}\r\n\r\n\tget isReadOnly():boolean\r\n\t{\r\n\t\treturn this.getIsReadOnly();\r\n\t}\r\n\r\n\tprotected assertModifiable():void\r\n\t{\r\n\t\tthis.throwIfDisposed(CMDC);\r\n\t\tif(this.getIsReadOnly())\r\n\t\t\tthrow new InvalidOperationException(CMRO);\r\n\t}\r\n\r\n\tprotected _version:number; // Provides an easy means of tracking changes and invalidating enumerables.\r\n\tassertVersion(version:number):void\r\n\t{\r\n\t\tif(version!=this._version)\r\n\t\t\tthrow new InvalidOperationException(\"Collection was modified.\");\r\n\t}\r\n\r\n\t/*\r\n\t * Note: Avoid changing modified count by any means but ++;\r\n\t * If setting modified count by the result of a closure it may be a negative number or NaN and ruin the pattern.\r\n\t */\r\n\tprivate _modifiedCount:number;\r\n\tprivate _updateRecursion:number;\r\n\r\n\tprotected _onModified():void {}\r\n\r\n\tprotected _signalModification(increment?:boolean):boolean\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tif(increment) _._modifiedCount++;\r\n\t\tif(_._modifiedCount && !this._updateRecursion)\r\n\t\t{\r\n\t\t\t_._modifiedCount = 0;\r\n\t\t\t_._version++;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t_._onModified();\r\n\t\t\t}\r\n\t\t\tcatch(ex)\r\n\t\t\t{\r\n\t\t\t\t// Avoid fatal errors which may have been caused by consumer.\r\n\t\t\t\tconsole.error(ex);\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tprotected _incrementModified():void { this._modifiedCount++; }\r\n\r\n\tget isUpdating():boolean { return this._updateRecursion!=0; }\r\n\r\n\t/**\r\n\t * Takes a closure that if returning true will propagate an update signal.\r\n\t * Multiple update operations can be occurring at once or recursively and the onModified signal will only occur once they're done.\r\n\t * @param closure\r\n\t * @returns {boolean}\r\n\t */\r\n\thandleUpdate(closure?:() => boolean):boolean\r\n\t{\r\n\t\tif(!closure) return false;\r\n\t\tvar _ = this;\r\n\t\t_.assertModifiable();\r\n\t\t_._updateRecursion++;\r\n\t\tvar updated:boolean = false;\r\n\r\n\t\ttry\r\n\t\t{\r\n\t\t\tif(updated = closure())\r\n\t\t\t\t_._modifiedCount++;\r\n\t\t}\r\n\t\tfinally\r\n\t\t{\r\n\t\t\t_._updateRecursion--;\r\n\t\t}\r\n\r\n\t\t_._signalModification();\r\n\r\n\t\treturn updated;\r\n\t}\r\n\r\n\tprotected abstract _addInternal(entry:T):boolean;\r\n\r\n\t/*\r\n\t * Note: for a slight amount more code, we avoid creating functions/closures.\r\n\t * Calling handleUpdate is the correct pattern, but if possible avoid creating another function scope.\r\n\t */\r\n\r\n\tadd(entry:T):void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.assertModifiable();\r\n\t\t_._updateRecursion++;\r\n\r\n\t\ttry\r\n\t\t{ if(_._addInternal(entry)) _._modifiedCount++; }\r\n\t\tfinally\r\n\t\t{ _._updateRecursion--; }\r\n\r\n\t\t_._signalModification();\r\n\t}\r\n\r\n\tprotected abstract _removeInternal(entry:T, max?:number):number;\r\n\r\n\tremove(entry:T, max:number = Infinity):number\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.assertModifiable();\r\n\t\t_._updateRecursion++;\r\n\r\n\t\tvar n:number;\r\n\t\ttry\r\n\t\t{ if(n = _._removeInternal(entry, max)) _._modifiedCount++; }\r\n\t\tfinally\r\n\t\t{ _._updateRecursion--; }\r\n\r\n\t\t_._signalModification();\r\n\t\treturn n;\r\n\t}\r\n\r\n\tprotected abstract _clearInternal():number;\r\n\r\n\tclear():number\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.assertModifiable();\r\n\t\t_._updateRecursion++;\r\n\r\n\t\tvar n:number;\r\n\t\ttry\r\n\t\t{ if(n = _._clearInternal()) _._modifiedCount++; }\r\n\t\tfinally\r\n\t\t{ _._updateRecursion--; }\r\n\r\n\t\t_._signalModification();\r\n\r\n\t\treturn n;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._clearInternal();\r\n\t\tthis._version = 0;\r\n\t\tthis._updateRecursion = 0;\r\n\t\tthis._modifiedCount = 0;\r\n\t}\r\n\r\n\tprotected _importEntries(entries:IEnumerableOrArray):number\r\n\t{\r\n\t\tvar added = 0;\r\n\t\tif(entries)\r\n\t\t{\r\n\t\t\tif(Array.isArray(entries))\r\n\t\t\t{\r\n\t\t\t\t// Optimize for avoiding a new closure.\r\n\t\t\t\tfor(let e of entries)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(this._addInternal(e)) added++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tforEach(entries, e=>\r\n\t\t\t\t{\r\n\t\t\t\t\tif(this._addInternal(e)) added++;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn added;\r\n\t}\r\n\r\n\timportEntries(entries:IEnumerableOrArray):number\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.assertModifiable();\r\n\t\t_._updateRecursion++;\r\n\r\n\t\tvar n:number;\r\n\t\ttry\r\n\t\t{ if(n = _._importEntries(entries)) _._modifiedCount++; }\r\n\t\tfinally\r\n\t\t{ _._updateRecursion--; }\r\n\r\n\t\t_._signalModification();\r\n\t\treturn n;\r\n\t}\r\n\r\n\t// Fundamentally the most important part of the collection.\r\n\tabstract getEnumerator():IEnumerator;\r\n\r\n\tcontains(entry:T):boolean\r\n\t{\r\n\t\tif(!this.getCount()) return false;\r\n\t\tvar found:boolean = false, equals = this._equalityComparer;\r\n\t\tthis.forEach(e => !(found = equals(entry, e)));\r\n\t\treturn found;\r\n\t}\r\n\r\n\tforEach(action:Predicate|Action, useCopy?:boolean):number\r\n\t{\r\n\t\tif(useCopy)\r\n\t\t{\r\n\t\t\tvar a = this.toArray();\r\n\t\t\ttry {\r\n\t\t\t\treturn forEach(a, action);\r\n\t\t\t}\r\n\t\t\tfinally{\r\n\t\t\t\ta.length = 0;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\treturn forEach(this.getEnumerator(), action);\r\n\t\t}\r\n\t}\r\n\r\n\tcopyTo>(\r\n\t\ttarget:TTarget,\r\n\t\tindex:number = 0):TTarget\r\n\t{\r\n\t\tif(!target) throw new ArgumentNullException('target');\r\n\r\n\t\tvar count = this.getCount(), newLength = count + index;\r\n\t\tif(target.length65536 ? new Array(count) : []);\r\n\t}\r\n\r\n\r\n}\r\n\r\nexport default CollectionBase;"]} \ No newline at end of file diff --git a/dist/commonjs/System/Collections/Enumeration/Enumerator.d.ts b/dist/commonjs/System/Collections/Enumeration/Enumerator.d.ts index b0c4a155..85f77c5e 100644 --- a/dist/commonjs/System/Collections/Enumeration/Enumerator.d.ts +++ b/dist/commonjs/System/Collections/Enumeration/Enumerator.d.ts @@ -6,12 +6,14 @@ import { Selector } from "../../FunctionTypes"; import { IEnumerator } from "./IEnumerator"; import { IEnumerable } from "./IEnumerable"; import { IEnumerableOrArray } from "../IEnumerableOrArray"; +import { InfiniteValueFactory } from "./InfiniteEnumerator"; +import { IIterator } from "./IIterator"; export declare function throwIfEndless(isEndless: boolean): void; -export declare const empty: IEnumerator; -export declare function from(source: IEnumerableOrArray): IEnumerator; +export declare function from(source: IEnumerableOrArray | InfiniteValueFactory | IIterator): IEnumerator; export declare function isEnumerable(instance: any): instance is IEnumerable; export declare function isEnumerableOrArrayLike(instance: any): instance is IEnumerableOrArray; export declare function isEnumerator(instance: any): instance is IEnumerator; -export declare function forEach(e: IEnumerableOrArray | IEnumerator, action: (element: T, index?: number) => any): boolean | void; -export declare function toArray(source: IEnumerableOrArray | IEnumerator): T[]; -export declare function map(source: IEnumerableOrArray | IEnumerator, selector: Selector): TResult[]; +export declare function isIterator(instance: any): instance is IIterator; +export declare function forEach(e: IEnumerableOrArray | IEnumerator | IIterator, action: (element: T, index?: number) => any, max?: number): number; +export declare function toArray(source: IEnumerableOrArray | IEnumerator, max?: number): T[]; +export declare function map(source: IEnumerableOrArray | IEnumerator, selector: Selector, max?: number): TResult[]; diff --git a/dist/commonjs/System/Collections/Enumeration/Enumerator.js b/dist/commonjs/System/Collections/Enumeration/Enumerator.js index d94486dd..47e6b91e 100644 --- a/dist/commonjs/System/Collections/Enumeration/Enumerator.js +++ b/dist/commonjs/System/Collections/Enumeration/Enumerator.js @@ -4,15 +4,14 @@ */ "use strict"; -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; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var dispose_1 = require("../../Disposable/dispose"); var Types_1 = require("../../Types"); var ArrayEnumerator_1 = require("./ArrayEnumerator"); var IndexEnumerator_1 = require("./IndexEnumerator"); var UnsupportedEnumerableException_1 = require("./UnsupportedEnumerableException"); +var InfiniteEnumerator_1 = require("./InfiniteEnumerator"); +var EmptyEnumerator_1 = require("./EmptyEnumerator"); +var IteratorEnumerator_1 = require("./IteratorEnumerator"); var VOID0 = void 0, STRING_EMPTY = "", ENDLESS_EXCEPTION_MESSAGE = 'Cannot call forEach on an endless enumerable. ' + 'Would result in an infinite loop that could hang the current process.'; @@ -21,8 +20,10 @@ function throwIfEndless(isEndless) { } exports.throwIfEndless = throwIfEndless; function initArrayFrom(source) { + var max = arguments.length <= 1 || arguments[1] === undefined ? Infinity : arguments[1]; + if (Array.isArray(source) || Types_1.Type.isString(source)) { - var len = source.length; + var len = Math.min(source.length, max); if (isFinite(len)) { if (len > 65535) return new Array(len); var result = []; @@ -32,56 +33,8 @@ function initArrayFrom(source) { } return []; } - -var EmptyEnumerator = function () { - function EmptyEnumerator() { - _classCallCheck(this, EmptyEnumerator); - } - - _createClass(EmptyEnumerator, [{ - key: "moveNext", - value: function moveNext() { - return false; - } - }, { - key: "nextValue", - value: function nextValue() { - return VOID0; - } - }, { - key: "next", - value: function next() { - return { - value: VOID0, - done: true - }; - } - }, { - key: "reset", - value: function reset() {} - }, { - key: "dispose", - value: function dispose() {} - }, { - key: "current", - get: function get() { - return VOID0; - } - }, { - key: "isEndless", - get: function get() { - return false; - } - }]); - - return EmptyEnumerator; -}(); - -var Empty = new EmptyEnumerator(); -Object.freeze(Empty); -exports.empty = Empty; function from(source) { - if (!source) return Empty; + if (!source) return EmptyEnumerator_1.EmptyEnumerator; if (Array.isArray(source)) return new ArrayEnumerator_1.ArrayEnumerator(source); if (Types_1.Type.isArrayLike(source)) { return new IndexEnumerator_1.IndexEnumerator(function () { @@ -95,8 +48,10 @@ function from(source) { } if (!Types_1.Type.isPrimitive(source)) { if (isEnumerable(source)) return source.getEnumerator(); + if (Types_1.Type.isFunction(source)) return new InfiniteEnumerator_1.InfiniteEnumerator(source); + if (isIterator(source)) return new IteratorEnumerator_1.IteratorEnumerator(source); } - throw new Error("Unknown enumerable."); + throw new UnsupportedEnumerableException_1.UnsupportedEnumerableException(); } exports.from = from; function isEnumerable(instance) { @@ -111,49 +66,71 @@ function isEnumerator(instance) { return Types_1.Type.hasMemberOfType(instance, "moveNext", Types_1.Type.FUNCTION); } exports.isEnumerator = isEnumerator; +function isIterator(instance) { + return Types_1.Type.hasMemberOfType(instance, "next", Types_1.Type.FUNCTION); +} +exports.isIterator = isIterator; function forEach(e, action) { - if (e !== VOID0 && e !== null) { + var max = arguments.length <= 2 || arguments[2] === undefined ? Infinity : arguments[2]; + + if (e === STRING_EMPTY) return 0; + if (e && max > 0) { if (Types_1.Type.isArrayLike(e)) { - throwIfEndless(!isFinite(e.length)); - for (var i = 0; i < e.length; i++) { + throwIfEndless(!isFinite(max) && !isFinite(e.length)); + var i = 0; + for (; i < Math.min(e.length, max); i++) { if (action(e[i], i) === false) break; } - return true; + return i; } if (isEnumerator(e)) { - throwIfEndless(e.isEndless); - var index = 0; - while (e.moveNext()) { - if (action(e.current, index++) === false) break; + throwIfEndless(!isFinite(max) && e.isEndless); + var _i = 0; + while (max > _i && e.moveNext()) { + if (action(e.current, _i++) === false) break; } - return true; + return _i; } if (isEnumerable(e)) { - throwIfEndless(e.isEndless); - dispose_1.using(e.getEnumerator(), function (f) { - return forEach(f, action); + throwIfEndless(!isFinite(max) && e.isEndless); + return dispose_1.using(e.getEnumerator(), function (f) { + return forEach(f, action, max); }); - return true; } - return false; + if (isIterator(e)) { + throwIfEndless(!isFinite(max)); + var _i2 = 0, + r = undefined; + while (max > _i2 && !(r = e.next()).done) { + if (action(r.value, _i2++) === false) break; + } + return _i2; + } } + return -1; } exports.forEach = forEach; function toArray(source) { + var max = arguments.length <= 1 || arguments[1] === undefined ? Infinity : arguments[1]; + if (source === STRING_EMPTY) return []; - if (Array.isArray(source)) return source.slice(); - var result = initArrayFrom(source); - if (!forEach(source, function (e, i) { + if (!isFinite(max) && Array.isArray(source)) return source.slice(); + var result = initArrayFrom(source, max); + if (-1 === forEach(source, function (e, i) { result[i] = e; - })) throw new UnsupportedEnumerableException_1.UnsupportedEnumerableException(); + }, max)) throw new UnsupportedEnumerableException_1.UnsupportedEnumerableException(); return result; } exports.toArray = toArray; function map(source, selector) { - var result = initArrayFrom(source); - if (!forEach(source, function (e, i) { + var max = arguments.length <= 2 || arguments[2] === undefined ? Infinity : arguments[2]; + + if (source === STRING_EMPTY) return []; + if (!isFinite(max) && Array.isArray(source)) return source.map(selector); + var result = initArrayFrom(source, max); + if (-1 === forEach(source, function (e, i) { result[i] = selector(e); - })) throw new UnsupportedEnumerableException_1.UnsupportedEnumerableException(); + }, max)) throw new UnsupportedEnumerableException_1.UnsupportedEnumerableException(); return result; } exports.map = map; diff --git a/dist/commonjs/System/Collections/Enumeration/Enumerator.js.map b/dist/commonjs/System/Collections/Enumeration/Enumerator.js.map index 82cb1b46..60d3895a 100644 --- a/dist/commonjs/System/Collections/Enumeration/Enumerator.js.map +++ b/dist/commonjs/System/Collections/Enumeration/Enumerator.js.map @@ -1 +1 @@ -{"version":3,"sources":["System/Collections/Enumeration/Enumerator.js","System/Collections/Enumeration/Enumerator.ts"],"names":[],"mappings":"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","file":"System/Collections/Enumeration/Enumerator.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst dispose_1 = require(\"../../Disposable/dispose\");\nconst Types_1 = require(\"../../Types\");\nconst ArrayEnumerator_1 = require(\"./ArrayEnumerator\");\nconst IndexEnumerator_1 = require(\"./IndexEnumerator\");\nconst UnsupportedEnumerableException_1 = require(\"./UnsupportedEnumerableException\");\nconst VOID0 = void (0), STRING_EMPTY = \"\", ENDLESS_EXCEPTION_MESSAGE = 'Cannot call forEach on an endless enumerable. ' +\n 'Would result in an infinite loop that could hang the current process.';\nfunction throwIfEndless(isEndless) {\n if (isEndless)\n throw new UnsupportedEnumerableException_1.UnsupportedEnumerableException(ENDLESS_EXCEPTION_MESSAGE);\n}\nexports.throwIfEndless = throwIfEndless;\nfunction initArrayFrom(source) {\n if (Array.isArray(source) || Types_1.Type.isString(source)) {\n var len = source.length;\n if (isFinite(len)) {\n if (len > 65535)\n return new Array(len);\n var result = [];\n result.length = len;\n return result;\n }\n }\n return [];\n}\nclass EmptyEnumerator {\n get current() {\n return VOID0;\n }\n moveNext() {\n return false;\n }\n nextValue() {\n return VOID0;\n }\n next() {\n return {\n value: VOID0,\n done: true\n };\n }\n reset() { }\n dispose() { }\n get isEndless() {\n return false;\n }\n}\nconst Empty = new EmptyEnumerator();\nObject.freeze(Empty);\nexports.empty = Empty;\nfunction from(source) {\n if (!source)\n return Empty;\n if (Array.isArray(source))\n return new ArrayEnumerator_1.ArrayEnumerator(source);\n if (Types_1.Type.isArrayLike(source)) {\n return new IndexEnumerator_1.IndexEnumerator(() => {\n return {\n source: source,\n length: source.length,\n pointer: 0,\n step: 1\n };\n });\n }\n if (!Types_1.Type.isPrimitive(source)) {\n if (isEnumerable(source))\n return source.getEnumerator();\n }\n throw new Error(\"Unknown enumerable.\");\n}\nexports.from = from;\nfunction isEnumerable(instance) {\n return Types_1.Type.hasMemberOfType(instance, \"getEnumerator\", Types_1.Type.FUNCTION);\n}\nexports.isEnumerable = isEnumerable;\nfunction isEnumerableOrArrayLike(instance) {\n return Types_1.Type.isArrayLike(instance) || isEnumerable(instance);\n}\nexports.isEnumerableOrArrayLike = isEnumerableOrArrayLike;\nfunction isEnumerator(instance) {\n return Types_1.Type.hasMemberOfType(instance, \"moveNext\", Types_1.Type.FUNCTION);\n}\nexports.isEnumerator = isEnumerator;\nfunction forEach(e, action) {\n if (e !== VOID0 && e !== null) {\n if (Types_1.Type.isArrayLike(e)) {\n throwIfEndless(!isFinite(e.length));\n for (let i = 0; i < e.length; i++) {\n if (action(e[i], i) === false)\n break;\n }\n return true;\n }\n if (isEnumerator(e)) {\n throwIfEndless(e.isEndless);\n var index = 0;\n while (e.moveNext()) {\n if (action(e.current, index++) === false)\n break;\n }\n return true;\n }\n if (isEnumerable(e)) {\n throwIfEndless(e.isEndless);\n dispose_1.using(e.getEnumerator(), f => forEach(f, action));\n return true;\n }\n return false;\n }\n}\nexports.forEach = forEach;\nfunction toArray(source) {\n if (source === STRING_EMPTY)\n return [];\n if (Array.isArray(source))\n return source.slice();\n var result = initArrayFrom(source);\n if (!forEach(source, (e, i) => { result[i] = e; }))\n throw new UnsupportedEnumerableException_1.UnsupportedEnumerableException();\n return result;\n}\nexports.toArray = toArray;\nfunction map(source, selector) {\n var result = initArrayFrom(source);\n if (!forEach(source, (e, i) => { result[i] = selector(e); }))\n throw new UnsupportedEnumerableException_1.UnsupportedEnumerableException();\n return result;\n}\nexports.map = map;\n","/*!\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\nimport {using} from \"../../Disposable/dispose\";\r\nimport {Type} from \"../../Types\";\r\nimport {ArrayEnumerator} from \"./ArrayEnumerator\";\r\nimport {IndexEnumerator} from \"./IndexEnumerator\";\r\nimport {UnsupportedEnumerableException} from \"./UnsupportedEnumerableException\";\r\nimport {Selector} from \"../../FunctionTypes\";\r\nimport {IEnumerator} from \"./IEnumerator\";\r\nimport {IEnumerable} from \"./IEnumerable\";\r\nimport {IIteratorResult} from \"./IIterator\";\r\nimport {IEnumerableOrArray} from \"../IEnumerableOrArray\";\r\n\r\nconst\r\n\tVOID0:any = void(0),\r\n\tSTRING_EMPTY:string = \"\",\r\n\tENDLESS_EXCEPTION_MESSAGE =\r\n\t\t'Cannot call forEach on an endless enumerable. ' +\r\n\t\t'Would result in an infinite loop that could hang the current process.';\r\n\r\nexport function throwIfEndless(isEndless:boolean):void\r\n{\r\n\tif(isEndless) throw new UnsupportedEnumerableException(ENDLESS_EXCEPTION_MESSAGE);\r\n}\r\n\r\nfunction initArrayFrom(source:IEnumerableOrArray|IEnumerator):any[]\r\n{\r\n\tif(Array.isArray(source) || Type.isString(source))\r\n\t{\r\n\t\tvar len = source.length;\r\n\t\tif(isFinite(len))\r\n\t\t{\r\n\t\t\tif(len>65535) return new Array(len);\r\n\t\t\tvar result:any[] = [];\r\n\t\t\tresult.length = len;\r\n\t\t\treturn result;\r\n\t\t}\r\n\t}\r\n\treturn [];\r\n}\r\n\r\nclass EmptyEnumerator implements IEnumerator\r\n{\r\n\tget current():any\r\n\t{\r\n\t\treturn VOID0;\r\n\t}\r\n\r\n\tmoveNext():boolean\r\n\t{\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnextValue():any\r\n\t{\r\n\t\treturn VOID0;\r\n\t}\r\n\r\n\tnext():IIteratorResult\r\n\t{\r\n\t\treturn {\r\n\t\t\tvalue: VOID0,\r\n\t\t\tdone: true\r\n\t\t}\r\n\t}\r\n\r\n\treset():void { }\r\n\r\n\tdispose():void { }\r\n\r\n\tget isEndless():boolean\r\n\t{\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\nconst Empty = new EmptyEnumerator();\r\nObject.freeze(Empty);\r\n\r\nexport const empty:IEnumerator = Empty;\r\n\r\n// Could be array, or IEnumerable...\r\nexport function from(source:IEnumerableOrArray):IEnumerator\r\n{\r\n\t// To simplify and prevent null reference exceptions:\r\n\tif(!source)\r\n\t\treturn Empty;\r\n\r\n\tif(Array.isArray(source))\r\n\t\treturn new ArrayEnumerator(source);\r\n\r\n\tif(Type.isArrayLike(source))\r\n\t{\r\n\t\treturn new IndexEnumerator(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\treturn {\r\n\t\t\t\t\tsource: source,\r\n\t\t\t\t\tlength: source.length,\r\n\t\t\t\t\tpointer: 0,\r\n\t\t\t\t\tstep: 1\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tif(!Type.isPrimitive(source))\r\n\t{\r\n\t\tif(isEnumerable(source))\r\n\t\t\treturn source.getEnumerator();\r\n\r\n\t}\r\n\r\n\tthrow new Error(\"Unknown enumerable.\");\r\n}\r\n\r\nexport function isEnumerable(instance:any):instance is IEnumerable\r\n{\r\n\treturn Type.hasMemberOfType>(instance, \"getEnumerator\", Type.FUNCTION);\r\n}\r\n\r\nexport function isEnumerableOrArrayLike(instance:any):instance is IEnumerableOrArray\r\n{\r\n\treturn Type.isArrayLike(instance) || isEnumerable(instance);\r\n}\r\n\r\n\r\nexport function isEnumerator(instance:any):instance is IEnumerator\r\n{\r\n\treturn Type.hasMemberOfType>(instance, \"moveNext\", Type.FUNCTION);\r\n}\r\n\r\n/**\r\n * Flexible method for iterating any enumerable, enumerable, array, or array-like object.\r\n * @param e\r\n * @param action\r\n * @returns true if enumerated, false if null or unrecognized enumerable, void if nothing done\r\n */\r\nexport function forEach(\r\n\te:IEnumerableOrArray|IEnumerator,\r\n\taction:(element:T, index?:number) => any):boolean|void\r\n{\r\n\tif(e!==VOID0 && e!==null) // Allow for empty string.\r\n\t{\r\n\t\tif(Type.isArrayLike(e))\r\n\t\t{\r\n\t\t\t// Assume e.length is constant or at least doesn't deviate to infinite or NaN.\r\n\t\t\tthrowIfEndless(!isFinite(e.length));\r\n\r\n\t\t\tfor(let i = 0; i(e))\r\n\t\t{\r\n\t\t\tthrowIfEndless(e.isEndless);\r\n\r\n\t\t\tvar index = 0;\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\twhile(e.moveNext())\r\n\t\t\t{\r\n\t\t\t\tif(action(e.current, index++)===false)\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif(isEnumerable(e))\r\n\t\t{\r\n\t\t\tthrowIfEndless(e.isEndless);\r\n\r\n\t\t\t// For enumerators that aren't EnumerableBase, ensure dispose is called.\r\n\t\t\tusing(\r\n\t\t\t\t(>e).getEnumerator(),\r\n\t\t\t\tf=>forEach(f, action)\r\n\t\t\t);\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\n/**\r\n * Converts any enumerable to an array.\r\n * @param source\r\n * @returns {any}\r\n */\r\nexport function toArray(\r\n\tsource:IEnumerableOrArray|IEnumerator):T[]\r\n{\r\n\tif(source===STRING_EMPTY) return [];\r\n\r\n\tif(Array.isArray(source))\r\n\t\treturn source.slice();\r\n\r\n\tvar result:T[] = initArrayFrom(source);\r\n\tif(!forEach(source, (e, i) => { result[i] = e; }))\r\n\t\tthrow new UnsupportedEnumerableException();\r\n\r\n\treturn result;\r\n}\r\n\r\n/**\r\n * Converts any enumerable to an array of selected values.\r\n * @param source\r\n * @param selector\r\n * @returns {TResult[]}\r\n */\r\nexport function map(\r\n\tsource:IEnumerableOrArray|IEnumerator,\r\n\tselector:Selector):TResult[]\r\n{\r\n\tvar result:TResult[] = initArrayFrom(source);\r\n\tif(!forEach(source, (e, i) => { result[i] = selector(e); }))\r\n\t\tthrow new UnsupportedEnumerableException();\r\n\r\n\treturn result;\r\n}"]} \ No newline at end of file +{"version":3,"sources":["System/Collections/Enumeration/Enumerator.js","System/Collections/Enumeration/Enumerator.ts"],"names":[],"mappings":"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","file":"System/Collections/Enumeration/Enumerator.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst dispose_1 = require(\"../../Disposable/dispose\");\nconst Types_1 = require(\"../../Types\");\nconst ArrayEnumerator_1 = require(\"./ArrayEnumerator\");\nconst IndexEnumerator_1 = require(\"./IndexEnumerator\");\nconst UnsupportedEnumerableException_1 = require(\"./UnsupportedEnumerableException\");\nconst InfiniteEnumerator_1 = require(\"./InfiniteEnumerator\");\nconst EmptyEnumerator_1 = require(\"./EmptyEnumerator\");\nconst IteratorEnumerator_1 = require(\"./IteratorEnumerator\");\nconst VOID0 = void (0), STRING_EMPTY = \"\", ENDLESS_EXCEPTION_MESSAGE = 'Cannot call forEach on an endless enumerable. ' +\n 'Would result in an infinite loop that could hang the current process.';\nfunction throwIfEndless(isEndless) {\n if (isEndless)\n throw new UnsupportedEnumerableException_1.UnsupportedEnumerableException(ENDLESS_EXCEPTION_MESSAGE);\n}\nexports.throwIfEndless = throwIfEndless;\nfunction initArrayFrom(source, max = Infinity) {\n if (Array.isArray(source) || Types_1.Type.isString(source)) {\n var len = Math.min(source.length, max);\n if (isFinite(len)) {\n if (len > 65535)\n return new Array(len);\n var result = [];\n result.length = len;\n return result;\n }\n }\n return [];\n}\nfunction from(source) {\n if (!source)\n return EmptyEnumerator_1.EmptyEnumerator;\n if (Array.isArray(source))\n return new ArrayEnumerator_1.ArrayEnumerator(source);\n if (Types_1.Type.isArrayLike(source)) {\n return new IndexEnumerator_1.IndexEnumerator(() => {\n return {\n source: source,\n length: source.length,\n pointer: 0,\n step: 1\n };\n });\n }\n if (!Types_1.Type.isPrimitive(source)) {\n if (isEnumerable(source))\n return source.getEnumerator();\n if (Types_1.Type.isFunction(source))\n return new InfiniteEnumerator_1.InfiniteEnumerator(source);\n if (isIterator(source))\n return new IteratorEnumerator_1.IteratorEnumerator(source);\n }\n throw new UnsupportedEnumerableException_1.UnsupportedEnumerableException();\n}\nexports.from = from;\nfunction isEnumerable(instance) {\n return Types_1.Type.hasMemberOfType(instance, \"getEnumerator\", Types_1.Type.FUNCTION);\n}\nexports.isEnumerable = isEnumerable;\nfunction isEnumerableOrArrayLike(instance) {\n return Types_1.Type.isArrayLike(instance) || isEnumerable(instance);\n}\nexports.isEnumerableOrArrayLike = isEnumerableOrArrayLike;\nfunction isEnumerator(instance) {\n return Types_1.Type.hasMemberOfType(instance, \"moveNext\", Types_1.Type.FUNCTION);\n}\nexports.isEnumerator = isEnumerator;\nfunction isIterator(instance) {\n return Types_1.Type.hasMemberOfType(instance, \"next\", Types_1.Type.FUNCTION);\n}\nexports.isIterator = isIterator;\nfunction forEach(e, action, max = Infinity) {\n if (e === STRING_EMPTY)\n return 0;\n if (e && max > 0) {\n if (Types_1.Type.isArrayLike(e)) {\n throwIfEndless(!isFinite(max) && !isFinite(e.length));\n let i = 0;\n for (; i < Math.min(e.length, max); i++) {\n if (action(e[i], i) === false)\n break;\n }\n return i;\n }\n if (isEnumerator(e)) {\n throwIfEndless(!isFinite(max) && e.isEndless);\n let i = 0;\n while (max > i && e.moveNext()) {\n if (action(e.current, i++) === false)\n break;\n }\n return i;\n }\n if (isEnumerable(e)) {\n throwIfEndless(!isFinite(max) && e.isEndless);\n return dispose_1.using(e.getEnumerator(), f => forEach(f, action, max));\n }\n if (isIterator(e)) {\n throwIfEndless(!isFinite(max));\n let i = 0, r;\n while (max > i && !(r = e.next()).done) {\n if (action(r.value, i++) === false)\n break;\n }\n return i;\n }\n }\n return -1;\n}\nexports.forEach = forEach;\nfunction toArray(source, max = Infinity) {\n if (source === STRING_EMPTY)\n return [];\n if (!isFinite(max) && Array.isArray(source))\n return source.slice();\n var result = initArrayFrom(source, max);\n if (-1 === forEach(source, (e, i) => { result[i] = e; }, max))\n throw new UnsupportedEnumerableException_1.UnsupportedEnumerableException();\n return result;\n}\nexports.toArray = toArray;\nfunction map(source, selector, max = Infinity) {\n if (source === STRING_EMPTY)\n return [];\n if (!isFinite(max) && Array.isArray(source))\n return source.map(selector);\n var result = initArrayFrom(source, max);\n if (-1 === forEach(source, (e, i) => { result[i] = selector(e); }, max))\n throw new UnsupportedEnumerableException_1.UnsupportedEnumerableException();\n return result;\n}\nexports.map = map;\n","/*!\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\nimport {using} from \"../../Disposable/dispose\";\r\nimport {Type} from \"../../Types\";\r\nimport {ArrayEnumerator} from \"./ArrayEnumerator\";\r\nimport {IndexEnumerator} from \"./IndexEnumerator\";\r\nimport {UnsupportedEnumerableException} from \"./UnsupportedEnumerableException\";\r\nimport {Selector} from \"../../FunctionTypes\";\r\nimport {IEnumerator} from \"./IEnumerator\";\r\nimport {IEnumerable} from \"./IEnumerable\";\r\nimport {IEnumerableOrArray} from \"../IEnumerableOrArray\";\r\nimport {InfiniteValueFactory, InfiniteEnumerator} from \"./InfiniteEnumerator\";\r\nimport {EmptyEnumerator as Empty} from \"./EmptyEnumerator\";\r\nimport {IIterator, IIteratorResult} from \"./IIterator\";\r\nimport {IteratorEnumerator} from \"./IteratorEnumerator\";\r\n\r\nconst\r\n\tVOID0:any = void(0),\r\n\tSTRING_EMPTY:string = \"\",\r\n\tENDLESS_EXCEPTION_MESSAGE =\r\n\t\t'Cannot call forEach on an endless enumerable. ' +\r\n\t\t'Would result in an infinite loop that could hang the current process.';\r\n\r\nexport function throwIfEndless(isEndless:boolean):void\r\n{\r\n\tif(isEndless) throw new UnsupportedEnumerableException(ENDLESS_EXCEPTION_MESSAGE);\r\n}\r\n\r\nfunction initArrayFrom(\r\n\tsource:IEnumerableOrArray|IEnumerator,\r\n\tmax:number = Infinity):any[]\r\n{\r\n\tif(Array.isArray(source) || Type.isString(source))\r\n\t{\r\n\t\tvar len = Math.min(source.length, max);\r\n\t\tif(isFinite(len))\r\n\t\t{\r\n\t\t\tif(len>65535) return new Array(len);\r\n\t\t\tvar result:any[] = [];\r\n\t\t\tresult.length = len;\r\n\t\t\treturn result;\r\n\t\t}\r\n\t}\r\n\treturn [];\r\n}\r\n\r\n\r\n// Could be array, or IEnumerable...\r\nexport function from(source:IEnumerableOrArray|InfiniteValueFactory|IIterator):IEnumerator\r\n{\r\n\t// To simplify and prevent null reference exceptions:\r\n\tif(!source)\r\n\t\treturn Empty;\r\n\r\n\tif(Array.isArray(source))\r\n\t\treturn new ArrayEnumerator(source);\r\n\r\n\tif(Type.isArrayLike(source))\r\n\t{\r\n\t\treturn new IndexEnumerator(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\treturn {\r\n\t\t\t\t\tsource: source,\r\n\t\t\t\t\tlength: source.length,\r\n\t\t\t\t\tpointer: 0,\r\n\t\t\t\t\tstep: 1\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tif(!Type.isPrimitive(source))\r\n\t{\r\n\t\tif(isEnumerable(source))\r\n\t\t\treturn source.getEnumerator();\r\n\r\n\t\tif(Type.isFunction(source))\r\n\t\t\treturn new InfiniteEnumerator(source);\r\n\r\n\t\tif(isIterator(source))\r\n\t\t\treturn new IteratorEnumerator(source);\r\n\r\n\t}\r\n\r\n\tthrow new UnsupportedEnumerableException();\r\n}\r\n\r\nexport function isEnumerable(instance:any):instance is IEnumerable\r\n{\r\n\treturn Type.hasMemberOfType>(instance, \"getEnumerator\", Type.FUNCTION);\r\n}\r\n\r\nexport function isEnumerableOrArrayLike(instance:any):instance is IEnumerableOrArray\r\n{\r\n\treturn Type.isArrayLike(instance) || isEnumerable(instance);\r\n}\r\n\r\nexport function isEnumerator(instance:any):instance is IEnumerator\r\n{\r\n\treturn Type.hasMemberOfType>(instance, \"moveNext\", Type.FUNCTION);\r\n}\r\n\r\nexport function isIterator(instance:any):instance is IIterator\r\n{\r\n\treturn Type.hasMemberOfType>(instance, \"next\", Type.FUNCTION);\r\n}\r\n\r\n/**\r\n * Flexible method for iterating any enumerable, enumerable, array, or array-like object.\r\n * @param e The enumeration to loop on.\r\n * @param action The action to take on each.\r\n * @param max Stops after max is reached. Allows for forEach to be called on infinite enumerations.\r\n * @returns the total times iterated. If the enumerable is unrecognized then -1.\r\n */\r\nexport function forEach(\r\n\te:IEnumerableOrArray|IEnumerator|IIterator,\r\n\taction:(element:T, index?:number) => any,\r\n\tmax:number = Infinity):number\r\n{\r\n\tif(e===STRING_EMPTY) return 0;\r\n\r\n\tif(e && max>0)\r\n\t{\r\n\t\tif(Type.isArrayLike(e))\r\n\t\t{\r\n\t\t\t// Assume e.length is constant or at least doesn't deviate to infinite or NaN.\r\n\t\t\tthrowIfEndless(!isFinite(max) && !isFinite(e.length));\r\n\t\t\tlet i = 0;\r\n\t\t\tfor(; i(e))\r\n\t\t{\r\n\t\t\tthrowIfEndless(!isFinite(max) && e.isEndless);\r\n\r\n\t\t\tlet i = 0;\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\twhile(max>i && e.moveNext())\r\n\t\t\t{\r\n\t\t\t\tif(action(e.current, i++)===false)\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\treturn i;\r\n\t\t}\r\n\r\n\t\tif(isEnumerable(e))\r\n\t\t{\r\n\t\t\tthrowIfEndless(!isFinite(max) && e.isEndless);\r\n\r\n\t\t\t// For enumerators that aren't EnumerableBase, ensure dispose is called.\r\n\t\t\treturn using(\r\n\t\t\t\t(>e).getEnumerator(),\r\n\t\t\t\tf=>forEach(f, action, max)\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif(isIterator(e)) {\r\n\t\t\t// For our purpose iterators are endless and a max must be specified before iterating.\r\n\t\t\tthrowIfEndless(!isFinite(max));\r\n\r\n\t\t\tlet i = 0, r:IIteratorResult;\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\twhile(max>i && !(r = e.next()).done)\r\n\t\t\t{\r\n\t\t\t\tif(action(r.value, i++)===false)\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\treturn i;\r\n\t\t}\r\n\t}\r\n\r\n\treturn -1;\r\n\r\n}\r\n\r\n/**\r\n * Converts any enumerable to an array.\r\n * @param source\r\n * @param max Stops after max is reached. Allows for forEach to be called on infinite enumerations.\r\n * @returns {any}\r\n */\r\nexport function toArray(\r\n\tsource:IEnumerableOrArray|IEnumerator,\r\n\tmax:number = Infinity):T[]\r\n{\r\n\tif(source===STRING_EMPTY) return [];\r\n\r\n\tif(!isFinite(max) && Array.isArray(source))\r\n\t\treturn source.slice();\r\n\r\n\tvar result:T[] = initArrayFrom(source, max);\r\n\tif(-1===forEach(source, (e, i) => { result[i] = e; }, max))\r\n\t\tthrow new UnsupportedEnumerableException();\r\n\r\n\treturn result;\r\n}\r\n\r\n/**\r\n * Converts any enumerable to an array of selected values.\r\n * @param source\r\n * @param selector\r\n * @param max Stops after max is reached. Allows for forEach to be called on infinite enumerations.\r\n * @returns {TResult[]}\r\n */\r\nexport function map(\r\n\tsource:IEnumerableOrArray|IEnumerator,\r\n\tselector:Selector,\r\n\tmax:number = Infinity):TResult[]\r\n{\r\n\tif(source===STRING_EMPTY) return [];\r\n\r\n\tif(!isFinite(max) && Array.isArray(source))\r\n\t\treturn source.map(selector);\r\n\r\n\tvar result:TResult[] = initArrayFrom(source, max);\r\n\tif(-1===forEach(source, (e, i) => { result[i] = selector(e); }, max))\r\n\t\tthrow new UnsupportedEnumerableException();\r\n\r\n\treturn result;\r\n}"]} \ No newline at end of file diff --git a/dist/commonjs/System/Collections/Enumeration/EnumeratorBase.d.ts b/dist/commonjs/System/Collections/Enumeration/EnumeratorBase.d.ts index e86eaee3..c3db68e1 100644 --- a/dist/commonjs/System/Collections/Enumeration/EnumeratorBase.d.ts +++ b/dist/commonjs/System/Collections/Enumeration/EnumeratorBase.d.ts @@ -13,6 +13,7 @@ export declare class EnumeratorBase extends DisposableBase implements IEnumer private _state; private _disposer; current: T; + index: number; constructor(initializer: () => void, tryGetNext: (yielder: IYield) => boolean, isEndless?: boolean); constructor(initializer: () => void, tryGetNext: (yielder: IYield) => boolean, disposer?: () => void, isEndless?: boolean); protected _isEndless: boolean; @@ -21,6 +22,8 @@ export declare class EnumeratorBase extends DisposableBase implements IEnumer moveNext(): boolean; nextValue(): T; next(): IIteratorResult; + 'return'(): IIteratorResult; + 'return'(value: TReturn): IIteratorResult; protected _onDispose(): void; } export default EnumeratorBase; diff --git a/dist/commonjs/System/Collections/Enumeration/EnumeratorBase.js b/dist/commonjs/System/Collections/Enumeration/EnumeratorBase.js index c746d3cf..1ef850fe 100644 --- a/dist/commonjs/System/Collections/Enumeration/EnumeratorBase.js +++ b/dist/commonjs/System/Collections/Enumeration/EnumeratorBase.js @@ -15,6 +15,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var Types_1 = require("../../Types"); var DisposableBase_1 = require("../../Disposable/DisposableBase"); var ObjectPool_1 = require("../../Disposable/ObjectPool"); +var IteratorResult_1 = require("./IteratorResult"); var VOID0 = void 0; var yielderPool; function yielder(recycle) { @@ -37,12 +38,14 @@ var Yielder = function () { key: "yieldReturn", value: function yieldReturn(value) { this._current = value; + if (this._index === VOID0) this._index = 0;else this._index++; return true; } }, { key: "yieldBreak", value: function yieldBreak() { this._current = VOID0; + this._index = VOID0; return false; } }, { @@ -55,6 +58,11 @@ var Yielder = function () { get: function get() { return this._current; } + }, { + key: "index", + get: function get() { + return this._index; + } }]); return Yielder; @@ -89,8 +97,9 @@ var EnumeratorBase = function (_DisposableBase_1$Dis) { var _ = this; _.throwIfDisposed(); var y = _._yielder; - if (y) y.yieldBreak();else _._yielder = yielder(); + _._yielder = null; _._state = EnumeratorState.Before; + if (y) yielder(y); } }, { key: "moveNext", @@ -99,6 +108,7 @@ var EnumeratorBase = function (_DisposableBase_1$Dis) { try { switch (_._state) { case EnumeratorState.Before: + _._yielder = _._yielder || yielder(); _._state = EnumeratorState.Running; var initializer = _._initializer; if (initializer) initializer(); @@ -120,18 +130,21 @@ var EnumeratorBase = function (_DisposableBase_1$Dis) { }, { key: "nextValue", value: function nextValue() { - return this.moveNext() ? this._yielder.current : VOID0; + return this.moveNext() ? this.current : VOID0; } }, { key: "next", value: function next() { - return this.moveNext() ? { - value: this._yielder.current, - done: false - } : { - value: VOID0, - done: true - }; + return this.moveNext() ? new IteratorResult_1.IteratorResult(this.current, this.index) : IteratorResult_1.IteratorResult.Done; + } + }, { + key: 'return', + value: function _return(value) { + try { + return value === VOID0 || this._state === EnumeratorState.After ? IteratorResult_1.IteratorResult.Done : new IteratorResult_1.IteratorResult(value, VOID0, true); + } finally { + this.dispose(); + } } }, { key: "_onDispose", @@ -142,17 +155,21 @@ var EnumeratorBase = function (_DisposableBase_1$Dis) { _._disposer = null; var y = _._yielder; _._yielder = null; - yielder(y); - try { - if (disposer) disposer(); - } finally { - this._state = EnumeratorState.After; - } + this._state = EnumeratorState.After; + if (y) yielder(y); + if (disposer) disposer(); } }, { key: "current", get: function get() { - return this._yielder.current; + var y = this._yielder; + return y && y.current; + } + }, { + key: "index", + get: function get() { + var y = this._yielder; + return y && y.index; } }, { key: "isEndless", diff --git a/dist/commonjs/System/Collections/Enumeration/EnumeratorBase.js.map b/dist/commonjs/System/Collections/Enumeration/EnumeratorBase.js.map index 2e956c45..49af99fa 100644 --- a/dist/commonjs/System/Collections/Enumeration/EnumeratorBase.js.map +++ b/dist/commonjs/System/Collections/Enumeration/EnumeratorBase.js.map @@ -1 +1 @@ -{"version":3,"sources":["System/Collections/Enumeration/EnumeratorBase.js","System/Collections/Enumeration/EnumeratorBase.ts"],"names":[],"mappings":"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","file":"System/Collections/Enumeration/EnumeratorBase.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst Types_1 = require(\"../../Types\");\nconst DisposableBase_1 = require(\"../../Disposable/DisposableBase\");\nconst ObjectPool_1 = require(\"../../Disposable/ObjectPool\");\nconst VOID0 = void (0);\nvar yielderPool;\nfunction yielder(recycle) {\n if (!yielderPool)\n yielderPool\n = new ObjectPool_1.ObjectPool(40, () => new Yielder());\n if (!recycle)\n return yielderPool.take();\n recycle.yieldBreak();\n yielderPool.add(recycle);\n}\nclass Yielder {\n constructor() {\n this._current = VOID0;\n }\n get current() { return this._current; }\n yieldReturn(value) {\n this._current = value;\n return true;\n }\n yieldBreak() {\n this._current = VOID0;\n return false;\n }\n dispose() {\n this.yieldBreak();\n }\n}\nvar EnumeratorState;\n(function (EnumeratorState) {\n EnumeratorState[EnumeratorState[\"Before\"] = 0] = \"Before\";\n EnumeratorState[EnumeratorState[\"Running\"] = 1] = \"Running\";\n EnumeratorState[EnumeratorState[\"After\"] = 2] = \"After\";\n})(EnumeratorState || (EnumeratorState = {}));\nclass EnumeratorBase extends DisposableBase_1.DisposableBase {\n constructor(_initializer, _tryGetNext, disposer, isEndless) {\n super();\n this._initializer = _initializer;\n this._tryGetNext = _tryGetNext;\n this.reset();\n if (Types_1.Type.isBoolean(isEndless))\n this._isEndless = isEndless;\n else if (Types_1.Type.isBoolean(disposer))\n this._isEndless = disposer;\n if (Types_1.Type.isFunction(disposer))\n this._disposer = disposer;\n }\n get current() {\n return this._yielder.current;\n }\n get isEndless() {\n return this._isEndless;\n }\n reset() {\n var _ = this;\n _.throwIfDisposed();\n var y = _._yielder;\n if (y)\n y.yieldBreak();\n else\n _._yielder = yielder();\n _._state = EnumeratorState.Before;\n }\n moveNext() {\n var _ = this;\n try {\n switch (_._state) {\n case EnumeratorState.Before:\n _._state = EnumeratorState.Running;\n var initializer = _._initializer;\n if (initializer)\n initializer();\n case EnumeratorState.Running:\n if (_._tryGetNext(_._yielder)) {\n return true;\n }\n else {\n this.dispose();\n return false;\n }\n case EnumeratorState.After:\n return false;\n }\n }\n catch (e) {\n this.dispose();\n throw e;\n }\n }\n nextValue() {\n return this.moveNext()\n ? this._yielder.current\n : VOID0;\n }\n next() {\n return this.moveNext() ?\n {\n value: this._yielder.current,\n done: false\n } : {\n value: VOID0,\n done: true\n };\n }\n _onDispose() {\n var _ = this, disposer = _._disposer;\n _._initializer = null;\n _._disposer = null;\n var y = _._yielder;\n _._yielder = null;\n yielder(y);\n try {\n if (disposer)\n disposer();\n }\n finally {\n this._state = EnumeratorState.After;\n }\n }\n}\nexports.EnumeratorBase = EnumeratorBase;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = EnumeratorBase;\n","/*!\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\nimport {Type} from \"../../Types\";\r\nimport {DisposableBase} from \"../../Disposable/DisposableBase\";\r\nimport {ObjectPool} from \"../../Disposable/ObjectPool\";\r\nimport {IDisposable} from \"../../Disposable/IDisposable\";\r\nimport {IEnumerator} from \"./IEnumerator\";\r\nimport {IIteratorResult} from \"./IIterator\";\r\nimport {IYield} from \"./IYield\";\r\n\r\nconst VOID0:any = void(0);\r\n\r\nvar yielderPool:ObjectPool>;\r\nfunction yielder():Yielder;\r\nfunction yielder(recycle?:Yielder):void;\r\nfunction yielder(recycle?:Yielder):Yielder\r\n{\r\n\tif(!yielderPool)\r\n\t\tyielderPool\r\n\t\t\t= new ObjectPool>(40, ()=>new Yielder());\r\n\tif(!recycle) return yielderPool.take();\r\n\trecycle.yieldBreak();\r\n\tyielderPool.add(recycle);\r\n}\r\n\r\nclass Yielder implements IYield, IDisposable\r\n{\r\n\tprivate _current:T = VOID0;\r\n\tget current():T { return this._current; }\r\n\r\n\tyieldReturn(value:T):boolean\r\n\t{\r\n\t\tthis._current = value;\r\n\t\treturn true;\r\n\t}\r\n\r\n\tyieldBreak():boolean\r\n\t{\r\n\t\tthis._current = VOID0;\r\n\t\treturn false;\r\n\t}\r\n\r\n\tdispose():void\r\n\t{\r\n\t\tthis.yieldBreak();\r\n\t}\r\n}\r\n\r\ntype ActionVoid = ()=>void;\r\n\r\n// IEnumerator State\r\nenum EnumeratorState { Before, Running, After }\r\n\r\n// \"Enumerator\" is conflict JScript's \"Enumerator\"\r\n// Naming this class EnumeratorBase to avoid collision with IE.\r\nexport class EnumeratorBase extends DisposableBase implements IEnumerator\r\n{\r\n\r\n\tprivate _yielder:Yielder;\r\n\tprivate _state:EnumeratorState;\r\n\tprivate _disposer:()=>void;\r\n\r\n\tget current():T\r\n\t{\r\n\t\treturn this._yielder.current;\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tinitializer:() => void,\r\n\t\ttryGetNext:(yielder:IYield) => boolean,\r\n\t\tisEndless?:boolean);\r\n\tconstructor(\r\n\t\tinitializer:() => void,\r\n\t\ttryGetNext:(yielder:IYield) => boolean,\r\n\t\tdisposer?:()=>void,\r\n\t\tisEndless?:boolean);\r\n\tconstructor(\r\n\t\tprivate _initializer:() => void,\r\n\t\tprivate _tryGetNext:(yielder:IYield) => boolean,\r\n\t\tdisposer?:ActionVoid|boolean,\r\n\t\tisEndless?:boolean)\r\n\t{\r\n\t\tsuper();\r\n\t\tthis.reset();\r\n\t\tif(Type.isBoolean(isEndless))\r\n\t\t\tthis._isEndless = isEndless;\r\n\t\telse if(Type.isBoolean(disposer))\r\n\t\t\tthis._isEndless = disposer;\r\n\r\n\t\tif(Type.isFunction(disposer))\r\n\t\t\tthis._disposer = disposer;\r\n\t}\r\n\r\n\tprotected _isEndless:boolean;\r\n\t/*\r\n\t * Provides a mechanism to indicate if this enumerable never ends.\r\n\t * If set to true, some operations that expect a finite result may throw.\r\n\t * Explicit false means it has an end.\r\n\t * Implicit void means unknown.\r\n\t */\r\n\tget isEndless():boolean {\r\n\t\treturn this._isEndless;\r\n\t}\r\n\r\n\treset():void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\t\tvar y = _._yielder;\r\n\t\tif(y) y.yieldBreak(); // Already exists? Reset.\r\n\t\telse _._yielder = yielder(); // New? Get one from the object pool.\r\n\t\t_._state = EnumeratorState.Before;\r\n\t}\r\n\r\n\tmoveNext():boolean\r\n\t{\r\n\t\tvar _ = this;\r\n\t\ttry\r\n\t\t{\r\n\t\t\tswitch(_._state)\r\n\t\t\t{\r\n\t\t\t\tcase EnumeratorState.Before:\r\n\t\t\t\t\t_._state = EnumeratorState.Running;\r\n\t\t\t\t\tvar initializer = _._initializer;\r\n\t\t\t\t\tif(initializer)\r\n\t\t\t\t\t\tinitializer();\r\n\t\t\t\t// fall through\r\n\t\t\t\tcase EnumeratorState.Running:\r\n\t\t\t\t\tif(_._tryGetNext(_._yielder))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.dispose();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\tcase EnumeratorState.After:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch(e)\r\n\t\t{\r\n\t\t\tthis.dispose();\r\n\t\t\tthrow e;\r\n\t\t}\r\n\t}\r\n\r\n\tnextValue():T\r\n\t{\r\n\t\treturn this.moveNext()\r\n\t\t\t? this._yielder.current\r\n\t\t\t: VOID0;\r\n\t}\r\n\r\n\t/**\r\n\t * Exposed for compatibility with generators.\r\n\t */\r\n\tnext():IIteratorResult\r\n\t{\r\n\t\treturn this.moveNext() ?\r\n\t\t{\r\n\t\t\tvalue: this._yielder.current,\r\n\t\t\tdone: false\r\n\t\t} : {\r\n\t\t\tvalue: VOID0,\r\n\t\t\tdone: true\r\n\t\t}\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tvar _ = this, disposer = _._disposer;\r\n\r\n\t\t_._initializer = null;\r\n\t\t_._disposer = null;\r\n\r\n\r\n\t\tvar y = _._yielder;\r\n\t\t_._yielder = null;\r\n\t\tyielder(y);\r\n\r\n\t\ttry\r\n\t\t{\r\n\t\t\tif(disposer)\r\n\t\t\t\tdisposer();\r\n\t\t}\r\n\t\tfinally\r\n\t\t{\r\n\t\t\t//if(this._state==EnumeratorState.Running)\r\n\t\t\tthis._state = EnumeratorState.After;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\nexport default EnumeratorBase;\r\n"]} \ No newline at end of file +{"version":3,"sources":["System/Collections/Enumeration/EnumeratorBase.js","System/Collections/Enumeration/EnumeratorBase.ts"],"names":[],"mappings":"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","file":"System/Collections/Enumeration/EnumeratorBase.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst Types_1 = require(\"../../Types\");\nconst DisposableBase_1 = require(\"../../Disposable/DisposableBase\");\nconst ObjectPool_1 = require(\"../../Disposable/ObjectPool\");\nconst IteratorResult_1 = require(\"./IteratorResult\");\nconst VOID0 = void (0);\nvar yielderPool;\nfunction yielder(recycle) {\n if (!yielderPool)\n yielderPool\n = new ObjectPool_1.ObjectPool(40, () => new Yielder());\n if (!recycle)\n return yielderPool.take();\n recycle.yieldBreak();\n yielderPool.add(recycle);\n}\nclass Yielder {\n constructor() {\n this._current = VOID0;\n }\n get current() { return this._current; }\n get index() { return this._index; }\n yieldReturn(value) {\n this._current = value;\n if (this._index === VOID0)\n this._index = 0;\n else\n this._index++;\n return true;\n }\n yieldBreak() {\n this._current = VOID0;\n this._index = VOID0;\n return false;\n }\n dispose() {\n this.yieldBreak();\n }\n}\nvar EnumeratorState;\n(function (EnumeratorState) {\n EnumeratorState[EnumeratorState[\"Before\"] = 0] = \"Before\";\n EnumeratorState[EnumeratorState[\"Running\"] = 1] = \"Running\";\n EnumeratorState[EnumeratorState[\"After\"] = 2] = \"After\";\n})(EnumeratorState || (EnumeratorState = {}));\nclass EnumeratorBase extends DisposableBase_1.DisposableBase {\n constructor(_initializer, _tryGetNext, disposer, isEndless) {\n super();\n this._initializer = _initializer;\n this._tryGetNext = _tryGetNext;\n this.reset();\n if (Types_1.Type.isBoolean(isEndless))\n this._isEndless = isEndless;\n else if (Types_1.Type.isBoolean(disposer))\n this._isEndless = disposer;\n if (Types_1.Type.isFunction(disposer))\n this._disposer = disposer;\n }\n get current() {\n var y = this._yielder;\n return y && y.current;\n }\n get index() {\n var y = this._yielder;\n return y && y.index;\n }\n get isEndless() {\n return this._isEndless;\n }\n reset() {\n var _ = this;\n _.throwIfDisposed();\n var y = _._yielder;\n _._yielder = null;\n _._state = EnumeratorState.Before;\n if (y)\n yielder(y);\n }\n moveNext() {\n var _ = this;\n try {\n switch (_._state) {\n case EnumeratorState.Before:\n _._yielder = _._yielder || yielder();\n _._state = EnumeratorState.Running;\n var initializer = _._initializer;\n if (initializer)\n initializer();\n case EnumeratorState.Running:\n if (_._tryGetNext(_._yielder)) {\n return true;\n }\n else {\n this.dispose();\n return false;\n }\n case EnumeratorState.After:\n return false;\n }\n }\n catch (e) {\n this.dispose();\n throw e;\n }\n }\n nextValue() {\n return this.moveNext()\n ? this.current\n : VOID0;\n }\n next() {\n return this.moveNext()\n ? new IteratorResult_1.IteratorResult(this.current, this.index)\n : IteratorResult_1.IteratorResult.Done;\n }\n 'return'(value) {\n try {\n return value === VOID0 || this._state === EnumeratorState.After\n ? IteratorResult_1.IteratorResult.Done\n : new IteratorResult_1.IteratorResult(value, VOID0, true);\n }\n finally {\n this.dispose();\n }\n }\n _onDispose() {\n var _ = this, disposer = _._disposer;\n _._initializer = null;\n _._disposer = null;\n var y = _._yielder;\n _._yielder = null;\n this._state = EnumeratorState.After;\n if (y)\n yielder(y);\n if (disposer)\n disposer();\n }\n}\nexports.EnumeratorBase = EnumeratorBase;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = EnumeratorBase;\n","/*!\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\nimport {Type} from \"../../Types\";\r\nimport {DisposableBase} from \"../../Disposable/DisposableBase\";\r\nimport {ObjectPool} from \"../../Disposable/ObjectPool\";\r\nimport {IDisposable} from \"../../Disposable/IDisposable\";\r\nimport {IEnumerator} from \"./IEnumerator\";\r\nimport {IIteratorResult} from \"./IIterator\";\r\nimport {IYield} from \"./IYield\";\r\nimport {IteratorResult} from \"./IteratorResult\";\r\n\r\nconst VOID0:any = void(0);\r\n\r\nvar yielderPool:ObjectPool>;\r\nfunction yielder():Yielder;\r\nfunction yielder(recycle?:Yielder):void;\r\nfunction yielder(recycle?:Yielder):Yielder\r\n{\r\n\tif(!yielderPool)\r\n\t\tyielderPool\r\n\t\t\t= new ObjectPool>(40, ()=>new Yielder());\r\n\tif(!recycle) return yielderPool.take();\r\n\trecycle.yieldBreak();\r\n\tyielderPool.add(recycle);\r\n}\r\n\r\nclass Yielder implements IYield, IDisposable\r\n{\r\n\tprivate _current:T = VOID0;\r\n\tprivate _index:number;\r\n\r\n\tget current():T { return this._current; } // this class is not entirely local/private. Still needs protection.\r\n\r\n\tget index():number { return this._index; }\r\n\r\n\tyieldReturn(value:T):boolean\r\n\t{\r\n\t\tthis._current = value;\r\n\t\tif(this._index===VOID0)\r\n\t\t\tthis._index = 0;\r\n\t\telse\r\n\t\t\tthis._index++;\r\n\t\treturn true;\r\n\t}\r\n\r\n\tyieldBreak():boolean\r\n\t{\r\n\t\tthis._current = VOID0;\r\n\t\tthis._index = VOID0;\r\n\t\treturn false;\r\n\t}\r\n\r\n\tdispose():void\r\n\t{\r\n\t\tthis.yieldBreak();\r\n\t}\r\n}\r\n\r\ntype ActionVoid = ()=>void;\r\n\r\n// IEnumerator State\r\nenum EnumeratorState { Before, Running, After }\r\n\r\n// \"Enumerator\" is conflict JScript's \"Enumerator\"\r\n// Naming this class EnumeratorBase to avoid collision with IE.\r\nexport class EnumeratorBase extends DisposableBase implements IEnumerator\r\n{\r\n\r\n\tprivate _yielder:Yielder;\r\n\tprivate _state:EnumeratorState;\r\n\tprivate _disposer:()=>void;\r\n\r\n\tget current():T\r\n\t{\r\n\t\tvar y = this._yielder;\r\n\t\treturn y && y.current;\r\n\t}\r\n\r\n\tget index():number\r\n\t{\r\n\t\tvar y = this._yielder;\r\n\t\treturn y && y.index;\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tinitializer:() => void,\r\n\t\ttryGetNext:(yielder:IYield) => boolean,\r\n\t\tisEndless?:boolean);\r\n\tconstructor(\r\n\t\tinitializer:() => void,\r\n\t\ttryGetNext:(yielder:IYield) => boolean,\r\n\t\tdisposer?:()=>void,\r\n\t\tisEndless?:boolean);\r\n\tconstructor(\r\n\t\tprivate _initializer:() => void,\r\n\t\tprivate _tryGetNext:(yielder:IYield) => boolean,\r\n\t\tdisposer?:ActionVoid|boolean,\r\n\t\tisEndless?:boolean)\r\n\t{\r\n\t\tsuper();\r\n\t\tthis.reset();\r\n\t\tif(Type.isBoolean(isEndless))\r\n\t\t\tthis._isEndless = isEndless;\r\n\t\telse if(Type.isBoolean(disposer))\r\n\t\t\tthis._isEndless = disposer;\r\n\r\n\t\tif(Type.isFunction(disposer))\r\n\t\t\tthis._disposer = disposer;\r\n\t}\r\n\r\n\tprotected _isEndless:boolean;\r\n\t/*\r\n\t * Provides a mechanism to indicate if this enumerable never ends.\r\n\t * If set to true, some operations that expect a finite result may throw.\r\n\t * Explicit false means it has an end.\r\n\t * Implicit void means unknown.\r\n\t */\r\n\tget isEndless():boolean\r\n\t{\r\n\t\treturn this._isEndless;\r\n\t}\r\n\r\n\treset():void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_.throwIfDisposed();\r\n\t\tvar y = _._yielder;\r\n\t\t_._yielder = null;\r\n\r\n\t\t_._state = EnumeratorState.Before;\r\n\r\n\t\tif(y) yielder(y); // recycle until actually needed.\r\n\t}\r\n\r\n\tmoveNext():boolean\r\n\t{\r\n\t\tvar _ = this;\r\n\t\ttry\r\n\t\t{\r\n\t\t\tswitch(_._state)\r\n\t\t\t{\r\n\t\t\t\tcase EnumeratorState.Before:\r\n\t\t\t\t\t_._yielder = _._yielder || yielder();\r\n\t\t\t\t\t_._state = EnumeratorState.Running;\r\n\t\t\t\t\tvar initializer = _._initializer;\r\n\t\t\t\t\tif(initializer)\r\n\t\t\t\t\t\tinitializer();\r\n\t\t\t\t// fall through\r\n\t\t\t\tcase EnumeratorState.Running:\r\n\t\t\t\t\tif(_._tryGetNext(_._yielder))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.dispose();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\tcase EnumeratorState.After:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch(e)\r\n\t\t{\r\n\t\t\tthis.dispose();\r\n\t\t\tthrow e;\r\n\t\t}\r\n\t}\r\n\r\n\tnextValue():T\r\n\t{\r\n\t\treturn this.moveNext()\r\n\t\t\t? this.current\r\n\t\t\t: VOID0;\r\n\t}\r\n\r\n\t/**\r\n\t * Exposed for compatibility with generators.\r\n\t */\r\n\tnext():IIteratorResult\r\n\t{\r\n\t\treturn this.moveNext()\r\n\t\t\t? new IteratorResult(this.current, this.index)\r\n\t\t\t: IteratorResult.Done\r\n\t}\r\n\r\n\t'return'():IIteratorResult\r\n\t'return'(value:TReturn):IIteratorResult\r\n\t'return'(value?:any):IIteratorResult\r\n\t{\r\n\t\ttry\r\n\t\t{\r\n\t\t\treturn value===VOID0 || this._state===EnumeratorState.After\r\n\t\t\t\t? IteratorResult.Done\r\n\t\t\t\t: new IteratorResult(value, VOID0, true);\r\n\t\t}\r\n\t\tfinally\r\n\t\t{\r\n\t\t\tthis.dispose();\r\n\t\t}\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tvar _ = this, disposer = _._disposer;\r\n\r\n\t\t_._initializer = null;\r\n\t\t_._disposer = null;\r\n\r\n\r\n\t\tvar y = _._yielder;\r\n\t\t_._yielder = null;\r\n\t\tthis._state = EnumeratorState.After;\r\n\r\n\t\tif(y) yielder(y);\r\n\r\n\t\tif(disposer)\r\n\t\t\tdisposer();\r\n\t}\r\n\r\n}\r\n\r\nexport default EnumeratorBase;\r\n"]} \ No newline at end of file diff --git a/dist/commonjs/System/Collections/LinkedList.d.ts b/dist/commonjs/System/Collections/LinkedList.d.ts index ceb36de2..b21aaa57 100644 --- a/dist/commonjs/System/Collections/LinkedList.d.ts +++ b/dist/commonjs/System/Collections/LinkedList.d.ts @@ -16,7 +16,7 @@ export declare class LinkedList extends CollectionBase implements ILinkedL protected _addInternal(entry: T): boolean; protected _removeInternal(entry: T, max?: number): number; protected _clearInternal(): number; - forEach(action: Predicate | Action, useCopy?: boolean): void; + forEach(action: Predicate | Action, useCopy?: boolean): number; getEnumerator(): IEnumerator; private _findFirst(entry); private _findLast(entry); diff --git a/dist/commonjs/System/Collections/LinkedList.js b/dist/commonjs/System/Collections/LinkedList.js index 26a9df74..c1abd085 100644 --- a/dist/commonjs/System/Collections/LinkedList.js +++ b/dist/commonjs/System/Collections/LinkedList.js @@ -108,7 +108,7 @@ var LinkedList = function (_CollectionBase_1$Col) { value: function forEach(action) { var useCopy = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; - if (useCopy) _get(Object.getPrototypeOf(LinkedList.prototype), "forEach", this).call(this, action, useCopy);else this._listInternal.forEach(function (node, i) { + return useCopy ? _get(Object.getPrototypeOf(LinkedList.prototype), "forEach", this).call(this, action, useCopy) : this._listInternal.forEach(function (node, i) { return action(node.value, i); }); } diff --git a/dist/commonjs/System/Collections/LinkedList.js.map b/dist/commonjs/System/Collections/LinkedList.js.map index 287b636f..a9691316 100644 --- a/dist/commonjs/System/Collections/LinkedList.js.map +++ b/dist/commonjs/System/Collections/LinkedList.js.map @@ -1 +1 @@ -{"version":3,"sources":["System/Collections/LinkedList.js","System/Collections/LinkedList.ts"],"names":[],"mappings":"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","file":"System/Collections/LinkedList.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Based Upon: http://msdn.microsoft.com/en-us/library/he2s3bh7%28v=vs.110%29.aspx\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst Compare_1 = require(\"../Compare\");\nconst LinkedNodeList_1 = require(\"./LinkedNodeList\");\nconst InvalidOperationException_1 = require(\"../Exceptions/InvalidOperationException\");\nconst ArgumentNullException_1 = require(\"../Exceptions/ArgumentNullException\");\nconst CollectionBase_1 = require(\"./CollectionBase\");\nclass InternalNode {\n constructor(value, previous, next) {\n this.value = value;\n this.previous = previous;\n this.next = next;\n }\n assertDetached() {\n if (this.next || this.previous)\n throw new InvalidOperationException_1.InvalidOperationException(\"Adding a node that is already placed.\");\n }\n}\nfunction ensureExternal(node, list) {\n if (!node)\n return null;\n if (!list)\n throw new ArgumentNullException_1.ArgumentNullException(\"list\");\n var external = node.external;\n if (!external)\n node.external = external = new LinkedListNode(list, node);\n return external;\n}\nfunction getInternal(node, list) {\n if (!node)\n throw new ArgumentNullException_1.ArgumentNullException(\"node\");\n if (!list)\n throw new ArgumentNullException_1.ArgumentNullException(\"list\");\n if (node.list != list)\n throw new InvalidOperationException_1.InvalidOperationException(\"Provided node does not belong to this list.\");\n var n = node._nodeInternal;\n if (!n)\n throw new InvalidOperationException_1.InvalidOperationException(\"Provided node is not valid.\");\n return n;\n}\nclass LinkedList extends CollectionBase_1.CollectionBase {\n constructor(source, equalityComparer = Compare_1.areEqual) {\n super(null, equalityComparer);\n var _ = this;\n _._listInternal = new LinkedNodeList_1.LinkedNodeList();\n _._importEntries(source);\n }\n getCount() {\n return this._listInternal.unsafeCount;\n }\n _addInternal(entry) {\n this._listInternal.addNode(new InternalNode(entry));\n return true;\n }\n _removeInternal(entry, max = Infinity) {\n var _ = this, equals = _._equalityComparer, list = _._listInternal, removedCount = 0;\n list.forEach(node => {\n if (equals(entry, node.value) && list.removeNode(node))\n removedCount++;\n return removedCount < max;\n });\n return removedCount;\n }\n _clearInternal() {\n return this._listInternal.clear();\n }\n forEach(action, useCopy = false) {\n if (useCopy)\n super.forEach(action, useCopy);\n else\n this._listInternal.forEach((node, i) => action(node.value, i));\n }\n getEnumerator() {\n return LinkedNodeList_1.LinkedNodeList.valueEnumeratorFrom(this._listInternal);\n }\n _findFirst(entry) {\n var _ = this, equals = _._equalityComparer, next = _._listInternal.first;\n while (next) {\n if (equals(entry, next.value))\n return next;\n next = next.next;\n }\n return null;\n }\n _findLast(entry) {\n var _ = this, equals = _._equalityComparer, prev = _._listInternal.last;\n while (prev) {\n if (equals(entry, prev.value))\n return prev;\n prev = prev.previous;\n }\n return null;\n }\n removeOnce(entry) {\n return this.remove(entry, 1) !== 0;\n }\n get first() {\n return ensureExternal(this._listInternal.first, this);\n }\n get last() {\n return ensureExternal(this._listInternal.last, this);\n }\n getValueAt(index) {\n var node = this._listInternal.getNodeAt(index);\n if (!node)\n return node && node.value || void (0);\n }\n getNodeAt(index) {\n return ensureExternal(this._listInternal.getNodeAt(index), this);\n }\n find(entry) {\n return ensureExternal(this._findFirst(entry), this);\n }\n findLast(entry) {\n return ensureExternal(this._findLast(entry), this);\n }\n addFirst(entry) {\n this._listInternal.addNodeBefore(new InternalNode(entry));\n this._signalModification(true);\n }\n addLast(entry) {\n this.add(entry);\n }\n removeFirst() {\n var _ = this, first = _._listInternal.first;\n if (first && _._listInternal.removeNode(first))\n _._signalModification(true);\n }\n removeLast() {\n var _ = this, last = _._listInternal.last;\n if (last && _._listInternal.removeNode(last))\n _._signalModification(true);\n }\n removeNode(node) {\n var _ = this;\n if (_._listInternal.removeNode(getInternal(node, _))) {\n _._signalModification(true);\n return true;\n }\n return false;\n }\n addBefore(before, entry) {\n var _ = this;\n _._listInternal.addNodeBefore(new InternalNode(entry), getInternal(before, _));\n _._signalModification(true);\n }\n addAfter(after, entry) {\n var _ = this;\n _._listInternal.addNodeAfter(new InternalNode(entry), getInternal(after, _));\n _._signalModification(true);\n }\n addNodeBefore(node, before) {\n var _ = this;\n _._listInternal.addNodeBefore(getInternal(before, _), getInternal(node, _));\n _._signalModification(true);\n }\n addNodeAfter(node, after) {\n var _ = this;\n this._listInternal.addNodeAfter(getInternal(after, _), getInternal(node, _));\n _._signalModification(true);\n }\n}\nexports.LinkedList = LinkedList;\nclass LinkedListNode {\n constructor(_list, _nodeInternal) {\n this._list = _list;\n this._nodeInternal = _nodeInternal;\n }\n get list() {\n return this._list;\n }\n get previous() {\n return ensureExternal(this._nodeInternal.previous, this._list);\n }\n get next() {\n return ensureExternal(this._nodeInternal.next, this._list);\n }\n get value() {\n return this._nodeInternal.value;\n }\n set value(v) {\n this._nodeInternal.value = v;\n }\n addBefore(entry) {\n this._list.addBefore(this, entry);\n }\n addAfter(entry) {\n this._list.addAfter(this, entry);\n }\n addNodeBefore(before) {\n this._list.addNodeBefore(this, before);\n }\n addNodeAfter(after) {\n this._list.addNodeAfter(this, after);\n }\n remove() {\n this._list.removeNode(this);\n }\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = LinkedList;\n","/*!\r\n * @author electricessence / https://github.com/electricessence/\r\n * Based Upon: http://msdn.microsoft.com/en-us/library/he2s3bh7%28v=vs.110%29.aspx\r\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\r\n */\r\n\r\n\r\nimport {areEqual} from \"../Compare\";\r\nimport {LinkedNodeList} from \"./LinkedNodeList\";\r\nimport {InvalidOperationException} from \"../Exceptions/InvalidOperationException\";\r\nimport {ArgumentNullException} from \"../Exceptions/ArgumentNullException\";\r\nimport {CollectionBase} from \"./CollectionBase\";\r\nimport {ILinkedListNode, ILinkedNode, INodeWithValue} from \"./ILinkedListNode\";\r\nimport {IEnumerator} from \"./Enumeration/IEnumerator\";\r\nimport {Predicate, Action, EqualityComparison} from \"../FunctionTypes\";\r\nimport {ILinkedList} from \"./ILinkedList\";\r\nimport {IEnumerableOrArray} from \"./IEnumerableOrArray\";\r\n\r\n/*****************************\r\n * IMPORTANT NOTES ABOUT PERFORMANCE:\r\n * http://jsperf.com/simulating-a-queue\r\n *\r\n * Adding to an array is very fast, but modifying is slow.\r\n * LinkedList wins when modifying contents.\r\n * http://stackoverflow.com/questions/166884/array-versus-linked-list\r\n *****************************/\r\n\r\n/*\r\n * An internal node is used to manage the order without exposing underlying link chain to the consumer.\r\n */\r\nclass InternalNode\r\nimplements ILinkedNode>, INodeWithValue\r\n{\r\n\tconstructor(\r\n\t\tpublic value?:T,\r\n\t\tpublic previous?:InternalNode,\r\n\t\tpublic next?:InternalNode)\r\n\t{\r\n\t}\r\n\r\n\texternal:ILinkedListNode;\r\n\r\n\tassertDetached():void\r\n\t{\r\n\t\tif(this.next || this.previous)\r\n\t\t\tthrow new InvalidOperationException(\r\n\t\t\t\t\"Adding a node that is already placed.\");\r\n\t}\r\n\r\n}\r\n\r\nfunction ensureExternal(node:InternalNode, list:LinkedList):ILinkedListNode\r\n{\r\n\tif(!node)\r\n\t\treturn null;\r\n\tif(!list)\r\n\t\tthrow new ArgumentNullException(\"list\");\r\n\r\n\tvar external:ILinkedListNode = node.external;\r\n\tif(!external)\r\n\t\tnode.external = external = new LinkedListNode(list, node);\r\n\r\n\treturn external;\r\n}\r\n\r\nfunction getInternal(node:ILinkedListNode, list:LinkedList):InternalNode\r\n{\r\n\tif(!node)\r\n\t\tthrow new ArgumentNullException(\"node\");\r\n\tif(!list)\r\n\t\tthrow new ArgumentNullException(\"list\");\r\n\r\n\tif(node.list!=list)\r\n\t\tthrow new InvalidOperationException(\r\n\t\t\t\"Provided node does not belong to this list.\");\r\n\r\n\tvar n:InternalNode = (node)._nodeInternal;\r\n\tif(!n)\r\n\t\tthrow new InvalidOperationException(\r\n\t\t\t\"Provided node is not valid.\");\r\n\r\n\treturn n;\r\n}\r\n\r\nexport class LinkedList\r\nextends CollectionBase implements ILinkedList\r\n{\r\n\tprivate _listInternal:LinkedNodeList>;\r\n\r\n\tconstructor(\r\n\t\tsource?:IEnumerableOrArray,\r\n\t\tequalityComparer:EqualityComparison = areEqual)\r\n\t{\r\n\t\tsuper(null, equalityComparer);\r\n\t\tvar _ = this;\r\n\t\t_._listInternal = new LinkedNodeList>();\r\n\t\t_._importEntries(source);\r\n\t}\r\n\r\n\tprotected getCount():number\r\n\t{\r\n\t\treturn this._listInternal.unsafeCount;\r\n\t}\r\n\r\n\tprotected _addInternal(entry:T):boolean\r\n\t{\r\n\t\tthis._listInternal.addNode(new InternalNode(entry));\r\n\t\treturn true;\r\n\t}\r\n\r\n\tprotected _removeInternal(entry:T, max:number = Infinity):number\r\n\t{\r\n\t\tvar _ = this,\r\n\t\t equals = _._equalityComparer,\r\n\t\t list = _._listInternal,\r\n\t\t removedCount = 0;\r\n\r\n\t\tlist.forEach(node=>\r\n\t\t{\r\n\t\t\tif(equals(entry, node.value) && list.removeNode(node))\r\n\t\t\t\tremovedCount++;\r\n\r\n\t\t\treturn removedCount | Action,\r\n\t\tuseCopy:boolean = false):void\r\n\t{\r\n\t\tif(useCopy) super.forEach(action, useCopy);\r\n\t\telse this._listInternal.forEach((node, i)=>action(node.value, i));\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\t// #region IEnumerable\r\n\tgetEnumerator():IEnumerator\r\n\t{\r\n\t\treturn LinkedNodeList.valueEnumeratorFrom(this._listInternal);\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\tprivate _findFirst(entry:T):InternalNode\r\n\t{\r\n\t\t//noinspection UnnecessaryLocalVariableJS\r\n\t\tvar _ = this,\r\n\t\t equals = _._equalityComparer,\r\n\t\t next = _._listInternal.first;\r\n\t\twhile(next)\r\n\t\t{\r\n\t\t\tif(equals(entry, next.value))\r\n\t\t\t\treturn next;\r\n\t\t\tnext = next.next;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tprivate _findLast(entry:T):InternalNode\r\n\t{\r\n\t\t//noinspection UnnecessaryLocalVariableJS\r\n\t\tvar _ = this,\r\n\t\t equals = _._equalityComparer,\r\n\t\t prev = _._listInternal.last;\r\n\t\twhile(prev)\r\n\t\t{\r\n\t\t\tif(equals(entry, prev.value))\r\n\t\t\t\treturn prev;\r\n\t\t\tprev = prev.previous;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tremoveOnce(entry:T):boolean\r\n\t{\r\n\t\treturn this.remove(entry, 1)!==0;\r\n\t}\r\n\r\n\tget first():ILinkedListNode\r\n\t{\r\n\t\treturn ensureExternal(this._listInternal.first, this);\r\n\t}\r\n\r\n\tget last():ILinkedListNode\r\n\t{\r\n\t\treturn ensureExternal(this._listInternal.last, this);\r\n\t}\r\n\r\n\t// get methods are available for convenience but is an n*index operation.\r\n\r\n\r\n\tgetValueAt(index:number):T\r\n\t{\r\n\t\tvar node = this._listInternal.getNodeAt(index);\r\n\t\tif(!node)\r\n\t\t\treturn node && node.value || void(0);\r\n\t}\r\n\r\n\tgetNodeAt(index:number):ILinkedListNode\r\n\t{\r\n\t\treturn ensureExternal(this._listInternal.getNodeAt(index), this);\r\n\t}\r\n\r\n\tfind(entry:T):ILinkedListNode\r\n\t{\r\n\t\treturn ensureExternal(this._findFirst(entry), this);\r\n\t}\r\n\r\n\tfindLast(entry:T):ILinkedListNode\r\n\t{\r\n\t\treturn ensureExternal(this._findLast(entry), this);\r\n\t}\r\n\r\n\taddFirst(entry:T):void\r\n\t{\r\n\t\tthis._listInternal.addNodeBefore(new InternalNode(entry));\r\n\t\tthis._signalModification(true);\r\n\t}\r\n\r\n\taddLast(entry:T):void\r\n\t{\r\n\t\tthis.add(entry);\r\n\t}\r\n\r\n\tremoveFirst():void\r\n\t{\r\n\t\tvar _ = this, first = _._listInternal.first;\r\n\t\tif(first && _._listInternal.removeNode(first))\r\n\t\t\t_._signalModification(true);\r\n\t}\r\n\r\n\tremoveLast():void\r\n\t{\r\n\t\tvar _ = this, last = _._listInternal.last;\r\n\t\tif(last && _._listInternal.removeNode(last))\r\n\t\t\t_._signalModification(true);\r\n\t}\r\n\r\n\t// Returns true if successful and false if not found (already removed).\r\n\tremoveNode(node:ILinkedListNode):boolean\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\tif(_._listInternal.removeNode(getInternal(node, _)))\r\n\t\t{\r\n\t\t\t_._signalModification(true);\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\taddBefore(before:ILinkedListNode, entry:T):void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_._listInternal.addNodeBefore(\r\n\t\t\tnew InternalNode(entry),\r\n\t\t\tgetInternal(before, _)\r\n\t\t);\r\n\r\n\t\t_._signalModification(true);\r\n\t}\r\n\r\n\taddAfter(after:ILinkedListNode, entry:T):void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_._listInternal.addNodeAfter(\r\n\t\t\tnew InternalNode(entry),\r\n\t\t\tgetInternal(after, _)\r\n\t\t);\r\n\r\n\t\t_._signalModification(true);\r\n\t}\r\n\r\n\taddNodeBefore(node:ILinkedListNode, before:ILinkedListNode):void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_._listInternal.addNodeBefore(\r\n\t\t\tgetInternal(before, _),\r\n\t\t\tgetInternal(node, _)\r\n\t\t);\r\n\r\n\t\t_._signalModification(true);\r\n\t}\r\n\r\n\taddNodeAfter(node:ILinkedListNode, after:ILinkedListNode):void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tthis._listInternal.addNodeAfter(\r\n\t\t\tgetInternal(after, _),\r\n\t\t\tgetInternal(node, _)\r\n\t\t);\r\n\r\n\t\t_._signalModification(true);\r\n\t}\r\n\r\n\r\n}\r\n\r\n// Use an internal node class to prevent mucking up the LinkedList.\r\nclass LinkedListNode implements ILinkedListNode\r\n{\r\n\tconstructor(\r\n\t\tprivate _list:LinkedList,\r\n\t\tprivate _nodeInternal:InternalNode)\r\n\t{\r\n\t}\r\n\r\n\tget list():LinkedList\r\n\t{\r\n\t\treturn this._list;\r\n\t}\r\n\r\n\tget previous():ILinkedListNode\r\n\t{\r\n\t\treturn ensureExternal(this._nodeInternal.previous, this._list);\r\n\t}\r\n\r\n\tget next():ILinkedListNode\r\n\t{\r\n\t\treturn ensureExternal(this._nodeInternal.next, this._list);\r\n\t}\r\n\r\n\tget value():T\r\n\t{\r\n\t\treturn this._nodeInternal.value;\r\n\t}\r\n\r\n\tset value(v:T)\r\n\t{\r\n\t\tthis._nodeInternal.value = v;\r\n\t}\r\n\r\n\taddBefore(entry:T):void\r\n\t{\r\n\t\tthis._list.addBefore(this, entry);\r\n\t}\r\n\r\n\taddAfter(entry:T):void\r\n\t{\r\n\t\tthis._list.addAfter(this, entry);\r\n\t}\r\n\r\n\taddNodeBefore(before:ILinkedListNode):void\r\n\t{\r\n\t\tthis._list.addNodeBefore(this, before);\r\n\t}\r\n\r\n\taddNodeAfter(after:ILinkedListNode):void\r\n\t{\r\n\t\tthis._list.addNodeAfter(this, after);\r\n\t}\r\n\r\n\tremove():void\r\n\t{\r\n\t\tthis._list.removeNode(this);\r\n\t}\r\n\r\n}\r\n\r\nexport default LinkedList;\r\n"]} \ No newline at end of file +{"version":3,"sources":["System/Collections/LinkedList.js","System/Collections/LinkedList.ts"],"names":[],"mappings":"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","file":"System/Collections/LinkedList.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Based Upon: http://msdn.microsoft.com/en-us/library/he2s3bh7%28v=vs.110%29.aspx\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst Compare_1 = require(\"../Compare\");\nconst LinkedNodeList_1 = require(\"./LinkedNodeList\");\nconst InvalidOperationException_1 = require(\"../Exceptions/InvalidOperationException\");\nconst ArgumentNullException_1 = require(\"../Exceptions/ArgumentNullException\");\nconst CollectionBase_1 = require(\"./CollectionBase\");\nclass InternalNode {\n constructor(value, previous, next) {\n this.value = value;\n this.previous = previous;\n this.next = next;\n }\n assertDetached() {\n if (this.next || this.previous)\n throw new InvalidOperationException_1.InvalidOperationException(\"Adding a node that is already placed.\");\n }\n}\nfunction ensureExternal(node, list) {\n if (!node)\n return null;\n if (!list)\n throw new ArgumentNullException_1.ArgumentNullException(\"list\");\n var external = node.external;\n if (!external)\n node.external = external = new LinkedListNode(list, node);\n return external;\n}\nfunction getInternal(node, list) {\n if (!node)\n throw new ArgumentNullException_1.ArgumentNullException(\"node\");\n if (!list)\n throw new ArgumentNullException_1.ArgumentNullException(\"list\");\n if (node.list != list)\n throw new InvalidOperationException_1.InvalidOperationException(\"Provided node does not belong to this list.\");\n var n = node._nodeInternal;\n if (!n)\n throw new InvalidOperationException_1.InvalidOperationException(\"Provided node is not valid.\");\n return n;\n}\nclass LinkedList extends CollectionBase_1.CollectionBase {\n constructor(source, equalityComparer = Compare_1.areEqual) {\n super(null, equalityComparer);\n var _ = this;\n _._listInternal = new LinkedNodeList_1.LinkedNodeList();\n _._importEntries(source);\n }\n getCount() {\n return this._listInternal.unsafeCount;\n }\n _addInternal(entry) {\n this._listInternal.addNode(new InternalNode(entry));\n return true;\n }\n _removeInternal(entry, max = Infinity) {\n var _ = this, equals = _._equalityComparer, list = _._listInternal, removedCount = 0;\n list.forEach(node => {\n if (equals(entry, node.value) && list.removeNode(node))\n removedCount++;\n return removedCount < max;\n });\n return removedCount;\n }\n _clearInternal() {\n return this._listInternal.clear();\n }\n forEach(action, useCopy = false) {\n return useCopy\n ? super.forEach(action, useCopy)\n : this._listInternal.forEach((node, i) => action(node.value, i));\n }\n getEnumerator() {\n return LinkedNodeList_1.LinkedNodeList.valueEnumeratorFrom(this._listInternal);\n }\n _findFirst(entry) {\n var _ = this, equals = _._equalityComparer, next = _._listInternal.first;\n while (next) {\n if (equals(entry, next.value))\n return next;\n next = next.next;\n }\n return null;\n }\n _findLast(entry) {\n var _ = this, equals = _._equalityComparer, prev = _._listInternal.last;\n while (prev) {\n if (equals(entry, prev.value))\n return prev;\n prev = prev.previous;\n }\n return null;\n }\n removeOnce(entry) {\n return this.remove(entry, 1) !== 0;\n }\n get first() {\n return ensureExternal(this._listInternal.first, this);\n }\n get last() {\n return ensureExternal(this._listInternal.last, this);\n }\n getValueAt(index) {\n var node = this._listInternal.getNodeAt(index);\n if (!node)\n return node && node.value || void (0);\n }\n getNodeAt(index) {\n return ensureExternal(this._listInternal.getNodeAt(index), this);\n }\n find(entry) {\n return ensureExternal(this._findFirst(entry), this);\n }\n findLast(entry) {\n return ensureExternal(this._findLast(entry), this);\n }\n addFirst(entry) {\n this._listInternal.addNodeBefore(new InternalNode(entry));\n this._signalModification(true);\n }\n addLast(entry) {\n this.add(entry);\n }\n removeFirst() {\n var _ = this, first = _._listInternal.first;\n if (first && _._listInternal.removeNode(first))\n _._signalModification(true);\n }\n removeLast() {\n var _ = this, last = _._listInternal.last;\n if (last && _._listInternal.removeNode(last))\n _._signalModification(true);\n }\n removeNode(node) {\n var _ = this;\n if (_._listInternal.removeNode(getInternal(node, _))) {\n _._signalModification(true);\n return true;\n }\n return false;\n }\n addBefore(before, entry) {\n var _ = this;\n _._listInternal.addNodeBefore(new InternalNode(entry), getInternal(before, _));\n _._signalModification(true);\n }\n addAfter(after, entry) {\n var _ = this;\n _._listInternal.addNodeAfter(new InternalNode(entry), getInternal(after, _));\n _._signalModification(true);\n }\n addNodeBefore(node, before) {\n var _ = this;\n _._listInternal.addNodeBefore(getInternal(before, _), getInternal(node, _));\n _._signalModification(true);\n }\n addNodeAfter(node, after) {\n var _ = this;\n this._listInternal.addNodeAfter(getInternal(after, _), getInternal(node, _));\n _._signalModification(true);\n }\n}\nexports.LinkedList = LinkedList;\nclass LinkedListNode {\n constructor(_list, _nodeInternal) {\n this._list = _list;\n this._nodeInternal = _nodeInternal;\n }\n get list() {\n return this._list;\n }\n get previous() {\n return ensureExternal(this._nodeInternal.previous, this._list);\n }\n get next() {\n return ensureExternal(this._nodeInternal.next, this._list);\n }\n get value() {\n return this._nodeInternal.value;\n }\n set value(v) {\n this._nodeInternal.value = v;\n }\n addBefore(entry) {\n this._list.addBefore(this, entry);\n }\n addAfter(entry) {\n this._list.addAfter(this, entry);\n }\n addNodeBefore(before) {\n this._list.addNodeBefore(this, before);\n }\n addNodeAfter(after) {\n this._list.addNodeAfter(this, after);\n }\n remove() {\n this._list.removeNode(this);\n }\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = LinkedList;\n","/*!\r\n * @author electricessence / https://github.com/electricessence/\r\n * Based Upon: http://msdn.microsoft.com/en-us/library/he2s3bh7%28v=vs.110%29.aspx\r\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\r\n */\r\n\r\n\r\nimport {areEqual} from \"../Compare\";\r\nimport {LinkedNodeList} from \"./LinkedNodeList\";\r\nimport {InvalidOperationException} from \"../Exceptions/InvalidOperationException\";\r\nimport {ArgumentNullException} from \"../Exceptions/ArgumentNullException\";\r\nimport {CollectionBase} from \"./CollectionBase\";\r\nimport {ILinkedListNode, ILinkedNode, INodeWithValue} from \"./ILinkedListNode\";\r\nimport {IEnumerator} from \"./Enumeration/IEnumerator\";\r\nimport {Predicate, Action, EqualityComparison} from \"../FunctionTypes\";\r\nimport {ILinkedList} from \"./ILinkedList\";\r\nimport {IEnumerableOrArray} from \"./IEnumerableOrArray\";\r\n\r\n/*****************************\r\n * IMPORTANT NOTES ABOUT PERFORMANCE:\r\n * http://jsperf.com/simulating-a-queue\r\n *\r\n * Adding to an array is very fast, but modifying is slow.\r\n * LinkedList wins when modifying contents.\r\n * http://stackoverflow.com/questions/166884/array-versus-linked-list\r\n *****************************/\r\n\r\n/*\r\n * An internal node is used to manage the order without exposing underlying link chain to the consumer.\r\n */\r\nclass InternalNode\r\nimplements ILinkedNode>, INodeWithValue\r\n{\r\n\tconstructor(\r\n\t\tpublic value?:T,\r\n\t\tpublic previous?:InternalNode,\r\n\t\tpublic next?:InternalNode)\r\n\t{\r\n\t}\r\n\r\n\texternal:ILinkedListNode;\r\n\r\n\tassertDetached():void\r\n\t{\r\n\t\tif(this.next || this.previous)\r\n\t\t\tthrow new InvalidOperationException(\r\n\t\t\t\t\"Adding a node that is already placed.\");\r\n\t}\r\n\r\n}\r\n\r\nfunction ensureExternal(node:InternalNode, list:LinkedList):ILinkedListNode\r\n{\r\n\tif(!node)\r\n\t\treturn null;\r\n\tif(!list)\r\n\t\tthrow new ArgumentNullException(\"list\");\r\n\r\n\tvar external:ILinkedListNode = node.external;\r\n\tif(!external)\r\n\t\tnode.external = external = new LinkedListNode(list, node);\r\n\r\n\treturn external;\r\n}\r\n\r\nfunction getInternal(node:ILinkedListNode, list:LinkedList):InternalNode\r\n{\r\n\tif(!node)\r\n\t\tthrow new ArgumentNullException(\"node\");\r\n\tif(!list)\r\n\t\tthrow new ArgumentNullException(\"list\");\r\n\r\n\tif(node.list!=list)\r\n\t\tthrow new InvalidOperationException(\r\n\t\t\t\"Provided node does not belong to this list.\");\r\n\r\n\tvar n:InternalNode = (node)._nodeInternal;\r\n\tif(!n)\r\n\t\tthrow new InvalidOperationException(\r\n\t\t\t\"Provided node is not valid.\");\r\n\r\n\treturn n;\r\n}\r\n\r\nexport class LinkedList\r\nextends CollectionBase implements ILinkedList\r\n{\r\n\tprivate _listInternal:LinkedNodeList>;\r\n\r\n\tconstructor(\r\n\t\tsource?:IEnumerableOrArray,\r\n\t\tequalityComparer:EqualityComparison = areEqual)\r\n\t{\r\n\t\tsuper(null, equalityComparer);\r\n\t\tvar _ = this;\r\n\t\t_._listInternal = new LinkedNodeList>();\r\n\t\t_._importEntries(source);\r\n\t}\r\n\r\n\tprotected getCount():number\r\n\t{\r\n\t\treturn this._listInternal.unsafeCount;\r\n\t}\r\n\r\n\tprotected _addInternal(entry:T):boolean\r\n\t{\r\n\t\tthis._listInternal.addNode(new InternalNode(entry));\r\n\t\treturn true;\r\n\t}\r\n\r\n\tprotected _removeInternal(entry:T, max:number = Infinity):number\r\n\t{\r\n\t\tvar _ = this,\r\n\t\t equals = _._equalityComparer,\r\n\t\t list = _._listInternal,\r\n\t\t removedCount = 0;\r\n\r\n\t\tlist.forEach(node=>\r\n\t\t{\r\n\t\t\tif(equals(entry, node.value) && list.removeNode(node))\r\n\t\t\t\tremovedCount++;\r\n\r\n\t\t\treturn removedCount | Action,\r\n\t\tuseCopy:boolean = false):number\r\n\t{\r\n\t\treturn useCopy\r\n\t\t\t? super.forEach(action, useCopy)\r\n\t\t\t: this._listInternal.forEach((node, i)=>action(node.value, i));\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\t// #region IEnumerable\r\n\tgetEnumerator():IEnumerator\r\n\t{\r\n\t\treturn LinkedNodeList.valueEnumeratorFrom(this._listInternal);\r\n\t}\r\n\r\n\t// #endregion\r\n\r\n\tprivate _findFirst(entry:T):InternalNode\r\n\t{\r\n\t\t//noinspection UnnecessaryLocalVariableJS\r\n\t\tvar _ = this,\r\n\t\t equals = _._equalityComparer,\r\n\t\t next = _._listInternal.first;\r\n\t\twhile(next)\r\n\t\t{\r\n\t\t\tif(equals(entry, next.value))\r\n\t\t\t\treturn next;\r\n\t\t\tnext = next.next;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tprivate _findLast(entry:T):InternalNode\r\n\t{\r\n\t\t//noinspection UnnecessaryLocalVariableJS\r\n\t\tvar _ = this,\r\n\t\t equals = _._equalityComparer,\r\n\t\t prev = _._listInternal.last;\r\n\t\twhile(prev)\r\n\t\t{\r\n\t\t\tif(equals(entry, prev.value))\r\n\t\t\t\treturn prev;\r\n\t\t\tprev = prev.previous;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tremoveOnce(entry:T):boolean\r\n\t{\r\n\t\treturn this.remove(entry, 1)!==0;\r\n\t}\r\n\r\n\tget first():ILinkedListNode\r\n\t{\r\n\t\treturn ensureExternal(this._listInternal.first, this);\r\n\t}\r\n\r\n\tget last():ILinkedListNode\r\n\t{\r\n\t\treturn ensureExternal(this._listInternal.last, this);\r\n\t}\r\n\r\n\t// get methods are available for convenience but is an n*index operation.\r\n\r\n\r\n\tgetValueAt(index:number):T\r\n\t{\r\n\t\tvar node = this._listInternal.getNodeAt(index);\r\n\t\tif(!node)\r\n\t\t\treturn node && node.value || void(0);\r\n\t}\r\n\r\n\tgetNodeAt(index:number):ILinkedListNode\r\n\t{\r\n\t\treturn ensureExternal(this._listInternal.getNodeAt(index), this);\r\n\t}\r\n\r\n\tfind(entry:T):ILinkedListNode\r\n\t{\r\n\t\treturn ensureExternal(this._findFirst(entry), this);\r\n\t}\r\n\r\n\tfindLast(entry:T):ILinkedListNode\r\n\t{\r\n\t\treturn ensureExternal(this._findLast(entry), this);\r\n\t}\r\n\r\n\taddFirst(entry:T):void\r\n\t{\r\n\t\tthis._listInternal.addNodeBefore(new InternalNode(entry));\r\n\t\tthis._signalModification(true);\r\n\t}\r\n\r\n\taddLast(entry:T):void\r\n\t{\r\n\t\tthis.add(entry);\r\n\t}\r\n\r\n\tremoveFirst():void\r\n\t{\r\n\t\tvar _ = this, first = _._listInternal.first;\r\n\t\tif(first && _._listInternal.removeNode(first))\r\n\t\t\t_._signalModification(true);\r\n\t}\r\n\r\n\tremoveLast():void\r\n\t{\r\n\t\tvar _ = this, last = _._listInternal.last;\r\n\t\tif(last && _._listInternal.removeNode(last))\r\n\t\t\t_._signalModification(true);\r\n\t}\r\n\r\n\t// Returns true if successful and false if not found (already removed).\r\n\tremoveNode(node:ILinkedListNode):boolean\r\n\t{\r\n\t\tvar _ = this;\r\n\r\n\t\tif(_._listInternal.removeNode(getInternal(node, _)))\r\n\t\t{\r\n\t\t\t_._signalModification(true);\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\taddBefore(before:ILinkedListNode, entry:T):void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_._listInternal.addNodeBefore(\r\n\t\t\tnew InternalNode(entry),\r\n\t\t\tgetInternal(before, _)\r\n\t\t);\r\n\r\n\t\t_._signalModification(true);\r\n\t}\r\n\r\n\taddAfter(after:ILinkedListNode, entry:T):void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_._listInternal.addNodeAfter(\r\n\t\t\tnew InternalNode(entry),\r\n\t\t\tgetInternal(after, _)\r\n\t\t);\r\n\r\n\t\t_._signalModification(true);\r\n\t}\r\n\r\n\taddNodeBefore(node:ILinkedListNode, before:ILinkedListNode):void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\t_._listInternal.addNodeBefore(\r\n\t\t\tgetInternal(before, _),\r\n\t\t\tgetInternal(node, _)\r\n\t\t);\r\n\r\n\t\t_._signalModification(true);\r\n\t}\r\n\r\n\taddNodeAfter(node:ILinkedListNode, after:ILinkedListNode):void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tthis._listInternal.addNodeAfter(\r\n\t\t\tgetInternal(after, _),\r\n\t\t\tgetInternal(node, _)\r\n\t\t);\r\n\r\n\t\t_._signalModification(true);\r\n\t}\r\n\r\n\r\n}\r\n\r\n// Use an internal node class to prevent mucking up the LinkedList.\r\nclass LinkedListNode implements ILinkedListNode\r\n{\r\n\tconstructor(\r\n\t\tprivate _list:LinkedList,\r\n\t\tprivate _nodeInternal:InternalNode)\r\n\t{\r\n\t}\r\n\r\n\tget list():LinkedList\r\n\t{\r\n\t\treturn this._list;\r\n\t}\r\n\r\n\tget previous():ILinkedListNode\r\n\t{\r\n\t\treturn ensureExternal(this._nodeInternal.previous, this._list);\r\n\t}\r\n\r\n\tget next():ILinkedListNode\r\n\t{\r\n\t\treturn ensureExternal(this._nodeInternal.next, this._list);\r\n\t}\r\n\r\n\tget value():T\r\n\t{\r\n\t\treturn this._nodeInternal.value;\r\n\t}\r\n\r\n\tset value(v:T)\r\n\t{\r\n\t\tthis._nodeInternal.value = v;\r\n\t}\r\n\r\n\taddBefore(entry:T):void\r\n\t{\r\n\t\tthis._list.addBefore(this, entry);\r\n\t}\r\n\r\n\taddAfter(entry:T):void\r\n\t{\r\n\t\tthis._list.addAfter(this, entry);\r\n\t}\r\n\r\n\taddNodeBefore(before:ILinkedListNode):void\r\n\t{\r\n\t\tthis._list.addNodeBefore(this, before);\r\n\t}\r\n\r\n\taddNodeAfter(after:ILinkedListNode):void\r\n\t{\r\n\t\tthis._list.addNodeAfter(this, after);\r\n\t}\r\n\r\n\tremove():void\r\n\t{\r\n\t\tthis._list.removeNode(this);\r\n\t}\r\n\r\n}\r\n\r\nexport default LinkedList;\r\n"]} \ No newline at end of file diff --git a/dist/commonjs/System/Collections/LinkedNodeList.d.ts b/dist/commonjs/System/Collections/LinkedNodeList.d.ts index 2baad203..d3d103d9 100644 --- a/dist/commonjs/System/Collections/LinkedNodeList.d.ts +++ b/dist/commonjs/System/Collections/LinkedNodeList.d.ts @@ -17,7 +17,7 @@ export declare class LinkedNodeList> implements first: TNode; last: TNode; count: number; - forEach(action: Predicate | Action): void; + forEach(action: Predicate | Action): number; map(selector: Selector): T[]; clear(): number; dispose(): void; diff --git a/dist/commonjs/System/Collections/LinkedNodeList.js b/dist/commonjs/System/Collections/LinkedNodeList.js index 17494735..277e2482 100644 --- a/dist/commonjs/System/Collections/LinkedNodeList.js +++ b/dist/commonjs/System/Collections/LinkedNodeList.js @@ -33,6 +33,7 @@ var LinkedNodeList = function () { current = next; next = current && current.next; } while (current && action(current, index++) !== false); + return index; } }, { key: "map", diff --git a/dist/commonjs/System/Collections/LinkedNodeList.js.map b/dist/commonjs/System/Collections/LinkedNodeList.js.map index 12259d66..46ec2607 100644 --- a/dist/commonjs/System/Collections/LinkedNodeList.js.map +++ b/dist/commonjs/System/Collections/LinkedNodeList.js.map @@ -1 +1 @@ -{"version":3,"sources":["System/Collections/LinkedNodeList.js","System/Collections/LinkedNodeList.ts"],"names":[],"mappings":"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","file":"System/Collections/LinkedNodeList.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst TextUtility = require(\"../Text/Utility\");\nconst InvalidOperationException_1 = require(\"../Exceptions/InvalidOperationException\");\nconst ArgumentException_1 = require(\"../Exceptions/ArgumentException\");\nconst ArgumentNullException_1 = require(\"../Exceptions/ArgumentNullException\");\nconst EnumeratorBase_1 = require(\"./Enumeration/EnumeratorBase\");\nclass LinkedNodeList {\n constructor() {\n this._first = null;\n this._last = null;\n this.unsafeCount = 0;\n }\n get first() {\n return this._first;\n }\n get last() {\n return this._last;\n }\n get count() {\n var next = this._first, i = 0;\n while (next) {\n i++;\n next = next.next;\n }\n return i;\n }\n forEach(action) {\n var current = null, next = this.first, index = 0;\n do {\n current = next;\n next = current && current.next;\n } while (current\n && action(current, index++) !== false);\n }\n map(selector) {\n if (!selector)\n throw new ArgumentNullException_1.ArgumentNullException('selector');\n var result = [];\n this.forEach(node => {\n result.push(selector(node));\n });\n return result;\n }\n clear() {\n var _ = this, n, cF = 0, cL = 0;\n n = _._first;\n _._first = null;\n while (n) {\n cF++;\n let current = n;\n n = n.next;\n current.next = null;\n }\n n = _._last;\n _._last = null;\n while (n) {\n cL++;\n let current = n;\n n = n.previous;\n current.previous = null;\n }\n if (cF !== cL)\n console.warn('LinkedNodeList: Forward versus reverse count does not match when clearing. Forward: ' + cF + \", Reverse: \" + cL);\n _.unsafeCount = 0;\n return cF;\n }\n dispose() {\n this.clear();\n }\n contains(node) {\n return this.indexOf(node) != -1;\n }\n getNodeAt(index) {\n if (index < 0)\n return null;\n var next = this._first, i = 0;\n while (next && index < i++) {\n next = next.next;\n }\n return next;\n }\n find(condition) {\n var node = null;\n this.forEach((n, i) => {\n if (condition(n, i)) {\n node = n;\n return false;\n }\n });\n return node;\n }\n indexOf(node) {\n if (node && (node.previous || node.next)) {\n var index = 0;\n var c, n = this._first;\n do {\n c = n;\n if (c === node)\n return index;\n index++;\n } while ((n = c && c.next));\n }\n return -1;\n }\n removeFirst() {\n return this.removeNode(this._first);\n }\n removeLast() {\n return this.removeNode(this._last);\n }\n removeNode(node) {\n if (node == null)\n throw new ArgumentNullException_1.ArgumentNullException('node');\n var _ = this;\n var prev = node.previous, next = node.next, a = false, b = false;\n if (prev)\n prev.next = next;\n else if (_._first == node)\n _._first = next;\n else\n a = true;\n if (next)\n next.previous = prev;\n else if (_._last == node)\n _._last = prev;\n else\n b = true;\n if (a !== b) {\n throw new ArgumentException_1.ArgumentException('node', TextUtility.format(\"Provided node is has no {0} reference but is not the {1} node!\", a ? \"previous\" : \"next\", a ? \"first\" : \"last\"));\n }\n var removed = !a && !b;\n if (removed)\n _.unsafeCount--;\n return removed;\n }\n addNode(node) {\n this.addNodeAfter(node);\n }\n addNodeBefore(node, before) {\n assertValidDetached(node);\n var _ = this;\n if (!before) {\n before = _._first;\n }\n if (before) {\n let prev = before.previous;\n node.previous = prev;\n node.next = before;\n before.previous = node;\n if (prev)\n prev.next = node;\n if (before == _._first)\n _._last = node;\n }\n else {\n _._first = _._last = node;\n }\n _.unsafeCount++;\n }\n addNodeAfter(node, after) {\n assertValidDetached(node);\n var _ = this;\n if (!after) {\n after = _._last;\n }\n if (after) {\n let next = after.next;\n node.next = next;\n node.previous = after;\n after.next = node;\n if (next)\n next.previous = node;\n if (after == _._last)\n _._last = node;\n }\n else {\n _._first = _._last = node;\n }\n _.unsafeCount++;\n }\n replace(node, replacement) {\n if (node == null)\n throw new ArgumentNullException_1.ArgumentNullException('node');\n assertValidDetached(replacement, 'replacement');\n var _ = this;\n replacement.previous = node.previous;\n replacement.next = node.next;\n if (node.previous)\n node.previous.next = replacement;\n if (node.next)\n node.next.previous = replacement;\n if (node == _._first)\n _._first = replacement;\n if (node == _._last)\n _._last = replacement;\n }\n static valueEnumeratorFrom(list) {\n if (!list)\n throw new ArgumentNullException_1.ArgumentNullException('list');\n var _ = this, current, next;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n current = null;\n next = list.first;\n }, (yielder) => {\n if (next) {\n current = next;\n next = current && current.next;\n return yielder.yieldReturn(current.value);\n }\n return yielder.yieldBreak();\n });\n }\n static copyValues(list, array, index = 0) {\n if (list && list.first) {\n if (!array)\n throw new ArgumentNullException_1.ArgumentNullException('array');\n list.forEach((node, i) => {\n array[index + i] = node.value;\n });\n }\n return array;\n }\n}\nexports.LinkedNodeList = LinkedNodeList;\nfunction assertValidDetached(node, propName = 'node') {\n if (node == null)\n throw new ArgumentNullException_1.ArgumentNullException(propName);\n if (node.next || node.previous)\n throw new InvalidOperationException_1.InvalidOperationException(\"Cannot add a node to a LinkedNodeList that is already linked.\");\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = LinkedNodeList;\n","/*!\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\nimport * as TextUtility from \"../Text/Utility\";\r\nimport {InvalidOperationException} from \"../Exceptions/InvalidOperationException\";\r\nimport {ArgumentException} from \"../Exceptions/ArgumentException\";\r\nimport {ArgumentNullException} from \"../Exceptions/ArgumentNullException\";\r\nimport {EnumeratorBase} from \"./Enumeration/EnumeratorBase\";\r\nimport {ILinkedNode, ILinkedNodeWithValue} from \"./ILinkedListNode\";\r\nimport {IEnumerateEach} from \"./Enumeration/IEnumerateEach\";\r\nimport {IDisposable} from \"../Disposable/IDisposable\";\r\nimport {ILinkedNodeList} from \"./ILinkedList\";\r\nimport {IEnumerator} from \"./Enumeration/IEnumerator\";\r\nimport {Predicate, Selector, Action} from \"../FunctionTypes\";\r\nimport {IArray} from \"./Array/IArray\";\r\n\r\n\r\n/*****************************\r\n * IMPORTANT NOTES ABOUT PERFORMANCE:\r\n * http://jsperf.com/simulating-a-queue\r\n *\r\n * Adding to an array is very fast, but modifying is slow.\r\n * LinkedList wins when modifying contents.\r\n * http://stackoverflow.com/questions/166884/array-versus-linked-list\r\n *****************************/\r\n\r\n/**\r\n * This class is useful for managing a list of linked nodes, but it does not protect against modifying individual links.\r\n * If the consumer modifies a link (sets the previous or next value) it will effectively break the collection.\r\n *\r\n * It is possible to declare a node type of any kind as long as it contains a previous and next value that can reference another node.\r\n * Although not as safe as the included LinkedList, this class has less overhead and is more flexible.\r\n *\r\n * The count (or length) of this LinkedNodeList is not tracked since it could be corrupted at any time.\r\n */\r\nexport class LinkedNodeList>\r\nimplements ILinkedNodeList, IEnumerateEach, IDisposable\r\n{\r\n\r\n\tprivate _first:TNode;\r\n\tprivate _last:TNode;\r\n\tunsafeCount:number;\r\n\r\n\tconstructor()\r\n\t{\r\n\t\tthis._first = null;\r\n\t\tthis._last = null;\r\n\t\tthis.unsafeCount = 0;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * The first node. Will be null if the collection is empty.\r\n\t */\r\n\tget first():TNode\r\n\t{\r\n\t\treturn this._first;\r\n\t}\r\n\r\n\t/**\r\n\t * The last node.\r\n\t */\r\n\tget last():TNode\r\n\t{\r\n\t\treturn this._last;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Iteratively counts the number of linked nodes and returns the value.\r\n\t * @returns {number}\r\n\t */\r\n\tget count():number\r\n\t{\r\n\r\n\t\tvar next = this._first, i:number = 0;\r\n\t\twhile(next)\r\n\t\t{\r\n\t\t\ti++;\r\n\t\t\tnext = next.next;\r\n\t\t}\r\n\r\n\t\treturn i;\r\n\t}\r\n\r\n\t// Note, no need for 'useCopy' since this avoids any modification conflict.\r\n\t// If iterating over a copy is necessary, a copy should be made manually.\r\n\tforEach(\r\n\t\taction:Predicate | Action):void\r\n\t{\r\n\t\tvar current:TNode = null,\r\n\t\t next:TNode = this.first, // Be sure to track the next node so if current node is removed.\r\n\t\t index:number = 0;\r\n\r\n\t\tdo {\r\n\t\t\tcurrent = next;\r\n\t\t\tnext = current && current.next;\r\n\t\t}\r\n\t\twhile(current\r\n\t\t&& action(current, index++)!==false);\r\n\t}\r\n\r\n\tmap(selector:Selector):T[]\r\n\t{\r\n\t\tif(!selector) throw new ArgumentNullException('selector');\r\n\r\n\t\tvar result:T[] = [];\r\n\t\tthis.forEach(node=>\r\n\t\t{\r\n\t\t\tresult.push(selector(node));\r\n\t\t});\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t * Erases the linked node's references to each other and returns the number of nodes.\r\n\t * @returns {number}\r\n\t */\r\n\tclear():number\r\n\t{\r\n\t\tvar _ = this, n:TNode, cF:number = 0, cL:number = 0;\r\n\r\n\t\t// First, clear in the forward direction.\r\n\t\tn = _._first;\r\n\t\t_._first = null;\r\n\r\n\t\twhile(n)\r\n\t\t{\r\n\t\t\tcF++;\r\n\t\t\tlet current = n;\r\n\t\t\tn = n.next;\r\n\t\t\tcurrent.next = null;\r\n\t\t}\r\n\r\n\t\t// Last, clear in the reverse direction.\r\n\t\tn = _._last;\r\n\t\t_._last = null;\r\n\r\n\t\twhile(n)\r\n\t\t{\r\n\t\t\tcL++;\r\n\t\t\tlet current = n;\r\n\t\t\tn = n.previous;\r\n\t\t\tcurrent.previous = null;\r\n\t\t}\r\n\r\n\t\tif(cF!==cL) console.warn('LinkedNodeList: Forward versus reverse count does not match when clearing. Forward: ' + cF + \", Reverse: \" + cL);\r\n\r\n\t\t_.unsafeCount = 0;\r\n\r\n\t\treturn cF;\r\n\t}\r\n\r\n\t/**\r\n\t * Clears the list.\r\n\t */\r\n\tdispose():void\r\n\t{\r\n\t\tthis.clear();\r\n\t}\r\n\r\n\t/**\r\n\t * Iterates the list to see if a node exists.\r\n\t * @param node\r\n\t * @returns {boolean}\r\n\t */\r\n\tcontains(node:TNode):boolean\r\n\t{\r\n\t\treturn this.indexOf(node)!= -1;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Gets the index of a particular node.\r\n\t * @param index\r\n\t */\r\n\tgetNodeAt(index:number):TNode\r\n\t{\r\n\t\tif(index<0)\r\n\t\t\treturn null;\r\n\r\n\t\tvar next = this._first, i:number = 0;\r\n\t\twhile(next && index):TNode {\r\n\t\tvar node:TNode = null;\r\n\t\tthis.forEach((n,i)=>{\r\n\t\t\tif(condition(n,i)) {\r\n\t\t\t\tnode = n;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn node;\r\n\t}\r\n\r\n\t/**\r\n\t * Iterates the list to find the specified node and returns its index.\r\n\t * @param node\r\n\t * @returns {boolean}\r\n\t */\r\n\tindexOf(node:TNode):number\r\n\t{\r\n\t\tif(node && (node.previous || node.next))\r\n\t\t{\r\n\r\n\t\t\tvar index = 0;\r\n\t\t\tvar c:TNode, n:TNode = this._first;\r\n\t\t\tdo {\r\n\t\t\t\tc = n;\r\n\t\t\t\tif(c===node) return index;\r\n\t\t\t\tindex++;\r\n\t\t\t}\r\n\t\t\twhile((n = c && c.next));\r\n\t\t}\r\n\r\n\t\treturn -1;\r\n\t}\r\n\r\n\t/**\r\n\t * Removes the first node and returns true if successful.\r\n\t * @returns {boolean}\r\n\t */\r\n\tremoveFirst():boolean\r\n\t{\r\n\t\treturn this.removeNode(this._first);\r\n\t}\r\n\r\n\t/**\r\n\t * Removes the last node and returns true if successful.\r\n\t * @returns {boolean}\r\n\t */\r\n\tremoveLast():boolean\r\n\t{\r\n\t\treturn this.removeNode(this._last);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Removes the specified node.\r\n\t * Returns true if successful and false if not found (already removed).\r\n\t * @param node\r\n\t * @returns {boolean}\r\n\t */\r\n\tremoveNode(node:TNode):boolean\r\n\t{\r\n\t\tif(node==null)\r\n\t\t\tthrow new ArgumentNullException('node');\r\n\r\n\t\tvar _ = this;\r\n\t\tvar prev = node.previous, next = node.next, a:boolean = false, b:boolean = false;\r\n\r\n\t\tif(prev) prev.next = next;\r\n\t\telse if(_._first==node) _._first = next;\r\n\t\telse a = true;\r\n\r\n\t\tif(next) next.previous = prev;\r\n\t\telse if(_._last==node) _._last = prev;\r\n\t\telse b = true;\r\n\r\n\t\tif(a!==b)\r\n\t\t{\r\n\t\t\tthrow new ArgumentException(\r\n\t\t\t\t'node', TextUtility.format(\r\n\t\t\t\t\t\"Provided node is has no {0} reference but is not the {1} node!\",\r\n\t\t\t\t\ta ? \"previous\" : \"next\", a ? \"first\" : \"last\"\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tvar removed = !a && !b;\r\n\t\tif(removed) _.unsafeCount--;\r\n\t\treturn removed;\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Adds a node to the end of the list.\r\n\t * @param node\r\n\t */\r\n\taddNode(node:TNode):void\r\n\t{\r\n\t\tthis.addNodeAfter(node);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Inserts a node before the specified 'before' node.\r\n\t * If no 'before' node is specified, it inserts it as the first node.\r\n\t * @param node\r\n\t * @param before\r\n\t */\r\n\taddNodeBefore(node:TNode, before?:TNode):void\r\n\t{\r\n\t\tassertValidDetached(node);\r\n\r\n\t\tvar _ = this;\r\n\r\n\t\tif(!before)\r\n\t\t{\r\n\t\t\tbefore = _._first;\r\n\t\t}\r\n\r\n\t\tif(before)\r\n\t\t{\r\n\t\t\tlet prev = before.previous;\r\n\t\t\tnode.previous = prev;\r\n\t\t\tnode.next = before;\r\n\r\n\t\t\tbefore.previous = node;\r\n\t\t\tif(prev) prev.next = node;\r\n\t\t\tif(before==_._first) _._last = node;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t_._first = _._last = node;\r\n\t\t}\r\n\r\n\t\t_.unsafeCount++;\r\n\t}\r\n\r\n\t/**\r\n\t * Inserts a node after the specified 'after' node.\r\n\t * If no 'after' node is specified, it appends it as the last node.\r\n\t * @param node\r\n\t * @param after\r\n\t */\r\n\taddNodeAfter(node:TNode, after?:TNode):void\r\n\t{\r\n\t\tassertValidDetached(node);\r\n\r\n\t\tvar _ = this;\r\n\r\n\t\tif(!after)\r\n\t\t{\r\n\t\t\tafter = _._last;\r\n\t\t}\r\n\r\n\t\tif(after)\r\n\t\t{\r\n\t\t\tlet next = after.next;\r\n\t\t\tnode.next = next;\r\n\t\t\tnode.previous = after;\r\n\r\n\t\t\tafter.next = node;\r\n\t\t\tif(next) next.previous = node;\r\n\t\t\tif(after==_._last) _._last = node;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t_._first = _._last = node;\r\n\t\t}\r\n\r\n\t\t_.unsafeCount++;\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Takes and existing node and replaces it.\r\n\t * @param node\r\n\t * @param replacement\r\n\t */\r\n\treplace(node:TNode, replacement:TNode):void\r\n\t{\r\n\r\n\t\tif(node==null)\r\n\t\t\tthrow new ArgumentNullException('node');\r\n\r\n\t\tassertValidDetached(replacement, 'replacement');\r\n\r\n\t\tvar _ = this;\r\n\t\treplacement.previous = node.previous;\r\n\t\treplacement.next = node.next;\r\n\r\n\t\tif(node.previous) node.previous.next = replacement;\r\n\t\tif(node.next) node.next.previous = replacement;\r\n\r\n\t\tif(node==_._first) _._first = replacement;\r\n\t\tif(node==_._last) _._last = replacement;\r\n\t}\r\n\r\n\tstatic valueEnumeratorFrom(list:LinkedNodeList>):IEnumerator {\r\n\r\n\t\tif(!list) throw new ArgumentNullException('list');\r\n\r\n\t\tvar _ = this,\r\n\t\t current:ILinkedNodeWithValue,\r\n\t\t next:ILinkedNodeWithValue;\r\n\r\n\t\treturn new EnumeratorBase(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\t// Initialize anchor...\r\n\t\t\t\tcurrent = null;\r\n\t\t\t\tnext = list.first;\r\n\t\t\t},\r\n\t\t\t(yielder)=>\r\n\t\t\t{\r\n\r\n\t\t\t\tif(next)\r\n\t\t\t\t{\r\n\t\t\t\t\tcurrent = next;\r\n\t\t\t\t\tnext = current && current.next;\r\n\t\t\t\t\treturn yielder.yieldReturn(current.value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn yielder.yieldBreak();\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic copyValues>(\r\n\t\tlist:LinkedNodeList>,\r\n\t\tarray:TDestination,\r\n\t\tindex:number = 0):TDestination\r\n\t{\r\n\t\tif(list && list.first)\r\n\t\t{\r\n\t\t\tif(!array) throw new ArgumentNullException('array');\r\n\r\n\t\t\tlist.forEach(\r\n\t\t\t\t(node, i) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tarray[index + i] = node.value;\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn array;\r\n\t}\r\n\r\n}\r\n\r\nfunction assertValidDetached>(node:TNode, propName:string = 'node')\r\n{\r\n\r\n\tif(node==null)\r\n\t\tthrow new ArgumentNullException(propName);\r\n\r\n\tif(node.next || node.previous)\r\n\t\tthrow new InvalidOperationException(\"Cannot add a node to a LinkedNodeList that is already linked.\");\r\n\r\n}\r\n\r\nexport default LinkedNodeList;"]} \ No newline at end of file +{"version":3,"sources":["System/Collections/LinkedNodeList.js","System/Collections/LinkedNodeList.ts"],"names":[],"mappings":"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","file":"System/Collections/LinkedNodeList.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst TextUtility = require(\"../Text/Utility\");\nconst InvalidOperationException_1 = require(\"../Exceptions/InvalidOperationException\");\nconst ArgumentException_1 = require(\"../Exceptions/ArgumentException\");\nconst ArgumentNullException_1 = require(\"../Exceptions/ArgumentNullException\");\nconst EnumeratorBase_1 = require(\"./Enumeration/EnumeratorBase\");\nclass LinkedNodeList {\n constructor() {\n this._first = null;\n this._last = null;\n this.unsafeCount = 0;\n }\n get first() {\n return this._first;\n }\n get last() {\n return this._last;\n }\n get count() {\n var next = this._first, i = 0;\n while (next) {\n i++;\n next = next.next;\n }\n return i;\n }\n forEach(action) {\n var current = null, next = this.first, index = 0;\n do {\n current = next;\n next = current && current.next;\n } while (current\n && action(current, index++) !== false);\n return index;\n }\n map(selector) {\n if (!selector)\n throw new ArgumentNullException_1.ArgumentNullException('selector');\n var result = [];\n this.forEach(node => {\n result.push(selector(node));\n });\n return result;\n }\n clear() {\n var _ = this, n, cF = 0, cL = 0;\n n = _._first;\n _._first = null;\n while (n) {\n cF++;\n let current = n;\n n = n.next;\n current.next = null;\n }\n n = _._last;\n _._last = null;\n while (n) {\n cL++;\n let current = n;\n n = n.previous;\n current.previous = null;\n }\n if (cF !== cL)\n console.warn('LinkedNodeList: Forward versus reverse count does not match when clearing. Forward: ' + cF + \", Reverse: \" + cL);\n _.unsafeCount = 0;\n return cF;\n }\n dispose() {\n this.clear();\n }\n contains(node) {\n return this.indexOf(node) != -1;\n }\n getNodeAt(index) {\n if (index < 0)\n return null;\n var next = this._first, i = 0;\n while (next && index < i++) {\n next = next.next;\n }\n return next;\n }\n find(condition) {\n var node = null;\n this.forEach((n, i) => {\n if (condition(n, i)) {\n node = n;\n return false;\n }\n });\n return node;\n }\n indexOf(node) {\n if (node && (node.previous || node.next)) {\n var index = 0;\n var c, n = this._first;\n do {\n c = n;\n if (c === node)\n return index;\n index++;\n } while ((n = c && c.next));\n }\n return -1;\n }\n removeFirst() {\n return this.removeNode(this._first);\n }\n removeLast() {\n return this.removeNode(this._last);\n }\n removeNode(node) {\n if (node == null)\n throw new ArgumentNullException_1.ArgumentNullException('node');\n var _ = this;\n var prev = node.previous, next = node.next, a = false, b = false;\n if (prev)\n prev.next = next;\n else if (_._first == node)\n _._first = next;\n else\n a = true;\n if (next)\n next.previous = prev;\n else if (_._last == node)\n _._last = prev;\n else\n b = true;\n if (a !== b) {\n throw new ArgumentException_1.ArgumentException('node', TextUtility.format(\"Provided node is has no {0} reference but is not the {1} node!\", a ? \"previous\" : \"next\", a ? \"first\" : \"last\"));\n }\n var removed = !a && !b;\n if (removed)\n _.unsafeCount--;\n return removed;\n }\n addNode(node) {\n this.addNodeAfter(node);\n }\n addNodeBefore(node, before) {\n assertValidDetached(node);\n var _ = this;\n if (!before) {\n before = _._first;\n }\n if (before) {\n let prev = before.previous;\n node.previous = prev;\n node.next = before;\n before.previous = node;\n if (prev)\n prev.next = node;\n if (before == _._first)\n _._last = node;\n }\n else {\n _._first = _._last = node;\n }\n _.unsafeCount++;\n }\n addNodeAfter(node, after) {\n assertValidDetached(node);\n var _ = this;\n if (!after) {\n after = _._last;\n }\n if (after) {\n let next = after.next;\n node.next = next;\n node.previous = after;\n after.next = node;\n if (next)\n next.previous = node;\n if (after == _._last)\n _._last = node;\n }\n else {\n _._first = _._last = node;\n }\n _.unsafeCount++;\n }\n replace(node, replacement) {\n if (node == null)\n throw new ArgumentNullException_1.ArgumentNullException('node');\n assertValidDetached(replacement, 'replacement');\n var _ = this;\n replacement.previous = node.previous;\n replacement.next = node.next;\n if (node.previous)\n node.previous.next = replacement;\n if (node.next)\n node.next.previous = replacement;\n if (node == _._first)\n _._first = replacement;\n if (node == _._last)\n _._last = replacement;\n }\n static valueEnumeratorFrom(list) {\n if (!list)\n throw new ArgumentNullException_1.ArgumentNullException('list');\n var _ = this, current, next;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n current = null;\n next = list.first;\n }, (yielder) => {\n if (next) {\n current = next;\n next = current && current.next;\n return yielder.yieldReturn(current.value);\n }\n return yielder.yieldBreak();\n });\n }\n static copyValues(list, array, index = 0) {\n if (list && list.first) {\n if (!array)\n throw new ArgumentNullException_1.ArgumentNullException('array');\n list.forEach((node, i) => {\n array[index + i] = node.value;\n });\n }\n return array;\n }\n}\nexports.LinkedNodeList = LinkedNodeList;\nfunction assertValidDetached(node, propName = 'node') {\n if (node == null)\n throw new ArgumentNullException_1.ArgumentNullException(propName);\n if (node.next || node.previous)\n throw new InvalidOperationException_1.InvalidOperationException(\"Cannot add a node to a LinkedNodeList that is already linked.\");\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = LinkedNodeList;\n","/*!\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\nimport * as TextUtility from \"../Text/Utility\";\r\nimport {InvalidOperationException} from \"../Exceptions/InvalidOperationException\";\r\nimport {ArgumentException} from \"../Exceptions/ArgumentException\";\r\nimport {ArgumentNullException} from \"../Exceptions/ArgumentNullException\";\r\nimport {EnumeratorBase} from \"./Enumeration/EnumeratorBase\";\r\nimport {ILinkedNode, ILinkedNodeWithValue} from \"./ILinkedListNode\";\r\nimport {IEnumerateEach} from \"./Enumeration/IEnumerateEach\";\r\nimport {IDisposable} from \"../Disposable/IDisposable\";\r\nimport {ILinkedNodeList} from \"./ILinkedList\";\r\nimport {IEnumerator} from \"./Enumeration/IEnumerator\";\r\nimport {Predicate, Selector, Action} from \"../FunctionTypes\";\r\nimport {IArray} from \"./Array/IArray\";\r\n\r\n\r\n/*****************************\r\n * IMPORTANT NOTES ABOUT PERFORMANCE:\r\n * http://jsperf.com/simulating-a-queue\r\n *\r\n * Adding to an array is very fast, but modifying is slow.\r\n * LinkedList wins when modifying contents.\r\n * http://stackoverflow.com/questions/166884/array-versus-linked-list\r\n *****************************/\r\n\r\n/**\r\n * This class is useful for managing a list of linked nodes, but it does not protect against modifying individual links.\r\n * If the consumer modifies a link (sets the previous or next value) it will effectively break the collection.\r\n *\r\n * It is possible to declare a node type of any kind as long as it contains a previous and next value that can reference another node.\r\n * Although not as safe as the included LinkedList, this class has less overhead and is more flexible.\r\n *\r\n * The count (or length) of this LinkedNodeList is not tracked since it could be corrupted at any time.\r\n */\r\nexport class LinkedNodeList>\r\nimplements ILinkedNodeList, IEnumerateEach, IDisposable\r\n{\r\n\r\n\tprivate _first:TNode;\r\n\tprivate _last:TNode;\r\n\tunsafeCount:number;\r\n\r\n\tconstructor()\r\n\t{\r\n\t\tthis._first = null;\r\n\t\tthis._last = null;\r\n\t\tthis.unsafeCount = 0;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * The first node. Will be null if the collection is empty.\r\n\t */\r\n\tget first():TNode\r\n\t{\r\n\t\treturn this._first;\r\n\t}\r\n\r\n\t/**\r\n\t * The last node.\r\n\t */\r\n\tget last():TNode\r\n\t{\r\n\t\treturn this._last;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Iteratively counts the number of linked nodes and returns the value.\r\n\t * @returns {number}\r\n\t */\r\n\tget count():number\r\n\t{\r\n\r\n\t\tvar next = this._first, i:number = 0;\r\n\t\twhile(next)\r\n\t\t{\r\n\t\t\ti++;\r\n\t\t\tnext = next.next;\r\n\t\t}\r\n\r\n\t\treturn i;\r\n\t}\r\n\r\n\t// Note, no need for 'useCopy' since this avoids any modification conflict.\r\n\t// If iterating over a copy is necessary, a copy should be made manually.\r\n\tforEach(\r\n\t\taction:Predicate | Action):number\r\n\t{\r\n\t\tvar current:TNode = null,\r\n\t\t next:TNode = this.first, // Be sure to track the next node so if current node is removed.\r\n\t\t index:number = 0;\r\n\r\n\t\tdo {\r\n\t\t\tcurrent = next;\r\n\t\t\tnext = current && current.next;\r\n\t\t}\r\n\t\twhile(current\r\n\t\t&& action(current, index++)!==false);\r\n\r\n\t\treturn index;\r\n\t}\r\n\r\n\tmap(selector:Selector):T[]\r\n\t{\r\n\t\tif(!selector) throw new ArgumentNullException('selector');\r\n\r\n\t\tvar result:T[] = [];\r\n\t\tthis.forEach(node=>\r\n\t\t{\r\n\t\t\tresult.push(selector(node));\r\n\t\t});\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t * Erases the linked node's references to each other and returns the number of nodes.\r\n\t * @returns {number}\r\n\t */\r\n\tclear():number\r\n\t{\r\n\t\tvar _ = this, n:TNode, cF:number = 0, cL:number = 0;\r\n\r\n\t\t// First, clear in the forward direction.\r\n\t\tn = _._first;\r\n\t\t_._first = null;\r\n\r\n\t\twhile(n)\r\n\t\t{\r\n\t\t\tcF++;\r\n\t\t\tlet current = n;\r\n\t\t\tn = n.next;\r\n\t\t\tcurrent.next = null;\r\n\t\t}\r\n\r\n\t\t// Last, clear in the reverse direction.\r\n\t\tn = _._last;\r\n\t\t_._last = null;\r\n\r\n\t\twhile(n)\r\n\t\t{\r\n\t\t\tcL++;\r\n\t\t\tlet current = n;\r\n\t\t\tn = n.previous;\r\n\t\t\tcurrent.previous = null;\r\n\t\t}\r\n\r\n\t\tif(cF!==cL) console.warn('LinkedNodeList: Forward versus reverse count does not match when clearing. Forward: ' + cF + \", Reverse: \" + cL);\r\n\r\n\t\t_.unsafeCount = 0;\r\n\r\n\t\treturn cF;\r\n\t}\r\n\r\n\t/**\r\n\t * Clears the list.\r\n\t */\r\n\tdispose():void\r\n\t{\r\n\t\tthis.clear();\r\n\t}\r\n\r\n\t/**\r\n\t * Iterates the list to see if a node exists.\r\n\t * @param node\r\n\t * @returns {boolean}\r\n\t */\r\n\tcontains(node:TNode):boolean\r\n\t{\r\n\t\treturn this.indexOf(node)!= -1;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Gets the index of a particular node.\r\n\t * @param index\r\n\t */\r\n\tgetNodeAt(index:number):TNode\r\n\t{\r\n\t\tif(index<0)\r\n\t\t\treturn null;\r\n\r\n\t\tvar next = this._first, i:number = 0;\r\n\t\twhile(next && index):TNode {\r\n\t\tvar node:TNode = null;\r\n\t\tthis.forEach((n,i)=>{\r\n\t\t\tif(condition(n,i)) {\r\n\t\t\t\tnode = n;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn node;\r\n\t}\r\n\r\n\t/**\r\n\t * Iterates the list to find the specified node and returns its index.\r\n\t * @param node\r\n\t * @returns {boolean}\r\n\t */\r\n\tindexOf(node:TNode):number\r\n\t{\r\n\t\tif(node && (node.previous || node.next))\r\n\t\t{\r\n\r\n\t\t\tvar index = 0;\r\n\t\t\tvar c:TNode, n:TNode = this._first;\r\n\t\t\tdo {\r\n\t\t\t\tc = n;\r\n\t\t\t\tif(c===node) return index;\r\n\t\t\t\tindex++;\r\n\t\t\t}\r\n\t\t\twhile((n = c && c.next));\r\n\t\t}\r\n\r\n\t\treturn -1;\r\n\t}\r\n\r\n\t/**\r\n\t * Removes the first node and returns true if successful.\r\n\t * @returns {boolean}\r\n\t */\r\n\tremoveFirst():boolean\r\n\t{\r\n\t\treturn this.removeNode(this._first);\r\n\t}\r\n\r\n\t/**\r\n\t * Removes the last node and returns true if successful.\r\n\t * @returns {boolean}\r\n\t */\r\n\tremoveLast():boolean\r\n\t{\r\n\t\treturn this.removeNode(this._last);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Removes the specified node.\r\n\t * Returns true if successful and false if not found (already removed).\r\n\t * @param node\r\n\t * @returns {boolean}\r\n\t */\r\n\tremoveNode(node:TNode):boolean\r\n\t{\r\n\t\tif(node==null)\r\n\t\t\tthrow new ArgumentNullException('node');\r\n\r\n\t\tvar _ = this;\r\n\t\tvar prev = node.previous, next = node.next, a:boolean = false, b:boolean = false;\r\n\r\n\t\tif(prev) prev.next = next;\r\n\t\telse if(_._first==node) _._first = next;\r\n\t\telse a = true;\r\n\r\n\t\tif(next) next.previous = prev;\r\n\t\telse if(_._last==node) _._last = prev;\r\n\t\telse b = true;\r\n\r\n\t\tif(a!==b)\r\n\t\t{\r\n\t\t\tthrow new ArgumentException(\r\n\t\t\t\t'node', TextUtility.format(\r\n\t\t\t\t\t\"Provided node is has no {0} reference but is not the {1} node!\",\r\n\t\t\t\t\ta ? \"previous\" : \"next\", a ? \"first\" : \"last\"\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tvar removed = !a && !b;\r\n\t\tif(removed) _.unsafeCount--;\r\n\t\treturn removed;\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Adds a node to the end of the list.\r\n\t * @param node\r\n\t */\r\n\taddNode(node:TNode):void\r\n\t{\r\n\t\tthis.addNodeAfter(node);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Inserts a node before the specified 'before' node.\r\n\t * If no 'before' node is specified, it inserts it as the first node.\r\n\t * @param node\r\n\t * @param before\r\n\t */\r\n\taddNodeBefore(node:TNode, before?:TNode):void\r\n\t{\r\n\t\tassertValidDetached(node);\r\n\r\n\t\tvar _ = this;\r\n\r\n\t\tif(!before)\r\n\t\t{\r\n\t\t\tbefore = _._first;\r\n\t\t}\r\n\r\n\t\tif(before)\r\n\t\t{\r\n\t\t\tlet prev = before.previous;\r\n\t\t\tnode.previous = prev;\r\n\t\t\tnode.next = before;\r\n\r\n\t\t\tbefore.previous = node;\r\n\t\t\tif(prev) prev.next = node;\r\n\t\t\tif(before==_._first) _._last = node;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t_._first = _._last = node;\r\n\t\t}\r\n\r\n\t\t_.unsafeCount++;\r\n\t}\r\n\r\n\t/**\r\n\t * Inserts a node after the specified 'after' node.\r\n\t * If no 'after' node is specified, it appends it as the last node.\r\n\t * @param node\r\n\t * @param after\r\n\t */\r\n\taddNodeAfter(node:TNode, after?:TNode):void\r\n\t{\r\n\t\tassertValidDetached(node);\r\n\r\n\t\tvar _ = this;\r\n\r\n\t\tif(!after)\r\n\t\t{\r\n\t\t\tafter = _._last;\r\n\t\t}\r\n\r\n\t\tif(after)\r\n\t\t{\r\n\t\t\tlet next = after.next;\r\n\t\t\tnode.next = next;\r\n\t\t\tnode.previous = after;\r\n\r\n\t\t\tafter.next = node;\r\n\t\t\tif(next) next.previous = node;\r\n\t\t\tif(after==_._last) _._last = node;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t_._first = _._last = node;\r\n\t\t}\r\n\r\n\t\t_.unsafeCount++;\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Takes and existing node and replaces it.\r\n\t * @param node\r\n\t * @param replacement\r\n\t */\r\n\treplace(node:TNode, replacement:TNode):void\r\n\t{\r\n\r\n\t\tif(node==null)\r\n\t\t\tthrow new ArgumentNullException('node');\r\n\r\n\t\tassertValidDetached(replacement, 'replacement');\r\n\r\n\t\tvar _ = this;\r\n\t\treplacement.previous = node.previous;\r\n\t\treplacement.next = node.next;\r\n\r\n\t\tif(node.previous) node.previous.next = replacement;\r\n\t\tif(node.next) node.next.previous = replacement;\r\n\r\n\t\tif(node==_._first) _._first = replacement;\r\n\t\tif(node==_._last) _._last = replacement;\r\n\t}\r\n\r\n\tstatic valueEnumeratorFrom(list:LinkedNodeList>):IEnumerator {\r\n\r\n\t\tif(!list) throw new ArgumentNullException('list');\r\n\r\n\t\tvar _ = this,\r\n\t\t current:ILinkedNodeWithValue,\r\n\t\t next:ILinkedNodeWithValue;\r\n\r\n\t\treturn new EnumeratorBase(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\t// Initialize anchor...\r\n\t\t\t\tcurrent = null;\r\n\t\t\t\tnext = list.first;\r\n\t\t\t},\r\n\t\t\t(yielder)=>\r\n\t\t\t{\r\n\r\n\t\t\t\tif(next)\r\n\t\t\t\t{\r\n\t\t\t\t\tcurrent = next;\r\n\t\t\t\t\tnext = current && current.next;\r\n\t\t\t\t\treturn yielder.yieldReturn(current.value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn yielder.yieldBreak();\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tstatic copyValues>(\r\n\t\tlist:LinkedNodeList>,\r\n\t\tarray:TDestination,\r\n\t\tindex:number = 0):TDestination\r\n\t{\r\n\t\tif(list && list.first)\r\n\t\t{\r\n\t\t\tif(!array) throw new ArgumentNullException('array');\r\n\r\n\t\t\tlist.forEach(\r\n\t\t\t\t(node, i) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tarray[index + i] = node.value;\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn array;\r\n\t}\r\n\r\n}\r\n\r\nfunction assertValidDetached>(node:TNode, propName:string = 'node')\r\n{\r\n\r\n\tif(node==null)\r\n\t\tthrow new ArgumentNullException(propName);\r\n\r\n\tif(node.next || node.previous)\r\n\t\tthrow new InvalidOperationException(\"Cannot add a node to a LinkedNodeList that is already linked.\");\r\n\r\n}\r\n\r\nexport default LinkedNodeList;"]} \ No newline at end of file diff --git a/dist/commonjs/System/Collections/List.d.ts b/dist/commonjs/System/Collections/List.d.ts index 4841979b..a61054ad 100644 --- a/dist/commonjs/System/Collections/List.d.ts +++ b/dist/commonjs/System/Collections/List.d.ts @@ -25,6 +25,6 @@ export declare class List extends CollectionBase implements IList, IEnu contains(item: T): boolean; copyTo>(target: TTarget, index?: number): TTarget; getEnumerator(): IEnumerator; - forEach(action: Predicate | Action, useCopy?: boolean): void; + forEach(action: Predicate | Action, useCopy?: boolean): number; } export default List; diff --git a/dist/commonjs/System/Collections/List.js b/dist/commonjs/System/Collections/List.js index c0572895..e6f174fb 100644 --- a/dist/commonjs/System/Collections/List.js +++ b/dist/commonjs/System/Collections/List.js @@ -141,7 +141,7 @@ var List = function (_CollectionBase_1$Col) { key: "forEach", value: function forEach(action, useCopy) { var s = this._source; - Enumerator_1.forEach(useCopy ? s.slice() : s, action); + return Enumerator_1.forEach(useCopy ? s.slice() : s, action); } }]); diff --git a/dist/commonjs/System/Collections/List.js.map b/dist/commonjs/System/Collections/List.js.map index 9ab243ac..92c05c71 100644 --- a/dist/commonjs/System/Collections/List.js.map +++ b/dist/commonjs/System/Collections/List.js.map @@ -1 +1 @@ -{"version":3,"sources":["System/Collections/List.js","System/Collections/List.ts"],"names":[],"mappings":"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","file":"System/Collections/List.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst Compare_1 = require(\"../Compare\");\nconst Utility_1 = require(\"./Array/Utility\");\nconst Enumerator_1 = require(\"./Enumeration/Enumerator\");\nconst Types_1 = require(\"../Types\");\nconst ArrayEnumerator_1 = require(\"./Enumeration/ArrayEnumerator\");\nconst CollectionBase_1 = require(\"./CollectionBase\");\nclass List extends CollectionBase_1.CollectionBase {\n constructor(source, equalityComparer = Compare_1.areEqual) {\n super(null, equalityComparer);\n var _ = this;\n if (Array.isArray(source)) {\n _._source = source.slice();\n }\n else {\n _._source = [];\n _._importEntries(source);\n }\n }\n getCount() {\n return this._source.length;\n }\n _addInternal(entry) {\n this._source.push(entry);\n return true;\n }\n _removeInternal(entry, max = Infinity) {\n return Utility_1.remove(this._source, entry, max, this._equalityComparer);\n }\n _clearInternal() {\n var len = this._source.length;\n this._source.length = 0;\n return len;\n }\n _importEntries(entries) {\n if (Types_1.Type.isArrayLike(entries)) {\n var len = entries.length;\n if (!len)\n return 0;\n var s = this._source;\n var first = s.length;\n s.length += len;\n for (let i = 0; i < len; i++) {\n s[i + first] = entries[i];\n }\n return len;\n }\n else {\n return super._importEntries(entries);\n }\n }\n get(index) {\n return this._source[index];\n }\n set(index, value) {\n var s = this._source;\n if (index < s.length && Compare_1.areEqual(value, s[index]))\n return false;\n s[index] = value;\n this._onModified();\n return true;\n }\n indexOf(item) {\n return Utility_1.indexOf(this._source, item, this._equalityComparer);\n }\n insert(index, value) {\n var s = this._source;\n if (index < s.length) {\n this._source.splice(index, 0, value);\n }\n else {\n this._source[index] = value;\n }\n this._onModified();\n }\n removeAt(index) {\n if (Utility_1.removeIndex(this._source, index)) {\n this._onModified();\n return true;\n }\n return false;\n }\n contains(item) {\n return Utility_1.contains(this._source, item, this._equalityComparer);\n }\n copyTo(target, index) {\n return Utility_1.copyTo(this._source, target, 0, index);\n }\n getEnumerator() {\n return new ArrayEnumerator_1.ArrayEnumerator(this._source);\n }\n forEach(action, useCopy) {\n var s = this._source;\n Enumerator_1.forEach(useCopy ? s.slice() : s, action);\n }\n}\nexports.List = List;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = List;\n","/*!\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\nimport {areEqual} from \"../Compare\";\r\nimport {remove, indexOf, contains, copyTo, removeIndex} from \"./Array/Utility\";\r\nimport {forEach} from \"./Enumeration/Enumerator\";\r\nimport {Type} from \"../Types\";\r\nimport {ArrayEnumerator} from \"./Enumeration/ArrayEnumerator\";\r\nimport {CollectionBase} from \"./CollectionBase\";\r\nimport {Predicate, Action, EqualityComparison} from \"../FunctionTypes\";\r\nimport {IEnumerator} from \"./Enumeration/IEnumerator\";\r\nimport {IList} from \"./IList\";\r\nimport {IEnumerateEach} from \"./Enumeration/IEnumerateEach\";\r\nimport {IEnumerableOrArray} from \"./IEnumerableOrArray\";\r\nimport {IArray} from \"./Array/IArray\";\r\n\r\nexport class List\r\nextends CollectionBase implements IList, IEnumerateEach\r\n{\r\n\r\n\tprotected _source:T[];\r\n\r\n\tconstructor(\r\n\t\tsource?:IEnumerableOrArray,\r\n\t\tequalityComparer:EqualityComparison = areEqual)\r\n\t{\r\n\t\tsuper(null, equalityComparer);\r\n\t\tvar _ = this;\r\n\t\tif(Array.isArray(source))\r\n\t\t{\r\n\t\t\t_._source = source.slice();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t_._source = [];\r\n\t\t\t_._importEntries(source);\r\n\t\t}\r\n\t}\r\n\r\n\tprotected getCount():number\r\n\t{\r\n\t\treturn this._source.length;\r\n\t}\r\n\r\n\tprotected _addInternal(entry:T):boolean\r\n\t{\r\n\t\tthis._source.push(entry);\r\n\t\treturn true;\r\n\t}\r\n\r\n\tprotected _removeInternal(entry:T, max:number = Infinity):number\r\n\t{\r\n\t\treturn remove(\r\n\t\t\tthis._source, entry, max,\r\n\t\t\tthis._equalityComparer);\r\n\t}\r\n\r\n\tprotected _clearInternal():number\r\n\t{\r\n\t\tvar len = this._source.length;\r\n\t\tthis._source.length = 0;\r\n\t\treturn len;\r\n\t}\r\n\r\n\tprotected _importEntries(entries:IEnumerableOrArray):number\r\n\t{\r\n\t\tif(Type.isArrayLike(entries))\r\n\t\t{\r\n\t\t\tvar len = entries.length;\r\n\t\t\tif(!len) return 0;\r\n\t\t\tvar s = this._source;\r\n\r\n\t\t\tvar first = s.length;\r\n\t\t\ts.length += len;\r\n\t\t\tfor(let i = 0; i>(target:TTarget, index?:number):TTarget\r\n\t{\r\n\t\treturn copyTo(this._source, target, 0, index);\r\n\t}\r\n\r\n\tgetEnumerator():IEnumerator\r\n\t{\r\n\t\treturn new ArrayEnumerator(this._source);\r\n\t}\r\n\r\n\tforEach(action:Predicate|Action, useCopy?:boolean):void\r\n\t{\r\n\t\tvar s = this._source;\r\n\t\tforEach(useCopy ? s.slice() : s, action);\r\n\t}\r\n\r\n}\r\n\r\nexport default List;"]} \ No newline at end of file +{"version":3,"sources":["System/Collections/List.js","System/Collections/List.ts"],"names":[],"mappings":"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","file":"System/Collections/List.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst Compare_1 = require(\"../Compare\");\nconst Utility_1 = require(\"./Array/Utility\");\nconst Enumerator_1 = require(\"./Enumeration/Enumerator\");\nconst Types_1 = require(\"../Types\");\nconst ArrayEnumerator_1 = require(\"./Enumeration/ArrayEnumerator\");\nconst CollectionBase_1 = require(\"./CollectionBase\");\nclass List extends CollectionBase_1.CollectionBase {\n constructor(source, equalityComparer = Compare_1.areEqual) {\n super(null, equalityComparer);\n var _ = this;\n if (Array.isArray(source)) {\n _._source = source.slice();\n }\n else {\n _._source = [];\n _._importEntries(source);\n }\n }\n getCount() {\n return this._source.length;\n }\n _addInternal(entry) {\n this._source.push(entry);\n return true;\n }\n _removeInternal(entry, max = Infinity) {\n return Utility_1.remove(this._source, entry, max, this._equalityComparer);\n }\n _clearInternal() {\n var len = this._source.length;\n this._source.length = 0;\n return len;\n }\n _importEntries(entries) {\n if (Types_1.Type.isArrayLike(entries)) {\n var len = entries.length;\n if (!len)\n return 0;\n var s = this._source;\n var first = s.length;\n s.length += len;\n for (let i = 0; i < len; i++) {\n s[i + first] = entries[i];\n }\n return len;\n }\n else {\n return super._importEntries(entries);\n }\n }\n get(index) {\n return this._source[index];\n }\n set(index, value) {\n var s = this._source;\n if (index < s.length && Compare_1.areEqual(value, s[index]))\n return false;\n s[index] = value;\n this._onModified();\n return true;\n }\n indexOf(item) {\n return Utility_1.indexOf(this._source, item, this._equalityComparer);\n }\n insert(index, value) {\n var s = this._source;\n if (index < s.length) {\n this._source.splice(index, 0, value);\n }\n else {\n this._source[index] = value;\n }\n this._onModified();\n }\n removeAt(index) {\n if (Utility_1.removeIndex(this._source, index)) {\n this._onModified();\n return true;\n }\n return false;\n }\n contains(item) {\n return Utility_1.contains(this._source, item, this._equalityComparer);\n }\n copyTo(target, index) {\n return Utility_1.copyTo(this._source, target, 0, index);\n }\n getEnumerator() {\n return new ArrayEnumerator_1.ArrayEnumerator(this._source);\n }\n forEach(action, useCopy) {\n var s = this._source;\n return Enumerator_1.forEach(useCopy ? s.slice() : s, action);\n }\n}\nexports.List = List;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = List;\n","/*!\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\nimport {areEqual} from \"../Compare\";\r\nimport {remove, indexOf, contains, copyTo, removeIndex} from \"./Array/Utility\";\r\nimport {forEach} from \"./Enumeration/Enumerator\";\r\nimport {Type} from \"../Types\";\r\nimport {ArrayEnumerator} from \"./Enumeration/ArrayEnumerator\";\r\nimport {CollectionBase} from \"./CollectionBase\";\r\nimport {Predicate, Action, EqualityComparison} from \"../FunctionTypes\";\r\nimport {IEnumerator} from \"./Enumeration/IEnumerator\";\r\nimport {IList} from \"./IList\";\r\nimport {IEnumerateEach} from \"./Enumeration/IEnumerateEach\";\r\nimport {IEnumerableOrArray} from \"./IEnumerableOrArray\";\r\nimport {IArray} from \"./Array/IArray\";\r\n\r\nexport class List\r\nextends CollectionBase implements IList, IEnumerateEach\r\n{\r\n\r\n\tprotected _source:T[];\r\n\r\n\tconstructor(\r\n\t\tsource?:IEnumerableOrArray,\r\n\t\tequalityComparer:EqualityComparison = areEqual)\r\n\t{\r\n\t\tsuper(null, equalityComparer);\r\n\t\tvar _ = this;\r\n\t\tif(Array.isArray(source))\r\n\t\t{\r\n\t\t\t_._source = source.slice();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t_._source = [];\r\n\t\t\t_._importEntries(source);\r\n\t\t}\r\n\t}\r\n\r\n\tprotected getCount():number\r\n\t{\r\n\t\treturn this._source.length;\r\n\t}\r\n\r\n\tprotected _addInternal(entry:T):boolean\r\n\t{\r\n\t\tthis._source.push(entry);\r\n\t\treturn true;\r\n\t}\r\n\r\n\tprotected _removeInternal(entry:T, max:number = Infinity):number\r\n\t{\r\n\t\treturn remove(\r\n\t\t\tthis._source, entry, max,\r\n\t\t\tthis._equalityComparer);\r\n\t}\r\n\r\n\tprotected _clearInternal():number\r\n\t{\r\n\t\tvar len = this._source.length;\r\n\t\tthis._source.length = 0;\r\n\t\treturn len;\r\n\t}\r\n\r\n\tprotected _importEntries(entries:IEnumerableOrArray):number\r\n\t{\r\n\t\tif(Type.isArrayLike(entries))\r\n\t\t{\r\n\t\t\tvar len = entries.length;\r\n\t\t\tif(!len) return 0;\r\n\t\t\tvar s = this._source;\r\n\r\n\t\t\tvar first = s.length;\r\n\t\t\ts.length += len;\r\n\t\t\tfor(let i = 0; i>(target:TTarget, index?:number):TTarget\r\n\t{\r\n\t\treturn copyTo(this._source, target, 0, index);\r\n\t}\r\n\r\n\tgetEnumerator():IEnumerator\r\n\t{\r\n\t\treturn new ArrayEnumerator(this._source);\r\n\t}\r\n\r\n\tforEach(action:Predicate|Action, useCopy?:boolean):number\r\n\t{\r\n\t\tvar s = this._source;\r\n\t\treturn forEach(useCopy ? s.slice() : s, action);\r\n\t}\r\n\r\n}\r\n\r\nexport default List;"]} \ No newline at end of file diff --git a/dist/commonjs/System/Collections/Queue.d.ts b/dist/commonjs/System/Collections/Queue.d.ts index 818016a6..8813e487 100644 --- a/dist/commonjs/System/Collections/Queue.d.ts +++ b/dist/commonjs/System/Collections/Queue.d.ts @@ -20,7 +20,7 @@ export declare class Queue extends CollectionBase { protected _clearInternal(): number; protected _onDispose(): void; dump(max?: number): T[]; - forEach(action: Predicate | Action): void; + forEach(action: Predicate | Action): number; setCapacity(capacity: number): void; enqueue(item: T): void; protected _dequeueInternal(throwIfEmpty?: boolean): T; diff --git a/dist/commonjs/System/Collections/Queue.js b/dist/commonjs/System/Collections/Queue.js index 64522e0d..867a8c11 100644 --- a/dist/commonjs/System/Collections/Queue.js +++ b/dist/commonjs/System/Collections/Queue.js @@ -143,7 +143,7 @@ var Queue = function (_CollectionBase_1$Col) { }, { key: "forEach", value: function forEach(action) { - _get(Object.getPrototypeOf(Queue.prototype), "forEach", this).call(this, action, true); + return _get(Object.getPrototypeOf(Queue.prototype), "forEach", this).call(this, action, true); } }, { key: "setCapacity", diff --git a/dist/commonjs/System/Collections/Queue.js.map b/dist/commonjs/System/Collections/Queue.js.map index 7f463d52..67f64026 100644 --- a/dist/commonjs/System/Collections/Queue.js.map +++ b/dist/commonjs/System/Collections/Queue.js.map @@ -1 +1 @@ -{"version":3,"sources":["System/Collections/Queue.js","System/Collections/Queue.ts"],"names":[],"mappings":"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","file":"System/Collections/Queue.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Based Upon: http://referencesource.microsoft.com/#System/CompMod/system/collections/generic/queue.cs\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst Compare_1 = require(\"../Compare\");\nconst AU = require(\"./Array/Utility\");\nconst Types_1 = require(\"../Types\");\nconst Integer_1 = require(\"../Integer\");\nconst EnumeratorBase_1 = require(\"./Enumeration/EnumeratorBase\");\nconst NotImplementedException_1 = require(\"../Exceptions/NotImplementedException\");\nconst InvalidOperationException_1 = require(\"../Exceptions/InvalidOperationException\");\nconst ArgumentOutOfRangeException_1 = require(\"../Exceptions/ArgumentOutOfRangeException\");\nconst CollectionBase_1 = require(\"./CollectionBase\");\nconst MINIMUM_GROW = 4;\nconst SHRINK_THRESHOLD = 32;\nconst GROW_FACTOR_HALF = 100;\nconst DEFAULT_CAPACITY = MINIMUM_GROW;\nvar emptyArray = [];\nclass Queue extends CollectionBase_1.CollectionBase {\n constructor(source, equalityComparer = Compare_1.areEqual) {\n super(null, equalityComparer);\n var _ = this;\n _._head = 0;\n _._tail = 0;\n _._size = 0;\n if (!source)\n _._array = emptyArray;\n else {\n if (Types_1.Type.isNumber(source)) {\n var capacity = source;\n assertIntegerZeroOrGreater(capacity, \"capacity\");\n _._array = capacity\n ? AU.initialize(capacity)\n : emptyArray;\n }\n else {\n var se = source;\n _._array = AU.initialize(Types_1.Type.isArrayLike(se)\n ? se.length\n : DEFAULT_CAPACITY);\n _._importEntries(se);\n }\n }\n _._capacity = _._array.length;\n }\n getCount() {\n return this._size;\n }\n _addInternal(item) {\n var _ = this, array = _._array, size = _._size, len = _._capacity;\n if (size == len) {\n var newCapacity = len * GROW_FACTOR_HALF;\n if (newCapacity < len + MINIMUM_GROW)\n newCapacity = len + MINIMUM_GROW;\n _.setCapacity(newCapacity);\n array = _._array;\n len = _._capacity;\n }\n var tail = _._tail;\n array[tail] = item;\n _._tail = (tail + 1) % len;\n _._size = size + 1;\n return true;\n }\n _removeInternal(item, max) {\n throw new NotImplementedException_1.NotImplementedException(\"ICollection\\.remove is not implemented in Queue\\\" +\n \" since it would require destroying the underlying array to remove the item.\");\n }\n _clearInternal() {\n var _ = this, array = _._array, head = _._head, tail = _._tail, size = _._size;\n if (head < tail)\n AU.clear(array, head, tail);\n else {\n AU.clear(array, head, array.length - head);\n AU.clear(array, 0, tail);\n }\n _._head = 0;\n _._tail = 0;\n _._size = 0;\n _.trimExcess();\n return size;\n }\n _onDispose() {\n super._onDispose();\n var _ = this;\n if (_._array != emptyArray) {\n _._array.length = _._capacity = 0;\n _._array = emptyArray;\n }\n }\n dump(max = Infinity) {\n var _ = this, result = [];\n if (isFinite(max)) {\n Integer_1.Integer.assertZeroOrGreater(max);\n if (max !== 0) {\n while (max-- && _._size) {\n result.push(_._dequeueInternal());\n }\n }\n }\n else {\n while (_._size) {\n result.push(_._dequeueInternal());\n }\n }\n _.trimExcess();\n _._signalModification();\n return result;\n }\n forEach(action) {\n super.forEach(action, true);\n }\n setCapacity(capacity) {\n assertIntegerZeroOrGreater(capacity, \"capacity\");\n var _ = this, array = _._array, len = _._capacity;\n if (capacity == len)\n return;\n var head = _._head, tail = _._tail, size = _._size;\n if (array != emptyArray && capacity > len && head < tail) {\n array.length = _._capacity = capacity;\n _._version++;\n return;\n }\n var newArray = AU.initialize(capacity);\n if (size > 0) {\n if (head < tail) {\n AU.copyTo(array, newArray, head, 0, size);\n }\n else {\n AU.copyTo(array, newArray, head, 0, len - head);\n AU.copyTo(array, newArray, 0, len - head, tail);\n }\n }\n _._array = newArray;\n _._capacity = capacity;\n _._head = 0;\n _._tail = (size == capacity) ? 0 : size;\n _._signalModification(true);\n }\n enqueue(item) {\n this.add(item);\n }\n _dequeueInternal(throwIfEmpty = false) {\n var _ = this;\n if (_._size == 0) {\n if (throwIfEmpty)\n throw new InvalidOperationException_1.InvalidOperationException(\"Cannot dequeue an empty queue.\");\n return void 0;\n }\n var array = _._array, head = _._head;\n var removed = _._array[head];\n array[head] = null;\n _._head = (head + 1) % _._capacity;\n _._size--;\n _._incrementModified();\n return removed;\n }\n dequeue(throwIfEmpty = false) {\n var _ = this;\n _.assertModifiable();\n var modified = !!_._size;\n var v = this._dequeueInternal(throwIfEmpty);\n if (modified && _._size < _._capacity / 2)\n _.trimExcess(SHRINK_THRESHOLD);\n _._signalModification();\n return v;\n }\n tryDequeue(out) {\n if (!this._size)\n return false;\n var d = this.dequeue();\n if (out)\n out(d);\n return true;\n }\n _getElement(index) {\n assertIntegerZeroOrGreater(index, \"index\");\n var _ = this;\n return _._array[(_._head + index) % _._capacity];\n }\n peek() {\n if (this._size == 0)\n throw new InvalidOperationException_1.InvalidOperationException(\"Cannot call peek on an empty queue.\");\n return this._array[this._head];\n }\n trimExcess(threshold) {\n var _ = this;\n var size = _._size;\n if (size < Math.floor(_._capacity * 0.9) && (isNaN(threshold) || threshold < size))\n _.setCapacity(size);\n }\n getEnumerator() {\n var _ = this;\n var index;\n var version;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n version = _._version;\n index = 0;\n }, (yielder) => {\n _.assertVersion(version);\n if (index == _._size)\n return yielder.yieldBreak();\n return yielder.yieldReturn(_._getElement(index++));\n });\n }\n}\nexports.Queue = Queue;\nfunction assertZeroOrGreater(value, property) {\n if (value < 0)\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException(property, value, \"Must be greater than zero\");\n}\nfunction assertIntegerZeroOrGreater(value, property) {\n Integer_1.Integer.assert(value, property);\n assertZeroOrGreater(value, property);\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = Queue;\n","/*!\r\n * @author electricessence / https://github.com/electricessence/\r\n * Based Upon: http://referencesource.microsoft.com/#System/CompMod/system/collections/generic/queue.cs\r\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\r\n */\r\n\r\nimport {areEqual} from \"../Compare\";\r\nimport * as AU from \"./Array/Utility\";\r\nimport {Type} from \"../Types\";\r\nimport {Integer} from \"../Integer\";\r\nimport {EnumeratorBase} from \"./Enumeration/EnumeratorBase\";\r\nimport {NotImplementedException} from \"../Exceptions/NotImplementedException\";\r\nimport {InvalidOperationException} from \"../Exceptions/InvalidOperationException\";\r\nimport {ArgumentOutOfRangeException} from \"../Exceptions/ArgumentOutOfRangeException\";\r\nimport {CollectionBase} from \"./CollectionBase\";\r\nimport {EqualityComparison, Predicate, Action} from \"../FunctionTypes\";\r\nimport {IEnumerator} from \"./Enumeration/IEnumerator\";\r\nimport {IEnumerableOrArray} from \"./IEnumerableOrArray\";\r\n\r\nconst MINIMUM_GROW:number = 4;\r\nconst SHRINK_THRESHOLD:number = 32; // Unused?\r\n// var GROW_FACTOR: number = 200; // double each time\r\nconst GROW_FACTOR_HALF:number = 100;\r\nconst DEFAULT_CAPACITY:number = MINIMUM_GROW;\r\nvar emptyArray:any[] = [];\r\n\r\nexport class Queue\r\nextends CollectionBase\r\n{\r\n\r\n\tprivate _array:T[];\r\n\tprivate _head:number; // First valid element in the queue\r\n\tprivate _tail:number; // Last valid element in the queue\r\n\tprivate _size:number; // Number of elements.\r\n\tprivate _capacity:number; // Maps to _array.length;\r\n\r\n\tconstructor(\r\n\t\tsource?:IEnumerableOrArray | number,\r\n\t\tequalityComparer:EqualityComparison = areEqual)\r\n\t{\r\n\t\tsuper(null, equalityComparer);\r\n\t\tvar _ = this;\r\n\t\t_._head = 0;\r\n\t\t_._tail = 0;\r\n\t\t_._size = 0;\r\n\r\n\t\tif(!source)\r\n\t\t\t_._array = emptyArray;\r\n\t\telse\r\n\t\t{\r\n\t\t\tif(Type.isNumber(source))\r\n\t\t\t{\r\n\t\t\t\tvar capacity = source;\r\n\t\t\t\tassertIntegerZeroOrGreater(capacity, \"capacity\");\r\n\r\n\t\t\t\t_._array = capacity\r\n\t\t\t\t\t? AU.initialize(capacity)\r\n\t\t\t\t\t: emptyArray;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tvar se = > source;\r\n\t\t\t\t_._array = AU.initialize(\r\n\t\t\t\t\tType.isArrayLike(se)\r\n\t\t\t\t\t\t? se.length\r\n\t\t\t\t\t\t: DEFAULT_CAPACITY\r\n\t\t\t\t);\r\n\r\n\t\t\t\t_._importEntries(se);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t_._capacity = _._array.length;\r\n\t}\r\n\r\n\tprotected getCount():number\r\n\t{\r\n\t\treturn this._size;\r\n\t}\r\n\r\n\tprotected _addInternal(item:T):boolean\r\n\t{\r\n\t\tvar _ = this, array = _._array, size = _._size, len = _._capacity;\r\n\t\tif(size==len)\r\n\t\t{\r\n\t\t\tvar newCapacity = len*GROW_FACTOR_HALF;\r\n\t\t\tif(newCapacity.remove is not implemented in Queue\\\" +\r\n\t\t\t\" since it would require destroying the underlying array to remove the item.\"\r\n\t\t);\r\n\t}\r\n\r\n\tprotected _clearInternal():number\r\n\t{\r\n\t\tvar _ = this, array = _._array, head = _._head, tail = _._tail, size = _._size;\r\n\t\tif(head | Action):void\r\n\t{\r\n\t\tsuper.forEach(action, true);\r\n\t}\r\n\r\n\tsetCapacity(capacity:number):void\r\n\t{\r\n\r\n\t\tassertIntegerZeroOrGreater(capacity, \"capacity\");\r\n\r\n\t\tvar _ = this, array = _._array, len = _._capacity;\r\n\r\n\t\tif(capacity==len)\r\n\t\t\treturn;\r\n\r\n\t\tvar head = _._head, tail = _._tail, size = _._size;\r\n\r\n\t\t// Special case where we can simply extend the length of the array. (JavaScript only)\r\n\t\tif(array!=emptyArray && capacity>len && head(capacity);\r\n\t\tif(size>0)\r\n\t\t{\r\n\t\t\tif(headvoid):boolean\r\n\t{\r\n\t\tif(!this._size) return false;\r\n\t\tvar d = this.dequeue();\r\n\t\tif(out) out(d);\r\n\t\treturn true;\r\n\t}\r\n\r\n\tprivate _getElement(index:number):T\r\n\t{\r\n\t\tassertIntegerZeroOrGreater(index, \"index\");\r\n\r\n\t\tvar _ = this;\r\n\t\treturn _._array[(_._head + index)%_._capacity];\r\n\t}\r\n\r\n\tpeek():T\r\n\t{\r\n\t\tif(this._size==0)\r\n\t\t\tthrow new InvalidOperationException(\"Cannot call peek on an empty queue.\");\r\n\r\n\t\treturn this._array[this._head];\r\n\t}\r\n\r\n\ttrimExcess(threshold?:number):void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tvar size = _._size;\r\n\t\tif(size\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tvar index:number;\r\n\t\tvar version:number;\r\n\t\treturn new EnumeratorBase(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tversion = _._version;\r\n\t\t\t\tindex = 0;\r\n\t\t\t},\r\n\t\t\t(yielder)=>\r\n\t\t\t{\r\n\t\t\t\t_.assertVersion(version);\r\n\r\n\t\t\t\tif(index==_._size)\r\n\t\t\t\t\treturn yielder.yieldBreak();\r\n\r\n\t\t\t\treturn yielder.yieldReturn(_._getElement(index++));\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n}\r\n\r\nfunction assertZeroOrGreater(value:number, property:string):void\r\n{\r\n\tif(value<0)\r\n\t\tthrow new ArgumentOutOfRangeException(property, value, \"Must be greater than zero\");\r\n\r\n}\r\n\r\nfunction assertIntegerZeroOrGreater(value:number, property:string):void\r\n{\r\n\tInteger.assert(value, property);\r\n\tassertZeroOrGreater(value, property);\r\n}\r\n\r\nexport default Queue;\r\n"]} \ No newline at end of file +{"version":3,"sources":["System/Collections/Queue.js","System/Collections/Queue.ts"],"names":[],"mappings":"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","file":"System/Collections/Queue.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Based Upon: http://referencesource.microsoft.com/#System/CompMod/system/collections/generic/queue.cs\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst Compare_1 = require(\"../Compare\");\nconst AU = require(\"./Array/Utility\");\nconst Types_1 = require(\"../Types\");\nconst Integer_1 = require(\"../Integer\");\nconst EnumeratorBase_1 = require(\"./Enumeration/EnumeratorBase\");\nconst NotImplementedException_1 = require(\"../Exceptions/NotImplementedException\");\nconst InvalidOperationException_1 = require(\"../Exceptions/InvalidOperationException\");\nconst ArgumentOutOfRangeException_1 = require(\"../Exceptions/ArgumentOutOfRangeException\");\nconst CollectionBase_1 = require(\"./CollectionBase\");\nconst MINIMUM_GROW = 4;\nconst SHRINK_THRESHOLD = 32;\nconst GROW_FACTOR_HALF = 100;\nconst DEFAULT_CAPACITY = MINIMUM_GROW;\nvar emptyArray = [];\nclass Queue extends CollectionBase_1.CollectionBase {\n constructor(source, equalityComparer = Compare_1.areEqual) {\n super(null, equalityComparer);\n var _ = this;\n _._head = 0;\n _._tail = 0;\n _._size = 0;\n if (!source)\n _._array = emptyArray;\n else {\n if (Types_1.Type.isNumber(source)) {\n var capacity = source;\n assertIntegerZeroOrGreater(capacity, \"capacity\");\n _._array = capacity\n ? AU.initialize(capacity)\n : emptyArray;\n }\n else {\n var se = source;\n _._array = AU.initialize(Types_1.Type.isArrayLike(se)\n ? se.length\n : DEFAULT_CAPACITY);\n _._importEntries(se);\n }\n }\n _._capacity = _._array.length;\n }\n getCount() {\n return this._size;\n }\n _addInternal(item) {\n var _ = this, array = _._array, size = _._size, len = _._capacity;\n if (size == len) {\n var newCapacity = len * GROW_FACTOR_HALF;\n if (newCapacity < len + MINIMUM_GROW)\n newCapacity = len + MINIMUM_GROW;\n _.setCapacity(newCapacity);\n array = _._array;\n len = _._capacity;\n }\n var tail = _._tail;\n array[tail] = item;\n _._tail = (tail + 1) % len;\n _._size = size + 1;\n return true;\n }\n _removeInternal(item, max) {\n throw new NotImplementedException_1.NotImplementedException(\"ICollection\\.remove is not implemented in Queue\\\" +\n \" since it would require destroying the underlying array to remove the item.\");\n }\n _clearInternal() {\n var _ = this, array = _._array, head = _._head, tail = _._tail, size = _._size;\n if (head < tail)\n AU.clear(array, head, tail);\n else {\n AU.clear(array, head, array.length - head);\n AU.clear(array, 0, tail);\n }\n _._head = 0;\n _._tail = 0;\n _._size = 0;\n _.trimExcess();\n return size;\n }\n _onDispose() {\n super._onDispose();\n var _ = this;\n if (_._array != emptyArray) {\n _._array.length = _._capacity = 0;\n _._array = emptyArray;\n }\n }\n dump(max = Infinity) {\n var _ = this, result = [];\n if (isFinite(max)) {\n Integer_1.Integer.assertZeroOrGreater(max);\n if (max !== 0) {\n while (max-- && _._size) {\n result.push(_._dequeueInternal());\n }\n }\n }\n else {\n while (_._size) {\n result.push(_._dequeueInternal());\n }\n }\n _.trimExcess();\n _._signalModification();\n return result;\n }\n forEach(action) {\n return super.forEach(action, true);\n }\n setCapacity(capacity) {\n assertIntegerZeroOrGreater(capacity, \"capacity\");\n var _ = this, array = _._array, len = _._capacity;\n if (capacity == len)\n return;\n var head = _._head, tail = _._tail, size = _._size;\n if (array != emptyArray && capacity > len && head < tail) {\n array.length = _._capacity = capacity;\n _._version++;\n return;\n }\n var newArray = AU.initialize(capacity);\n if (size > 0) {\n if (head < tail) {\n AU.copyTo(array, newArray, head, 0, size);\n }\n else {\n AU.copyTo(array, newArray, head, 0, len - head);\n AU.copyTo(array, newArray, 0, len - head, tail);\n }\n }\n _._array = newArray;\n _._capacity = capacity;\n _._head = 0;\n _._tail = (size == capacity) ? 0 : size;\n _._signalModification(true);\n }\n enqueue(item) {\n this.add(item);\n }\n _dequeueInternal(throwIfEmpty = false) {\n var _ = this;\n if (_._size == 0) {\n if (throwIfEmpty)\n throw new InvalidOperationException_1.InvalidOperationException(\"Cannot dequeue an empty queue.\");\n return void 0;\n }\n var array = _._array, head = _._head;\n var removed = _._array[head];\n array[head] = null;\n _._head = (head + 1) % _._capacity;\n _._size--;\n _._incrementModified();\n return removed;\n }\n dequeue(throwIfEmpty = false) {\n var _ = this;\n _.assertModifiable();\n var modified = !!_._size;\n var v = this._dequeueInternal(throwIfEmpty);\n if (modified && _._size < _._capacity / 2)\n _.trimExcess(SHRINK_THRESHOLD);\n _._signalModification();\n return v;\n }\n tryDequeue(out) {\n if (!this._size)\n return false;\n var d = this.dequeue();\n if (out)\n out(d);\n return true;\n }\n _getElement(index) {\n assertIntegerZeroOrGreater(index, \"index\");\n var _ = this;\n return _._array[(_._head + index) % _._capacity];\n }\n peek() {\n if (this._size == 0)\n throw new InvalidOperationException_1.InvalidOperationException(\"Cannot call peek on an empty queue.\");\n return this._array[this._head];\n }\n trimExcess(threshold) {\n var _ = this;\n var size = _._size;\n if (size < Math.floor(_._capacity * 0.9) && (isNaN(threshold) || threshold < size))\n _.setCapacity(size);\n }\n getEnumerator() {\n var _ = this;\n var index;\n var version;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n version = _._version;\n index = 0;\n }, (yielder) => {\n _.assertVersion(version);\n if (index == _._size)\n return yielder.yieldBreak();\n return yielder.yieldReturn(_._getElement(index++));\n });\n }\n}\nexports.Queue = Queue;\nfunction assertZeroOrGreater(value, property) {\n if (value < 0)\n throw new ArgumentOutOfRangeException_1.ArgumentOutOfRangeException(property, value, \"Must be greater than zero\");\n}\nfunction assertIntegerZeroOrGreater(value, property) {\n Integer_1.Integer.assert(value, property);\n assertZeroOrGreater(value, property);\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = Queue;\n","/*!\r\n * @author electricessence / https://github.com/electricessence/\r\n * Based Upon: http://referencesource.microsoft.com/#System/CompMod/system/collections/generic/queue.cs\r\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\r\n */\r\n\r\nimport {areEqual} from \"../Compare\";\r\nimport * as AU from \"./Array/Utility\";\r\nimport {Type} from \"../Types\";\r\nimport {Integer} from \"../Integer\";\r\nimport {EnumeratorBase} from \"./Enumeration/EnumeratorBase\";\r\nimport {NotImplementedException} from \"../Exceptions/NotImplementedException\";\r\nimport {InvalidOperationException} from \"../Exceptions/InvalidOperationException\";\r\nimport {ArgumentOutOfRangeException} from \"../Exceptions/ArgumentOutOfRangeException\";\r\nimport {CollectionBase} from \"./CollectionBase\";\r\nimport {EqualityComparison, Predicate, Action} from \"../FunctionTypes\";\r\nimport {IEnumerator} from \"./Enumeration/IEnumerator\";\r\nimport {IEnumerableOrArray} from \"./IEnumerableOrArray\";\r\n\r\nconst MINIMUM_GROW:number = 4;\r\nconst SHRINK_THRESHOLD:number = 32; // Unused?\r\n// var GROW_FACTOR: number = 200; // double each time\r\nconst GROW_FACTOR_HALF:number = 100;\r\nconst DEFAULT_CAPACITY:number = MINIMUM_GROW;\r\nvar emptyArray:any[] = [];\r\n\r\nexport class Queue\r\nextends CollectionBase\r\n{\r\n\r\n\tprivate _array:T[];\r\n\tprivate _head:number; // First valid element in the queue\r\n\tprivate _tail:number; // Last valid element in the queue\r\n\tprivate _size:number; // Number of elements.\r\n\tprivate _capacity:number; // Maps to _array.length;\r\n\r\n\tconstructor(\r\n\t\tsource?:IEnumerableOrArray | number,\r\n\t\tequalityComparer:EqualityComparison = areEqual)\r\n\t{\r\n\t\tsuper(null, equalityComparer);\r\n\t\tvar _ = this;\r\n\t\t_._head = 0;\r\n\t\t_._tail = 0;\r\n\t\t_._size = 0;\r\n\r\n\t\tif(!source)\r\n\t\t\t_._array = emptyArray;\r\n\t\telse\r\n\t\t{\r\n\t\t\tif(Type.isNumber(source))\r\n\t\t\t{\r\n\t\t\t\tvar capacity = source;\r\n\t\t\t\tassertIntegerZeroOrGreater(capacity, \"capacity\");\r\n\r\n\t\t\t\t_._array = capacity\r\n\t\t\t\t\t? AU.initialize(capacity)\r\n\t\t\t\t\t: emptyArray;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tvar se = > source;\r\n\t\t\t\t_._array = AU.initialize(\r\n\t\t\t\t\tType.isArrayLike(se)\r\n\t\t\t\t\t\t? se.length\r\n\t\t\t\t\t\t: DEFAULT_CAPACITY\r\n\t\t\t\t);\r\n\r\n\t\t\t\t_._importEntries(se);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t_._capacity = _._array.length;\r\n\t}\r\n\r\n\tprotected getCount():number\r\n\t{\r\n\t\treturn this._size;\r\n\t}\r\n\r\n\tprotected _addInternal(item:T):boolean\r\n\t{\r\n\t\tvar _ = this, array = _._array, size = _._size, len = _._capacity;\r\n\t\tif(size==len)\r\n\t\t{\r\n\t\t\tvar newCapacity = len*GROW_FACTOR_HALF;\r\n\t\t\tif(newCapacity.remove is not implemented in Queue\\\" +\r\n\t\t\t\" since it would require destroying the underlying array to remove the item.\"\r\n\t\t);\r\n\t}\r\n\r\n\tprotected _clearInternal():number\r\n\t{\r\n\t\tvar _ = this, array = _._array, head = _._head, tail = _._tail, size = _._size;\r\n\t\tif(head | Action):number\r\n\t{\r\n\t\treturn super.forEach(action, true);\r\n\t}\r\n\r\n\tsetCapacity(capacity:number):void\r\n\t{\r\n\r\n\t\tassertIntegerZeroOrGreater(capacity, \"capacity\");\r\n\r\n\t\tvar _ = this, array = _._array, len = _._capacity;\r\n\r\n\t\tif(capacity==len)\r\n\t\t\treturn;\r\n\r\n\t\tvar head = _._head, tail = _._tail, size = _._size;\r\n\r\n\t\t// Special case where we can simply extend the length of the array. (JavaScript only)\r\n\t\tif(array!=emptyArray && capacity>len && head(capacity);\r\n\t\tif(size>0)\r\n\t\t{\r\n\t\t\tif(headvoid):boolean\r\n\t{\r\n\t\tif(!this._size) return false;\r\n\t\tvar d = this.dequeue();\r\n\t\tif(out) out(d);\r\n\t\treturn true;\r\n\t}\r\n\r\n\tprivate _getElement(index:number):T\r\n\t{\r\n\t\tassertIntegerZeroOrGreater(index, \"index\");\r\n\r\n\t\tvar _ = this;\r\n\t\treturn _._array[(_._head + index)%_._capacity];\r\n\t}\r\n\r\n\tpeek():T\r\n\t{\r\n\t\tif(this._size==0)\r\n\t\t\tthrow new InvalidOperationException(\"Cannot call peek on an empty queue.\");\r\n\r\n\t\treturn this._array[this._head];\r\n\t}\r\n\r\n\ttrimExcess(threshold?:number):void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tvar size = _._size;\r\n\t\tif(size\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tvar index:number;\r\n\t\tvar version:number;\r\n\t\treturn new EnumeratorBase(\r\n\t\t\t() =>\r\n\t\t\t{\r\n\t\t\t\tversion = _._version;\r\n\t\t\t\tindex = 0;\r\n\t\t\t},\r\n\t\t\t(yielder)=>\r\n\t\t\t{\r\n\t\t\t\t_.assertVersion(version);\r\n\r\n\t\t\t\tif(index==_._size)\r\n\t\t\t\t\treturn yielder.yieldBreak();\r\n\r\n\t\t\t\treturn yielder.yieldReturn(_._getElement(index++));\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n}\r\n\r\nfunction assertZeroOrGreater(value:number, property:string):void\r\n{\r\n\tif(value<0)\r\n\t\tthrow new ArgumentOutOfRangeException(property, value, \"Must be greater than zero\");\r\n\r\n}\r\n\r\nfunction assertIntegerZeroOrGreater(value:number, property:string):void\r\n{\r\n\tInteger.assert(value, property);\r\n\tassertZeroOrGreater(value, property);\r\n}\r\n\r\nexport default Queue;\r\n"]} \ No newline at end of file diff --git a/dist/commonjs/System/Collections/SetBase.d.ts b/dist/commonjs/System/Collections/SetBase.d.ts index efd9f1c3..508a4c10 100644 --- a/dist/commonjs/System/Collections/SetBase.d.ts +++ b/dist/commonjs/System/Collections/SetBase.d.ts @@ -31,7 +31,7 @@ export declare abstract class SetBase extends CollectionBase implements IS protected abstract _getNode(item: T): ILinkedNodeWithValue; contains(item: T): boolean; getEnumerator(): IEnumerator; - forEach(action: Predicate | Action, useCopy?: boolean): void; + forEach(action: Predicate | Action, useCopy?: boolean): number; protected _removeNode(node: ILinkedNodeWithValue): boolean; removeFirst(): boolean; removeLast(): boolean; diff --git a/dist/commonjs/System/Collections/SetBase.js b/dist/commonjs/System/Collections/SetBase.js index 20e685c6..cb995335 100644 --- a/dist/commonjs/System/Collections/SetBase.js +++ b/dist/commonjs/System/Collections/SetBase.js @@ -17,6 +17,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var LinkedNodeList_1 = require("./LinkedNodeList"); var ArgumentNullException_1 = require("../Exceptions/ArgumentNullException"); var Enumerator_1 = require("./Enumeration/Enumerator"); +var EmptyEnumerator_1 = require("./Enumeration/EmptyEnumerator"); var dispose_1 = require("../Disposable/dispose"); var Compare_1 = require("../Compare"); var CollectionBase_1 = require("./CollectionBase"); @@ -95,12 +96,12 @@ var SetBase = function (_CollectionBase_1$Col) { result = this.isSupersetOf(other); count = other.getCount(); } else { - dispose_1.using(this.newUsing(), function (o) { + count = dispose_1.using(this.newUsing(), function (o) { Enumerator_1.forEach(other, function (v) { o.add(v); return result = _this3.contains(v); }); - count = o.getCount(); + return o.getCount(); }); } return result && this.getCount() > count; @@ -193,14 +194,14 @@ var SetBase = function (_CollectionBase_1$Col) { key: "getEnumerator", value: function getEnumerator() { var s = this._set; - return s && this.getCount() ? LinkedNodeList_1.LinkedNodeList.valueEnumeratorFrom(s) : Enumerator_1.empty; + return s && this.getCount() ? LinkedNodeList_1.LinkedNodeList.valueEnumeratorFrom(s) : EmptyEnumerator_1.EmptyEnumerator; } }, { key: "forEach", value: function forEach(action) { var useCopy = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; - if (useCopy) _get(Object.getPrototypeOf(SetBase.prototype), "forEach", this).call(this, action, useCopy);else this._set.forEach(function (node, i) { + return useCopy ? _get(Object.getPrototypeOf(SetBase.prototype), "forEach", this).call(this, action, useCopy) : this._set.forEach(function (node, i) { return action(node.value, i); }); } diff --git a/dist/commonjs/System/Collections/SetBase.js.map b/dist/commonjs/System/Collections/SetBase.js.map index 7b10ece2..fff6f168 100644 --- a/dist/commonjs/System/Collections/SetBase.js.map +++ b/dist/commonjs/System/Collections/SetBase.js.map @@ -1 +1 @@ -{"version":3,"sources":["System/Collections/SetBase.js","System/Collections/SetBase.ts"],"names":[],"mappings":"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","file":"System/Collections/SetBase.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst LinkedNodeList_1 = require(\"./LinkedNodeList\");\nconst ArgumentNullException_1 = require(\"../Exceptions/ArgumentNullException\");\nconst Enumerator_1 = require(\"./Enumeration/Enumerator\");\nconst dispose_1 = require(\"../Disposable/dispose\");\nconst Compare_1 = require(\"../Compare\");\nconst CollectionBase_1 = require(\"./CollectionBase\");\nconst OTHER = 'other';\nclass SetBase extends CollectionBase_1.CollectionBase {\n constructor(source) {\n super(null, Compare_1.areEqual);\n this._importEntries(source);\n }\n _getSet() {\n var s = this._set;\n if (!s)\n this._set = s = new LinkedNodeList_1.LinkedNodeList();\n return s;\n }\n getCount() {\n return this._set ? this._set.unsafeCount : 0;\n }\n exceptWith(other) {\n var _ = this;\n if (!other)\n throw new ArgumentNullException_1.ArgumentNullException(OTHER);\n Enumerator_1.forEach(other, v => {\n if (_._removeInternal(v))\n _._incrementModified();\n });\n _._signalModification();\n }\n intersectWith(other) {\n if (!other)\n throw new ArgumentNullException_1.ArgumentNullException(OTHER);\n var _ = this;\n if (other instanceof SetBase) {\n let s = _._set;\n if (s)\n s.forEach(n => {\n if (!other.contains(n.value) && _._removeInternal(n.value))\n _._incrementModified();\n });\n _._signalModification();\n }\n else {\n dispose_1.using(_.newUsing(other), o => _.intersectWith(o));\n }\n }\n isProperSubsetOf(other) {\n if (!other)\n throw new ArgumentNullException_1.ArgumentNullException(OTHER);\n return other instanceof SetBase\n ? other.isProperSupersetOf(this)\n : dispose_1.using(this.newUsing(other), o => o.isProperSupersetOf(this));\n }\n isProperSupersetOf(other) {\n if (!other)\n throw new ArgumentNullException_1.ArgumentNullException(OTHER);\n var result = true, count;\n if (other instanceof SetBase) {\n result = this.isSupersetOf(other);\n count = other.getCount();\n }\n else {\n dispose_1.using(this.newUsing(), o => {\n Enumerator_1.forEach(other, v => {\n o.add(v);\n return result = this.contains(v);\n });\n count = o.getCount();\n });\n }\n return result && this.getCount() > count;\n }\n isSubsetOf(other) {\n if (!other)\n throw new ArgumentNullException_1.ArgumentNullException(OTHER);\n return other instanceof SetBase\n ? other.isSupersetOf(this)\n : dispose_1.using(this.newUsing(other), o => o.isSupersetOf(this));\n }\n isSupersetOf(other) {\n if (!other)\n throw new ArgumentNullException_1.ArgumentNullException(OTHER);\n var result = true;\n Enumerator_1.forEach(other, v => {\n return result = this.contains(v);\n });\n return result;\n }\n overlaps(other) {\n if (!other)\n throw new ArgumentNullException_1.ArgumentNullException(OTHER);\n var result = false;\n Enumerator_1.forEach(other, v => !(result = this.contains(v)));\n return result;\n }\n setEquals(other) {\n if (!other)\n throw new ArgumentNullException_1.ArgumentNullException(OTHER);\n return this.getCount() == (other instanceof SetBase\n ? other.getCount()\n : dispose_1.using(this.newUsing(other), o => o.getCount()))\n && this.isSubsetOf(other);\n }\n symmetricExceptWith(other) {\n if (!other)\n throw new ArgumentNullException_1.ArgumentNullException(OTHER);\n var _ = this;\n if (other instanceof SetBase) {\n Enumerator_1.forEach(other, v => {\n if (_.contains(v)) {\n if (_._removeInternal(v))\n _._incrementModified();\n }\n else {\n if (_._addInternal(v))\n _._incrementModified();\n }\n });\n _._signalModification();\n }\n else {\n dispose_1.using(this.newUsing(other), o => _.symmetricExceptWith(o));\n }\n }\n unionWith(other) {\n this.importEntries(other);\n }\n _clearInternal() {\n var s = this._set;\n return s ? s.clear() : 0;\n }\n _onDispose() {\n super._onDispose();\n this._set = null;\n }\n contains(item) {\n return !(!this.getCount() || !this._getNode(item));\n }\n getEnumerator() {\n var s = this._set;\n return s && this.getCount()\n ? LinkedNodeList_1.LinkedNodeList.valueEnumeratorFrom(s)\n : Enumerator_1.empty;\n }\n forEach(action, useCopy = false) {\n if (useCopy)\n super.forEach(action, useCopy);\n else\n this._set.forEach((node, i) => action(node.value, i));\n }\n _removeNode(node) {\n if (!node)\n return false;\n return this.remove(node.value) != 0;\n }\n removeFirst() {\n var s = this._set;\n return this._removeNode(s && s.first);\n }\n removeLast() {\n var s = this._set;\n return this._removeNode(s && s.last);\n }\n}\nexports.SetBase = SetBase;\nfunction wipe(map, depth = 1) {\n if (map && depth) {\n for (var key of Object.keys(map)) {\n var v = map[key];\n delete map[key];\n wipe(v, depth - 1);\n }\n }\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = SetBase;\n","/*!\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\nimport {LinkedNodeList} from \"./LinkedNodeList\";\r\nimport {ArgumentNullException} from \"../Exceptions/ArgumentNullException\";\r\nimport {forEach, empty as emptyEnumerator} from \"./Enumeration/Enumerator\";\r\nimport {using} from \"../Disposable/dispose\";\r\nimport {areEqual} from \"../Compare\";\r\nimport {CollectionBase} from \"./CollectionBase\";\r\nimport {IDisposable} from \"../Disposable/IDisposable\";\r\nimport {ILinkedNodeWithValue} from \"./ILinkedListNode\";\r\nimport {Predicate, Action} from \"../FunctionTypes\";\r\nimport {IMap} from \"./Dictionaries/IDictionary\";\r\nimport {IEnumerator} from \"./Enumeration/IEnumerator\";\r\nimport {IEnumerableOrArray} from \"./IEnumerableOrArray\";\r\nimport {ISet} from \"./ISet\";\r\n\r\nconst OTHER = 'other';\r\n\r\nexport abstract class SetBase\r\nextends CollectionBase implements ISet, IDisposable\r\n{\r\n\r\n\tconstructor(source?:IEnumerableOrArray)\r\n\t{\r\n\t\tsuper(null, areEqual);\r\n\t\tthis._importEntries(source);\r\n\t}\r\n\r\n\tprotected abstract newUsing(source?:IEnumerableOrArray):SetBase;\r\n\r\n\tprotected _set:LinkedNodeList>;\r\n\r\n\tprotected _getSet():LinkedNodeList>\r\n\t{\r\n\t\tvar s = this._set;\r\n\t\tif(!s) this._set = s = new LinkedNodeList>();\r\n\t\treturn s;\r\n\t}\r\n\r\n\tprotected getCount():number\r\n\t{\r\n\t\treturn this._set ? this._set.unsafeCount : 0;\r\n\t}\r\n\r\n\texceptWith(other:IEnumerableOrArray):void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tif(!other) throw new ArgumentNullException(OTHER);\r\n\r\n\t\tforEach(other, v=>\r\n\t\t{\r\n\t\t\tif(_._removeInternal(v))\r\n\t\t\t\t_._incrementModified();\r\n\t\t});\r\n\r\n\t\t_._signalModification();\r\n\t}\r\n\r\n\tintersectWith(other:IEnumerableOrArray):void\r\n\t{\r\n\t\tif(!other) throw new ArgumentNullException(OTHER);\r\n\r\n\t\tvar _ = this;\r\n\t\tif(other instanceof SetBase)\r\n\t\t{\r\n\t\t\tlet s = _._set;\r\n\t\t\tif(s) s.forEach(n=>\r\n\t\t\t{\r\n\t\t\t\tif(!other.contains(n.value) && _._removeInternal(n.value))\r\n\t\t\t\t\t_._incrementModified();\r\n\t\t\t});\r\n\r\n\t\t\t_._signalModification();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tusing(_.newUsing(other), o=>_.intersectWith(o));\r\n\t\t}\r\n\t}\r\n\r\n\tisProperSubsetOf(other:IEnumerableOrArray):boolean\r\n\t{\r\n\t\tif(!other) throw new ArgumentNullException(OTHER);\r\n\r\n\t\treturn other instanceof SetBase\r\n\t\t\t? other.isProperSupersetOf(this)\r\n\t\t\t: using(this.newUsing(other), o=> o.isProperSupersetOf(this));\r\n\t}\r\n\r\n\tisProperSupersetOf(other:IEnumerableOrArray):boolean\r\n\t{\r\n\t\tif(!other) throw new ArgumentNullException(OTHER);\r\n\r\n\t\tvar result = true, count:number;\r\n\t\tif(other instanceof SetBase)\r\n\t\t{\r\n\t\t\tresult = this.isSupersetOf(other);\r\n\t\t\tcount = other.getCount();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tusing(this.newUsing(), o=>\r\n\t\t\t{\r\n\t\t\t\tforEach(other, v=>\r\n\t\t\t\t{\r\n\t\t\t\t\to.add(v); // We have to add to another set in order to filter out duplicates.\r\n\t\t\t\t\treturn result = this.contains(v);\r\n\t\t\t\t});\r\n\t\t\t\tcount = o.getCount();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn result && this.getCount()>count;\r\n\t}\r\n\r\n\tisSubsetOf(other:IEnumerableOrArray):boolean\r\n\t{\r\n\t\tif(!other) throw new ArgumentNullException(OTHER);\r\n\r\n\t\treturn other instanceof SetBase\r\n\t\t\t? other.isSupersetOf(this)\r\n\t\t\t: using(this.newUsing(other), o=> o.isSupersetOf(this));\r\n\t}\r\n\r\n\tisSupersetOf(other:IEnumerableOrArray):boolean\r\n\t{\r\n\t\tif(!other) throw new ArgumentNullException(OTHER);\r\n\r\n\t\tvar result = true;\r\n\t\tforEach(other, v=>\r\n\t\t{\r\n\t\t\treturn result = this.contains(v);\r\n\t\t});\r\n\t\treturn result;\r\n\t}\r\n\r\n\toverlaps(other:IEnumerableOrArray):boolean\r\n\t{\r\n\t\tif(!other) throw new ArgumentNullException(OTHER);\r\n\r\n\t\tvar result = false;\r\n\t\tforEach(other, v => !(result = this.contains(v)));\r\n\t\treturn result;\r\n\t}\r\n\r\n\tsetEquals(other:IEnumerableOrArray):boolean\r\n\t{\r\n\t\tif(!other) throw new ArgumentNullException(OTHER);\r\n\r\n\t\treturn this.getCount()==(\r\n\t\t\t\tother instanceof SetBase\r\n\t\t\t\t\t? other.getCount()\r\n\t\t\t\t\t: using(this.newUsing(other), o=> o.getCount()))\r\n\t\t\t&& this.isSubsetOf(other);\r\n\t}\r\n\r\n\tsymmetricExceptWith(other:IEnumerableOrArray):void\r\n\t{\r\n\t\tif(!other) throw new ArgumentNullException(OTHER);\r\n\r\n\t\tvar _ = this;\r\n\t\tif(other instanceof SetBase)\r\n\t\t{\r\n\t\t\tforEach(other, v=>\r\n\t\t\t{\r\n\t\t\t\tif(_.contains(v))\r\n\t\t\t\t{\r\n\t\t\t\t\tif(_._removeInternal(v))\r\n\t\t\t\t\t\t_._incrementModified();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif(_._addInternal(v))\r\n\t\t\t\t\t\t_._incrementModified();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t_._signalModification();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tusing(this.newUsing(other), o=>_.symmetricExceptWith(o));\r\n\t\t}\r\n\t}\r\n\r\n\tunionWith(other:IEnumerableOrArray):void\r\n\t{\r\n\t\tthis.importEntries(other);\r\n\t}\r\n\r\n\r\n\tprotected _clearInternal():number\r\n\t{\r\n\t\tvar s = this._set;\r\n\t\treturn s ? s.clear() : 0;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._set = null;\r\n\t}\r\n\r\n\tprotected abstract _getNode(item:T):ILinkedNodeWithValue;\r\n\r\n\tcontains(item:T):boolean\r\n\t{\r\n\t\treturn !(!this.getCount() || !this._getNode(item));\r\n\t}\r\n\r\n\tgetEnumerator():IEnumerator\r\n\t{\r\n\t\tvar s = this._set;\r\n\t\treturn s && this.getCount()\r\n\t\t\t? LinkedNodeList.valueEnumeratorFrom(s)\r\n\t\t\t: emptyEnumerator;\r\n\t}\r\n\r\n\tforEach(\r\n\t\taction:Predicate | Action,\r\n\t\tuseCopy:boolean = false):void\r\n\t{\r\n\t\tif(useCopy) super.forEach(action, useCopy);\r\n\t\telse this._set.forEach((node, i)=>action(node.value, i));\r\n\t}\r\n\r\n\tprotected _removeNode(node:ILinkedNodeWithValue):boolean\r\n\t{\r\n\t\tif(!node) return false;\r\n\t\treturn this.remove(node.value)!=0;\r\n\t}\r\n\r\n\tremoveFirst():boolean\r\n\t{\r\n\t\tvar s = this._set;\r\n\t\treturn this._removeNode(s && s.first);\r\n\t}\r\n\r\n\tremoveLast():boolean\r\n\t{\r\n\t\tvar s = this._set;\r\n\t\treturn this._removeNode(s && s.last);\r\n\t}\r\n\r\n\r\n}\r\n\r\nfunction wipe(map:IMap, depth:number = 1):void\r\n{\r\n\tif(map && depth)\r\n\t{\r\n\t\tfor(var key of Object.keys(map))\r\n\t\t{\r\n\t\t\tvar v = map[key];\r\n\t\t\tdelete map[key];\r\n\t\t\twipe(v, depth - 1);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default SetBase;"]} \ No newline at end of file +{"version":3,"sources":["System/Collections/SetBase.js","System/Collections/SetBase.ts"],"names":[],"mappings":"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","file":"System/Collections/SetBase.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst LinkedNodeList_1 = require(\"./LinkedNodeList\");\nconst ArgumentNullException_1 = require(\"../Exceptions/ArgumentNullException\");\nconst Enumerator_1 = require(\"./Enumeration/Enumerator\");\nconst EmptyEnumerator_1 = require(\"./Enumeration/EmptyEnumerator\");\nconst dispose_1 = require(\"../Disposable/dispose\");\nconst Compare_1 = require(\"../Compare\");\nconst CollectionBase_1 = require(\"./CollectionBase\");\nconst OTHER = 'other';\nclass SetBase extends CollectionBase_1.CollectionBase {\n constructor(source) {\n super(null, Compare_1.areEqual);\n this._importEntries(source);\n }\n _getSet() {\n var s = this._set;\n if (!s)\n this._set = s = new LinkedNodeList_1.LinkedNodeList();\n return s;\n }\n getCount() {\n return this._set ? this._set.unsafeCount : 0;\n }\n exceptWith(other) {\n var _ = this;\n if (!other)\n throw new ArgumentNullException_1.ArgumentNullException(OTHER);\n Enumerator_1.forEach(other, v => {\n if (_._removeInternal(v))\n _._incrementModified();\n });\n _._signalModification();\n }\n intersectWith(other) {\n if (!other)\n throw new ArgumentNullException_1.ArgumentNullException(OTHER);\n var _ = this;\n if (other instanceof SetBase) {\n let s = _._set;\n if (s)\n s.forEach(n => {\n if (!other.contains(n.value) && _._removeInternal(n.value))\n _._incrementModified();\n });\n _._signalModification();\n }\n else {\n dispose_1.using(_.newUsing(other), o => _.intersectWith(o));\n }\n }\n isProperSubsetOf(other) {\n if (!other)\n throw new ArgumentNullException_1.ArgumentNullException(OTHER);\n return other instanceof SetBase\n ? other.isProperSupersetOf(this)\n : dispose_1.using(this.newUsing(other), o => o.isProperSupersetOf(this));\n }\n isProperSupersetOf(other) {\n if (!other)\n throw new ArgumentNullException_1.ArgumentNullException(OTHER);\n var result = true, count;\n if (other instanceof SetBase) {\n result = this.isSupersetOf(other);\n count = other.getCount();\n }\n else {\n count = dispose_1.using(this.newUsing(), o => {\n Enumerator_1.forEach(other, v => {\n o.add(v);\n return result = this.contains(v);\n });\n return o.getCount();\n });\n }\n return result && this.getCount() > count;\n }\n isSubsetOf(other) {\n if (!other)\n throw new ArgumentNullException_1.ArgumentNullException(OTHER);\n return other instanceof SetBase\n ? other.isSupersetOf(this)\n : dispose_1.using(this.newUsing(other), o => o.isSupersetOf(this));\n }\n isSupersetOf(other) {\n if (!other)\n throw new ArgumentNullException_1.ArgumentNullException(OTHER);\n var result = true;\n Enumerator_1.forEach(other, v => {\n return result = this.contains(v);\n });\n return result;\n }\n overlaps(other) {\n if (!other)\n throw new ArgumentNullException_1.ArgumentNullException(OTHER);\n var result = false;\n Enumerator_1.forEach(other, v => !(result = this.contains(v)));\n return result;\n }\n setEquals(other) {\n if (!other)\n throw new ArgumentNullException_1.ArgumentNullException(OTHER);\n return this.getCount() == (other instanceof SetBase\n ? other.getCount()\n : dispose_1.using(this.newUsing(other), o => o.getCount()))\n && this.isSubsetOf(other);\n }\n symmetricExceptWith(other) {\n if (!other)\n throw new ArgumentNullException_1.ArgumentNullException(OTHER);\n var _ = this;\n if (other instanceof SetBase) {\n Enumerator_1.forEach(other, v => {\n if (_.contains(v)) {\n if (_._removeInternal(v))\n _._incrementModified();\n }\n else {\n if (_._addInternal(v))\n _._incrementModified();\n }\n });\n _._signalModification();\n }\n else {\n dispose_1.using(this.newUsing(other), o => _.symmetricExceptWith(o));\n }\n }\n unionWith(other) {\n this.importEntries(other);\n }\n _clearInternal() {\n var s = this._set;\n return s ? s.clear() : 0;\n }\n _onDispose() {\n super._onDispose();\n this._set = null;\n }\n contains(item) {\n return !(!this.getCount() || !this._getNode(item));\n }\n getEnumerator() {\n var s = this._set;\n return s && this.getCount()\n ? LinkedNodeList_1.LinkedNodeList.valueEnumeratorFrom(s)\n : EmptyEnumerator_1.EmptyEnumerator;\n }\n forEach(action, useCopy = false) {\n return useCopy\n ? super.forEach(action, useCopy)\n : this._set.forEach((node, i) => action(node.value, i));\n }\n _removeNode(node) {\n if (!node)\n return false;\n return this.remove(node.value) != 0;\n }\n removeFirst() {\n var s = this._set;\n return this._removeNode(s && s.first);\n }\n removeLast() {\n var s = this._set;\n return this._removeNode(s && s.last);\n }\n}\nexports.SetBase = SetBase;\nfunction wipe(map, depth = 1) {\n if (map && depth) {\n for (var key of Object.keys(map)) {\n var v = map[key];\n delete map[key];\n wipe(v, depth - 1);\n }\n }\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = SetBase;\n","/*!\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\nimport {LinkedNodeList} from \"./LinkedNodeList\";\r\nimport {ArgumentNullException} from \"../Exceptions/ArgumentNullException\";\r\nimport {forEach} from \"./Enumeration/Enumerator\";\r\nimport {EmptyEnumerator} from \"./Enumeration/EmptyEnumerator\";\r\nimport {using} from \"../Disposable/dispose\";\r\nimport {areEqual} from \"../Compare\";\r\nimport {CollectionBase} from \"./CollectionBase\";\r\nimport {IDisposable} from \"../Disposable/IDisposable\";\r\nimport {ILinkedNodeWithValue} from \"./ILinkedListNode\";\r\nimport {Predicate, Action} from \"../FunctionTypes\";\r\nimport {IMap} from \"./Dictionaries/IDictionary\";\r\nimport {IEnumerator} from \"./Enumeration/IEnumerator\";\r\nimport {IEnumerableOrArray} from \"./IEnumerableOrArray\";\r\nimport {ISet} from \"./ISet\";\r\n\r\nconst OTHER = 'other';\r\n\r\nexport abstract class SetBase\r\nextends CollectionBase implements ISet, IDisposable\r\n{\r\n\r\n\tconstructor(source?:IEnumerableOrArray)\r\n\t{\r\n\t\tsuper(null, areEqual);\r\n\t\tthis._importEntries(source);\r\n\t}\r\n\r\n\tprotected abstract newUsing(source?:IEnumerableOrArray):SetBase;\r\n\r\n\tprotected _set:LinkedNodeList>;\r\n\r\n\tprotected _getSet():LinkedNodeList>\r\n\t{\r\n\t\tvar s = this._set;\r\n\t\tif(!s) this._set = s = new LinkedNodeList>();\r\n\t\treturn s;\r\n\t}\r\n\r\n\tprotected getCount():number\r\n\t{\r\n\t\treturn this._set ? this._set.unsafeCount : 0;\r\n\t}\r\n\r\n\texceptWith(other:IEnumerableOrArray):void\r\n\t{\r\n\t\tvar _ = this;\r\n\t\tif(!other) throw new ArgumentNullException(OTHER);\r\n\r\n\t\tforEach(other, v=>\r\n\t\t{\r\n\t\t\tif(_._removeInternal(v))\r\n\t\t\t\t_._incrementModified();\r\n\t\t});\r\n\r\n\t\t_._signalModification();\r\n\t}\r\n\r\n\tintersectWith(other:IEnumerableOrArray):void\r\n\t{\r\n\t\tif(!other) throw new ArgumentNullException(OTHER);\r\n\r\n\t\tvar _ = this;\r\n\t\tif(other instanceof SetBase)\r\n\t\t{\r\n\t\t\tlet s = _._set;\r\n\t\t\tif(s) s.forEach(n=>\r\n\t\t\t{\r\n\t\t\t\tif(!other.contains(n.value) && _._removeInternal(n.value))\r\n\t\t\t\t\t_._incrementModified();\r\n\t\t\t});\r\n\r\n\t\t\t_._signalModification();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tusing(_.newUsing(other), o=>_.intersectWith(o));\r\n\t\t}\r\n\t}\r\n\r\n\tisProperSubsetOf(other:IEnumerableOrArray):boolean\r\n\t{\r\n\t\tif(!other) throw new ArgumentNullException(OTHER);\r\n\r\n\t\treturn other instanceof SetBase\r\n\t\t\t? other.isProperSupersetOf(this)\r\n\t\t\t: using(this.newUsing(other), o=> o.isProperSupersetOf(this));\r\n\t}\r\n\r\n\tisProperSupersetOf(other:IEnumerableOrArray):boolean\r\n\t{\r\n\t\tif(!other) throw new ArgumentNullException(OTHER);\r\n\r\n\t\tvar result = true, count:number;\r\n\t\tif(other instanceof SetBase)\r\n\t\t{\r\n\t\t\tresult = this.isSupersetOf(other);\r\n\t\t\tcount = other.getCount();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tcount = using(this.newUsing(), o=>\r\n\t\t\t{\r\n\t\t\t\tforEach(other, v=>\r\n\t\t\t\t{\r\n\t\t\t\t\to.add(v); // We have to add to another set in order to filter out duplicates.\r\n\t\t\t\t\t// contains == false will cause this to exit.\r\n\t\t\t\t\treturn result = this.contains(v);\r\n\t\t\t\t});\r\n\t\t\t\treturn o.getCount();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn result && this.getCount()>count;\r\n\t}\r\n\r\n\tisSubsetOf(other:IEnumerableOrArray):boolean\r\n\t{\r\n\t\tif(!other) throw new ArgumentNullException(OTHER);\r\n\r\n\t\treturn other instanceof SetBase\r\n\t\t\t? other.isSupersetOf(this)\r\n\t\t\t: using(this.newUsing(other), o=> o.isSupersetOf(this));\r\n\t}\r\n\r\n\tisSupersetOf(other:IEnumerableOrArray):boolean\r\n\t{\r\n\t\tif(!other) throw new ArgumentNullException(OTHER);\r\n\r\n\t\tvar result = true;\r\n\t\tforEach(other, v=>\r\n\t\t{\r\n\t\t\treturn result = this.contains(v);\r\n\t\t});\r\n\t\treturn result;\r\n\t}\r\n\r\n\toverlaps(other:IEnumerableOrArray):boolean\r\n\t{\r\n\t\tif(!other) throw new ArgumentNullException(OTHER);\r\n\r\n\t\tvar result = false;\r\n\t\tforEach(other, v => !(result = this.contains(v)));\r\n\t\treturn result;\r\n\t}\r\n\r\n\tsetEquals(other:IEnumerableOrArray):boolean\r\n\t{\r\n\t\tif(!other) throw new ArgumentNullException(OTHER);\r\n\r\n\t\treturn this.getCount()==(\r\n\t\t\t\tother instanceof SetBase\r\n\t\t\t\t\t? other.getCount()\r\n\t\t\t\t\t: using(this.newUsing(other), o=> o.getCount()))\r\n\t\t\t&& this.isSubsetOf(other);\r\n\t}\r\n\r\n\tsymmetricExceptWith(other:IEnumerableOrArray):void\r\n\t{\r\n\t\tif(!other) throw new ArgumentNullException(OTHER);\r\n\r\n\t\tvar _ = this;\r\n\t\tif(other instanceof SetBase)\r\n\t\t{\r\n\t\t\tforEach(other, v=>\r\n\t\t\t{\r\n\t\t\t\tif(_.contains(v))\r\n\t\t\t\t{\r\n\t\t\t\t\tif(_._removeInternal(v))\r\n\t\t\t\t\t\t_._incrementModified();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif(_._addInternal(v))\r\n\t\t\t\t\t\t_._incrementModified();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t_._signalModification();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tusing(this.newUsing(other), o=>_.symmetricExceptWith(o));\r\n\t\t}\r\n\t}\r\n\r\n\tunionWith(other:IEnumerableOrArray):void\r\n\t{\r\n\t\tthis.importEntries(other);\r\n\t}\r\n\r\n\r\n\tprotected _clearInternal():number\r\n\t{\r\n\t\tvar s = this._set;\r\n\t\treturn s ? s.clear() : 0;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._set = null;\r\n\t}\r\n\r\n\tprotected abstract _getNode(item:T):ILinkedNodeWithValue;\r\n\r\n\tcontains(item:T):boolean\r\n\t{\r\n\t\treturn !(!this.getCount() || !this._getNode(item));\r\n\t}\r\n\r\n\tgetEnumerator():IEnumerator\r\n\t{\r\n\t\tvar s = this._set;\r\n\t\treturn s && this.getCount()\r\n\t\t\t? LinkedNodeList.valueEnumeratorFrom(s)\r\n\t\t\t: EmptyEnumerator;\r\n\t}\r\n\r\n\tforEach(\r\n\t\taction:Predicate | Action,\r\n\t\tuseCopy:boolean = false):number\r\n\t{\r\n\t\treturn useCopy\r\n\t\t\t? super.forEach(action, useCopy)\r\n\t\t\t: this._set.forEach((node, i)=>action(node.value, i));\r\n\t}\r\n\r\n\tprotected _removeNode(node:ILinkedNodeWithValue):boolean\r\n\t{\r\n\t\tif(!node) return false;\r\n\t\treturn this.remove(node.value)!=0;\r\n\t}\r\n\r\n\tremoveFirst():boolean\r\n\t{\r\n\t\tvar s = this._set;\r\n\t\treturn this._removeNode(s && s.first);\r\n\t}\r\n\r\n\tremoveLast():boolean\r\n\t{\r\n\t\tvar s = this._set;\r\n\t\treturn this._removeNode(s && s.last);\r\n\t}\r\n\r\n\r\n}\r\n\r\nfunction wipe(map:IMap, depth:number = 1):void\r\n{\r\n\tif(map && depth)\r\n\t{\r\n\t\tfor(var key of Object.keys(map))\r\n\t\t{\r\n\t\t\tvar v = map[key];\r\n\t\t\tdelete map[key];\r\n\t\t\twipe(v, depth - 1);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default SetBase;"]} \ No newline at end of file diff --git a/dist/commonjs/System/Functions.d.ts b/dist/commonjs/System/Functions.d.ts index ecd9b0e2..22f00f2a 100644 --- a/dist/commonjs/System/Functions.d.ts +++ b/dist/commonjs/System/Functions.d.ts @@ -9,9 +9,9 @@ export declare class Functions { Blank(): void; } export declare module Functions { - var Identity: (x: T) => T; - var True: () => boolean; - var False: () => boolean; - var Blank: () => void; + const Identity: (x: T) => T; + const True: () => boolean; + const False: () => boolean; + const Blank: () => void; } export default Functions; diff --git a/dist/commonjs/System/Functions.js.map b/dist/commonjs/System/Functions.js.map index 5a1449a3..7ac8e9f4 100644 --- a/dist/commonjs/System/Functions.js.map +++ b/dist/commonjs/System/Functions.js.map @@ -1 +1 @@ -{"version":3,"sources":["System/Functions.js","System/Functions.ts"],"names":[],"mappings":";;;;AAIA;;;;;;ICIA;;;;;;;iCAOa,GAAG;AACb,mBAAO,CAAP,CADa;;;;+BAOX;AACF,mBAAO,IAAP,CADE;;;;gCAOC;AACH,mBAAO,KAAP,CADG;;;;gCAMA;;;WA3BN;;;AAAa,QAAA,SAAA,GAAS,SAAT;AA+Bb,IAAM,gBAA0B,IAAI,SAAJ,EAA1B;AAIN,CAAA,UAAc,SAAd,EACA;AAKY,cAAA,QAAA,GACR,cAAc,QAAd,CANJ;AAYY,cAAA,IAAA,GACR,cAAc,IAAd,CAbJ;AAmBY,cAAA,KAAA,GACR,cAAc,KAAd,CApBJ;AAyBY,cAAA,KAAA,GACR,cAAc,KAAd,CA1BJ;CADA,CAAA,CAAc,YAAA,QAAA,SAAA,KAAA,QAAA,SAAA,GAAS,EAAT,CAAA,CAAd;AA+BA,OAAO,MAAP,CAAc,SAAd;AAEA,OAAA,cAAA,CAAA,OAAA,EAAA,YAAA,EAAA,EAAA,OAAA,IAAA,EAAA;ADvDA,QAAQ,OAAR,GCuDe,SDvDf","file":"System/Functions.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nclass Functions {\n Identity(x) { return x; }\n True() { return true; }\n False() { return false; }\n Blank() { }\n}\nexports.Functions = Functions;\nconst rootFunctions = new Functions();\n(function (Functions) {\n Functions.Identity = rootFunctions.Identity;\n Functions.True = rootFunctions.True;\n Functions.False = rootFunctions.False;\n Functions.Blank = rootFunctions.Blank;\n})(Functions = exports.Functions || (exports.Functions = {}));\nObject.freeze(Functions);\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = Functions;\n","/*!\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 * Can be used statically or extended for varying different reusable function signatures.\r\n */\r\nexport class Functions\r\n{\r\n\r\n\t/**\r\n\t * A typed method for use with simple selection of the parameter.\r\n\t * @returns {T}\r\n\t */\r\n\tIdentity(x:T):T\r\n\t{ return x; }\r\n\r\n\t/**\r\n\t * Returns true.\r\n\t * @returns {boolean}\r\n\t */\r\n\tTrue():boolean\r\n\t{ return true; }\r\n\r\n\t/**\r\n\t * Returns false.\r\n\t * @returns {boolean}\r\n\t */\r\n\tFalse():boolean\r\n\t{ return false; }\r\n\r\n\t/**\r\n\t * Does nothing.\r\n\t */\r\n\tBlank():void\r\n\t{ }\r\n}\r\n\r\nconst rootFunctions:Functions = new Functions();\r\n\r\n// Expose static versions.\r\n\r\nexport module Functions\r\n{\r\n\t/**\r\n\t * A typed method for use with simple selection of the parameter.\r\n\t * @returns {boolean}\r\n\t */\r\n\texport var Identity:(x:T) => T\r\n\t\t= rootFunctions.Identity;\r\n\r\n\t/**\r\n\t * Returns false.\r\n\t * @returns {boolean}\r\n\t */\r\n\texport var True:() => boolean\r\n\t\t= rootFunctions.True;\r\n\r\n\t/**\r\n\t * Returns false.\r\n\t * @returns {boolean}\r\n\t */\r\n\texport var False:() => boolean\r\n\t\t= rootFunctions.False;\r\n\r\n\t/**\r\n\t * Does nothing.\r\n\t */\r\n\texport var Blank:() => void\r\n\t\t= rootFunctions.Blank;\r\n}\r\n\r\n// Make this read only. Should still allow for sub-classing since extra methods are added to prototype.\r\nObject.freeze(Functions);\r\n\r\nexport default Functions;\r\n\r\n"]} \ No newline at end of file +{"version":3,"sources":["System/Functions.js","System/Functions.ts"],"names":[],"mappings":";;;;AAIA;;;;;;ICIA;;;;;;;iCAOa,GAAG;AACb,mBAAO,CAAP,CADa;;;;+BAOX;AACF,mBAAO,IAAP,CADE;;;;gCAOC;AACH,mBAAO,KAAP,CADG;;;;gCAMA;;;WA3BN;;;AAAa,QAAA,SAAA,GAAS,SAAT;AA+Bb,IAAM,gBAA0B,IAAI,SAAJ,EAA1B;AAIN,CAAA,UAAc,SAAd,EACA;AAKc,cAAA,QAAA,GACV,cAAc,QAAd,CANJ;AAYc,cAAA,IAAA,GACV,cAAc,IAAd,CAbJ;AAmBc,cAAA,KAAA,GACV,cAAc,KAAd,CApBJ;AAyBc,cAAA,KAAA,GACV,cAAc,KAAd,CA1BJ;CADA,CAAA,CAAc,YAAA,QAAA,SAAA,KAAA,QAAA,SAAA,GAAS,EAAT,CAAA,CAAd;AA+BA,OAAO,MAAP,CAAc,SAAd;AAEA,OAAA,cAAA,CAAA,OAAA,EAAA,YAAA,EAAA,EAAA,OAAA,IAAA,EAAA;ADvDA,QAAQ,OAAR,GCuDe,SDvDf","file":"System/Functions.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nclass Functions {\n Identity(x) { return x; }\n True() { return true; }\n False() { return false; }\n Blank() { }\n}\nexports.Functions = Functions;\nconst rootFunctions = new Functions();\n(function (Functions) {\n Functions.Identity = rootFunctions.Identity;\n Functions.True = rootFunctions.True;\n Functions.False = rootFunctions.False;\n Functions.Blank = rootFunctions.Blank;\n})(Functions = exports.Functions || (exports.Functions = {}));\nObject.freeze(Functions);\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = Functions;\n","/*!\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 * Can be used statically or extended for varying different reusable function signatures.\r\n */\r\nexport class Functions\r\n{\r\n\r\n\t/**\r\n\t * A typed method for use with simple selection of the parameter.\r\n\t * @returns {T}\r\n\t */\r\n\tIdentity(x:T):T\r\n\t{ return x; }\r\n\r\n\t/**\r\n\t * Returns true.\r\n\t * @returns {boolean}\r\n\t */\r\n\tTrue():boolean\r\n\t{ return true; }\r\n\r\n\t/**\r\n\t * Returns false.\r\n\t * @returns {boolean}\r\n\t */\r\n\tFalse():boolean\r\n\t{ return false; }\r\n\r\n\t/**\r\n\t * Does nothing.\r\n\t */\r\n\tBlank():void\r\n\t{ }\r\n}\r\n\r\nconst rootFunctions:Functions = new Functions();\r\n\r\n// Expose static versions.\r\n\r\nexport module Functions\r\n{\r\n\t/**\r\n\t * A typed method for use with simple selection of the parameter.\r\n\t * @returns {boolean}\r\n\t */\r\n\texport const Identity:(x:T) => T\r\n\t\t= rootFunctions.Identity;\r\n\r\n\t/**\r\n\t * Returns false.\r\n\t * @returns {boolean}\r\n\t */\r\n\texport const True:() => boolean\r\n\t\t= rootFunctions.True;\r\n\r\n\t/**\r\n\t * Returns false.\r\n\t * @returns {boolean}\r\n\t */\r\n\texport const False:() => boolean\r\n\t\t= rootFunctions.False;\r\n\r\n\t/**\r\n\t * Does nothing.\r\n\t */\r\n\texport const Blank:() => void\r\n\t\t= rootFunctions.Blank;\r\n}\r\n\r\n// Make this read only. Should still allow for sub-classing since extra methods are added to prototype.\r\nObject.freeze(Functions);\r\n\r\nexport default Functions;\r\n\r\n"]} \ No newline at end of file diff --git a/dist/commonjs/System/Text/RegexMatchEnumerator.js b/dist/commonjs/System/Text/RegexMatchEnumerator.js index a35202ad..9e8d04ee 100644 --- a/dist/commonjs/System/Text/RegexMatchEnumerator.js +++ b/dist/commonjs/System/Text/RegexMatchEnumerator.js @@ -9,7 +9,7 @@ var _createClass = function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var RegularExpressions_1 = require("./RegularExpressions"); -var Enumerator_1 = require("../Collections/Enumeration/Enumerator"); +var EmptyEnumerator_1 = require("../Collections/Enumeration/EmptyEnumerator"); var EnumeratorBase_1 = require("../Collections/Enumeration/EnumeratorBase"); var RegexMatchEnumerator = function () { @@ -43,7 +43,7 @@ var RegexMatchEnumerator = function () { }], [{ key: "matches", value: function matches(input, pattern) { - return input && pattern ? new RegexMatchEnumerator(pattern).matches(input) : Enumerator_1.empty; + return input && pattern ? new RegexMatchEnumerator(pattern).matches(input) : EmptyEnumerator_1.EmptyEnumerator; } }]); diff --git a/dist/commonjs/System/Text/RegexMatchEnumerator.js.map b/dist/commonjs/System/Text/RegexMatchEnumerator.js.map index 37dbb781..9bcac231 100644 --- a/dist/commonjs/System/Text/RegexMatchEnumerator.js.map +++ b/dist/commonjs/System/Text/RegexMatchEnumerator.js.map @@ -1 +1 @@ -{"version":3,"sources":["System/Text/RegexMatchEnumerator.js","System/Text/RegexMatchEnumerator.ts"],"names":[],"mappings":";;;;AAIA;;;;;;ACCA,IAAA,uBAAA,QAA2B,sBAA3B,CAAA;AACA,IAAA,eAAA,QAAoB,uCAApB,CAAA;AACA,IAAA,mBAAA,QAA6B,2CAA7B,CAAA;;IAGA;AAIC,aAJD,oBAIC,CAAY,OAAZ,EAAuC;8BAJxC,sBAIwC;;AAEtC,YAAG,mBAAmB,qBAAA,KAAA,EACtB;AACC,iBAAK,QAAL,GAAgB,OAAhB,CADD;SADA,MAKA;AACC,iBAAK,QAAL,GAAgB,IAAI,qBAAA,KAAA,CAAM,OAAV,CAAhB,CADD;SALA;KAFD;;iBAJD;;gCAgBS,OAAY;;;AAEnB,gBAAI,CAAJ,CAFmB;AAGnB,mBAAO,IAAI,iBAAA,cAAA,CACV,YAAA;AAEC,oBAAI,CAAJ,CAFD;aAAA,EAIA,mBAAO;AAEN,oBAAI,QAAc,MAAK,QAAL,CAAc,KAAd,CAAoB,KAApB,EAA2B,CAA3B,CAAd,CAFE;AAGN,oBAAG,MAAM,OAAN,EACH;AACC,wBAAI,MAAM,KAAN,GAAc,MAAM,MAAN,CADnB;AAEC,2BAAO,QAAQ,WAAR,CAAoB,KAApB,CAAP,CAFD;iBADA;AAMA,uBAAO,QAAQ,UAAR,EAAP,CATM;aAAP,CALD,CAHmB;;;;gCAqBL,OAAc,SAA2B;AAEvD,mBAAO,SAAS,OAAT,GACJ,IAAK,oBAAJ,CAAyB,OAAzB,CAAD,CAAoC,OAApC,CAA4C,KAA5C,CADI,GAEJ,aAAA,KAAA,CAJoD;;;;WArCzD;;;AAAa,QAAA,oBAAA,GAAoB,oBAApB;AA8Cb,OAAA,cAAA,CAAA,OAAA,EAAA,YAAA,EAAA,EAAA,OAAA,IAAA,EAAA;ADlBA,QAAQ,OAAR,GCkBe,qBAAqB,OAArB","file":"System/Text/RegexMatchEnumerator.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst RegularExpressions_1 = require(\"./RegularExpressions\");\nconst Enumerator_1 = require(\"../Collections/Enumeration/Enumerator\");\nconst EnumeratorBase_1 = require(\"../Collections/Enumeration/EnumeratorBase\");\nclass RegexMatchEnumerator {\n constructor(pattern) {\n if (pattern instanceof RegularExpressions_1.Regex) {\n this._pattern = pattern;\n }\n else {\n this._pattern = new RegularExpressions_1.Regex(pattern);\n }\n }\n matches(input) {\n var p;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n p = 0;\n }, yielder => {\n let match = this._pattern.match(input, p);\n if (match.success) {\n p = match.index + match.length;\n return yielder.yieldReturn(match);\n }\n return yielder.yieldBreak();\n });\n }\n static matches(input, pattern) {\n return input && pattern\n ? (new RegexMatchEnumerator(pattern)).matches(input)\n : Enumerator_1.empty;\n }\n}\nexports.RegexMatchEnumerator = RegexMatchEnumerator;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = RegexMatchEnumerator.matches;\n","/*!\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\nimport {Regex, Match} from \"./RegularExpressions\";\r\nimport {empty} from \"../Collections/Enumeration/Enumerator\";\r\nimport {EnumeratorBase} from \"../Collections/Enumeration/EnumeratorBase\";\r\nimport {IEnumerator} from \"../Collections/Enumeration/IEnumerator\";\r\n\r\nexport class RegexMatchEnumerator\r\n{\r\n\tprivate _pattern:Regex;\r\n\r\n\tconstructor(pattern:string|RegExp|Regex)\r\n\t{\r\n\t\tif(pattern instanceof Regex)\r\n\t\t{\r\n\t\t\tthis._pattern = pattern;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis._pattern = new Regex(pattern);\r\n\t\t}\r\n\t}\r\n\r\n\tmatches(input:string):IEnumerator\r\n\t{\r\n\t\tvar p:number; // pointer\r\n\t\treturn new EnumeratorBase(\r\n\t\t\t()=>\r\n\t\t\t{\r\n\t\t\t\tp = 0;\r\n\t\t\t},\r\n\t\t\tyielder=>\r\n\t\t\t{\r\n\t\t\t\tlet match:Match = this._pattern.match(input, p);\r\n\t\t\t\tif(match.success)\r\n\t\t\t\t{\r\n\t\t\t\t\tp = match.index + match.length;\r\n\t\t\t\t\treturn yielder.yieldReturn(match);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn yielder.yieldBreak();\r\n\t\t\t});\r\n\t}\r\n\r\n\tstatic matches(input:string, pattern:string|RegExp|Regex):IEnumerator\r\n\t{\r\n\t\treturn input && pattern\r\n\t\t\t? (new RegexMatchEnumerator(pattern)).matches(input)\r\n\t\t\t: empty;\r\n\t}\r\n\r\n}\r\n\r\nexport default RegexMatchEnumerator.matches;"]} \ No newline at end of file +{"version":3,"sources":["System/Text/RegexMatchEnumerator.js","System/Text/RegexMatchEnumerator.ts"],"names":[],"mappings":";;;;AAIA;;;;;;ACCA,IAAA,uBAAA,QAA2B,sBAA3B,CAAA;AACA,IAAA,oBAAA,QAA8B,4CAA9B,CAAA;AACA,IAAA,mBAAA,QAA6B,2CAA7B,CAAA;;IAGA;AAIC,aAJD,oBAIC,CAAY,OAAZ,EAAuC;8BAJxC,sBAIwC;;AAEtC,YAAG,mBAAmB,qBAAA,KAAA,EACtB;AACC,iBAAK,QAAL,GAAgB,OAAhB,CADD;SADA,MAKA;AACC,iBAAK,QAAL,GAAgB,IAAI,qBAAA,KAAA,CAAM,OAAV,CAAhB,CADD;SALA;KAFD;;iBAJD;;gCAgBS,OAAY;;;AAEnB,gBAAI,CAAJ,CAFmB;AAGnB,mBAAO,IAAI,iBAAA,cAAA,CACV,YAAA;AAEC,oBAAI,CAAJ,CAFD;aAAA,EAIA,mBAAO;AAEN,oBAAI,QAAc,MAAK,QAAL,CAAc,KAAd,CAAoB,KAApB,EAA2B,CAA3B,CAAd,CAFE;AAGN,oBAAG,MAAM,OAAN,EACH;AACC,wBAAI,MAAM,KAAN,GAAc,MAAM,MAAN,CADnB;AAEC,2BAAO,QAAQ,WAAR,CAAoB,KAApB,CAAP,CAFD;iBADA;AAMA,uBAAO,QAAQ,UAAR,EAAP,CATM;aAAP,CALD,CAHmB;;;;gCAqBL,OAAc,SAA2B;AAEvD,mBAAO,SAAS,OAAT,GACJ,IAAK,oBAAJ,CAAyB,OAAzB,CAAD,CAAoC,OAApC,CAA4C,KAA5C,CADI,GAEJ,kBAAA,eAAA,CAJoD;;;;WArCzD;;;AAAa,QAAA,oBAAA,GAAoB,oBAApB;AA8Cb,OAAA,cAAA,CAAA,OAAA,EAAA,YAAA,EAAA,EAAA,OAAA,IAAA,EAAA;ADlBA,QAAQ,OAAR,GCkBe,qBAAqB,OAArB","file":"System/Text/RegexMatchEnumerator.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst RegularExpressions_1 = require(\"./RegularExpressions\");\nconst EmptyEnumerator_1 = require(\"../Collections/Enumeration/EmptyEnumerator\");\nconst EnumeratorBase_1 = require(\"../Collections/Enumeration/EnumeratorBase\");\nclass RegexMatchEnumerator {\n constructor(pattern) {\n if (pattern instanceof RegularExpressions_1.Regex) {\n this._pattern = pattern;\n }\n else {\n this._pattern = new RegularExpressions_1.Regex(pattern);\n }\n }\n matches(input) {\n var p;\n return new EnumeratorBase_1.EnumeratorBase(() => {\n p = 0;\n }, yielder => {\n let match = this._pattern.match(input, p);\n if (match.success) {\n p = match.index + match.length;\n return yielder.yieldReturn(match);\n }\n return yielder.yieldBreak();\n });\n }\n static matches(input, pattern) {\n return input && pattern\n ? (new RegexMatchEnumerator(pattern)).matches(input)\n : EmptyEnumerator_1.EmptyEnumerator;\n }\n}\nexports.RegexMatchEnumerator = RegexMatchEnumerator;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = RegexMatchEnumerator.matches;\n","/*!\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\nimport {Regex, Match} from \"./RegularExpressions\";\r\nimport {EmptyEnumerator} from \"../Collections/Enumeration/EmptyEnumerator\";\r\nimport {EnumeratorBase} from \"../Collections/Enumeration/EnumeratorBase\";\r\nimport {IEnumerator} from \"../Collections/Enumeration/IEnumerator\";\r\n\r\nexport class RegexMatchEnumerator\r\n{\r\n\tprivate _pattern:Regex;\r\n\r\n\tconstructor(pattern:string|RegExp|Regex)\r\n\t{\r\n\t\tif(pattern instanceof Regex)\r\n\t\t{\r\n\t\t\tthis._pattern = pattern;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis._pattern = new Regex(pattern);\r\n\t\t}\r\n\t}\r\n\r\n\tmatches(input:string):IEnumerator\r\n\t{\r\n\t\tvar p:number; // pointer\r\n\t\treturn new EnumeratorBase(\r\n\t\t\t()=>\r\n\t\t\t{\r\n\t\t\t\tp = 0;\r\n\t\t\t},\r\n\t\t\tyielder=>\r\n\t\t\t{\r\n\t\t\t\tlet match:Match = this._pattern.match(input, p);\r\n\t\t\t\tif(match.success)\r\n\t\t\t\t{\r\n\t\t\t\t\tp = match.index + match.length;\r\n\t\t\t\t\treturn yielder.yieldReturn(match);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn yielder.yieldBreak();\r\n\t\t\t});\r\n\t}\r\n\r\n\tstatic matches(input:string, pattern:string|RegExp|Regex):IEnumerator\r\n\t{\r\n\t\treturn input && pattern\r\n\t\t\t? (new RegexMatchEnumerator(pattern)).matches(input)\r\n\t\t\t: EmptyEnumerator;\r\n\t}\r\n\r\n}\r\n\r\nexport default RegexMatchEnumerator.matches;"]} \ No newline at end of file diff --git a/package.json b/package.json index 17861ec4..8d9efa17 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typescript-dotnet", - "version": "2.13.3", + "version": "2.13.4", "license": "MIT", "author": "electricessence ", "description": "A JavaScript-Friendly .NET Based TypeScript Library.", diff --git a/source/System.Linq/Linq.js b/source/System.Linq/Linq.js index 73ff3a66..a54617a5 100644 --- a/source/System.Linq/Linq.js +++ b/source/System.Linq/Linq.js @@ -13,7 +13,7 @@ var __extends = (this && this.__extends) || function (d, b) { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === 'function' && define.amd) { - define(["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/dispose", "../System/Disposable/DisposableBase", "../System/Collections/Enumeration/UnsupportedEnumerableException", "../System/Disposable/ObjectDisposedException", "../System/Collections/Sorting/KeySortedContext", "../System/Exceptions/ArgumentNullException", "../System/Exceptions/ArgumentOutOfRangeException"], factory); + define(["require", "exports", "../System/Compare", "../System/Collections/Array/Compare", "../System/Collections/Array/Utility", "../System/Collections/Enumeration/Enumerator", "../System/Collections/Enumeration/EmptyEnumerator", "../System/Types", "../System/Integer", "../System/Functions", "../System/Collections/Enumeration/ArrayEnumerator", "../System/Collections/Enumeration/EnumeratorBase", "../System/Collections/Dictionaries/Dictionary", "../System/Collections/Queue", "../System/Disposable/dispose", "../System/Disposable/DisposableBase", "../System/Collections/Enumeration/UnsupportedEnumerableException", "../System/Disposable/ObjectDisposedException", "../System/Collections/Sorting/KeySortedContext", "../System/Exceptions/ArgumentNullException", "../System/Exceptions/ArgumentOutOfRangeException"], factory); } })(function (require, exports) { "use strict"; @@ -21,6 +21,7 @@ var __extends = (this && this.__extends) || function (d, b) { var Arrays = require("../System/Collections/Array/Compare"); var ArrayUtility = require("../System/Collections/Array/Utility"); var Enumerator_1 = require("../System/Collections/Enumeration/Enumerator"); + var EmptyEnumerator_1 = require("../System/Collections/Enumeration/EmptyEnumerator"); var Types_1 = require("../System/Types"); var Integer_1 = require("../System/Integer"); var Functions_1 = require("../System/Functions"); @@ -54,7 +55,7 @@ var __extends = (this && this.__extends) || function (d, b) { var Functions = new LinqFunctions(); Object.freeze(Functions); function getEmptyEnumerator() { - return Enumerator_1.empty; + return EmptyEnumerator_1.EmptyEnumerator; } var InfiniteEnumerable = (function (_super) { __extends(InfiniteEnumerable, _super); @@ -264,7 +265,7 @@ var __extends = (this && this.__extends) || function (d, b) { var value = resultSelector(enumerator.current, len); enumeratorStack[len++] = enumerator; var e = Enumerable.fromAny(childrenSelector(enumerator.current)); - enumerator = e ? e.getEnumerator() : Enumerator_1.empty; + enumerator = e ? e.getEnumerator() : EmptyEnumerator_1.EmptyEnumerator; return yielder.yieldReturn(value); } if (len == 0) @@ -508,7 +509,7 @@ var __extends = (this && this.__extends) || function (d, b) { enumerator = _.getEnumerator(); keys = new Dictionary_1.Dictionary(compareSelector); if (second) - Enumerator_1.forEach(second, function (key) { return keys.addByKeyValue(key, true); }); + Enumerator_1.forEach(second, function (key) { keys.addByKeyValue(key, true); }); }, function (yielder) { throwIfDisposed(disposed); while (enumerator.moveNext()) { @@ -1181,8 +1182,9 @@ var __extends = (this && this.__extends) || function (d, b) { }, true); }); }; - Enumerable.forEach = function (enumerable, action) { - Enumerator_1.forEach(enumerable, action); + Enumerable.forEach = function (enumerable, action, max) { + if (max === void 0) { max = Infinity; } + return Enumerator_1.forEach(enumerable, action, max); }; Enumerable.map = function (enumerable, selector) { return Enumerator_1.map(enumerable, selector); @@ -1295,15 +1297,16 @@ var __extends = (this && this.__extends) || function (d, b) { ? this.where(predicate).toArray() : this.copyTo([]); }; - Enumerable.prototype.copyTo = function (target, index) { + Enumerable.prototype.copyTo = function (target, index, count) { if (index === void 0) { index = 0; } + if (count === void 0) { count = Infinity; } this.throwIfDisposed(); if (!target) throw new ArgumentNullException_1.ArgumentNullException("target"); Integer_1.Integer.assertZeroOrGreater(index); Enumerator_1.forEach(this, function (x, i) { target[i + index] = x; - }); + }, count); return target; }; Enumerable.prototype.toLookup = function (keySelector, elementSelector, compareSelector) { @@ -1851,10 +1854,11 @@ var __extends = (this && this.__extends) || function (d, b) { ArrayEnumerable.prototype.asEnumerable = function () { return new ArrayEnumerable(this._source); }; - ArrayEnumerable.prototype.forEach = function (action) { + ArrayEnumerable.prototype.forEach = function (action, max) { + if (max === void 0) { max = Infinity; } var _ = this; _.throwIfDisposed(); - Enumerator_1.forEach(_._source, action); + return Enumerator_1.forEach(_._source, action, max); }; ArrayEnumerable.prototype.any = function (predicate) { var _ = this; diff --git a/source/System.Linq/Linq.js.map b/source/System.Linq/Linq.js.map index 30ad59d1..467ef205 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":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Linq.js","sourceRoot":"","sources":["Linq.ts"],"names":[],"mappings":"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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 85885f0c..b22f408a 100644 --- a/source/System.Linq/Linq.ts +++ b/source/System.Linq/Linq.ts @@ -9,7 +9,6 @@ import * as Values from "../System/Compare"; import * as Arrays from "../System/Collections/Array/Compare"; import * as ArrayUtility from "../System/Collections/Array/Utility"; import { - empty as EmptyEnumerator, from as enumeratorFrom, forEach, toArray, @@ -17,6 +16,7 @@ import { isEnumerable, throwIfEndless } from "../System/Collections/Enumeration/Enumerator"; +import {EmptyEnumerator} from "../System/Collections/Enumeration/EmptyEnumerator"; import {Type} from "../System/Types"; import {Integer} from "../System/Integer"; import {Functions as BaseFunctions} from "../System/Functions"; @@ -1010,7 +1010,7 @@ extends DisposableBase implements IEnumerable enumerator = _.getEnumerator(); keys = new Dictionary(compareSelector); if(second) - forEach(second, key => keys.addByKeyValue(key, true)); + forEach(second, key => { keys.addByKeyValue(key, true) }); }, (yielder)=> @@ -2306,11 +2306,12 @@ extends InfiniteEnumerable static forEach( enumerable:IEnumerableOrArray, - action:(element:T, index?:number) => any):void + action:(element:T, index?:number) => any, + max:number = Infinity):number { // Will properly dispose created enumerable. // Will throw if enumerable is endless. - forEach(enumerable, action); + return forEach(enumerable, action, max); } static map( @@ -2519,7 +2520,7 @@ extends InfiniteEnumerable : this.copyTo([]); } - copyTo(target:T[], index:number = 0):T[] + copyTo(target:T[], index:number = 0, count:number = Infinity):T[] { this.throwIfDisposed(); if(!target) throw new ArgumentNullException("target"); @@ -2529,7 +2530,7 @@ extends InfiniteEnumerable forEach(this, (x, i)=> { target[i + index] = x - }); + }, count); return target; } @@ -3538,12 +3539,12 @@ extends FiniteEnumerable } // Optimize forEach so that subsequent usage is optimized. - forEach(action:Predicate | Action):void + forEach(action:Predicate | Action, max:number = Infinity):number { var _ = this; _.throwIfDisposed(); - forEach(_._source, action); + return forEach(_._source, action, max); } // These methods should ALWAYS check for array length before attempting anything. diff --git a/source/System/Collections/CollectionBase.js b/source/System/Collections/CollectionBase.js index 5472b19c..0a4eb675 100644 --- a/source/System/Collections/CollectionBase.js +++ b/source/System/Collections/CollectionBase.js @@ -198,11 +198,15 @@ var __extends = (this && this.__extends) || function (d, b) { CollectionBase.prototype.forEach = function (action, useCopy) { if (useCopy) { var a = this.toArray(); - Enumerator_1.forEach(a, action); - a.length = 0; + try { + return Enumerator_1.forEach(a, action); + } + finally { + a.length = 0; + } } else { - Enumerator_1.forEach(this.getEnumerator(), action); + return Enumerator_1.forEach(this.getEnumerator(), action); } }; CollectionBase.prototype.copyTo = function (target, index) { diff --git a/source/System/Collections/CollectionBase.js.map b/source/System/Collections/CollectionBase.js.map index e9669466..86bc0fa2 100644 --- a/source/System/Collections/CollectionBase.js.map +++ b/source/System/Collections/CollectionBase.js.map @@ -1 +1 @@ -{"version":3,"file":"CollectionBase.js","sourceRoot":"","sources":["CollectionBase.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"CollectionBase.js","sourceRoot":"","sources":["CollectionBase.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/source/System/Collections/CollectionBase.ts b/source/System/Collections/CollectionBase.ts index 36c3ebdc..c79a25ec 100644 --- a/source/System/Collections/CollectionBase.ts +++ b/source/System/Collections/CollectionBase.ts @@ -251,17 +251,21 @@ extends DisposableBase implements ICollection, IEnumerateEach return found; } - forEach(action:Predicate|Action, useCopy?:boolean):void + forEach(action:Predicate|Action, useCopy?:boolean):number { if(useCopy) { var a = this.toArray(); - forEach(a, action); - a.length = 0; + try { + return forEach(a, action); + } + finally{ + a.length = 0; + } } else { - forEach(this.getEnumerator(), action); + return forEach(this.getEnumerator(), action); } } diff --git a/source/System/Collections/Enumeration/EmptyEnumerator.js b/source/System/Collections/Enumeration/EmptyEnumerator.js new file mode 100644 index 00000000..0d0226c5 --- /dev/null +++ b/source/System/Collections/Enumeration/EmptyEnumerator.js @@ -0,0 +1,30 @@ +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md + */ +(function (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(["require", "exports", "./IteratorResult", "../../Functions"], factory); + } +})(function (require, exports) { + "use strict"; + var IteratorResult_1 = require("./IteratorResult"); + var Functions_1 = require("../../Functions"); + var VOID0 = void 0; + exports.EmptyEnumerator = Object.freeze({ + current: VOID0, + moveNext: Functions_1.Functions.False, + nextValue: Functions_1.Functions.Blank, + next: IteratorResult_1.IteratorResult.GetDone, + "return": IteratorResult_1.IteratorResult.GetDone, + reset: Functions_1.Functions.Blank, + dispose: Functions_1.Functions.Blank, + isEndless: false + }); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = exports.EmptyEnumerator; +}); +//# sourceMappingURL=EmptyEnumerator.js.map \ No newline at end of file diff --git a/source/System/Collections/Enumeration/EmptyEnumerator.js.map b/source/System/Collections/Enumeration/EmptyEnumerator.js.map new file mode 100644 index 00000000..493eab74 --- /dev/null +++ b/source/System/Collections/Enumeration/EmptyEnumerator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"EmptyEnumerator.js","sourceRoot":"","sources":["EmptyEnumerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;;;;IAIH,+BAA6B,kBAAkB,CAAC,CAAA;IAChD,0BAAwB,iBAAiB,CAAC,CAAA;IAE1C,IAAM,KAAK,GAAO,KAAK,CAAC,CAAC;IAQZ,uBAAe,GAAoB,MAAM,CAAC,MAAM,CAAC;QAC7D,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,qBAAS,CAAC,KAAK;QACzB,SAAS,EAAE,qBAAS,CAAC,KAAK;QAC1B,IAAI,EAAE,+BAAc,CAAC,OAAO;QAC5B,QAAQ,EAAE,+BAAc,CAAC,OAAO;QAChC,KAAK,EAAE,qBAAS,CAAC,KAAK;QACtB,OAAO,EAAE,qBAAS,CAAC,KAAK;QACxB,SAAS,EAAE,KAAK;KAChB,CAAC,CAAC;IACH;sBAAe,uBAAe,CAAC"} \ No newline at end of file diff --git a/source/System/Collections/Enumeration/EmptyEnumerator.ts b/source/System/Collections/Enumeration/EmptyEnumerator.ts new file mode 100644 index 00000000..7c7384bd --- /dev/null +++ b/source/System/Collections/Enumeration/EmptyEnumerator.ts @@ -0,0 +1,29 @@ +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md + */ + + +import {IEnumerator} from "./IEnumerator"; +import {IteratorResult} from "./IteratorResult"; +import {Functions} from "../../Functions"; + +const VOID0:any = void 0; + + +/** + * A simplified stripped down enumerable that is always complete and has no results. + * Frozen and exported as 'empty' to allow for reuse. + */ + +export const EmptyEnumerator:IEnumerator = Object.freeze({ + current: VOID0, + moveNext: Functions.False, + nextValue: Functions.Blank, + next: IteratorResult.GetDone, + "return": IteratorResult.GetDone, + reset: Functions.Blank, + dispose: Functions.Blank, + isEndless: false +}); +export default EmptyEnumerator; \ No newline at end of file diff --git a/source/System/Collections/Enumeration/Enumerator.js b/source/System/Collections/Enumeration/Enumerator.js index 1266a580..212eaaa6 100644 --- a/source/System/Collections/Enumeration/Enumerator.js +++ b/source/System/Collections/Enumeration/Enumerator.js @@ -7,7 +7,7 @@ var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === 'function' && define.amd) { - define(["require", "exports", "../../Disposable/dispose", "../../Types", "./ArrayEnumerator", "./IndexEnumerator", "./UnsupportedEnumerableException"], factory); + define(["require", "exports", "../../Disposable/dispose", "../../Types", "./ArrayEnumerator", "./IndexEnumerator", "./UnsupportedEnumerableException", "./InfiniteEnumerator", "./EmptyEnumerator", "./IteratorEnumerator"], factory); } })(function (require, exports) { "use strict"; @@ -16,6 +16,9 @@ var ArrayEnumerator_1 = require("./ArrayEnumerator"); var IndexEnumerator_1 = require("./IndexEnumerator"); var UnsupportedEnumerableException_1 = require("./UnsupportedEnumerableException"); + var InfiniteEnumerator_1 = require("./InfiniteEnumerator"); + var EmptyEnumerator_1 = require("./EmptyEnumerator"); + var IteratorEnumerator_1 = require("./IteratorEnumerator"); var VOID0 = void (0), STRING_EMPTY = "", ENDLESS_EXCEPTION_MESSAGE = 'Cannot call forEach on an endless enumerable. ' + 'Would result in an infinite loop that could hang the current process.'; function throwIfEndless(isEndless) { @@ -23,9 +26,10 @@ throw new UnsupportedEnumerableException_1.UnsupportedEnumerableException(ENDLESS_EXCEPTION_MESSAGE); } exports.throwIfEndless = throwIfEndless; - function initArrayFrom(source) { + function initArrayFrom(source, max) { + if (max === void 0) { max = Infinity; } if (Array.isArray(source) || Types_1.Type.isString(source)) { - var len = source.length; + var len = Math.min(source.length, max); if (isFinite(len)) { if (len > 65535) return new Array(len); @@ -36,45 +40,9 @@ } return []; } - var EmptyEnumerator = (function () { - function EmptyEnumerator() { - } - Object.defineProperty(EmptyEnumerator.prototype, "current", { - get: function () { - return VOID0; - }, - enumerable: true, - configurable: true - }); - EmptyEnumerator.prototype.moveNext = function () { - return false; - }; - EmptyEnumerator.prototype.nextValue = function () { - return VOID0; - }; - EmptyEnumerator.prototype.next = function () { - return { - value: VOID0, - done: true - }; - }; - EmptyEnumerator.prototype.reset = function () { }; - EmptyEnumerator.prototype.dispose = function () { }; - Object.defineProperty(EmptyEnumerator.prototype, "isEndless", { - get: function () { - return false; - }, - enumerable: true, - configurable: true - }); - return EmptyEnumerator; - }()); - var Empty = new EmptyEnumerator(); - Object.freeze(Empty); - exports.empty = Empty; function from(source) { if (!source) - return Empty; + return EmptyEnumerator_1.EmptyEnumerator; if (Array.isArray(source)) return new ArrayEnumerator_1.ArrayEnumerator(source); if (Types_1.Type.isArrayLike(source)) { @@ -90,8 +58,12 @@ if (!Types_1.Type.isPrimitive(source)) { if (isEnumerable(source)) return source.getEnumerator(); + if (Types_1.Type.isFunction(source)) + return new InfiniteEnumerator_1.InfiniteEnumerator(source); + if (isIterator(source)) + return new IteratorEnumerator_1.IteratorEnumerator(source); } - throw new Error("Unknown enumerable."); + throw new UnsupportedEnumerableException_1.UnsupportedEnumerableException(); } exports.from = from; function isEnumerable(instance) { @@ -106,48 +78,70 @@ return Types_1.Type.hasMemberOfType(instance, "moveNext", Types_1.Type.FUNCTION); } exports.isEnumerator = isEnumerator; - function forEach(e, action) { - if (e !== VOID0 && e !== null) { + function isIterator(instance) { + return Types_1.Type.hasMemberOfType(instance, "next", Types_1.Type.FUNCTION); + } + exports.isIterator = isIterator; + function forEach(e, action, max) { + if (max === void 0) { max = Infinity; } + if (e === STRING_EMPTY) + return 0; + if (e && max > 0) { if (Types_1.Type.isArrayLike(e)) { - throwIfEndless(!isFinite(e.length)); - for (var i = 0; i < e.length; i++) { + throwIfEndless(!isFinite(max) && !isFinite(e.length)); + var i = 0; + for (; i < Math.min(e.length, max); i++) { if (action(e[i], i) === false) break; } - return true; + return i; } if (isEnumerator(e)) { - throwIfEndless(e.isEndless); - var index = 0; - while (e.moveNext()) { - if (action(e.current, index++) === false) + throwIfEndless(!isFinite(max) && e.isEndless); + var i = 0; + while (max > i && e.moveNext()) { + if (action(e.current, i++) === false) break; } - return true; + return i; } if (isEnumerable(e)) { - throwIfEndless(e.isEndless); - dispose_1.using(e.getEnumerator(), function (f) { return forEach(f, action); }); - return true; + throwIfEndless(!isFinite(max) && e.isEndless); + return dispose_1.using(e.getEnumerator(), function (f) { return forEach(f, action, max); }); + } + if (isIterator(e)) { + throwIfEndless(!isFinite(max)); + var i = 0, r = void 0; + while (max > i && !(r = e.next()).done) { + if (action(r.value, i++) === false) + break; + } + return i; } - return false; } + return -1; } exports.forEach = forEach; - function toArray(source) { + function toArray(source, max) { + if (max === void 0) { max = Infinity; } if (source === STRING_EMPTY) return []; - if (Array.isArray(source)) + if (!isFinite(max) && Array.isArray(source)) return source.slice(); - var result = initArrayFrom(source); - if (!forEach(source, function (e, i) { result[i] = e; })) + var result = initArrayFrom(source, max); + if (-1 === forEach(source, function (e, i) { result[i] = e; }, max)) throw new UnsupportedEnumerableException_1.UnsupportedEnumerableException(); return result; } exports.toArray = toArray; - function map(source, selector) { - var result = initArrayFrom(source); - if (!forEach(source, function (e, i) { result[i] = selector(e); })) + function map(source, selector, max) { + if (max === void 0) { max = Infinity; } + if (source === STRING_EMPTY) + return []; + if (!isFinite(max) && Array.isArray(source)) + return source.map(selector); + var result = initArrayFrom(source, max); + if (-1 === forEach(source, function (e, i) { result[i] = selector(e); }, max)) throw new UnsupportedEnumerableException_1.UnsupportedEnumerableException(); return result; } diff --git a/source/System/Collections/Enumeration/Enumerator.js.map b/source/System/Collections/Enumeration/Enumerator.js.map index 8b63ef3c..ef5587f8 100644 --- a/source/System/Collections/Enumeration/Enumerator.js.map +++ b/source/System/Collections/Enumeration/Enumerator.js.map @@ -1 +1 @@ -{"version":3,"file":"Enumerator.js","sourceRoot":"","sources":["Enumerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;;;;IAGH,wBAAoB,0BAA0B,CAAC,CAAA;IAC/C,sBAAmB,aAAa,CAAC,CAAA;IACjC,gCAA8B,mBAAmB,CAAC,CAAA;IAClD,gCAA8B,mBAAmB,CAAC,CAAA;IAClD,+CAA6C,kCAAkC,CAAC,CAAA;IAOhF,IACC,KAAK,GAAuB,KAAI,CAAC,CAAC,CAAC,EACnC,YAAY,GAAgB,EAAE,EAC9B,yBAAyB,GACxB,gDAAgD;QAChD,uEAAuE,CAAC;IAE1E,wBAA+B,SAAiB;QAE/C,EAAE,CAAA,CAAC,SAAS,CAAC;YAAC,MAAM,IAAI,+DAA8B,CAAC,yBAAyB,CAAC,CAAC;IACnF,CAAC;IAHe,sBAAc,iBAG7B,CAAA;IAED,uBAAuB,MAA+C;QAErE,EAAE,CAAA,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,YAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAClD,CAAC;YACA,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;YACxB,EAAE,CAAA,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CACjB,CAAC;gBACA,EAAE,CAAA,CAAC,GAAG,GAAC,KAAK,CAAC;oBAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;gBACpC,IAAI,MAAM,GAAS,EAAE,CAAC;gBACtB,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;gBACpB,MAAM,CAAC,MAAM,CAAC;YACf,CAAC;QACF,CAAC;QACD,MAAM,CAAC,EAAE,CAAC;IACX,CAAC;IAED;QAAA;QAiCA,CAAC;QA/BA,sBAAI,oCAAO;iBAAX;gBAEC,MAAM,CAAC,KAAK,CAAC;YACd,CAAC;;;WAAA;QAED,kCAAQ,GAAR;YAEC,MAAM,CAAC,KAAK,CAAC;QACd,CAAC;QAED,mCAAS,GAAT;YAEC,MAAM,CAAC,KAAK,CAAC;QACd,CAAC;QAED,8BAAI,GAAJ;YAEC,MAAM,CAAC;gBACN,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,IAAI;aACV,CAAA;QACF,CAAC;QAED,+BAAK,GAAL,cAAe,CAAC;QAEhB,iCAAO,GAAP,cAAiB,CAAC;QAElB,sBAAI,sCAAS;iBAAb;gBAEC,MAAM,CAAC,KAAK,CAAC;YACd,CAAC;;;WAAA;QACF,sBAAC;IAAD,CAAC,AAjCD,IAiCC;IAED,IAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IACpC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAER,aAAK,GAAoB,KAAK,CAAC;IAG5C,cAAwB,MAA4B;QAGnD,EAAE,CAAA,CAAC,CAAC,MAAM,CAAC;YACV,MAAM,CAAC,KAAK,CAAC;QAEd,EAAE,CAAA,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACxB,MAAM,CAAC,IAAI,iCAAe,CAAS,MAAM,CAAC,CAAC;QAE5C,EAAE,CAAA,CAAC,YAAI,CAAC,WAAW,CAAI,MAAM,CAAC,CAAC,CAC/B,CAAC;YACA,MAAM,CAAC,IAAI,iCAAe,CACzB;gBAEC,MAAM,CAAC;oBACN,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,OAAO,EAAE,CAAC;oBACV,IAAI,EAAE,CAAC;iBACP,CAAA;YACF,CAAC,CACD,CAAC;QACH,CAAC;QAED,EAAE,CAAA,CAAC,CAAC,YAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAC7B,CAAC;YACA,EAAE,CAAA,CAAC,YAAY,CAAI,MAAM,CAAC,CAAC;gBAC1B,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAEhC,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACxC,CAAC;IAhCe,YAAI,OAgCnB,CAAA;IAED,sBAAgC,QAAY;QAE3C,MAAM,CAAC,YAAI,CAAC,eAAe,CAAiB,QAAQ,EAAE,eAAe,EAAE,YAAI,CAAC,QAAQ,CAAC,CAAC;IACvF,CAAC;IAHe,oBAAY,eAG3B,CAAA;IAED,iCAA2C,QAAY;QAEtD,MAAM,CAAC,YAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAHe,+BAAuB,0BAGtC,CAAA;IAGD,sBAAgC,QAAY;QAE3C,MAAM,CAAC,YAAI,CAAC,eAAe,CAAiB,QAAQ,EAAE,UAAU,EAAE,YAAI,CAAC,QAAQ,CAAC,CAAC;IAClF,CAAC;IAHe,oBAAY,eAG3B,CAAA;IAQD,iBACC,CAAsC,EACtC,MAAwC;QAExC,EAAE,CAAA,CAAC,CAAC,KAAG,KAAK,IAAI,CAAC,KAAG,IAAI,CAAC,CACzB,CAAC;YACA,EAAE,CAAA,CAAC,YAAI,CAAC,WAAW,CAAI,CAAC,CAAC,CAAC,CAC1B,CAAC;gBAEA,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBAEpC,GAAG,CAAA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAC9B,CAAC;oBACA,EAAE,CAAA,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,KAAK,CAAC;wBAC1B,KAAK,CAAC;gBACR,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC;YACb,CAAC;YAED,EAAE,CAAA,CAAC,YAAY,CAAI,CAAC,CAAC,CAAC,CACtB,CAAC;gBACA,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAE5B,IAAI,KAAK,GAAG,CAAC,CAAC;gBAEd,OAAM,CAAC,CAAC,QAAQ,EAAE,EAClB,CAAC;oBACA,EAAE,CAAA,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,KAAG,KAAK,CAAC;wBACrC,KAAK,CAAC;gBACR,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC;YACb,CAAC;YAED,EAAE,CAAA,CAAC,YAAY,CAAI,CAAC,CAAC,CAAC,CACtB,CAAC;gBACA,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAG5B,eAAK,CACa,CAAE,CAAC,aAAa,EAAE,EACnC,UAAA,CAAC,IAAE,OAAA,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,EAAlB,CAAkB,CACrB,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC;YACb,CAAC;YAED,MAAM,CAAC,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IA/Ce,eAAO,UA+CtB,CAAA;IAOD,iBACC,MAA2C;QAE3C,EAAE,CAAA,CAAM,MAAM,KAAG,YAAY,CAAC;YAAC,MAAM,CAAC,EAAE,CAAC;QAEzC,EAAE,CAAA,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACxB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAEvB,IAAI,MAAM,GAAO,aAAa,CAAC,MAAM,CAAC,CAAC;QACvC,EAAE,CAAA,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,UAAC,CAAC,EAAE,CAAC,IAAO,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,IAAI,+DAA8B,EAAE,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC;IACf,CAAC;IAbe,eAAO,UAatB,CAAA;IAQD,aACC,MAA2C,EAC3C,QAA4B;QAE5B,IAAI,MAAM,GAAa,aAAa,CAAC,MAAM,CAAC,CAAC;QAC7C,EAAE,CAAA,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,UAAC,CAAC,EAAE,CAAC,IAAO,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,IAAI,+DAA8B,EAAE,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC;IACf,CAAC;IATe,WAAG,MASlB,CAAA"} \ No newline at end of file +{"version":3,"file":"Enumerator.js","sourceRoot":"","sources":["Enumerator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/source/System/Collections/Enumeration/Enumerator.ts b/source/System/Collections/Enumeration/Enumerator.ts index 5d65f24c..8f32ea49 100644 --- a/source/System/Collections/Enumeration/Enumerator.ts +++ b/source/System/Collections/Enumeration/Enumerator.ts @@ -12,8 +12,11 @@ import {UnsupportedEnumerableException} from "./UnsupportedEnumerableException"; import {Selector} from "../../FunctionTypes"; import {IEnumerator} from "./IEnumerator"; import {IEnumerable} from "./IEnumerable"; -import {IIteratorResult} from "./IIterator"; import {IEnumerableOrArray} from "../IEnumerableOrArray"; +import {InfiniteValueFactory, InfiniteEnumerator} from "./InfiniteEnumerator"; +import {EmptyEnumerator as Empty} from "./EmptyEnumerator"; +import {IIterator, IIteratorResult} from "./IIterator"; +import {IteratorEnumerator} from "./IteratorEnumerator"; const VOID0:any = void(0), @@ -27,11 +30,13 @@ export function throwIfEndless(isEndless:boolean):void if(isEndless) throw new UnsupportedEnumerableException(ENDLESS_EXCEPTION_MESSAGE); } -function initArrayFrom(source:IEnumerableOrArray|IEnumerator):any[] +function initArrayFrom( + source:IEnumerableOrArray|IEnumerator, + max:number = Infinity):any[] { if(Array.isArray(source) || Type.isString(source)) { - var len = source.length; + var len = Math.min(source.length, max); if(isFinite(len)) { if(len>65535) return new Array(len); @@ -43,48 +48,9 @@ function initArrayFrom(source:IEnumerableOrArray|IEnumerator):any[] return []; } -class EmptyEnumerator implements IEnumerator -{ - get current():any - { - return VOID0; - } - - moveNext():boolean - { - return false; - } - - nextValue():any - { - return VOID0; - } - - next():IIteratorResult - { - return { - value: VOID0, - done: true - } - } - - reset():void { } - - dispose():void { } - - get isEndless():boolean - { - return false; - } -} - -const Empty = new EmptyEnumerator(); -Object.freeze(Empty); - -export const empty:IEnumerator = Empty; // Could be array, or IEnumerable... -export function from(source:IEnumerableOrArray):IEnumerator +export function from(source:IEnumerableOrArray|InfiniteValueFactory|IIterator):IEnumerator { // To simplify and prevent null reference exceptions: if(!source) @@ -113,9 +79,15 @@ export function from(source:IEnumerableOrArray):IEnumerator if(isEnumerable(source)) return source.getEnumerator(); + if(Type.isFunction(source)) + return new InfiniteEnumerator(source); + + if(isIterator(source)) + return new IteratorEnumerator(source); + } - throw new Error("Unknown enumerable."); + throw new UnsupportedEnumerableException(); } export function isEnumerable(instance:any):instance is IEnumerable @@ -128,82 +100,107 @@ export function isEnumerableOrArrayLike(instance:any):instance is IEnumerable return Type.isArrayLike(instance) || isEnumerable(instance); } - export function isEnumerator(instance:any):instance is IEnumerator { return Type.hasMemberOfType>(instance, "moveNext", Type.FUNCTION); } +export function isIterator(instance:any):instance is IIterator +{ + return Type.hasMemberOfType>(instance, "next", Type.FUNCTION); +} + /** * Flexible method for iterating any enumerable, enumerable, array, or array-like object. - * @param e - * @param action - * @returns true if enumerated, false if null or unrecognized enumerable, void if nothing done + * @param e The enumeration to loop on. + * @param action The action to take on each. + * @param max Stops after max is reached. Allows for forEach to be called on infinite enumerations. + * @returns the total times iterated. If the enumerable is unrecognized then -1. */ export function forEach( - e:IEnumerableOrArray|IEnumerator, - action:(element:T, index?:number) => any):boolean|void + e:IEnumerableOrArray|IEnumerator|IIterator, + action:(element:T, index?:number) => any, + max:number = Infinity):number { - if(e!==VOID0 && e!==null) // Allow for empty string. + if(e===STRING_EMPTY) return 0; + + if(e && max>0) { if(Type.isArrayLike(e)) { // Assume e.length is constant or at least doesn't deviate to infinite or NaN. - throwIfEndless(!isFinite(e.length)); - - for(let i = 0; i(e)) { - throwIfEndless(e.isEndless); + throwIfEndless(!isFinite(max) && e.isEndless); - var index = 0; + let i = 0; // Return value of action can be anything, but if it is (===) false then the forEach will discontinue. - while(e.moveNext()) + while(max>i && e.moveNext()) { - if(action(e.current, index++)===false) + if(action(e.current, i++)===false) break; } - return true; + return i; } if(isEnumerable(e)) { - throwIfEndless(e.isEndless); + throwIfEndless(!isFinite(max) && e.isEndless); // For enumerators that aren't EnumerableBase, ensure dispose is called. - using( + return using( (>e).getEnumerator(), - f=>forEach(f, action) + f=>forEach(f, action, max) ); - return true; } - return false; + if(isIterator(e)) { + // For our purpose iterators are endless and a max must be specified before iterating. + throwIfEndless(!isFinite(max)); + + let i = 0, r:IIteratorResult; + // Return value of action can be anything, but if it is (===) false then the forEach will discontinue. + while(max>i && !(r = e.next()).done) + { + if(action(r.value, i++)===false) + break; + } + return i; + } } + + return -1; + } /** * Converts any enumerable to an array. * @param source + * @param max Stops after max is reached. Allows for forEach to be called on infinite enumerations. * @returns {any} */ export function toArray( - source:IEnumerableOrArray|IEnumerator):T[] + source:IEnumerableOrArray|IEnumerator, + max:number = Infinity):T[] { if(source===STRING_EMPTY) return []; - if(Array.isArray(source)) + if(!isFinite(max) && Array.isArray(source)) return source.slice(); - var result:T[] = initArrayFrom(source); - if(!forEach(source, (e, i) => { result[i] = e; })) + var result:T[] = initArrayFrom(source, max); + if(-1===forEach(source, (e, i) => { result[i] = e; }, max)) throw new UnsupportedEnumerableException(); return result; @@ -213,14 +210,21 @@ export function toArray( * Converts any enumerable to an array of selected values. * @param source * @param selector + * @param max Stops after max is reached. Allows for forEach to be called on infinite enumerations. * @returns {TResult[]} */ export function map( source:IEnumerableOrArray|IEnumerator, - selector:Selector):TResult[] + selector:Selector, + max:number = Infinity):TResult[] { - var result:TResult[] = initArrayFrom(source); - if(!forEach(source, (e, i) => { result[i] = selector(e); })) + if(source===STRING_EMPTY) return []; + + if(!isFinite(max) && Array.isArray(source)) + return source.map(selector); + + var result:TResult[] = initArrayFrom(source, max); + if(-1===forEach(source, (e, i) => { result[i] = selector(e); }, max)) throw new UnsupportedEnumerableException(); return result; diff --git a/source/System/Collections/Enumeration/EnumeratorBase.js b/source/System/Collections/Enumeration/EnumeratorBase.js index 00c8d4c7..186af942 100644 --- a/source/System/Collections/Enumeration/EnumeratorBase.js +++ b/source/System/Collections/Enumeration/EnumeratorBase.js @@ -12,13 +12,14 @@ var __extends = (this && this.__extends) || function (d, b) { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === 'function' && define.amd) { - define(["require", "exports", "../../Types", "../../Disposable/DisposableBase", "../../Disposable/ObjectPool"], factory); + define(["require", "exports", "../../Types", "../../Disposable/DisposableBase", "../../Disposable/ObjectPool", "./IteratorResult"], factory); } })(function (require, exports) { "use strict"; var Types_1 = require("../../Types"); var DisposableBase_1 = require("../../Disposable/DisposableBase"); var ObjectPool_1 = require("../../Disposable/ObjectPool"); + var IteratorResult_1 = require("./IteratorResult"); var VOID0 = void (0); var yielderPool; function yielder(recycle) { @@ -39,12 +40,22 @@ var __extends = (this && this.__extends) || function (d, b) { enumerable: true, configurable: true }); + Object.defineProperty(Yielder.prototype, "index", { + get: function () { return this._index; }, + enumerable: true, + configurable: true + }); Yielder.prototype.yieldReturn = function (value) { this._current = value; + if (this._index === VOID0) + this._index = 0; + else + this._index++; return true; }; Yielder.prototype.yieldBreak = function () { this._current = VOID0; + this._index = VOID0; return false; }; Yielder.prototype.dispose = function () { @@ -74,7 +85,16 @@ var __extends = (this && this.__extends) || function (d, b) { } Object.defineProperty(EnumeratorBase.prototype, "current", { get: function () { - return this._yielder.current; + var y = this._yielder; + return y && y.current; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EnumeratorBase.prototype, "index", { + get: function () { + var y = this._yielder; + return y && y.index; }, enumerable: true, configurable: true @@ -90,17 +110,17 @@ var __extends = (this && this.__extends) || function (d, b) { var _ = this; _.throwIfDisposed(); var y = _._yielder; - if (y) - y.yieldBreak(); - else - _._yielder = yielder(); + _._yielder = null; _._state = EnumeratorState.Before; + if (y) + yielder(y); }; EnumeratorBase.prototype.moveNext = function () { var _ = this; try { switch (_._state) { case EnumeratorState.Before: + _._yielder = _._yielder || yielder(); _._state = EnumeratorState.Running; var initializer = _._initializer; if (initializer) @@ -124,18 +144,23 @@ var __extends = (this && this.__extends) || function (d, b) { }; EnumeratorBase.prototype.nextValue = function () { return this.moveNext() - ? this._yielder.current + ? this.current : VOID0; }; EnumeratorBase.prototype.next = function () { - return this.moveNext() ? - { - value: this._yielder.current, - done: false - } : { - value: VOID0, - done: true - }; + return this.moveNext() + ? new IteratorResult_1.IteratorResult(this.current, this.index) + : IteratorResult_1.IteratorResult.Done; + }; + EnumeratorBase.prototype['return'] = function (value) { + try { + return value === VOID0 || this._state === EnumeratorState.After + ? IteratorResult_1.IteratorResult.Done + : new IteratorResult_1.IteratorResult(value, VOID0, true); + } + finally { + this.dispose(); + } }; EnumeratorBase.prototype._onDispose = function () { var _ = this, disposer = _._disposer; @@ -143,14 +168,11 @@ var __extends = (this && this.__extends) || function (d, b) { _._disposer = null; var y = _._yielder; _._yielder = null; - yielder(y); - try { - if (disposer) - disposer(); - } - finally { - this._state = EnumeratorState.After; - } + this._state = EnumeratorState.After; + if (y) + yielder(y); + if (disposer) + disposer(); }; return EnumeratorBase; }(DisposableBase_1.DisposableBase)); diff --git a/source/System/Collections/Enumeration/EnumeratorBase.js.map b/source/System/Collections/Enumeration/EnumeratorBase.js.map index 7dfa3663..3b4b322a 100644 --- a/source/System/Collections/Enumeration/EnumeratorBase.js.map +++ b/source/System/Collections/Enumeration/EnumeratorBase.js.map @@ -1 +1 @@ -{"version":3,"file":"EnumeratorBase.js","sourceRoot":"","sources":["EnumeratorBase.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"EnumeratorBase.js","sourceRoot":"","sources":["EnumeratorBase.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/source/System/Collections/Enumeration/EnumeratorBase.ts b/source/System/Collections/Enumeration/EnumeratorBase.ts index c305768a..3c52ac60 100644 --- a/source/System/Collections/Enumeration/EnumeratorBase.ts +++ b/source/System/Collections/Enumeration/EnumeratorBase.ts @@ -10,6 +10,7 @@ import {IDisposable} from "../../Disposable/IDisposable"; import {IEnumerator} from "./IEnumerator"; import {IIteratorResult} from "./IIterator"; import {IYield} from "./IYield"; +import {IteratorResult} from "./IteratorResult"; const VOID0:any = void(0); @@ -29,17 +30,26 @@ function yielder(recycle?:Yielder):Yielder class Yielder implements IYield, IDisposable { private _current:T = VOID0; - get current():T { return this._current; } + private _index:number; + + get current():T { return this._current; } // this class is not entirely local/private. Still needs protection. + + get index():number { return this._index; } yieldReturn(value:T):boolean { this._current = value; + if(this._index===VOID0) + this._index = 0; + else + this._index++; return true; } yieldBreak():boolean { this._current = VOID0; + this._index = VOID0; return false; } @@ -65,7 +75,14 @@ export class EnumeratorBase extends DisposableBase implements IEnumerator get current():T { - return this._yielder.current; + var y = this._yielder; + return y && y.current; + } + + get index():number + { + var y = this._yielder; + return y && y.index; } constructor( @@ -101,7 +118,8 @@ export class EnumeratorBase extends DisposableBase implements IEnumerator * Explicit false means it has an end. * Implicit void means unknown. */ - get isEndless():boolean { + get isEndless():boolean + { return this._isEndless; } @@ -110,9 +128,11 @@ export class EnumeratorBase extends DisposableBase implements IEnumerator var _ = this; _.throwIfDisposed(); var y = _._yielder; - if(y) y.yieldBreak(); // Already exists? Reset. - else _._yielder = yielder(); // New? Get one from the object pool. + _._yielder = null; + _._state = EnumeratorState.Before; + + if(y) yielder(y); // recycle until actually needed. } moveNext():boolean @@ -123,6 +143,7 @@ export class EnumeratorBase extends DisposableBase implements IEnumerator switch(_._state) { case EnumeratorState.Before: + _._yielder = _._yielder || yielder(); _._state = EnumeratorState.Running; var initializer = _._initializer; if(initializer) @@ -152,7 +173,7 @@ export class EnumeratorBase extends DisposableBase implements IEnumerator nextValue():T { return this.moveNext() - ? this._yielder.current + ? this.current : VOID0; } @@ -161,13 +182,24 @@ export class EnumeratorBase extends DisposableBase implements IEnumerator */ next():IIteratorResult { - return this.moveNext() ? + return this.moveNext() + ? new IteratorResult(this.current, this.index) + : IteratorResult.Done + } + + 'return'():IIteratorResult + 'return'(value:TReturn):IIteratorResult + 'return'(value?:any):IIteratorResult + { + try + { + return value===VOID0 || this._state===EnumeratorState.After + ? IteratorResult.Done + : new IteratorResult(value, VOID0, true); + } + finally { - value: this._yielder.current, - done: false - } : { - value: VOID0, - done: true + this.dispose(); } } @@ -181,18 +213,12 @@ export class EnumeratorBase extends DisposableBase implements IEnumerator var y = _._yielder; _._yielder = null; - yielder(y); + this._state = EnumeratorState.After; - try - { - if(disposer) - disposer(); - } - finally - { - //if(this._state==EnumeratorState.Running) - this._state = EnumeratorState.After; - } + if(y) yielder(y); + + if(disposer) + disposer(); } } diff --git a/source/System/Collections/Enumeration/IEnumerateEach.d.ts b/source/System/Collections/Enumeration/IEnumerateEach.d.ts index 162dc182..2694a109 100644 --- a/source/System/Collections/Enumeration/IEnumerateEach.d.ts +++ b/source/System/Collections/Enumeration/IEnumerateEach.d.ts @@ -8,7 +8,7 @@ import {Action, Predicate} from "../../FunctionTypes"; export interface IEnumerateEach { // Enforcing an interface that allows operating on a copy can prevent changing underlying data while enumerating. - forEach(action:Predicate | Action, useCopy?:boolean):void; + forEach(action:Predicate | Action, useCopy?:boolean):number; } export default IEnumerateEach; diff --git a/source/System/Collections/Enumeration/IEnumerator.d.ts b/source/System/Collections/Enumeration/IEnumerator.d.ts index 7383564e..99733385 100644 --- a/source/System/Collections/Enumeration/IEnumerator.d.ts +++ b/source/System/Collections/Enumeration/IEnumerator.d.ts @@ -8,7 +8,8 @@ import {IDisposable} from "../../Disposable/IDisposable"; import {IIterator} from "./IIterator"; // IIterator is added for future compatibility. -export interface IEnumerator extends IIterator, IDisposable { +export interface IEnumerator extends IIterator, IDisposable +{ /** * The current value within the enumeration. @@ -18,7 +19,7 @@ export interface IEnumerator extends IIterator, IDisposable { /** * Safely moves to the next entry and returns true if there is one. */ - moveNext(): boolean; + moveNext(value?:any): boolean; /** * Restarts the enumeration. @@ -28,7 +29,7 @@ export interface IEnumerator extends IIterator, IDisposable { /** * Calls .moveNext() and returns .current */ - nextValue():T; + nextValue(value?:any):T; /** * Provides a way of flagging endless enumerations that may cause issues. @@ -36,4 +37,7 @@ export interface IEnumerator extends IIterator, IDisposable { isEndless?:boolean; } + + + export default IEnumerator; \ No newline at end of file diff --git a/source/System/Collections/Enumeration/IIterator.d.ts b/source/System/Collections/Enumeration/IIterator.d.ts index 76d4e761..972311b8 100644 --- a/source/System/Collections/Enumeration/IIterator.d.ts +++ b/source/System/Collections/Enumeration/IIterator.d.ts @@ -10,11 +10,12 @@ export interface IIteratorResult { done: boolean; value?: T; + index?:number; } export interface IIterator { next(value?: any): IIteratorResult; - 'return'?(value?: any): IIteratorResult; + 'return'?(value?: TReturn): IIteratorResult; 'throw'?(e?: any): IIteratorResult; } diff --git a/source/System/Collections/Enumeration/InfiniteEnumerator.js b/source/System/Collections/Enumeration/InfiniteEnumerator.js new file mode 100644 index 00000000..03cc5297 --- /dev/null +++ b/source/System/Collections/Enumeration/InfiniteEnumerator.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 (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(["require", "exports", "./SimpleEnumerableBase"], factory); + } +})(function (require, exports) { + "use strict"; + var SimpleEnumerableBase_1 = require("./SimpleEnumerableBase"); + var VOID0 = void 0; + var InfiniteEnumerator = (function (_super) { + __extends(InfiniteEnumerator, _super); + function InfiniteEnumerator(_factory) { + _super.call(this); + this._factory = _factory; + } + InfiniteEnumerator.prototype.canMoveNext = function () { + return this._factory != null; + }; + InfiniteEnumerator.prototype.moveNext = function () { + var _ = this; + var f = _._factory; + if (f) + _._current = f(_._current, _.incrementIndex()); + return f != VOID0; + }; + InfiniteEnumerator.prototype.dispose = function () { + _super.prototype.dispose.call(this); + this._factory = VOID0; + }; + return InfiniteEnumerator; + }(SimpleEnumerableBase_1.SimpleEnumerableBase)); + exports.InfiniteEnumerator = InfiniteEnumerator; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = InfiniteEnumerator; +}); +//# sourceMappingURL=InfiniteEnumerator.js.map \ No newline at end of file diff --git a/source/System/Collections/Enumeration/InfiniteEnumerator.js.map b/source/System/Collections/Enumeration/InfiniteEnumerator.js.map new file mode 100644 index 00000000..84d4db2d --- /dev/null +++ b/source/System/Collections/Enumeration/InfiniteEnumerator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"InfiniteEnumerator.js","sourceRoot":"","sources":["InfiniteEnumerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;;;;;;;;;IAGH,qCAAmC,wBAAwB,CAAC,CAAA;IAE5D,IAAM,KAAK,GAAO,KAAK,CAAC,CAAC;IAczB;QAA2C,sCAAuB;QAMjE,4BAAoB,QAAgC;YAEnD,iBAAO,CAAC;YAFW,aAAQ,GAAR,QAAQ,CAAwB;QAGpD,CAAC;QAES,wCAAW,GAArB;YAEC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAE,IAAI,CAAC;QAC5B,CAAC;QAED,qCAAQ,GAAR;YAEC,IAAI,CAAC,GAAG,IAAI,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;YACnB,EAAE,CAAA,CAAC,CAAC,CAAC;gBAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,CAAC,IAAE,KAAK,CAAC;QACjB,CAAC;QAED,oCAAO,GAAP;YAEC,gBAAK,CAAC,OAAO,WAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACvB,CAAC;QAEF,yBAAC;IAAD,CAAC,AA9BD,CAA2C,2CAAoB,GA8B9D;IA9BY,0BAAkB,qBA8B9B,CAAA;IAED;sBAAe,kBAAkB,CAAC"} \ No newline at end of file diff --git a/source/System/Collections/Enumeration/InfiniteEnumerator.ts b/source/System/Collections/Enumeration/InfiniteEnumerator.ts new file mode 100644 index 00000000..85f48054 --- /dev/null +++ b/source/System/Collections/Enumeration/InfiniteEnumerator.ts @@ -0,0 +1,55 @@ +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md + */ + + +import {SimpleEnumerableBase} from "./SimpleEnumerableBase"; + +const VOID0:any = void 0; + +/** + * An aggregate/reduce style factory function that expects a previous value and the current index of the enumeration. + */ +export interface InfiniteValueFactory +{ + (previous?:T, index?:number):T; +} + +/** + * A simplified stripped down enumerator that until disposed will infinitely return the provided factory. + * This is analogous to a 'generator' and has a compatible interface. + */ +export class InfiniteEnumerator extends SimpleEnumerableBase +{ + /** + * See InfiniteValueFactory + * @param _factory + */ + constructor(private _factory:InfiniteValueFactory) + { + super(); + } + + protected canMoveNext():boolean + { + return this._factory!=null; + } + + moveNext():boolean + { + var _ = this; + var f = _._factory; + if(f) _._current = f(_._current, _.incrementIndex()); + return f!=VOID0; + } + + dispose():void + { + super.dispose(); + this._factory = VOID0; + } + +} + +export default InfiniteEnumerator; \ No newline at end of file diff --git a/source/System/Collections/Enumeration/IteratorEnumerator.js b/source/System/Collections/Enumeration/IteratorEnumerator.js new file mode 100644 index 00000000..7f01aed6 --- /dev/null +++ b/source/System/Collections/Enumeration/IteratorEnumerator.js @@ -0,0 +1,57 @@ +/*! + * @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 (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(["require", "exports", "./SimpleEnumerableBase"], factory); + } +})(function (require, exports) { + "use strict"; + var SimpleEnumerableBase_1 = require("./SimpleEnumerableBase"); + var VOID0 = void 0; + var IteratorEnumerator = (function (_super) { + __extends(IteratorEnumerator, _super); + function IteratorEnumerator(_iterator, _isEndless) { + _super.call(this); + this._iterator = _iterator; + this._isEndless = _isEndless; + } + IteratorEnumerator.prototype.canMoveNext = function () { + return this._iterator != null; + }; + IteratorEnumerator.prototype.moveNext = function (value) { + var _ = this; + var i = _._iterator; + if (i) { + var r = arguments.length ? i.next(value) : i.next(); + _._current = r.value; + if (r.done) + _.dispose(); + else + return true; + } + return false; + }; + IteratorEnumerator.prototype.dispose = function () { + _super.prototype.dispose.call(this); + this._iterator = VOID0; + }; + IteratorEnumerator.prototype.getIsEndless = function () { + return this._isEndless && _super.prototype.getIsEndless.call(this); + }; + return IteratorEnumerator; + }(SimpleEnumerableBase_1.SimpleEnumerableBase)); + exports.IteratorEnumerator = IteratorEnumerator; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = IteratorEnumerator; +}); +//# sourceMappingURL=IteratorEnumerator.js.map \ No newline at end of file diff --git a/source/System/Collections/Enumeration/IteratorEnumerator.js.map b/source/System/Collections/Enumeration/IteratorEnumerator.js.map new file mode 100644 index 00000000..322582a7 --- /dev/null +++ b/source/System/Collections/Enumeration/IteratorEnumerator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"IteratorEnumerator.js","sourceRoot":"","sources":["IteratorEnumerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;;;;;;;;;IAIH,qCAAmC,wBAAwB,CAAC,CAAA;IAE5D,IAAM,KAAK,GAAO,KAAK,CAAC,CAAC;IAQzB;QAA2C,sCAAuB;QAMjE,4BAAoB,SAAsB,EAAU,UAAmB;YAEtE,iBAAO,CAAC;YAFW,cAAS,GAAT,SAAS,CAAa;YAAU,eAAU,GAAV,UAAU,CAAS;QAGvE,CAAC;QAES,wCAAW,GAArB;YAEC,MAAM,CAAC,IAAI,CAAC,SAAS,IAAE,IAAI,CAAC;QAC7B,CAAC;QAED,qCAAQ,GAAR,UAAS,KAAU;YAElB,IAAI,CAAC,GAAG,IAAI,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;YACpB,EAAE,CAAA,CAAC,CAAC,CAAC,CACL,CAAC;gBACA,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBACpD,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC;gBACrB,EAAE,CAAA,CAAC,CAAC,CAAC,IAAI,CAAC;oBAAC,CAAC,CAAC,OAAO,EAAE,CAAC;gBACvB,IAAI;oBAAC,MAAM,CAAC,IAAI,CAAC;YAClB,CAAC;YACD,MAAM,CAAC,KAAK,CAAC;QACd,CAAC;QAED,oCAAO,GAAP;YAEC,gBAAK,CAAC,OAAO,WAAE,CAAC;YAChB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACxB,CAAC;QAES,yCAAY,GAAtB;YAEC,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,gBAAK,CAAC,YAAY,WAAE,CAAC;QAChD,CAAC;QACF,yBAAC;IAAD,CAAC,AAxCD,CAA2C,2CAAoB,GAwC9D;IAxCY,0BAAkB,qBAwC9B,CAAA;IAED;sBAAe,kBAAkB,CAAC"} \ No newline at end of file diff --git a/source/System/Collections/Enumeration/IteratorEnumerator.ts b/source/System/Collections/Enumeration/IteratorEnumerator.ts new file mode 100644 index 00000000..fa7eaafa --- /dev/null +++ b/source/System/Collections/Enumeration/IteratorEnumerator.ts @@ -0,0 +1,60 @@ +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md + */ + + +import {IIterator} from "./IIterator"; +import {SimpleEnumerableBase} from "./SimpleEnumerableBase"; + +const VOID0:any = void 0; + +/** + * A simplified stripped down enumerator that until disposed will infinitely return the provided factory. + * This is analogous to a 'generator' and has a compatible interface. + * + * + */ +export class IteratorEnumerator extends SimpleEnumerableBase +{ + /** + * @param _iterator + * @param _isEndless true and false are explicit where as undefined means 'unknown'. + */ + constructor(private _iterator:IIterator, private _isEndless?:boolean) + { + super(); + } + + protected canMoveNext():boolean + { + return this._iterator!=null; + } + + moveNext(value?:any):boolean + { + var _ = this; + var i = _._iterator; + if(i) + { + var r = arguments.length ? i.next(value) : i.next(); + _._current = r.value; + if(r.done) _.dispose(); + else return true; + } + return false; + } + + dispose():void + { + super.dispose(); + this._iterator = VOID0; + } + + protected getIsEndless():boolean + { + return this._isEndless && super.getIsEndless(); + } +} + +export default IteratorEnumerator; \ No newline at end of file diff --git a/source/System/Collections/Enumeration/IteratorResult.js b/source/System/Collections/Enumeration/IteratorResult.js new file mode 100644 index 00000000..056fa0d6 --- /dev/null +++ b/source/System/Collections/Enumeration/IteratorResult.js @@ -0,0 +1,36 @@ +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md + */ +(function (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(["require", "exports"], factory); + } +})(function (require, exports) { + "use strict"; + var VOID0 = void (0); + var IteratorResult = (function () { + function IteratorResult(value, index, done) { + if (done === void 0) { done = false; } + this.value = value; + this.index = index; + this.done = done; + Object.freeze(this); + } + return IteratorResult; + }()); + exports.IteratorResult = IteratorResult; + var IteratorResult; + (function (IteratorResult) { + IteratorResult.Done = new IteratorResult(VOID0, VOID0, true); + function GetDone(value) { return IteratorResult.Done; } + IteratorResult.GetDone = GetDone; + })(IteratorResult = exports.IteratorResult || (exports.IteratorResult = {})); + Object.freeze(IteratorResult); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = IteratorResult; +}); +//# sourceMappingURL=IteratorResult.js.map \ No newline at end of file diff --git a/source/System/Collections/Enumeration/IteratorResult.js.map b/source/System/Collections/Enumeration/IteratorResult.js.map new file mode 100644 index 00000000..4e2c8fcd --- /dev/null +++ b/source/System/Collections/Enumeration/IteratorResult.js.map @@ -0,0 +1 @@ +{"version":3,"file":"IteratorResult.js","sourceRoot":"","sources":["IteratorResult.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;;;;IAIH,IAAM,KAAK,GAAO,KAAI,CAAC,CAAC,CAAC,CAAC;IAE1B;QAEC,wBACQ,KAAO,EACP,KAAa,EACb,IAAoB;YAA3B,oBAA2B,GAA3B,YAA2B;YAFpB,UAAK,GAAL,KAAK,CAAE;YACP,UAAK,GAAL,KAAK,CAAQ;YACb,SAAI,GAAJ,IAAI,CAAgB;YAE3B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QACF,qBAAC;IAAD,CAAC,AATD,IASC;IATY,sBAAc,iBAS1B,CAAA;IAED,IAAc,cAAc,CAG3B;IAHD,WAAc,cAAc,EAAC,CAAC;QAChB,mBAAI,GAAuB,IAAI,cAAc,CAAM,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACpF,iBAAwB,KAAU,IAAwB,MAAM,CAAC,mBAAI,CAAC,CAAC,CAAC;QAAxD,sBAAO,UAAiD,CAAA;IACzE,CAAC,EAHa,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAG3B;IAED,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAE9B;sBAAe,cAAc,CAAC"} \ No newline at end of file diff --git a/source/System/Collections/Enumeration/IteratorResult.ts b/source/System/Collections/Enumeration/IteratorResult.ts new file mode 100644 index 00000000..720c304a --- /dev/null +++ b/source/System/Collections/Enumeration/IteratorResult.ts @@ -0,0 +1,28 @@ +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md + */ + +import {IIteratorResult} from "./IIterator"; + +const VOID0:any = void(0); + +export class IteratorResult implements IIteratorResult +{ + constructor( + public value:T, + public index?:number, + public done:boolean = false) + { + Object.freeze(this); + } +} + +export module IteratorResult { + export const Done:IteratorResult = new IteratorResult(VOID0, VOID0, true); + export function GetDone(value?:any):IteratorResult { return Done; } +} + +Object.freeze(IteratorResult); + +export default IteratorResult; \ No newline at end of file diff --git a/source/System/Collections/Enumeration/SimpleEnumerableBase.js b/source/System/Collections/Enumeration/SimpleEnumerableBase.js new file mode 100644 index 00000000..3ccae808 --- /dev/null +++ b/source/System/Collections/Enumeration/SimpleEnumerableBase.js @@ -0,0 +1,74 @@ +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md + */ +(function (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(["require", "exports", "./IteratorResult"], factory); + } +})(function (require, exports) { + "use strict"; + var IteratorResult_1 = require("./IteratorResult"); + var VOID0 = void 0; + var SimpleEnumerableBase = (function () { + function SimpleEnumerableBase() { + this.reset(); + } + Object.defineProperty(SimpleEnumerableBase.prototype, "current", { + get: function () { + return this._current; + }, + enumerable: true, + configurable: true + }); + SimpleEnumerableBase.prototype.incrementIndex = function () { + var i = this._index; + this._index = i = i === VOID0 ? 0 : (i + 1); + return i; + }; + SimpleEnumerableBase.prototype.nextValue = function () { + this.moveNext(); + return this._current; + }; + SimpleEnumerableBase.prototype.next = function () { + return this.moveNext() + ? new IteratorResult_1.IteratorResult(this._current, this._index) + : IteratorResult_1.IteratorResult.Done; + }; + SimpleEnumerableBase.prototype['return'] = function (value) { + try { + return value !== VOID0 && this.canMoveNext() + ? new IteratorResult_1.IteratorResult(value, VOID0, true) + : IteratorResult_1.IteratorResult.Done; + } + finally { + this.dispose(); + } + }; + SimpleEnumerableBase.prototype.reset = function () { + this._current = VOID0; + this._index = VOID0; + }; + SimpleEnumerableBase.prototype.dispose = function () { + this.reset(); + }; + SimpleEnumerableBase.prototype.getIsEndless = function () { + return this.canMoveNext(); + }; + Object.defineProperty(SimpleEnumerableBase.prototype, "isEndless", { + get: function () { + return this.getIsEndless(); + }, + enumerable: true, + configurable: true + }); + return SimpleEnumerableBase; + }()); + exports.SimpleEnumerableBase = SimpleEnumerableBase; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = SimpleEnumerableBase; +}); +//# sourceMappingURL=SimpleEnumerableBase.js.map \ No newline at end of file diff --git a/source/System/Collections/Enumeration/SimpleEnumerableBase.js.map b/source/System/Collections/Enumeration/SimpleEnumerableBase.js.map new file mode 100644 index 00000000..60d9ef1d --- /dev/null +++ b/source/System/Collections/Enumeration/SimpleEnumerableBase.js.map @@ -0,0 +1 @@ +{"version":3,"file":"SimpleEnumerableBase.js","sourceRoot":"","sources":["SimpleEnumerableBase.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;;;;IASH,+BAA6B,kBAAkB,CAAC,CAAA;IAGhD,IAAM,KAAK,GAAO,KAAK,CAAC,CAAC;IAEzB;QAMC;YAEC,IAAI,CAAC,KAAK,EAAE,CAAC;QACd,CAAC;QAED,sBAAI,yCAAO;iBAAX;gBAEC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;YACtB,CAAC;;;WAAA;QAKS,6CAAc,GAAxB;YACC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YACpB,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,KAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,CAAC,CAAC;QACV,CAAC;QAED,wCAAS,GAAT;YAEC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QACtB,CAAC;QAED,mCAAI,GAAJ;YAEC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE;kBACnB,IAAI,+BAAc,CAAC,IAAI,CAAC,QAAQ,EAAC,IAAI,CAAC,MAAM,CAAC;kBAC7C,+BAAc,CAAC,IAAI,CAAC;QACxB,CAAC;QAID,wCAAQ,GAAR,UAAS,KAAU;YAElB,IACA,CAAC;gBACA,MAAM,CAAC,KAAK,KAAG,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE;sBACvC,IAAI,+BAAc,CAAC,KAAK,EAAC,KAAK,EAAC,IAAI,CAAC;sBACpC,+BAAc,CAAC,IAAI,CAAC;YACxB,CAAC;oBAED,CAAC;gBACA,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,CAAC;QACF,CAAC;QAED,oCAAK,GAAL;YAEC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACrB,CAAC;QAED,sCAAO,GAAP;YAEC,IAAI,CAAC,KAAK,EAAE,CAAC;QACd,CAAC;QAES,2CAAY,GAAtB;YACC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC;QAED,sBAAI,2CAAS;iBAAb;gBAEC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5B,CAAC;;;WAAA;QACF,2BAAC;IAAD,CAAC,AAzED,IAyEC;IAzEqB,4BAAoB,uBAyEzC,CAAA;IAED;sBAAe,oBAAoB,CAAC"} \ No newline at end of file diff --git a/source/System/Collections/Enumeration/SimpleEnumerableBase.ts b/source/System/Collections/Enumeration/SimpleEnumerableBase.ts new file mode 100644 index 00000000..a0883ebc --- /dev/null +++ b/source/System/Collections/Enumeration/SimpleEnumerableBase.ts @@ -0,0 +1,93 @@ +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md + */ + +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md + */ + + +import {IIteratorResult} from "./IIterator"; +import {IteratorResult} from "./IteratorResult"; +import {IEnumerator} from "./IEnumerator"; + +const VOID0:any = void 0; + +export abstract class SimpleEnumerableBase implements IEnumerator +{ + + protected _current:T; + protected _index:number; + + constructor() + { + this.reset(); + } + + get current():T + { + return this._current; + } + + protected abstract canMoveNext():boolean; + abstract moveNext():boolean; + + protected incrementIndex():number { + let i = this._index; + this._index = i = i===VOID0 ? 0 : (i+1); + return i; + } + + nextValue():T + { + this.moveNext(); + return this._current; + } + + next():IIteratorResult + { + return this.moveNext() + ? new IteratorResult(this._current,this._index) + : IteratorResult.Done; + } + + 'return'():IIteratorResult + 'return'(value:TReturn):IIteratorResult + 'return'(value?:any):IIteratorResult + { + try + { + return value!==VOID0 && this.canMoveNext() + ? new IteratorResult(value,VOID0,true) + : IteratorResult.Done; + } + finally + { + this.dispose(); + } + } + + reset():void + { + this._current = VOID0; + this._index = VOID0; + } + + dispose():void + { + this.reset(); + } + + protected getIsEndless():boolean { + return this.canMoveNext(); + } + + get isEndless():boolean + { + return this.getIsEndless(); + } +} + +export default SimpleEnumerableBase; diff --git a/source/System/Collections/LinkedList.js b/source/System/Collections/LinkedList.js index f473fe24..170722cb 100644 --- a/source/System/Collections/LinkedList.js +++ b/source/System/Collections/LinkedList.js @@ -87,10 +87,9 @@ var __extends = (this && this.__extends) || function (d, b) { }; LinkedList.prototype.forEach = function (action, useCopy) { if (useCopy === void 0) { useCopy = false; } - if (useCopy) - _super.prototype.forEach.call(this, action, useCopy); - else - this._listInternal.forEach(function (node, i) { return action(node.value, i); }); + return useCopy + ? _super.prototype.forEach.call(this, action, useCopy) + : this._listInternal.forEach(function (node, i) { return action(node.value, i); }); }; LinkedList.prototype.getEnumerator = function () { return LinkedNodeList_1.LinkedNodeList.valueEnumeratorFrom(this._listInternal); diff --git a/source/System/Collections/LinkedList.js.map b/source/System/Collections/LinkedList.js.map index a4ff19e8..f1913b4b 100644 --- a/source/System/Collections/LinkedList.js.map +++ b/source/System/Collections/LinkedList.js.map @@ -1 +1 @@ -{"version":3,"file":"LinkedList.js","sourceRoot":"","sources":["LinkedList.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"LinkedList.js","sourceRoot":"","sources":["LinkedList.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;;;;;;;;;;;;;;IAGH,wBAAuB,YAAY,CAAC,CAAA;IACpC,+BAA6B,kBAAkB,CAAC,CAAA;IAChD,0CAAwC,yCAAyC,CAAC,CAAA;IAClF,sCAAoC,qCAAqC,CAAC,CAAA;IAC1E,+BAA6B,kBAAkB,CAAC,CAAA;IAmBhD;QAGC,sBACQ,KAAQ,EACR,QAAyB,EACzB,IAAqB;YAFrB,UAAK,GAAL,KAAK,CAAG;YACR,aAAQ,GAAR,QAAQ,CAAiB;YACzB,SAAI,GAAJ,IAAI,CAAiB;QAE7B,CAAC;QAID,qCAAc,GAAd;YAEC,EAAE,CAAA,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC;gBAC7B,MAAM,IAAI,qDAAyB,CAClC,uCAAuC,CAAC,CAAC;QAC5C,CAAC;QAEF,mBAAC;IAAD,CAAC,AAnBD,IAmBC;IAED,wBAA2B,IAAoB,EAAE,IAAkB;QAElE,EAAE,CAAA,CAAC,CAAC,IAAI,CAAC;YACR,MAAM,CAAC,IAAI,CAAC;QACb,EAAE,CAAA,CAAC,CAAC,IAAI,CAAC;YACR,MAAM,IAAI,6CAAqB,CAAC,MAAM,CAAC,CAAC;QAEzC,IAAI,QAAQ,GAAsB,IAAI,CAAC,QAAQ,CAAC;QAChD,EAAE,CAAA,CAAC,CAAC,QAAQ,CAAC;YACZ,IAAI,CAAC,QAAQ,GAAG,QAAQ,GAAG,IAAI,cAAc,CAAI,IAAI,EAAE,IAAI,CAAC,CAAC;QAE9D,MAAM,CAAC,QAAQ,CAAC;IACjB,CAAC;IAED,qBAAwB,IAAuB,EAAE,IAAkB;QAElE,EAAE,CAAA,CAAC,CAAC,IAAI,CAAC;YACR,MAAM,IAAI,6CAAqB,CAAC,MAAM,CAAC,CAAC;QACzC,EAAE,CAAA,CAAC,CAAC,IAAI,CAAC;YACR,MAAM,IAAI,6CAAqB,CAAC,MAAM,CAAC,CAAC;QAEzC,EAAE,CAAA,CAAC,IAAI,CAAC,IAAI,IAAE,IAAI,CAAC;YAClB,MAAM,IAAI,qDAAyB,CAClC,6CAA6C,CAAC,CAAC;QAEjD,IAAI,CAAC,GAAyB,IAAK,CAAC,aAAa,CAAC;QAClD,EAAE,CAAA,CAAC,CAAC,CAAC,CAAC;YACL,MAAM,IAAI,qDAAyB,CAClC,6BAA6B,CAAC,CAAC;QAEjC,MAAM,CAAC,CAAC,CAAC;IACV,CAAC;IAED;QACQ,8BAAiB;QAIxB,oBACC,MAA6B,EAC7B,gBAAiD;YAAjD,gCAAiD,GAAjD,qCAAiD;YAEjD,kBAAM,IAAI,EAAE,gBAAgB,CAAC,CAAC;YAC9B,IAAI,CAAC,GAAG,IAAI,CAAC;YACb,CAAC,CAAC,aAAa,GAAG,IAAI,+BAAc,EAAmB,CAAC;YACxD,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QAES,6BAAQ,GAAlB;YAEC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;QACvC,CAAC;QAES,iCAAY,GAAtB,UAAuB,KAAO;YAE7B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC;QACb,CAAC;QAES,oCAAe,GAAzB,UAA0B,KAAO,EAAE,GAAqB;YAArB,mBAAqB,GAArB,cAAqB;YAEvD,IAAI,CAAC,GAAc,IAAI,EACnB,MAAM,GAAS,CAAC,CAAC,iBAAiB,EAClC,IAAI,GAAW,CAAC,CAAC,aAAa,EAC9B,YAAY,GAAG,CAAC,CAAC;YAErB,IAAI,CAAC,OAAO,CAAC,UAAA,IAAI;gBAEhB,EAAE,CAAA,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBACrD,YAAY,EAAE,CAAC;gBAEhB,MAAM,CAAC,YAAY,GAAC,GAAG,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,YAAY,CAAC;QACrB,CAAC;QAES,mCAAc,GAAxB;YAEC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QACnC,CAAC;QAGD,4BAAO,GAAP,UACC,MAA+B,EAC/B,OAAuB;YAAvB,uBAAuB,GAAvB,eAAuB;YAEvB,MAAM,CAAC,OAAO;kBACX,gBAAK,CAAC,OAAO,YAAC,MAAM,EAAE,OAAO,CAAC;kBAC9B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,CAAC,IAAG,OAAA,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAArB,CAAqB,CAAC,CAAC;QACjE,CAAC;QAKD,kCAAa,GAAb;YAEC,MAAM,CAAC,+BAAc,CAAC,mBAAmB,CAAS,IAAI,CAAC,aAAa,CAAC,CAAC;QACvE,CAAC;QAIO,+BAAU,GAAlB,UAAmB,KAAO;YAGzB,IAAI,CAAC,GAAQ,IAAI,EACb,MAAM,GAAG,CAAC,CAAC,iBAAiB,EAC5B,IAAI,GAAK,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC;YACnC,OAAM,IAAI,EACV,CAAC;gBACA,EAAE,CAAA,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC;gBACb,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAClB,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;QACb,CAAC;QAEO,8BAAS,GAAjB,UAAkB,KAAO;YAGxB,IAAI,CAAC,GAAQ,IAAI,EACb,MAAM,GAAG,CAAC,CAAC,iBAAiB,EAC5B,IAAI,GAAK,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;YAClC,OAAM,IAAI,EACV,CAAC;gBACA,EAAE,CAAA,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC;gBACb,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;YACtB,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;QACb,CAAC;QAED,+BAAU,GAAV,UAAW,KAAO;YAEjB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,KAAG,CAAC,CAAC;QAClC,CAAC;QAED,sBAAI,6BAAK;iBAAT;gBAEC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACvD,CAAC;;;WAAA;QAED,sBAAI,4BAAI;iBAAR;gBAEC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACtD,CAAC;;;WAAA;QAKD,+BAAU,GAAV,UAAW,KAAY;YAEtB,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC/C,EAAE,CAAA,CAAC,CAAC,IAAI,CAAC;gBACR,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,KAAI,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,8BAAS,GAAT,UAAU,KAAY;YAErB,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QAClE,CAAC;QAED,yBAAI,GAAJ,UAAK,KAAO;YAEX,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC;QAED,6BAAQ,GAAR,UAAS,KAAO;YAEf,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QACpD,CAAC;QAED,6BAAQ,GAAR,UAAS,KAAO;YAEf,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1D,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QAED,4BAAO,GAAP,UAAQ,KAAO;YAEd,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,gCAAW,GAAX;YAEC,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC;YAC5C,EAAE,CAAA,CAAC,KAAK,IAAI,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC7C,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAED,+BAAU,GAAV;YAEC,IAAI,CAAC,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;YAC1C,EAAE,CAAA,CAAC,IAAI,IAAI,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC3C,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAGD,+BAAU,GAAV,UAAW,IAAuB;YAEjC,IAAI,CAAC,GAAG,IAAI,CAAC;YAEb,EAAE,CAAA,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CACpD,CAAC;gBACA,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC;YACb,CAAC;YAED,MAAM,CAAC,KAAK,CAAC;QACd,CAAC;QAED,8BAAS,GAAT,UAAU,MAAyB,EAAE,KAAO;YAE3C,IAAI,CAAC,GAAG,IAAI,CAAC;YACb,CAAC,CAAC,aAAa,CAAC,aAAa,CAC5B,IAAI,YAAY,CAAC,KAAK,CAAC,EACvB,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CACtB,CAAC;YAEF,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,6BAAQ,GAAR,UAAS,KAAwB,EAAE,KAAO;YAEzC,IAAI,CAAC,GAAG,IAAI,CAAC;YACb,CAAC,CAAC,aAAa,CAAC,YAAY,CAC3B,IAAI,YAAY,CAAC,KAAK,CAAC,EACvB,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CACrB,CAAC;YAEF,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,kCAAa,GAAb,UAAc,IAAuB,EAAE,MAAyB;YAE/D,IAAI,CAAC,GAAG,IAAI,CAAC;YACb,CAAC,CAAC,aAAa,CAAC,aAAa,CAC5B,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,EACtB,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CACpB,CAAC;YAEF,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,iCAAY,GAAZ,UAAa,IAAuB,EAAE,KAAwB;YAE7D,IAAI,CAAC,GAAG,IAAI,CAAC;YACb,IAAI,CAAC,aAAa,CAAC,YAAY,CAC9B,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,EACrB,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CACpB,CAAC;YAEF,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAGF,iBAAC;IAAD,CAAC,AA/ND,CACQ,+BAAc,GA8NrB;IA/NY,kBAAU,aA+NtB,CAAA;IAGD;QAEC,wBACS,KAAmB,EACnB,aAA6B;YAD7B,UAAK,GAAL,KAAK,CAAc;YACnB,kBAAa,GAAb,aAAa,CAAgB;QAEtC,CAAC;QAED,sBAAI,gCAAI;iBAAR;gBAEC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YACnB,CAAC;;;WAAA;QAED,sBAAI,oCAAQ;iBAAZ;gBAEC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAChE,CAAC;;;WAAA;QAED,sBAAI,gCAAI;iBAAR;gBAEC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5D,CAAC;;;WAAA;QAED,sBAAI,iCAAK;iBAAT;gBAEC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YACjC,CAAC;iBAED,UAAU,CAAG;gBAEZ,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC;YAC9B,CAAC;;;WALA;QAOD,kCAAS,GAAT,UAAU,KAAO;YAEhB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;QAED,iCAAQ,GAAR,UAAS,KAAO;YAEf,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC;QAED,sCAAa,GAAb,UAAc,MAAyB;YAEtC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,qCAAY,GAAZ,UAAa,KAAwB;YAEpC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,+BAAM,GAAN;YAEC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAEF,qBAAC;IAAD,CAAC,AA1DD,IA0DC;IAED;sBAAe,UAAU,CAAC"} \ No newline at end of file diff --git a/source/System/Collections/LinkedList.ts b/source/System/Collections/LinkedList.ts index 04567035..3bda8ede 100644 --- a/source/System/Collections/LinkedList.ts +++ b/source/System/Collections/LinkedList.ts @@ -134,10 +134,11 @@ extends CollectionBase implements ILinkedList forEach( action:Predicate | Action, - useCopy:boolean = false):void + useCopy:boolean = false):number { - if(useCopy) super.forEach(action, useCopy); - else this._listInternal.forEach((node, i)=>action(node.value, i)); + return useCopy + ? super.forEach(action, useCopy) + : this._listInternal.forEach((node, i)=>action(node.value, i)); } // #endregion diff --git a/source/System/Collections/LinkedNodeList.js b/source/System/Collections/LinkedNodeList.js index 4a3ff0fd..186af3fa 100644 --- a/source/System/Collections/LinkedNodeList.js +++ b/source/System/Collections/LinkedNodeList.js @@ -55,6 +55,7 @@ next = current && current.next; } while (current && action(current, index++) !== false); + return index; }; LinkedNodeList.prototype.map = function (selector) { if (!selector) diff --git a/source/System/Collections/LinkedNodeList.js.map b/source/System/Collections/LinkedNodeList.js.map index 278b0965..cbb80d28 100644 --- a/source/System/Collections/LinkedNodeList.js.map +++ b/source/System/Collections/LinkedNodeList.js.map @@ -1 +1 @@ -{"version":3,"file":"LinkedNodeList.js","sourceRoot":"","sources":["LinkedNodeList.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"LinkedNodeList.js","sourceRoot":"","sources":["LinkedNodeList.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/source/System/Collections/LinkedNodeList.ts b/source/System/Collections/LinkedNodeList.ts index 613dae3d..d13dffdd 100644 --- a/source/System/Collections/LinkedNodeList.ts +++ b/source/System/Collections/LinkedNodeList.ts @@ -88,7 +88,7 @@ implements ILinkedNodeList, IEnumerateEach, IDisposable // Note, no need for 'useCopy' since this avoids any modification conflict. // If iterating over a copy is necessary, a copy should be made manually. forEach( - action:Predicate | Action):void + action:Predicate | Action):number { var current:TNode = null, next:TNode = this.first, // Be sure to track the next node so if current node is removed. @@ -100,6 +100,8 @@ implements ILinkedNodeList, IEnumerateEach, IDisposable } while(current && action(current, index++)!==false); + + return index; } map(selector:Selector):T[] diff --git a/source/System/Collections/List.js b/source/System/Collections/List.js index 09e3ebc8..faa7dd7d 100644 --- a/source/System/Collections/List.js +++ b/source/System/Collections/List.js @@ -111,7 +111,7 @@ var __extends = (this && this.__extends) || function (d, b) { }; List.prototype.forEach = function (action, useCopy) { var s = this._source; - Enumerator_1.forEach(useCopy ? s.slice() : s, action); + return Enumerator_1.forEach(useCopy ? s.slice() : s, action); }; return List; }(CollectionBase_1.CollectionBase)); diff --git a/source/System/Collections/List.js.map b/source/System/Collections/List.js.map index dc6eb06d..b6db5502 100644 --- a/source/System/Collections/List.js.map +++ b/source/System/Collections/List.js.map @@ -1 +1 @@ -{"version":3,"file":"List.js","sourceRoot":"","sources":["List.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"List.js","sourceRoot":"","sources":["List.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/source/System/Collections/List.ts b/source/System/Collections/List.ts index 0afbdf58..da95ef77 100644 --- a/source/System/Collections/List.ts +++ b/source/System/Collections/List.ts @@ -152,10 +152,10 @@ extends CollectionBase implements IList, IEnumerateEach return new ArrayEnumerator(this._source); } - forEach(action:Predicate|Action, useCopy?:boolean):void + forEach(action:Predicate|Action, useCopy?:boolean):number { var s = this._source; - forEach(useCopy ? s.slice() : s, action); + return forEach(useCopy ? s.slice() : s, action); } } diff --git a/source/System/Collections/Queue.js b/source/System/Collections/Queue.js index 88249e49..42b6aad5 100644 --- a/source/System/Collections/Queue.js +++ b/source/System/Collections/Queue.js @@ -126,7 +126,7 @@ var __extends = (this && this.__extends) || function (d, b) { return result; }; Queue.prototype.forEach = function (action) { - _super.prototype.forEach.call(this, action, true); + return _super.prototype.forEach.call(this, action, true); }; Queue.prototype.setCapacity = function (capacity) { assertIntegerZeroOrGreater(capacity, "capacity"); diff --git a/source/System/Collections/Queue.js.map b/source/System/Collections/Queue.js.map index 79efe228..60d5926d 100644 --- a/source/System/Collections/Queue.js.map +++ b/source/System/Collections/Queue.js.map @@ -1 +1 @@ -{"version":3,"file":"Queue.js","sourceRoot":"","sources":["Queue.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Queue.js","sourceRoot":"","sources":["Queue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/source/System/Collections/Queue.ts b/source/System/Collections/Queue.ts index 162daf03..a65defb7 100644 --- a/source/System/Collections/Queue.ts +++ b/source/System/Collections/Queue.ts @@ -171,9 +171,9 @@ extends CollectionBase return result; } - forEach(action:Predicate | Action):void + forEach(action:Predicate | Action):number { - super.forEach(action, true); + return super.forEach(action, true); } setCapacity(capacity:number):void diff --git a/source/System/Collections/SetBase.js b/source/System/Collections/SetBase.js index e0c8150f..c90ed4f8 100644 --- a/source/System/Collections/SetBase.js +++ b/source/System/Collections/SetBase.js @@ -12,13 +12,14 @@ var __extends = (this && this.__extends) || function (d, b) { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === 'function' && define.amd) { - define(["require", "exports", "./LinkedNodeList", "../Exceptions/ArgumentNullException", "./Enumeration/Enumerator", "../Disposable/dispose", "../Compare", "./CollectionBase"], factory); + define(["require", "exports", "./LinkedNodeList", "../Exceptions/ArgumentNullException", "./Enumeration/Enumerator", "./Enumeration/EmptyEnumerator", "../Disposable/dispose", "../Compare", "./CollectionBase"], factory); } })(function (require, exports) { "use strict"; var LinkedNodeList_1 = require("./LinkedNodeList"); var ArgumentNullException_1 = require("../Exceptions/ArgumentNullException"); var Enumerator_1 = require("./Enumeration/Enumerator"); + var EmptyEnumerator_1 = require("./Enumeration/EmptyEnumerator"); var dispose_1 = require("../Disposable/dispose"); var Compare_1 = require("../Compare"); var CollectionBase_1 = require("./CollectionBase"); @@ -83,12 +84,12 @@ var __extends = (this && this.__extends) || function (d, b) { count = other.getCount(); } else { - dispose_1.using(this.newUsing(), function (o) { + count = dispose_1.using(this.newUsing(), function (o) { Enumerator_1.forEach(other, function (v) { o.add(v); return result = _this.contains(v); }); - count = o.getCount(); + return o.getCount(); }); } return result && this.getCount() > count; @@ -166,14 +167,13 @@ var __extends = (this && this.__extends) || function (d, b) { var s = this._set; return s && this.getCount() ? LinkedNodeList_1.LinkedNodeList.valueEnumeratorFrom(s) - : Enumerator_1.empty; + : EmptyEnumerator_1.EmptyEnumerator; }; SetBase.prototype.forEach = function (action, useCopy) { if (useCopy === void 0) { useCopy = false; } - if (useCopy) - _super.prototype.forEach.call(this, action, useCopy); - else - this._set.forEach(function (node, i) { return action(node.value, i); }); + return useCopy + ? _super.prototype.forEach.call(this, action, useCopy) + : this._set.forEach(function (node, i) { return action(node.value, i); }); }; SetBase.prototype._removeNode = function (node) { if (!node) diff --git a/source/System/Collections/SetBase.js.map b/source/System/Collections/SetBase.js.map index b0d7ad9e..80dfedfb 100644 --- a/source/System/Collections/SetBase.js.map +++ b/source/System/Collections/SetBase.js.map @@ -1 +1 @@ -{"version":3,"file":"SetBase.js","sourceRoot":"","sources":["SetBase.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"SetBase.js","sourceRoot":"","sources":["SetBase.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/source/System/Collections/SetBase.ts b/source/System/Collections/SetBase.ts index 338dab1e..019f027b 100644 --- a/source/System/Collections/SetBase.ts +++ b/source/System/Collections/SetBase.ts @@ -5,7 +5,8 @@ import {LinkedNodeList} from "./LinkedNodeList"; import {ArgumentNullException} from "../Exceptions/ArgumentNullException"; -import {forEach, empty as emptyEnumerator} from "./Enumeration/Enumerator"; +import {forEach} from "./Enumeration/Enumerator"; +import {EmptyEnumerator} from "./Enumeration/EmptyEnumerator"; import {using} from "../Disposable/dispose"; import {areEqual} from "../Compare"; import {CollectionBase} from "./CollectionBase"; @@ -102,14 +103,15 @@ extends CollectionBase implements ISet, IDisposable } else { - using(this.newUsing(), o=> + count = using(this.newUsing(), o=> { forEach(other, v=> { o.add(v); // We have to add to another set in order to filter out duplicates. + // contains == false will cause this to exit. return result = this.contains(v); }); - count = o.getCount(); + return o.getCount(); }); } @@ -216,15 +218,16 @@ extends CollectionBase implements ISet, IDisposable var s = this._set; return s && this.getCount() ? LinkedNodeList.valueEnumeratorFrom(s) - : emptyEnumerator; + : EmptyEnumerator; } forEach( action:Predicate | Action, - useCopy:boolean = false):void + useCopy:boolean = false):number { - if(useCopy) super.forEach(action, useCopy); - else this._set.forEach((node, i)=>action(node.value, i)); + return useCopy + ? super.forEach(action, useCopy) + : this._set.forEach((node, i)=>action(node.value, i)); } protected _removeNode(node:ILinkedNodeWithValue):boolean diff --git a/source/System/Functions.js.map b/source/System/Functions.js.map index e8b398f7..ce4519dd 100644 --- a/source/System/Functions.js.map +++ b/source/System/Functions.js.map @@ -1 +1 @@ -{"version":3,"file":"Functions.js","sourceRoot":"","sources":["Functions.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;;;;IAKH;QAAA;QA6BA,CAAC;QAtBA,4BAAQ,GAAR,UAAY,CAAG,IACb,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAMb,wBAAI,GAAJ,cACE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAMhB,yBAAK,GAAL,cACE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAKjB,yBAAK,GAAL,cACE,CAAC;QACJ,gBAAC;IAAD,CAAC,AA7BD,IA6BC;IA7BY,iBAAS,YA6BrB,CAAA;IAED,IAAM,aAAa,GAAa,IAAI,SAAS,EAAE,CAAC;IAIhD,IAAc,SAAS,CA4BtB;IA5BD,WAAc,SAAS,EACvB,CAAC;QAKW,kBAAQ,GAChB,aAAa,CAAC,QAAQ,CAAC;QAMf,cAAI,GACZ,aAAa,CAAC,IAAI,CAAC;QAMX,eAAK,GACb,aAAa,CAAC,KAAK,CAAC;QAKZ,eAAK,GACb,aAAa,CAAC,KAAK,CAAC;IACxB,CAAC,EA5Ba,SAAS,GAAT,iBAAS,KAAT,iBAAS,QA4BtB;IAGD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEzB;sBAAe,SAAS,CAAC"} \ No newline at end of file +{"version":3,"file":"Functions.js","sourceRoot":"","sources":["Functions.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;;;;IAKH;QAAA;QA6BA,CAAC;QAtBA,4BAAQ,GAAR,UAAY,CAAG,IACb,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAMb,wBAAI,GAAJ,cACE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAMhB,yBAAK,GAAL,cACE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAKjB,yBAAK,GAAL,cACE,CAAC;QACJ,gBAAC;IAAD,CAAC,AA7BD,IA6BC;IA7BY,iBAAS,YA6BrB,CAAA;IAED,IAAM,aAAa,GAAa,IAAI,SAAS,EAAE,CAAC;IAIhD,IAAc,SAAS,CA4BtB;IA5BD,WAAc,SAAS,EACvB,CAAC;QAKa,kBAAQ,GAClB,aAAa,CAAC,QAAQ,CAAC;QAMb,cAAI,GACd,aAAa,CAAC,IAAI,CAAC;QAMT,eAAK,GACf,aAAa,CAAC,KAAK,CAAC;QAKV,eAAK,GACf,aAAa,CAAC,KAAK,CAAC;IACxB,CAAC,EA5Ba,SAAS,GAAT,iBAAS,KAAT,iBAAS,QA4BtB;IAGD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEzB;sBAAe,SAAS,CAAC"} \ No newline at end of file diff --git a/source/System/Functions.ts b/source/System/Functions.ts index 0624ad61..8a502123 100644 --- a/source/System/Functions.ts +++ b/source/System/Functions.ts @@ -47,27 +47,27 @@ export module Functions * A typed method for use with simple selection of the parameter. * @returns {boolean} */ - export var Identity:(x:T) => T + export const Identity:(x:T) => T = rootFunctions.Identity; /** * Returns false. * @returns {boolean} */ - export var True:() => boolean + export const True:() => boolean = rootFunctions.True; /** * Returns false. * @returns {boolean} */ - export var False:() => boolean + export const False:() => boolean = rootFunctions.False; /** * Does nothing. */ - export var Blank:() => void + export const Blank:() => void = rootFunctions.Blank; } diff --git a/source/System/Promises/Promise.js.map b/source/System/Promises/Promise.js.map index 72e9f761..df988028 100644 --- a/source/System/Promises/Promise.js.map +++ b/source/System/Promises/Promise.js.map @@ -1 +1 @@ -{"version":3,"file":"Promise.js","sourceRoot":"","sources":["Promise.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Promise.js","sourceRoot":"","sources":["Promise.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/source/System/Promises/README.md b/source/System/Promises/README.md new file mode 100644 index 00000000..cb81fe07 --- /dev/null +++ b/source/System/Promises/README.md @@ -0,0 +1,3 @@ +# Promise + +This is a pre-alpha release. WARNING: Development only, non-produciton code. \ No newline at end of file diff --git a/source/System/Text/RegexMatchEnumerator.js b/source/System/Text/RegexMatchEnumerator.js index fbd77fc8..a8749c0a 100644 --- a/source/System/Text/RegexMatchEnumerator.js +++ b/source/System/Text/RegexMatchEnumerator.js @@ -7,12 +7,12 @@ var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === 'function' && define.amd) { - define(["require", "exports", "./RegularExpressions", "../Collections/Enumeration/Enumerator", "../Collections/Enumeration/EnumeratorBase"], factory); + define(["require", "exports", "./RegularExpressions", "../Collections/Enumeration/EmptyEnumerator", "../Collections/Enumeration/EnumeratorBase"], factory); } })(function (require, exports) { "use strict"; var RegularExpressions_1 = require("./RegularExpressions"); - var Enumerator_1 = require("../Collections/Enumeration/Enumerator"); + var EmptyEnumerator_1 = require("../Collections/Enumeration/EmptyEnumerator"); var EnumeratorBase_1 = require("../Collections/Enumeration/EnumeratorBase"); var RegexMatchEnumerator = (function () { function RegexMatchEnumerator(pattern) { @@ -40,7 +40,7 @@ RegexMatchEnumerator.matches = function (input, pattern) { return input && pattern ? (new RegexMatchEnumerator(pattern)).matches(input) - : Enumerator_1.empty; + : EmptyEnumerator_1.EmptyEnumerator; }; return RegexMatchEnumerator; }()); diff --git a/source/System/Text/RegexMatchEnumerator.js.map b/source/System/Text/RegexMatchEnumerator.js.map index 05527721..6873e9cb 100644 --- a/source/System/Text/RegexMatchEnumerator.js.map +++ b/source/System/Text/RegexMatchEnumerator.js.map @@ -1 +1 @@ -{"version":3,"file":"RegexMatchEnumerator.js","sourceRoot":"","sources":["RegexMatchEnumerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;;;;IAEH,mCAA2B,sBAAsB,CAAC,CAAA;IAClD,2BAAoB,uCAAuC,CAAC,CAAA;IAC5D,+BAA6B,2CAA2C,CAAC,CAAA;IAGzE;QAIC,8BAAY,OAA2B;YAEtC,EAAE,CAAA,CAAC,OAAO,YAAY,0BAAK,CAAC,CAC5B,CAAC;gBACA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;YACzB,CAAC;YACD,IAAI,CACJ,CAAC;gBACA,IAAI,CAAC,QAAQ,GAAG,IAAI,0BAAK,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC;QACF,CAAC;QAED,sCAAO,GAAP,UAAQ,KAAY;YAApB,iBAmBC;YAjBA,IAAI,CAAQ,CAAC;YACb,MAAM,CAAC,IAAI,+BAAc,CACxB;gBAEC,CAAC,GAAG,CAAC,CAAC;YACP,CAAC,EACD,UAAA,OAAO;gBAEN,IAAI,KAAK,GAAS,KAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAChD,EAAE,CAAA,CAAC,KAAK,CAAC,OAAO,CAAC,CACjB,CAAC;oBACA,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;oBAC/B,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACnC,CAAC;gBAED,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;QAEM,4BAAO,GAAd,UAAe,KAAY,EAAE,OAA2B;YAEvD,MAAM,CAAC,KAAK,IAAI,OAAO;kBACpB,CAAC,IAAI,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;kBAClD,kBAAK,CAAC;QACV,CAAC;QAEF,2BAAC;IAAD,CAAC,AA5CD,IA4CC;IA5CY,4BAAoB,uBA4ChC,CAAA;IAED;sBAAe,oBAAoB,CAAC,OAAO,CAAC"} \ No newline at end of file +{"version":3,"file":"RegexMatchEnumerator.js","sourceRoot":"","sources":["RegexMatchEnumerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;;;;IAEH,mCAA2B,sBAAsB,CAAC,CAAA;IAClD,gCAA8B,4CAA4C,CAAC,CAAA;IAC3E,+BAA6B,2CAA2C,CAAC,CAAA;IAGzE;QAIC,8BAAY,OAA2B;YAEtC,EAAE,CAAA,CAAC,OAAO,YAAY,0BAAK,CAAC,CAC5B,CAAC;gBACA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;YACzB,CAAC;YACD,IAAI,CACJ,CAAC;gBACA,IAAI,CAAC,QAAQ,GAAG,IAAI,0BAAK,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC;QACF,CAAC;QAED,sCAAO,GAAP,UAAQ,KAAY;YAApB,iBAmBC;YAjBA,IAAI,CAAQ,CAAC;YACb,MAAM,CAAC,IAAI,+BAAc,CACxB;gBAEC,CAAC,GAAG,CAAC,CAAC;YACP,CAAC,EACD,UAAA,OAAO;gBAEN,IAAI,KAAK,GAAS,KAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAChD,EAAE,CAAA,CAAC,KAAK,CAAC,OAAO,CAAC,CACjB,CAAC;oBACA,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;oBAC/B,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACnC,CAAC;gBAED,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;QAEM,4BAAO,GAAd,UAAe,KAAY,EAAE,OAA2B;YAEvD,MAAM,CAAC,KAAK,IAAI,OAAO;kBACpB,CAAC,IAAI,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;kBAClD,iCAAe,CAAC;QACpB,CAAC;QAEF,2BAAC;IAAD,CAAC,AA5CD,IA4CC;IA5CY,4BAAoB,uBA4ChC,CAAA;IAED;sBAAe,oBAAoB,CAAC,OAAO,CAAC"} \ No newline at end of file diff --git a/source/System/Text/RegexMatchEnumerator.ts b/source/System/Text/RegexMatchEnumerator.ts index a642f0b6..cd8e55d9 100644 --- a/source/System/Text/RegexMatchEnumerator.ts +++ b/source/System/Text/RegexMatchEnumerator.ts @@ -4,7 +4,7 @@ */ import {Regex, Match} from "./RegularExpressions"; -import {empty} from "../Collections/Enumeration/Enumerator"; +import {EmptyEnumerator} from "../Collections/Enumeration/EmptyEnumerator"; import {EnumeratorBase} from "../Collections/Enumeration/EnumeratorBase"; import {IEnumerator} from "../Collections/Enumeration/IEnumerator"; @@ -49,7 +49,7 @@ export class RegexMatchEnumerator { return input && pattern ? (new RegexMatchEnumerator(pattern)).matches(input) - : empty; + : EmptyEnumerator; } } diff --git a/tests/mocha/System/Collections/Enumeration/Enumerator.js b/tests/mocha/System/Collections/Enumeration/Enumerator.js index 40cc3b0b..06a56279 100644 --- a/tests/mocha/System/Collections/Enumeration/Enumerator.js +++ b/tests/mocha/System/Collections/Enumeration/Enumerator.js @@ -30,7 +30,23 @@ }); it("non enumerable objects should throw", function () { assert.throws(function () { return Enumerator.from({}); }); - assert.throws(function () { return Enumerator.from((function () { return true; })); }); + }); + it("functions should be treated as generators", function () { + var e = Enumerator.from(function (prev, i) { return (prev || 1) + i; }); + function pass(e) { + assert.equal(e.nextValue(), 1); + assert.equal(e.nextValue(), 2); + assert.equal(e.nextValue(), 4); + assert.equal(e.nextValue(), 7); + assert.equal(e.nextValue(), 11); + assert.equal(e.nextValue(), 16); + } + pass(e); + e.reset(); + pass(e); + e.dispose(); + assert.ok(!e.moveNext()); + assert.equal(e.nextValue(), void 0); }); it("IEnumerable should enumerate", function () { var a = [0, 1, 2, 3, 4]; @@ -81,11 +97,17 @@ describe(".forEach(source)", function () { var blankAction = function (n, i) { }; it("null values ignored", function () { - assert.doesNotThrow(function () { return Enumerator.forEach(null, blankAction); }); + assert.doesNotThrow(function () { + assert.equal(Enumerator.forEach(null, blankAction), -1); + }); }); it("non-enumerable values ignored", function () { - assert.doesNotThrow(function () { return Enumerator.forEach({}, blankAction); }); - assert.doesNotThrow(function () { return Enumerator.forEach(1, blankAction); }); + assert.doesNotThrow(function () { + assert.equal(Enumerator.forEach({}, blankAction), -1); + }); + assert.doesNotThrow(function () { + assert.equal(Enumerator.forEach(1, blankAction), -1); + }); }); }); }); diff --git a/tests/mocha/System/Collections/Enumeration/Enumerator.js.map b/tests/mocha/System/Collections/Enumeration/Enumerator.js.map index f2f82338..687afd37 100644 --- a/tests/mocha/System/Collections/Enumeration/Enumerator.js.map +++ b/tests/mocha/System/Collections/Enumeration/Enumerator.js.map @@ -1 +1 @@ -{"version":3,"sources":["System/Collections/Enumeration/Enumerator.ts"],"names":[],"mappings":"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","file":"System/Collections/Enumeration/Enumerator.js","sourcesContent":["///\r\n\r\nimport {TypeInfo} from \"../../../../../source/System/Types\";\r\nimport Queue from \"../../../../../source/System/Collections/Queue\";\r\nimport * as Enumerator from \"../../../../../source/System/Collections/Enumeration/Enumerator\";\r\nimport {IArray} from \"../../../../../source/System/Collections/Array/IArray\";\r\nvar assert = require('../../../../../node_modules/assert/assert');\r\n\r\nconst VOID0:any = void(0);\r\n\r\ndescribe(\".from(source)\",()=>{\r\n\r\n\tit(\"null should use an empty enumerator\",()=>{\r\n\t\tvar test = Enumerator.from(null), count = 0;\r\n\t\twhile(test.moveNext()) {\r\n\t\t\tcount++;\r\n\t\t}\r\n\t\tassert.equal(test.current,VOID0);\r\n\t\tassert.equal(test.nextValue(),VOID0);\r\n\t\tassert.equal(test.next().done,true);\r\n\t\tassert.equal(count,0);\r\n\t\ttest.reset();\r\n\t\ttest.dispose();\r\n\t});\r\n\r\n\tit(\"primitive values should throw\",()=>{\r\n\t\tassert.throws(()=>Enumerator.from(1));\r\n\t});\r\n\r\n\tit(\"non enumerable objects should throw\",()=>{\r\n\t\tassert.throws(()=>Enumerator.from({}));\r\n\t\tassert.throws(()=>Enumerator.from((()=>true)));\r\n\t});\r\n\r\n\tit(\"IEnumerable should enumerate\",()=>{\r\n\t\tvar a = [0,1,2,3,4];\r\n\t\tvar len = a.length, count = 0;\r\n\t\tvar q = new Queue(a);\r\n\t\tvar type = new TypeInfo(q);\r\n\t\ttype.member(\"getEnumerator\");\r\n\t\t// Creates an enumerable.\r\n\t\tvar test = Enumerator.from({getEnumerator:()=>Enumerator.from(a)});\r\n\t\twhile(test.moveNext()) {\r\n\t\t\tcount++;\r\n\t\t}\r\n\t\tassert.equal(count,len);\r\n\t});\r\n\r\n\tit(\"arrays should enumerate\",()=>{\r\n\t\tvar a = [0,1,2,3,4];\r\n\t\tvar type = new TypeInfo(a);\r\n\t\ttype.member(\"length\");\r\n\t\tvar len = a.length, count = 0;\r\n\t\tvar test = Enumerator.from(a);\r\n\t\twhile(test.moveNext()) {\r\n\t\t\tcount++;\r\n\t\t}\r\n\t\tassert.equal(count,len);\r\n\t});\r\n\r\n\tit(\"strings should enumerate\",()=>{\r\n\t\tvar a = \"01234\";\r\n\t\tvar type = new TypeInfo(a);\r\n\t\ttype.member(\"length\");\r\n\t\tvar len = a.length, count = 0;\r\n\t\tvar test = Enumerator.from(a);\r\n\t\twhile(test.moveNext()) {\r\n\t\t\tcount++;\r\n\t\t}\r\n\t\tassert.equal(count,len);\r\n\t});\r\n\r\n\tit(\"array like objects should enumerate\",()=>{\r\n\t\tvar a:IArray = {0:0,1:1,2:2,3:3,4:4,length:5};\r\n\t\tvar type = new TypeInfo(a);\r\n\t\ttype.member(\"length\");\r\n\t\tvar len = a.length, count = 0;\r\n\t\tvar test = Enumerator.from(a);\r\n\t\twhile(test.moveNext()) {\r\n\t\t\tcount++;\r\n\t\t}\r\n\t\tassert.equal(count,len);\r\n\t});\r\n\r\n});\r\n\r\n\r\ndescribe(\".forEach(source)\",()=>\r\n{\r\n\tconst blankAction:(n:any,i:number)=>void = (n,i)=>{};\r\n\r\n\tit(\"null values ignored\", ()=>\r\n\t{\r\n\t\tassert.doesNotThrow(()=>Enumerator.forEach(null,blankAction));\r\n\t});\r\n\r\n\tit(\"non-enumerable values ignored\", ()=>\r\n\t{\r\n\t\tassert.doesNotThrow(()=>Enumerator.forEach({},blankAction));\r\n\t\tassert.doesNotThrow(()=>Enumerator.forEach(1,blankAction));\r\n\t});\r\n\r\n});\r\n"]} \ No newline at end of file +{"version":3,"sources":["System/Collections/Enumeration/Enumerator.ts"],"names":[],"mappings":"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","file":"System/Collections/Enumeration/Enumerator.js","sourcesContent":["///\r\n\r\nimport {TypeInfo} from \"../../../../../source/System/Types\";\r\nimport Queue from \"../../../../../source/System/Collections/Queue\";\r\nimport * as Enumerator from \"../../../../../source/System/Collections/Enumeration/Enumerator\";\r\nimport {IArray} from \"../../../../../source/System/Collections/Array/IArray\";\r\nimport {IEnumerator} from \"../../../../../source/System/Collections/Enumeration/IEnumerator\";\r\nvar assert = require('../../../../../node_modules/assert/assert');\r\n\r\nconst VOID0:any = void(0);\r\n\r\ndescribe(\".from(source)\",()=>{\r\n\r\n\tit(\"null should use an empty enumerator\",()=>{\r\n\t\tvar test = Enumerator.from(null), count = 0;\r\n\t\twhile(test.moveNext()) {\r\n\t\t\tcount++;\r\n\t\t}\r\n\t\tassert.equal(test.current,VOID0);\r\n\t\tassert.equal(test.nextValue(),VOID0);\r\n\t\tassert.equal(test.next().done,true);\r\n\t\tassert.equal(count,0);\r\n\t\ttest.reset();\r\n\t\ttest.dispose();\r\n\t});\r\n\r\n\tit(\"primitive values should throw\",()=>{\r\n\t\tassert.throws(()=>Enumerator.from(1));\r\n\t});\r\n\r\n\tit(\"non enumerable objects should throw\",()=>{\r\n\t\tassert.throws(()=>Enumerator.from({}));\r\n\t});\r\n\r\n\tit(\"functions should be treated as generators\",()=>{\r\n\t\tvar e = Enumerator.from((prev:number,i:number)=>(prev || 1)+i);\r\n\t\tfunction pass(e:IEnumerator){\r\n\t\t\tassert.equal(e.nextValue(),1);\r\n\t\t\tassert.equal(e.nextValue(),2);\r\n\t\t\tassert.equal(e.nextValue(),4);\r\n\t\t\tassert.equal(e.nextValue(),7);\r\n\t\t\tassert.equal(e.nextValue(),11);\r\n\t\t\tassert.equal(e.nextValue(),16);\r\n\t\t}\r\n\t\tpass(e);\r\n\t\te.reset();\r\n\t\tpass(e);\r\n\t\te.dispose();\r\n\t\tassert.ok(!e.moveNext());\r\n\t\tassert.equal(e.nextValue(),void 0);\r\n\t});\r\n\r\n\tit(\"IEnumerable should enumerate\",()=>{\r\n\t\tvar a = [0,1,2,3,4];\r\n\t\tvar len = a.length, count = 0;\r\n\t\tvar q = new Queue(a);\r\n\t\tvar type = new TypeInfo(q);\r\n\t\ttype.member(\"getEnumerator\");\r\n\t\t// Creates an enumerable.\r\n\t\tvar test = Enumerator.from({getEnumerator:()=>Enumerator.from(a)});\r\n\t\twhile(test.moveNext()) {\r\n\t\t\tcount++;\r\n\t\t}\r\n\t\tassert.equal(count,len);\r\n\t});\r\n\r\n\tit(\"arrays should enumerate\",()=>{\r\n\t\tvar a = [0,1,2,3,4];\r\n\t\tvar type = new TypeInfo(a);\r\n\t\ttype.member(\"length\");\r\n\t\tvar len = a.length, count = 0;\r\n\t\tvar test = Enumerator.from(a);\r\n\t\twhile(test.moveNext()) {\r\n\t\t\tcount++;\r\n\t\t}\r\n\t\tassert.equal(count,len);\r\n\t});\r\n\r\n\tit(\"strings should enumerate\",()=>{\r\n\t\tvar a = \"01234\";\r\n\t\tvar type = new TypeInfo(a);\r\n\t\ttype.member(\"length\");\r\n\t\tvar len = a.length, count = 0;\r\n\t\tvar test = Enumerator.from(a);\r\n\t\twhile(test.moveNext()) {\r\n\t\t\tcount++;\r\n\t\t}\r\n\t\tassert.equal(count,len);\r\n\t});\r\n\r\n\tit(\"array like objects should enumerate\",()=>{\r\n\t\tvar a:IArray = {0:0,1:1,2:2,3:3,4:4,length:5};\r\n\t\tvar type = new TypeInfo(a);\r\n\t\ttype.member(\"length\");\r\n\t\tvar len = a.length, count = 0;\r\n\t\tvar test = Enumerator.from(a);\r\n\t\twhile(test.moveNext()) {\r\n\t\t\tcount++;\r\n\t\t}\r\n\t\tassert.equal(count,len);\r\n\t});\r\n\r\n});\r\n\r\n\r\ndescribe(\".forEach(source)\",()=>\r\n{\r\n\tconst blankAction:(n:any,i:number)=>void = (n,i)=>{};\r\n\r\n\tit(\"null values ignored\", ()=>\r\n\t{\r\n\t\tassert.doesNotThrow(()=>{\r\n\t\t\tassert.equal(Enumerator.forEach(null,blankAction),-1);\r\n\t\t});\r\n\t});\r\n\r\n\tit(\"non-enumerable values ignored\", ()=>\r\n\t{\r\n\t\tassert.doesNotThrow(()=>{\r\n\t\t\tassert.equal(Enumerator.forEach({},blankAction),-1);\r\n\t\t});\r\n\t\tassert.doesNotThrow(()=>{\r\n\t\t\tassert.equal(Enumerator.forEach(1,blankAction),-1);\r\n\t\t});\r\n\t});\r\n\r\n});\r\n"]} \ No newline at end of file diff --git a/tests/mocha/System/Collections/Enumeration/Enumerator.ts b/tests/mocha/System/Collections/Enumeration/Enumerator.ts index c411beb3..c7e617d3 100644 --- a/tests/mocha/System/Collections/Enumeration/Enumerator.ts +++ b/tests/mocha/System/Collections/Enumeration/Enumerator.ts @@ -4,6 +4,7 @@ import {TypeInfo} from "../../../../../source/System/Types"; import Queue from "../../../../../source/System/Collections/Queue"; import * as Enumerator from "../../../../../source/System/Collections/Enumeration/Enumerator"; import {IArray} from "../../../../../source/System/Collections/Array/IArray"; +import {IEnumerator} from "../../../../../source/System/Collections/Enumeration/IEnumerator"; var assert = require('../../../../../node_modules/assert/assert'); const VOID0:any = void(0); @@ -29,7 +30,24 @@ describe(".from(source)",()=>{ it("non enumerable objects should throw",()=>{ assert.throws(()=>Enumerator.from({})); - assert.throws(()=>Enumerator.from((()=>true))); + }); + + it("functions should be treated as generators",()=>{ + var e = Enumerator.from((prev:number,i:number)=>(prev || 1)+i); + function pass(e:IEnumerator){ + assert.equal(e.nextValue(),1); + assert.equal(e.nextValue(),2); + assert.equal(e.nextValue(),4); + assert.equal(e.nextValue(),7); + assert.equal(e.nextValue(),11); + assert.equal(e.nextValue(),16); + } + pass(e); + e.reset(); + pass(e); + e.dispose(); + assert.ok(!e.moveNext()); + assert.equal(e.nextValue(),void 0); }); it("IEnumerable should enumerate",()=>{ @@ -91,13 +109,19 @@ describe(".forEach(source)",()=> it("null values ignored", ()=> { - assert.doesNotThrow(()=>Enumerator.forEach(null,blankAction)); + assert.doesNotThrow(()=>{ + assert.equal(Enumerator.forEach(null,blankAction),-1); + }); }); it("non-enumerable values ignored", ()=> { - assert.doesNotThrow(()=>Enumerator.forEach({},blankAction)); - assert.doesNotThrow(()=>Enumerator.forEach(1,blankAction)); + assert.doesNotThrow(()=>{ + assert.equal(Enumerator.forEach({},blankAction),-1); + }); + assert.doesNotThrow(()=>{ + assert.equal(Enumerator.forEach(1,blankAction),-1); + }); }); });