src/work/list_graph.hh
changeset 90 6a14044089d9
parent 86 cbd76005b9a7
child 92 a7f9e2fda93a
equal deleted inserted replaced
7:391692b59691 8:89a5fbc4e37b
   378       friend std::ostream& operator<<(std::ostream& os, const NodeIt& i);
   378       friend std::ostream& operator<<(std::ostream& os, const NodeIt& i);
   379     };
   379     };
   380     
   380     
   381     class EachNodeIt : public NodeIt {
   381     class EachNodeIt : public NodeIt {
   382       friend class ListGraph;
   382       friend class ListGraph;
   383     protected:
   383       //protected:
       
   384     public: //for alpar
   384       EachNodeIt(const ListGraph& G) : NodeIt(G._first_node) { }
   385       EachNodeIt(const ListGraph& G) : NodeIt(G._first_node) { }
   385     public:
   386     public:
   386       EachNodeIt() : NodeIt() { }
   387       EachNodeIt() : NodeIt() { }
   387       EachNodeIt(node_item* v) : NodeIt(v) { }
   388       EachNodeIt(node_item* v) : NodeIt(v) { }
   388       EachNodeIt& operator++() { node=node->_next_node; return *this; }
   389       EachNodeIt& operator++() { node=node->_next_node; return *this; }
   416       friend std::ostream& operator<<(std::ostream& os, const EdgeIt& i);
   417       friend std::ostream& operator<<(std::ostream& os, const EdgeIt& i);
   417     };
   418     };
   418     
   419     
   419     class EachEdgeIt : public EdgeIt {
   420     class EachEdgeIt : public EdgeIt {
   420       friend class ListGraph;
   421       friend class ListGraph;
   421     protected:
   422       //protected: 
       
   423     public: //for alpar
   422       EachEdgeIt(const ListGraph& G) {
   424       EachEdgeIt(const ListGraph& G) {
   423 	node_item* v=G._first_node;
   425 	node_item* v=G._first_node;
   424 	if (v) edge=v->_first_out_edge; else edge=0;
   426 	if (v) edge=v->_first_out_edge; else edge=0;
   425 	while (v && !edge) { v=v->_next_node; if (v) edge=v->_first_out_edge; }
   427 	while (v && !edge) { v=v->_next_node; if (v) edge=v->_first_out_edge; }
   426       }
   428       }
   436     };
   438     };
   437     
   439     
   438     class OutEdgeIt : public EdgeIt {
   440     class OutEdgeIt : public EdgeIt {
   439       friend class ListGraph;
   441       friend class ListGraph;
   440       //node_item* v;
   442       //node_item* v;
   441     protected:
   443       //protected: 
       
   444     public: //for alpar
   442       OutEdgeIt(const NodeIt& _v) /*: v(_v.node)*/ { edge=_v.node->_first_out_edge; }
   445       OutEdgeIt(const NodeIt& _v) /*: v(_v.node)*/ { edge=_v.node->_first_out_edge; }
   443     public:
   446     public:
   444       OutEdgeIt() : EdgeIt()/*, v(0)*/ { }
   447       OutEdgeIt() : EdgeIt()/*, v(0)*/ { }
   445       OutEdgeIt(const ListGraph& G, NodeIt _v) /*: v(_v.node)*/ { edge=_v.node->_first_out_edge; }
   448       OutEdgeIt(const ListGraph& G, NodeIt _v) /*: v(_v.node)*/ { edge=_v.node->_first_out_edge; }
   446       OutEdgeIt& operator++() { edge=edge->_next_out; return *this; }
   449       OutEdgeIt& operator++() { edge=edge->_next_out; return *this; }
   450     };
   453     };
   451     
   454     
   452     class InEdgeIt : public EdgeIt {
   455     class InEdgeIt : public EdgeIt {
   453       friend class ListGraph;
   456       friend class ListGraph;
   454       //node_item* v;
   457       //node_item* v;
   455     protected:
   458       //protected:
       
   459     public: //for alpar
   456       InEdgeIt(const NodeIt& _v) /*: v(_v.node)*/ { edge=_v.node->_first_in_edge; }
   460       InEdgeIt(const NodeIt& _v) /*: v(_v.node)*/ { edge=_v.node->_first_in_edge; }
   457     public:
   461     public:
   458       InEdgeIt() : EdgeIt()/*, v(0)*/ { }
   462       InEdgeIt() : EdgeIt()/*, v(0)*/ { }
   459       InEdgeIt(const ListGraph& G, NodeIt _v) /*: v(_v.node)*/ { edge=_v.node->_first_in_edge; }
   463       InEdgeIt(const ListGraph& G, NodeIt _v) /*: v(_v.node)*/ { edge=_v.node->_first_in_edge; }
   460       InEdgeIt& operator++() { edge=edge->_next_in; return *this; }
   464       InEdgeIt& operator++() { edge=edge->_next_in; return *this; }
   465 
   469 
   466     class SymEdgeIt : public EdgeIt {
   470     class SymEdgeIt : public EdgeIt {
   467       friend class ListGraph;
   471       friend class ListGraph;
   468       bool out_or_in; //1 iff out, 0 iff in
   472       bool out_or_in; //1 iff out, 0 iff in
   469       //node_item* v;
   473       //node_item* v;
   470     protected:
   474       //protected:
       
   475     public: //for alpar
   471       SymEdgeIt(const NodeIt& _v) /*: v(_v.node)*/ { 
   476       SymEdgeIt(const NodeIt& _v) /*: v(_v.node)*/ { 
   472 	out_or_in=1;
   477 	out_or_in=1;
   473 	edge=_v.node->_first_out_edge; 
   478 	edge=_v.node->_first_out_edge; 
   474 	if (!edge) { edge=_v.node->_first_in_edge; out_or_in=0; }
   479 	if (!edge) { edge=_v.node->_first_in_edge; out_or_in=0; }
   475       }
   480       }