import { IEnumerable, IEnumerableFactory } from '../../types'; export function applySkip( factory: IEnumerableFactory, src: Iterable, count: number ): IEnumerable { if (count <= 0) { throw new Error('Count must be greater than 0'); } function* generator(): Generator { let i = 0; for (const item of src) { i++; if (i > count) { yield item; } } } return factory.createBasicEnumerable(generator); } export function applySkipLast( factory: IEnumerableFactory, src: Iterable, count: number ): IEnumerable { if (count <= 0) { throw new Error('Count must be greater than 0'); } function* generator(): Generator { const arr = [...src]; for (let i = 0; i < arr.length - count; i++) { yield arr[i]; } } return factory.createBasicEnumerable(generator); } export function applySkipWhile( factory: IEnumerableFactory, src: Iterable, predicate: (item: TSource, index: number) => boolean ): IEnumerable { function* generator(): Generator { let i = 0; let keepSkipping = true; for (const item of src) { if (keepSkipping) { if (!predicate(item, i)) { keepSkipping = false; } } if (!keepSkipping) { yield item; } i++; } } return factory.createBasicEnumerable(generator); }