Browse Source

collections

David Sehnal 7 years ago
parent
commit
e089387b36

+ 2 - 0
src/structure/collections/int-pair.ts

@@ -4,6 +4,8 @@
  * @author David Sehnal <david.sehnal@gmail.com>
  */
 
+import Iterator from './iterator'
+
 interface IntPair { fst: number, snd: number }
 
 namespace IntPair {

+ 10 - 1
src/structure/collections/iterator.ts

@@ -75,10 +75,19 @@ class RangeIteratorImpl implements Iterator<number> {
     }
 }
 
+class ValueIterator<T> implements Iterator<T> {
+    private yielded = false;
+    [Symbol.iterator]() { return new ValueIterator(this.value); };
+    done = false;
+    next() { const value = this.move(); return { value, done: this.done } }
+    move() { this.done = this.yielded; this.yielded = true; return this.value; }
+    constructor(private value: T) { }
+}
+
 namespace Iterator {
     export const Empty: Iterator<any> = new RangeIteratorImpl(0, -1);
     export function Array<T>(xs: ArrayLike<T>): Iterator<T> { return new ArrayIteratorImpl<T>(xs); }
-    export function Value(value: number): Iterator<number> { return new RangeIteratorImpl(value, value); }
+    export function Value<T>(value: T): Iterator<T> { return new ValueIterator(value); }
     export function Range(min: number, max: number): Iterator<number> { return new RangeIteratorImpl(min, max); }
 }
 

+ 2 - 11
src/structure/collections/multi-set.ts

@@ -52,15 +52,6 @@ namespace MultiSet {
         return ret;
     }
 
-    class PairIterator implements Iterator<IntPair> {
-        private yielded = false;
-        [Symbol.iterator]() { return new PairIterator(this.pair); };
-        done = false;
-        next() { const value = this.move(); return { value, done: this.done } }
-        move() { this.done = this.yielded; this.yielded = true; return this.pair; }
-        constructor(private pair: IntPair) { }
-    }
-
     class ElementsIterator implements Iterator<IntPair> {
         private pair = IntPair.zero();
         private unit = 0;
@@ -103,7 +94,7 @@ namespace MultiSet {
     }
 
     export function values(set: MultiSet): Iterator<IntPair> {
-        if (typeof set === 'number') return new PairIterator(IntPair.unpack1(set));
+        if (typeof set === 'number') return Iterator.Value(IntPair.unpack1(set));
         return new ElementsIterator(set);
     }
 
@@ -125,7 +116,7 @@ namespace MultiSet {
         return create(ret);
     }
 
-    // TODO: union, intersection, subtraction
+    // TODO: size, ofObject, hashCode (and cache it), equal, union, intersection, subtraction
 
     export function union(sets: ArrayLike<MultiSet>): MultiSet {
         return 0 as any;