All files / libs/patterns/src iterator.ts

100% Statements 39/39
100% Branches 5/5
100% Functions 4/4
100% Lines 39/39

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 401x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 5x 5x 5x 1x 1x 7x 7x 7x 7x 6x 6x 6x 6x 7x 7x 7x 7x 7x 7x 1x 1x 16x 16x 1x  
export interface IteratorResultInterface<Element> {
    value: Element | null;
    done: boolean;
}
export interface IteratorInterface<Element> {
    next(): IteratorResultInterface<Element>;
    hasNext(): boolean;
}
 
export class Iterator<Element> implements IteratorInterface<Element> {
    private readonly collection: Element[];
 
    private position: number;
 
    public constructor(collection: Element[]) {
        this.collection = collection;
        this.position = 0;
    }
 
    public next(): IteratorResultInterface<Element> {
        let result = null;
        let done = true;
 
        if (this.hasNext()) {
            result = this.collection[this.position];
            this.position += 1;
            done = !this.hasNext();
        }
 
        return {
            value: result,
            done,
        };
    }
 
    public hasNext(): boolean {
        return this.position < this.collection.length;
    }
}