import { Component, Sink, Source, Tube } from '../components/component';
/**
 * Pipeline
 *
 * A pipeline is a linked list of components with some convenience methods to
 * handle inserting or removing components from the linked list.
 *
 * A internal set keeps track of which components the pipeline contains, while
 * any order is completely determined by the component's connectedness.
 */
export declare class Pipeline {
    firstComponent: Component;
    lastComponent: Component;
    private _set;
    /**
     * @param components - The components of the pipeline in order.
     */
    constructor(...components: Component[]);
    /**
     * @param components - The components of the pipeline in order.
     */
    init(...components: Component[]): void;
    /**
     * Inserts a component into the pipeline.
     *
     * @param component - Tube or Source behind which to insert a new component.
     * @param component - Tube or Sink to insert.
     */
    insertAfter(component: Source | Tube, newComponent: Tube | Sink): this;
    /**
     * Inserts a component into the pipeline.
     *
     * @param component - Tube or Sink in front of which to insert a new component.
     * @param component - Tube or Source to insert.
     */
    insertBefore(component: Tube | Sink, newComponent: Source | Tube): this;
    /**
     * Removes a component from the pipeline.
     *
     * @param component - Component to remove.
     */
    remove(component: Component): this;
    /**
     * Inserts a component at the end of the pipeline.
     *
     * @param component - Tube or Sink to insert.
     */
    append(...components: Array<Tube | Sink>): this;
    /**
     * Inserts a component at the beginning of the pipeline.
     *
     * @param component - Tube or Source to insert.
     */
    prepend(...components: Array<Source | Tube>): this;
}
