// Copyright 2003, Trustees of Indiana University // Please see the license in the file ../LICENSE using System; using GCollections; public interface GraphEdge { Vertex source {get;} Vertex target {get;} } public interface VertexListGraph where VertexIterator: IEnumerable { VertexIterator vertices(); int num_vertices(); } public interface IncidenceGraph< Vertex, Edge, OutEdgeIterator> where OutEdgeIterator: IEnumerable { OutEdgeIterator out_edges(Vertex v); int out_degree(Vertex v); } public interface EdgeListGraph< Vertex, Edge, EdgeIterator> where Edge: GraphEdge, EdgeIterator: IEnumerable { EdgeIterator edges(); } public interface VertexListAndIncidenceGraph< Vertex, Edge, VertexIterator, OutEdgeIterator> : VertexListGraph, IncidenceGraph where Edge: GraphEdge, VertexIterator: IEnumerable, OutEdgeIterator: IEnumerable {} public interface VertexListAndIncidenceAndEdgeListGraph< Vertex, Edge, VertexIterator, OutEdgeIterator, EdgeIterator>: VertexListAndIncidenceGraph, EdgeListGraph where Edge: GraphEdge, VertexIterator: IEnumerable, OutEdgeIterator: IEnumerable, EdgeIterator: IEnumerable {}