import { VertexKey } from '../types';
export interface IGraph<V, E, VO, EO> {
    createVertex(key: VertexKey, value?: V): VO;
    createEdge(srcOrV1: VertexKey, destOrV2: VertexKey, weight?: number, value?: E): EO;
    getVertex(vertexKey: VertexKey): VO | undefined;
    hasVertex(vertexOrKey: VO | VertexKey): boolean;
    addVertex(vertex: VO): boolean;
    addVertex(key: VertexKey, value?: V): boolean;
    deleteVertex(vertexOrKey: VO | VertexKey): boolean;
    deleteEdge(edge: EO): EO | undefined;
    getEdge(srcOrKey: VO | VertexKey, destOrKey: VO | VertexKey): EO | undefined;
    degreeOf(vertexOrKey: VO | VertexKey): number;
    edgeSet(): EO[];
    edgesOf(vertexOrKey: VO | VertexKey): EO[];
    getNeighbors(vertexOrKey: VO | VertexKey): VO[];
    getEndsOfEdge(edge: EO): [VO, VO] | undefined;
    isEmpty(): boolean;
    clear(): void;
    clone(): this;
    filter(...args: unknown[]): this;
}
