diff --git a/spec/iterator.spec.ts b/spec/iterator.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..68dce8db1c895b1e2a8980479b3b0c9f04edd25e --- /dev/null +++ b/spec/iterator.spec.ts @@ -0,0 +1,40 @@ +/// <reference path="../node_modules/@types/jasmine/index.d.ts" /> + +import { ArrayReverseIterator } from "../src/util/iterator"; + +describe('iterator : ', () => { + it("reverse ( undefined )", () => { + const arr: Object[] = undefined; + const it = new ArrayReverseIterator<Object>(arr); + expect(it.next().done).toBeTruthy(); + }); + + it("reverse( [] )", () => { + const arr: Object[] = []; + const it = new ArrayReverseIterator<Object>(arr); + expect(it.next().done).toBeTruthy(); + }); + + it("reverse( [1] )", () => { + const arr: number[] = [1]; + const it = new ArrayReverseIterator<number>(arr); + const v1 = it.next(); + expect(v1.done).toBeFalsy(); + expect(v1.value).toEqual(1); + const v2 = it.next(); + expect(v2.done).toBeTruthy(); + }); + + it("reverse( [1,2] )", () => { + const arr: number[] = [1, 2]; + const it = new ArrayReverseIterator<number>(arr); + const v1 = it.next(); + expect(v1.done).toBeFalsy(); + expect(v1.value).toEqual(2); + const v2 = it.next(); + expect(v2.done).toBeFalsy(); + expect(v2.value).toEqual(1); + const v3 = it.next(); + expect(v3.done).toBeTruthy(); + }); +}); diff --git a/src/index.ts b/src/index.ts index 3443109f1ede023a24682abfa8b6a8a0b2da7d5b..a939be42a85a627af3fedbaad3e5a0fd0c791bfb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -22,3 +22,4 @@ export * from "./util/pair"; export * from "./util/interval"; export * from "./pab/pab_dimension"; export * from "./pab/pab_puissance"; +export * from "./util/iterator"; diff --git a/src/util/iterator.ts b/src/util/iterator.ts new file mode 100644 index 0000000000000000000000000000000000000000..71a7cfa8105f4a0dc0c86ccab1ccffa76e866ea1 --- /dev/null +++ b/src/util/iterator.ts @@ -0,0 +1,25 @@ +export class ArrayReverseIterator<T> implements IterableIterator<T> { + private _index: number; + + constructor(private _arr: any[]) { + this._index = this._arr == undefined ? 0 : this._arr.length - 1; + } + + public next(): IteratorResult<T> { + if (this._arr != undefined && this._index >= 0) { + return { + done: false, + value: this._arr[this._index--] + } + } else { + return { + done: true, + value: null + } + } + } + + [Symbol.iterator](): IterableIterator<T> { + return this; + } +} diff --git a/tsconfig.json b/tsconfig.json index e5b0503469e05cc0e822ab774c1c6588fe2ed880..c345304ba5072030805570231b733fcf0c9e0745 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es5", + "target": "es6", "module": "commonjs", "outDir": "./build", "noImplicitAny": true, @@ -12,4 +12,4 @@ "exclude": [ "node_modules" ] -} +} \ No newline at end of file