src/work/alpar/smart_graph.h
changeset 176 f574ee5750fc
parent 164 970b265696b0
child 177 924f9555711d
equal deleted inserted replaced
9:70cb42d2f567 10:62469e587e28
    94 
    94 
    95     
    95     
    96     Node tail(Edge e) const { return edges[e.n].tail; }
    96     Node tail(Edge e) const { return edges[e.n].tail; }
    97     Node head(Edge e) const { return edges[e.n].head; }
    97     Node head(Edge e) const { return edges[e.n].head; }
    98 
    98 
    99 //     Node aNode(const OutEdgeIt& e) const { return tail(e); }
    99     // Marci
   100 //     Node aNode(const InEdgeIt& e) const { return head(e); }
   100     Node aNode(OutEdgeIt e) const { return edges[e.n].tail; }
       
   101     Node aNode(InEdgeIt e) const { return edges[e.n].head; }
   101 //     //Node aNode(const SymEdge& e) const { return e.aNode(); }
   102 //     //Node aNode(const SymEdge& e) const { return e.aNode(); }
   102 
   103 
   103 //     Node bNode(const OutEdgeIt& e) const { return head(e); }
   104     // Marci
   104 //     Node bNode(const InEdgeIt& e) const { return tail(e); }
   105     Node bNode(OutEdgeIt e) const { return edges[e.n].head; }
       
   106     Node bNode(InEdgeIt e) const { return edges[e.n].tail; }
   105 //     //Node bNode(const SymEdge& e) const { return e.bNode(); }
   107 //     //Node bNode(const SymEdge& e) const { return e.bNode(); }
   106 
   108 
   107     NodeIt& first(NodeIt& v) const { 
   109     NodeIt& first(NodeIt& v) const { 
   108       v=NodeIt(*this); return v; }
   110       v=NodeIt(*this); return v; }
   109     EdgeIt& first(EdgeIt& e) const { 
   111     EdgeIt& first(EdgeIt& e) const { 
   114       e=InEdgeIt(*this,v); return e; }
   116       e=InEdgeIt(*this,v); return e; }
   115 
   117 
   116     template< typename It >
   118     template< typename It >
   117     It first() const { 
   119     It first() const { 
   118       It e;
   120       It e;
   119       getFirst(e);
   121       //Marci
       
   122       /*getF*/first(e);
   120       return e; 
   123       return e; 
   121     }
   124     }
   122 
   125 
   123     template< typename It >
   126     template< typename It >
   124     It first(Node v) const { 
   127     It first(Node v) const { 
   125       It e;
   128       It e;
   126       getFirst(e, v);
   129       //Marci
       
   130       /*getF*/first(e, v);
   127       return e; 
   131       return e; 
   128     }
   132     }
   129 
   133 
   130     bool valid(Edge e) const { return e.n!=-1; }
   134     bool valid(Edge e) const { return e.n!=-1; }
   131     //    bool valid(EdgeIt e) const { return e.n<int(edges.size()); }
   135     //    bool valid(EdgeIt e) const { return e.n<int(edges.size()); }
   136     
   140     
   137     template <typename It> It getNext(It it) const
   141     template <typename It> It getNext(It it) const
   138     { It tmp(it); return next(tmp); }
   142     { It tmp(it); return next(tmp); }
   139     //{ It tmp; tmp.n=it.n+1; return tmp; }
   143     //{ It tmp; tmp.n=it.n+1; return tmp; }
   140 
   144 
   141     Node& next(Node& it) const { it.n=(it.n+2)%nodes.size()-1; return it; }
   145     //FIXME correction Marci: I changed to NodeIt from Node
       
   146     //NodeIt& next(NodeIt& it) const { it.n=(it.n+2)%nodes.size()-1; return it; }
       
   147     NodeIt& next(NodeIt& it) const { 
       
   148       it.n=(it.n+2)%(nodes.size()+1)-1; 
       
   149       return it; 
       
   150     }
   142     OutEdgeIt& next(OutEdgeIt& it) const
   151     OutEdgeIt& next(OutEdgeIt& it) const
   143     { it.n=edges[it.n].next_out; return it; }
   152     { it.n=edges[it.n].next_out; return it; }
   144     InEdgeIt& next(InEdgeIt& it) const
   153     InEdgeIt& next(InEdgeIt& it) const
   145     { it.n=edges[it.n].next_in; return it; }
   154     { it.n=edges[it.n].next_in; return it; }
   146     EdgeIt& next(EdgeIt& it) const { --it.n; return it; }
   155     EdgeIt& next(EdgeIt& it) const { --it.n; return it; }
   214       friend int SmartGraph::id(Edge e) const;
   223       friend int SmartGraph::id(Edge e) const;
   215 
   224 
   216       Edge(int nn) {n=nn;}
   225       Edge(int nn) {n=nn;}
   217     public:
   226     public:
   218       Edge() { }
   227       Edge() { }
   219       Edge (Invalid i) { n=-1; }
   228       // Marci: kiszedtem az Invalid i-bol az i-t 
       
   229       Edge (Invalid) { n=-1; }
   220       bool operator==(const Edge i) const {return n==i.n;}
   230       bool operator==(const Edge i) const {return n==i.n;}
   221       bool operator!=(const Edge i) const {return n!=i.n;}
   231       bool operator!=(const Edge i) const {return n!=i.n;}
   222       bool operator<(const Edge i) const {return n<i.n;}
   232       bool operator<(const Edge i) const {return n<i.n;}
   223     };
   233     };
   224     
   234