/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
export declare const Skip: unique symbol;
export type Skip = typeof Skip;
/**
 * Visit iterable tree.
 *
 * @remarks
 * Non-recursive depth first traversal.
 */
export declare function visitIterableTree<T>(root: T, iterator: (t: T) => Iterable<T>, visitor: (item: T) => Skip | void): void;
/**
 * Visit iterable tree.
 * Allows state to be computed in parents and passed to children.
 *
 * @remarks
 * Non-recursive depth first traversal.
 */
export declare function visitIterableTreeWithState<T extends Iterable<T>, StatePassedDown>(root: T, initial: StatePassedDown, visitor: (item: T, fromAbove: StatePassedDown) => Skip | StatePassedDown): void;
/**
 * Visit bipartite iterable tree.
 *
 * @remarks
 * Non-recursive depth first traversal.
 *
 * Particularly useful for processing trees with their alternating node and field levels.
 */
export declare function visitBipartiteIterableTree<A extends Iterable<B>, B extends Iterable<A>>(root: A, visitorA: (item: A) => Skip | undefined, visitorB: (item: B) => Skip | undefined): void;
/**
 * Visit bipartite iterable tree.
 * Allows state to be computed in parents and passed to children.
 *
 * @remarks
 * Non-recursive depth first traversal.
 *
 * Particularly useful for processing trees with their alternating node and field levels.
 *
 * @privateRemarks
 * Other traversal cases, like ones passing data up (via map or reduce patterns) could be supported by extending this or adding more utilities.
 * Such utility functions really only provide an improvement of hand coding each cases if the non-recessiveness is required.
 * Since supporting very deeps trees hasn't been a priority, such visitors are also not a priority, and are thus not included here for now.
 */
export declare function visitBipartiteIterableTreeWithState<A, B, StateA, StateB>(root: A, fromAbove: StateA, iterateA: (a: A) => Iterable<B>, iterateB: (b: B) => Iterable<A>, visitorA: (item: A, fromAbove: StateA) => Skip | StateB, visitorB: (item: B, fromAbove: StateB) => Skip | StateA): void;
//# sourceMappingURL=navigation.d.ts.map