import { Selector, Predicate, Aggregator, Action, Indexer } from "./Types"; import { IList, List, IDictionary } from "./Collections"; import { IIterable } from "./Iterators"; import { Comparer } from "./Comparers"; import { Cached } from "./Utils"; export interface IKeyValue { key: TKey; value: TValue; } export declare type IGrouping = IKeyValue>; export interface IQueryable { copy(): IQueryable; asEnumerable(): IEnumerable; toArray(): TOut[]; toList(): IList; toDictionary(keySelector: Selector, valueSelector: Selector): IDictionary; aggregate(aggregator: Aggregator): TOut; aggregate(aggregator: Aggregator, initialValue: TValue): TValue; all(predicate: Predicate): boolean; any(): boolean; any(predicate: Predicate): boolean; average(selector: Selector): number; concat(other: TOut[] | IQueryable, ...others: Array>): IEnumerable; contains(element: TOut): boolean; count(): number; count(predicate: Predicate): number; distinct(): IEnumerable; distinct(keySelector: Selector): IEnumerable; elementAt(index: number): TOut; elementAtOrDefault(index: number): TOut | undefined; except(other: IQueryable): IEnumerable; first(): TOut; first(predicate: Predicate): TOut; firstOrDefault(): TOut | undefined; firstOrDefault(predicate: Predicate): TOut | undefined; forEach(action: Action): void; groupBy(keySelector: Selector): IEnumerable>; groupBy(keySelector: Selector, valueSelector: Selector): IEnumerable>; last(): TOut; last(predicate: Predicate): TOut; lastOrDefault(): TOut | undefined; lastOrDefault(predicate: Predicate): TOut | undefined; max(): TOut; max(selector: Selector): TSelectorOut; min(): TOut; min(selector: Selector): TSelectorOut; orderBy(keySelector: Selector): IOrderedEnumerable; orderBy(keySelector: Selector, comparer: Comparer): IOrderedEnumerable; orderByDescending(keySelector: Selector): IOrderedEnumerable; reverse(): IEnumerable; select(selector: Selector): IEnumerable; selectMany(selector: Selector>): IEnumerable; single(): TOut; single(predicate: Predicate): TOut; singleOrDefault(): TOut | undefined; singleOrDefault(predicate: Predicate): TOut | undefined; skip(amount: number): IEnumerable; sum(selector: Selector): number; take(amount: number): IEnumerable; union(other: IQueryable): IEnumerable; where(predicate: Predicate): IEnumerable; } export interface IEnumerable extends IQueryable, IIterable { copy(): IEnumerable; } export interface IOrderedEnumerable extends IEnumerable { copy(): IOrderedEnumerable; thenBy(keySelector: Selector): IOrderedEnumerable; thenBy(keySelector: Selector, comparer: Comparer): IOrderedEnumerable; thenByDescending(keySelector: Selector): IOrderedEnumerable; } export declare abstract class EnumerableBase implements IEnumerable { protected readonly source: IIterable | IEnumerable; protected constructor(source: IIterable); abstract copy(): IEnumerable; abstract value(): TOut; reset(): void; next(): boolean; asEnumerable(): IEnumerable; toArray(): TOut[]; toList(): IList; toDictionary(keySelector: Selector, valueSelector: Selector): IDictionary; count(): number; count(predicate: Predicate): number; any(): boolean; any(predicate: Predicate): boolean; all(predicate: Predicate): boolean; reverse(): IEnumerable; contains(element: TOut): boolean; where(predicate: Predicate): IEnumerable; select(selector: Selector): IEnumerable; selectMany(selector: Selector>): IEnumerable; concat(other: TOut[] | IQueryable, ...others: Array>): IEnumerable; elementAt(index: number): TOut; elementAtOrDefault(index: number): TOut | undefined; except(other: IQueryable): IEnumerable; first(): TOut; first(predicate: Predicate): TOut; firstOrDefault(): TOut | undefined; firstOrDefault(predicate: Predicate): TOut | undefined; forEach(action: Action): void; groupBy(keySelector: Selector): IEnumerable>; groupBy(keySelector: Selector, valueSelector: Selector): IEnumerable>; last(): TOut; last(predicate: Predicate): TOut; lastOrDefault(): TOut | undefined; lastOrDefault(predicate: Predicate): TOut | undefined; single(): TOut; single(predicate: Predicate): TOut; singleOrDefault(): TOut | undefined; singleOrDefault(predicate: Predicate): TOut | undefined; distinct(): IEnumerable; distinct(keySelector: Selector): IEnumerable; aggregate(aggregator: Aggregator): TOut; aggregate(aggregator: Aggregator, initialValue: TValue): TValue; min(): TOut; min(selector: Selector): TSelectorOut; orderBy(keySelector: Selector): IOrderedEnumerable; orderBy(keySelector: Selector, comparer: Comparer): IOrderedEnumerable; orderByDescending(keySelector: Selector): IOrderedEnumerable; max(): TOut; max(selector: Selector): TSelectorOut; sum(selector: Selector): number; average(selector: Selector): number; skip(amount: number): IEnumerable; take(amount: number): IEnumerable; union(other: IQueryable): IEnumerable; } export declare class Enumerable extends EnumerableBase { protected currentValue: Cached; static fromSource(source: TElement[] | IIterable): IEnumerable; static empty(): IEnumerable; static range(start: number, count: number): IEnumerable; static range(start: number, count: number, ascending: boolean): IEnumerable; static repeat(element: TElement, count: number): IEnumerable; constructor(source: IIterable); copy(): IEnumerable; value(): TElement; reset(): void; next(): boolean; } export declare class ConditionalEnumerable extends Enumerable { protected source: IEnumerable; private _predicate; constructor(source: IEnumerable, predicate: Predicate); copy(): ConditionalEnumerable; next(): boolean; } export declare class ConcatEnumerable extends Enumerable { private _otherSource; private _isFirstSourceFinished; constructor(left: IIterable, right: IIterable); copy(): ConcatEnumerable; reset(): void; next(): boolean; value(): TElement; } export declare class UniqueEnumerable extends Enumerable { protected source: IEnumerable; private _seen; private _keySelector; constructor(source: IEnumerable, keySelector?: Selector); copy(): UniqueEnumerable; reset(): void; private isUnique(element); next(): boolean; } export declare class RangeEnumerable extends Enumerable { protected source: IEnumerable; private _start; private _count; private _currentIndex; constructor(source: IEnumerable, start: number | undefined, count: number | undefined); copy(): RangeEnumerable; reset(): void; private isValidIndex(); private performSkip(); next(): boolean; value(): TElement; } export declare class TransformEnumerable extends EnumerableBase { protected source: IEnumerable; private _transform; private _currentValue; constructor(source: IEnumerable, transform: Selector); copy(): TransformEnumerable; value(): TOut; reset(): void; next(): boolean; } export declare class ReverseEnumerable extends Enumerable { protected source: IEnumerable; private _elements; private _currentIndex; constructor(source: IEnumerable); copy(): IEnumerable; reset(): void; private isValidIndex(); all(predicate: Predicate): boolean; any(): boolean; any(predicate: Predicate): boolean; average(selector: Selector): number; count(): number; count(predicate: Predicate): number; max(): TElement; max(selector: Selector): TSelectorOut; min(): TElement; min(selector: Selector): TSelectorOut; reverse(): IEnumerable; sum(selector: Selector): number; next(): boolean; value(): TElement; } export declare class OrderedEnumerable extends EnumerableBase implements IOrderedEnumerable { protected source: IEnumerable; private _comparer; private _elements; private _currentIndex; constructor(source: IEnumerable, comparer: Comparer); private isValidIndex(); orderBy(keySelector: Selector): IOrderedEnumerable; orderBy(keySelector: Selector, comparer: Comparer): IOrderedEnumerable; orderByDescending(keySelector: Selector): IOrderedEnumerable; thenBy(keySelector: Selector): IOrderedEnumerable; thenBy(keySelector: Selector, comparer: Comparer): IOrderedEnumerable; thenByDescending(keySelector: Selector): IOrderedEnumerable; reset(): void; copy(): IOrderedEnumerable; value(): TElement; next(): boolean; toArray(): TElement[]; } export declare class ArrayEnumerable extends Enumerable { protected list: List; constructor(source: TOut[]); toArray(): TOut[]; aggregate(aggregator: Aggregator): TOut; aggregate(aggregator: Aggregator, initialValue: TValue): TValue; any(): boolean; any(predicate: Predicate): boolean; all(predicate: Predicate): boolean; average(selector: Selector): number; count(): number; count(predicate: Predicate): number; copy(): IEnumerable; elementAtOrDefault(index: number): TOut | undefined; firstOrDefault(): TOut | undefined; firstOrDefault(predicate: Predicate): TOut | undefined; lastOrDefault(): TOut | undefined; lastOrDefault(predicate: Predicate): TOut | undefined; }