alpar@52: // -*-mode: c++; -*- alpar@52: alpar@145: class EmptyGraph alpar@52: { alpar@52: public: alpar@145: alpar@52: class EdgeIt {}; alpar@52: marci@67: 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: marci@67: NodeIt &getFirst(NodeIt &) const {} marci@67: InEdgeIt &getFirst(InEdgeIt &, NodeIt) const {} marci@67: OutEdgeIt &getFirst(OutEdgeIt &, NodeIt) const {} marci@67: 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@145: 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@145: 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: marci@67: NodeIt aNode(InEdgeIt) const {} marci@67: NodeIt aNode(OutEdgeIt) const {} marci@67: NodeIt aNode(SymEdgeIt) const {} alpar@52: marci@67: NodeIt bNode(InEdgeIt) const {} marci@67: NodeIt bNode(OutEdgeIt) const {} marci@67: NodeIt bNode(SymEdgeIt) const {} alpar@55: marci@67: //bool valid(const NodeIt) const {}; marci@67: //bool valid(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@52: template class NodeMap alpar@52: { alpar@52: public: alpar@61: typedef T ValueType; alpar@61: typedef NodeIt KeyType; marci@67: void set(NodeIt i, T t) {} marci@67: T get(NodeIt i) const {} marci@67: T &operator[](NodeIt i) {} alpar@52: marci@67: NodeMap(const Graph &G) {} marci@67: NodeMap(const Graph &G, T t) {} alpar@52: }; alpar@52: alpar@52: template class EdgeMap alpar@52: { alpar@52: public: alpar@61: typedef T ValueType; alpar@61: typedef EdgeIt KeyType; marci@67: void set(EdgeIt i, T t) {} marci@67: T get(EdgeIt i) const {} marci@67: T &operator[](EdgeIt i) {} alpar@52: marci@67: EdgeMap(const Graph &G) {} marci@67: EdgeMap(const Graph &G, T t) {} alpar@52: }; alpar@52: }; alpar@145: alpar@145: class EmptyBipGraph : public EmptyGraph alpar@145: { alpar@145: class ANodeIt {}; alpar@145: class BNodeIt {}; alpar@145: alpar@145: ANodeIt &next(ANodeIt &) {} alpar@145: BNodeIt &next(BNodeIt &) {} alpar@145: alpar@145: ANodeIt &getFirst(ANodeIt &) const {} alpar@145: BNodeIt &getFirst(BNodeIt &) const {} alpar@145: alpar@145: enum NodeClass { A = 0, B = 1 }; alpar@145: NodeClass getClass(NodeIt n) {} alpar@145: alpar@145: }