alpar@52: // -*-mode: c++; -*- alpar@52: alpar@52: class Graph alpar@52: { alpar@52: public: alpar@52: typedef E EdgeType; alpar@52: typedef N NodeType; alpar@52: 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@52: NodeIt &getFirst(NodeIt &); alpar@52: InEdgeIt &getFirst(InEdgeIt &,const NodeIt &); alpar@52: OutEdgeIt &getFirst(OutEdgeIt &,const NodeIt &); alpar@52: SymEdgeIt &getFirst(SymEdgeIt &,const NodeIt &); alpar@52: EachEdgeIt &getFirst(EachEdgeIt &); alpar@52: alpar@52: NodeIt next(const NodeIt &); alpar@52: InEdgeIt next(const InEdgeIt &); alpar@52: OutEdgeIt next(const OutEdgeIt &); alpar@52: SymEdgeIt next(const SymEdgeIt &); alpar@52: EachEdgeIt next(const EachEdgeIt &); alpar@52: alpar@52: NodeIt &goNext(const NodeIt &); alpar@52: InEdgeIt &goNext(const InEdgeIt &); alpar@52: OutEdgeIt &goNext(const OutEdgeIt &); alpar@52: SymEdgeIt &goNext(const SymEdgeIt &); alpar@52: EachEdgeIt &goNext(const EachEdgeIt &); alpar@52: alpar@52: bool valid(const NodeIt &n); alpar@52: bool valid(const EdgeIt &n); alpar@52: alpar@52: void setInvalid(const NodeIt &n); alpar@52: void setInvalid(const EdgeIt &n); 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@52: void clean(); 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: };