All files / patterns/src iterator.ts

100% Statements 11/11
100% Branches 1/1
100% Functions 3/3
100% Lines 11/11

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                  14x         5x 5x       7x 7x   7x 6x 6x 6x     7x             16x      
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: done,
        };
    }
 
    public hasNext(): boolean {
        return this.position < this.collection.length;
    }
}