All files / projects-dev/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 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 7x 7x 7x 7x 6x 6x 6x 6x 7x 7x 7x 7x 7x 7x 5x 5x 16x 16x 5x  
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;
    }
}