alpar@52: // -*-mode: c++; -*- alpar@52: alpar@52: class Graph alpar@52: { alpar@52: public: alpar@52: class EdgeIt {}; alpar@52: alpar@52: class InEdgeIt : public EdgeIt alpar@52: class OutEdgeIt : public EdgeIt {}; alpar@52: class SymEdgeIt : public EdgeIt {}; alpar@52: class EachEdgeIt : public EdgeIt {}; alpar@52: alpar@52: class NodeIt {}; alpar@52: alpar@56: NodeIt &getFirst(NodeIt &) const; alpar@56: InEdgeIt &getFirst(InEdgeIt &,const NodeIt) const; alpar@56: OutEdgeIt &getFirst(OutEdgeIt &,const NodeIt) const; alpar@56: SymEdgeIt &getFirst(SymEdgeIt &,const NodeIt) const; alpar@56: EachEdgeIt &getFirst(EachEdgeIt &) const; alpar@52: alpar@56: NodeIt next(const NodeIt) const; alpar@56: InEdgeIt next(const InEdgeIt) const; alpar@56: OutEdgeIt next(const OutEdgeIt) const; alpar@56: SymEdgeIt next(const SymEdgeIt) const; alpar@56: EachEdgeIt next(const EachEdgeIt) const; alpar@52: alpar@56: NodeIt &goNext(NodeIt &) const; alpar@56: InEdgeIt &goNext(InEdgeIt &) const; alpar@56: OutEdgeIt &goNext(OutEdgeIt &) const; alpar@56: SymEdgeIt &goNext(SymEdgeIt &) const; alpar@56: EachEdgeIt &goNext(EachEdgeIt &) const; alpar@52: alpar@56: NodeIt head(const EdgeIt) const; alpar@56: NodeIt tail(const EdgeIt) const; alpar@55: alpar@56: NodeIt aNode(const InEdgeIt) const; alpar@56: NodeIt aNode(const OutEdgeIt) const; alpar@56: NodeIt aNode(const SymEdgeIt) const; alpar@52: alpar@56: NodeIt bNode(const InEdgeIt) const; alpar@56: NodeIt bNode(const OutEdgeIt) const; alpar@56: NodeIt bNode(const SymEdgeIt) const; alpar@55: alpar@56: bool valid(const NodeIt) const; alpar@56: bool valid(const EdgeIt) const; alpar@55: alpar@56: void setInvalid(NodeIt &) const; alpar@56: void setInvalid(EdgeIt &) const; alpar@52: alpar@52: NodeIt addNode(); alpar@52: EdgeIt addEdge(const NodeIt from,const NodeIt to); alpar@52: alpar@52: void delete(NodeIt n); alpar@52: void delete(EdgeIt e); alpar@52: alpar@57: void clear(); alpar@52: alpar@52: template class NodeMap alpar@52: { alpar@52: public: alpar@52: typedef T value_type; alpar@52: void set(const NodeIt i, const T &t); alpar@52: T get(const NodeIt i) const; alpar@53: T &operator[](const NodeIt i); alpar@52: alpar@52: NodeMap(const Graph &G); alpar@52: }; alpar@52: alpar@52: template class EdgeMap alpar@52: { alpar@52: public: alpar@52: typedef T value_type; alpar@52: void set(const EdgeIt i, const T &t); alpar@52: T get(const EdgeIt i) const; alpar@53: T &operator[](const EdgeIt i); alpar@52: alpar@52: EdgeMap(const Graph &G); alpar@52: }; alpar@52: };