import { ListNode, Opaque, Option } from '@glimmer/util'; import { VersionedPathReference as PathReference, RevisionTag } from './validators'; export interface IterationItem { key: string; value: T; memo: U; } export interface AbstractIterator> { isEmpty(): boolean; next(): V; } export interface AbstractIterable, ValueReferenceType extends PathReference, MemoReferenceType extends PathReference> { tag: RevisionTag; iterate(): AbstractIterator; valueReferenceFor(item: ItemType): ValueReferenceType; updateValueReference(reference: ValueReferenceType, item: ItemType): void; memoReferenceFor(item: ItemType): MemoReferenceType; updateMemoReference(reference: MemoReferenceType, item: ItemType): void; } export declare type Iterator = AbstractIterator>; export declare type Iterable = AbstractIterable, PathReference, PathReference>; export declare type OpaqueIterationItem = IterationItem; export declare type OpaqueIterator = AbstractIterator; export declare type OpaquePathReference = PathReference; export declare type OpaqueIterable = AbstractIterable; export declare type OpaquePathReferenceIterationItem = IterationItem; export declare class ListItem extends ListNode implements OpaqueIterationItem { key: string; memo: OpaquePathReference; retained: boolean; seen: boolean; private iterable; constructor(iterable: OpaqueIterable, result: OpaqueIterationItem); update(item: OpaqueIterationItem): void; shouldRemove(): boolean; reset(): void; } export declare class IterationArtifacts { tag: RevisionTag; private iterable; private iterator; private map; private list; constructor(iterable: OpaqueIterable); isEmpty(): boolean; iterate(): OpaqueIterator; has(key: string): boolean; get(key: string): ListItem; wasSeen(key: string): boolean; append(item: OpaqueIterationItem): ListItem; insertBefore(item: OpaqueIterationItem, reference: Option): ListItem; move(item: ListItem, reference: Option): void; remove(item: ListItem): void; nextNode(item: ListItem): ListItem; head(): Option; } export declare class ReferenceIterator { artifacts: IterationArtifacts; private iterator; constructor(iterable: OpaqueIterable); next(): Option; } export interface IteratorSynchronizerDelegate { retain(key: string, item: PathReference, memo: PathReference): void; insert(key: string, item: PathReference, memo: PathReference, before: Option): void; move(key: string, item: PathReference, memo: PathReference, before: Option): void; delete(key: string): void; done(): void; } export interface IteratorSynchronizerOptions { target: IteratorSynchronizerDelegate; artifacts: IterationArtifacts; } export declare class IteratorSynchronizer { private target; private iterator; private current; private artifacts; constructor({target, artifacts}: IteratorSynchronizerOptions); sync(): void; private advanceToKey(key); private nextAppend(); private nextRetain(item); private nextMove(item); private nextInsert(item); private startPrune(); private nextPrune(); private nextDone(); }