import type { BaseSubChain } from "./BaseSubChain";
import type { BaseMonomer } from "../BaseMonomer";
import type { SubChainNode } from "./types";
import { Nucleoside } from "../Nucleoside";
import { Nucleotide } from "../Nucleotide";
import { MonomerSequenceNode } from "../MonomerSequenceNode";
import { EmptySequenceNode } from "../EmptySequenceNode";
import { LinkerSequenceNode } from "../LinkerSequenceNode";
import type { PolymerBond } from "../PolymerBond";
import { EmptySubChain } from "./EmptySubChain";
export declare class Chain {
    subChains: BaseSubChain[];
    firstMonomer?: BaseMonomer;
    isCyclic: boolean;
    id: number;
    private nodesChanged;
    private nodesCache;
    private monomersCache;
    private bondsCache;
    constructor(firstMonomer?: BaseMonomer, isCyclic?: boolean);
    private recalculateNodes;
    private createSubChainIfNeed;
    private tryAddAsNucleosideOrNucleotide;
    private addAmbiguousMonomer;
    add(monomer: BaseMonomer): void;
    addNode(node: SubChainNode): this;
    private fillSubChains;
    get lastSubChain(): BaseSubChain;
    get nodes(): SubChainNode[];
    get lastNode(): EmptySequenceNode | MonomerSequenceNode | Nucleoside | Nucleotide | LinkerSequenceNode | undefined;
    get lastNonEmptyNode(): SubChainNode | undefined;
    get firstSubChain(): BaseSubChain;
    get firstNode(): SubChainNode;
    get length(): number;
    get isEmpty(): boolean;
    get isAntisense(): boolean;
    forEachNode(callback: ({ node, subChain, }: {
        node: SubChainNode;
        subChain: BaseSubChain;
        nodeIndex: number;
    }) => void): void;
    forEachNodeReversed(callback: ({ node, subChain, }: {
        node: SubChainNode;
        subChain: BaseSubChain;
        nodeIndex: number;
    }) => void): void;
    static createChainWithEmptyNode(): {
        emptyChain: Chain;
        emptySubChain: EmptySubChain;
        emptySequenceNode: EmptySequenceNode;
    };
    get isNewSequenceChain(): boolean;
    get monomers(): BaseMonomer[];
    get bonds(): PolymerBond[];
}
