import { List } from '../collections/List'; import { ArrayEnumerable } from '../enumerables/ArrayEnumerable'; import { BasicEnumerable } from '../enumerables/BasicEnumerable'; import { Grouping } from '../enumerables/Grouping'; import { OrderedEnumerable } from '../enumerables/OrderedEnumerable'; import { IEnumerable, IOrderedEnumerable, IGrouping, IEnumerableFactory, IList } from '../types'; export class EnumerableFactory implements IEnumerableFactory { public createBasicEnumerable(generator: () => Generator): IEnumerable { return new BasicEnumerable(this, generator); } public createOrderedEnumerable(generator: () => Generator): IOrderedEnumerable { return new OrderedEnumerable(this, generator); } public createGroupedEnumerable( key: TKey, generator: () => Generator ): IGrouping { return new Grouping(this, key, generator); } public createArrayEnumerable(generator: () => Generator, srcArr: TSource[]): IEnumerable { return new ArrayEnumerable(this, generator, srcArr); } public createList(generator: () => Generator): IList { return new List(generator()); } }