alpar@52: // -*-mode: c++; -*- alpar@52: alpar@145: class EmptyGraph alpar@52: { alpar@52: public: alpar@145: alpar@147: class NodeIt { alpar@147: public: alpar@147: NodeIt() {} //FIXME alpar@147: //NodeIt(const NodeIt &) {} alpar@147: bool operator==(NodeIt n) const {} //FIXME alpar@147: bool operator!=(NodeIt n) const {} //FIXME alpar@147: }; alpar@147: alpar@147: class EachNodeIt : public NodeIt { alpar@147: public: alpar@147: EachNodeIt() {} //FIXME alpar@147: EachNodeIt(const EmptyGraph &) const {} alpar@147: EachNodeIt(const EachNodeIt &) const {} //FIXME alpar@147: }; alpar@147: alpar@147: class EdgeIt { alpar@147: EdgeIt() {} //FIXME alpar@147: //EdgeIt(const EdgeIt &) {} alpar@147: bool operator==(EdgeIt n) const {} //FIXME alpar@147: bool operator!=(EdgeIt n) const {} //FIXME alpar@147: }; alpar@52: alpar@147: class OutEdgeIt : public EdgeIt { alpar@147: OutEdgeIt() {} alpar@147: OutEdgeIt(const EmptyGraph &, NodeIt) {} alpar@147: }; alpar@52: alpar@147: class InEdgeIt : public EdgeIt { alpar@147: InEdgeIt() {} alpar@147: InEdgeIt(const EmptyGraph &, NodeIt) {} alpar@147: }; alpar@147: // class SymEdgeIt : public EdgeIt {}; alpar@147: class EachEdgeIt : public EdgeIt { alpar@147: EachEdgeIt() {} alpar@147: EachEdgeIt(const EmptyGraph &, NodeIt) {} alpar@147: }; alpar@147: alpar@147: EachNodeIt &getFirst(EachNodeIt &) const {} marci@67: InEdgeIt &getFirst(InEdgeIt &, NodeIt) const {} marci@67: OutEdgeIt &getFirst(OutEdgeIt &, NodeIt) const {} alpar@147: // SymEdgeIt &getFirst(SymEdgeIt &, NodeIt) const {} marci@67: EachEdgeIt &getFirst(EachEdgeIt &) const {} alpar@52: alpar@145: NodeIt getNext(NodeIt) const {} alpar@145: InEdgeIt getNext(InEdgeIt) const {} alpar@145: OutEdgeIt getNext(OutEdgeIt) const {} alpar@147: //SymEdgeIt getNext(SymEdgeIt) const {} alpar@145: EachEdgeIt getNext(EachEdgeIt) const {} alpar@52: alpar@145: NodeIt &next(NodeIt &) const {} alpar@145: InEdgeIt &next(InEdgeIt &) const {} alpar@145: OutEdgeIt &next(OutEdgeIt &) const {} alpar@147: //SymEdgeIt &next(SymEdgeIt &) const {} alpar@145: EachEdgeIt &next(EachEdgeIt &) const {} alpar@52: marci@67: NodeIt head(EdgeIt) const {} marci@67: NodeIt tail(EdgeIt) const {} alpar@55: alpar@147: // NodeIt aNode(InEdgeIt) const {} alpar@147: // NodeIt aNode(OutEdgeIt) const {} alpar@147: // NodeIt aNode(SymEdgeIt) const {} alpar@52: alpar@147: // NodeIt bNode(InEdgeIt) const {} alpar@147: // NodeIt bNode(OutEdgeIt) const {} alpar@147: // NodeIt bNode(SymEdgeIt) const {} alpar@55: alpar@147: bool valid(const NodeIt) const {}; alpar@147: bool valid(const EdgeIt) const {}; alpar@147: alpar@147: int id(const NodeIt) const {}; alpar@147: int id(const EdgeIt) const {}; alpar@55: marci@67: //void setInvalid(NodeIt &) const {}; marci@67: //void setInvalid(EdgeIt &) const {}; alpar@52: marci@67: NodeIt addNode() {} marci@67: EdgeIt addEdge(NodeIt tail, NodeIt head) {} alpar@52: marci@67: void erase(NodeIt n) {} marci@67: void erase(EdgeIt e) {} alpar@52: marci@67: void clear() {} alpar@52: alpar@147: int nodeNum() {} alpar@147: int edgeNum() {} alpar@147: alpar@52: template class NodeMap alpar@52: { alpar@52: public: alpar@61: typedef T ValueType; alpar@61: typedef NodeIt KeyType; alpar@147: marci@67: NodeMap(const Graph &G) {} marci@67: NodeMap(const Graph &G, T t) {} alpar@147: alpar@147: void set(NodeIt i, T t) {} alpar@147: T get(NodeIt i) const {} //FIXME: Is it necessary alpar@147: T &operator[](NodeIt i) {} alpar@147: const T &operator[](NodeIt i) const {} alpar@147: alpar@147: update() {} alpar@147: update(T a) {} //FIXME: Is it necessary alpar@52: }; alpar@52: alpar@52: template class EdgeMap alpar@52: { alpar@52: public: alpar@61: typedef T ValueType; alpar@61: typedef EdgeIt KeyType; alpar@147: alpar@147: EdgeMap(const Graph &G) {} alpar@147: EdgeMap(const Graph &G, T t) {} alpar@147: marci@67: void set(EdgeIt i, T t) {} marci@67: T get(EdgeIt i) const {} marci@67: T &operator[](EdgeIt i) {} alpar@147: alpar@147: update() {} alpar@147: update(T a) {} //FIXME: Is it necessary alpar@52: }; alpar@52: }; alpar@145: alpar@145: alpar@147: // class EmptyBipGraph : public EmptyGraph alpar@147: // { alpar@147: // class ANodeIt {}; alpar@147: // class BNodeIt {}; alpar@145: alpar@147: // ANodeIt &next(ANodeIt &) {} alpar@147: // BNodeIt &next(BNodeIt &) {} alpar@145: alpar@147: // ANodeIt &getFirst(ANodeIt &) const {} alpar@147: // BNodeIt &getFirst(BNodeIt &) const {} alpar@145: alpar@147: // enum NodeClass { A = 0, B = 1 }; alpar@147: // NodeClass getClass(NodeIt n) {} alpar@147: alpar@147: // }