- Clarified Path skeleton.
- setStart() changed to setStartNode()
     2 #ifndef HUGO_FOR_EACH_MACROS_H
 
     3 #define HUGO_FOR_EACH_MACROS_H
 
     5 // /// \ingroup gwrappers
 
     7 /// \brief Iteration macros.
 
     9 /// This file contains several macros which make easier writting 
 
    10 /// for cycles in HUGO using HUGO iterators.
 
    12 /// \author Marton Makai
 
    16   /// This macro provides a comfortable interface for iterating with HUGO 
 
    22   /// h_for_glob(n, g) {
 
    26   /// h_for_glob(e, g) {
 
    30   /// Note that the iterated variables \c n and \c e are global ones. 
 
    31 #define h_for_glob(e, g) for((g).first((e)); (g).valid((e)); (g).next((e)))
 
    34 #define FOR_EACH_GLOB(e, g) for((g).first((e)); (g).valid((e)); (g).next((e)))
 
    36   /// This macro provides a comfortable interface for iterating with HUGO 
 
    42   /// Graph::OutEdgeIt e;
 
    43   /// h_for_inc_glob(e, g, v) {
 
    46   /// typedef BipartiteGraph<Graph> BGraph;
 
    49   /// BGraph::ClassNodeIt n;
 
    50   /// h_for_inc_glob(BGraph::ClassNodeIt, n, h, h.S_CLASS) {
 
    54   /// Note that iterated variables \c e and \c n are global ones. 
 
    55 #define h_for_inc_glob(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e)))
 
    58 #define FOR_EACH_INC_GLOB(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e)))
 
    61 //#define FOR_EACH_EDGE_GLOB(e, g) for((g).first((e)); (g).valid((e)); (g).next((e)))
 
    63 //#define FOR_EACH_NODE_GLOB(e, g) for((g).first((e)); (g).valid((e)); (g).next((e)))
 
    65 //#define FOR_EACH_INEDGE_GLOB(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e)))
 
    67 //#define FOR_EACH_OUTEDGE_GLOB(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e)))
 
    69 //   template<typename It, typename Graph> 
 
    70 //   It loopFirst(const Graph& g) const {
 
    71 //     It e; g.first(e); return e; 
 
    74 //   template<typename It, typename Graph> 
 
    75 //   It loopFirst(const Graph& g, const Node& v) const {
 
    76 //     It e; g.first(e, v); return e; 
 
    79 //   template<typename Graph> 
 
    80 //   typename Graph::NodeIt loopFirstNode(const Graph& g) const {
 
    81 //     typename Graph::NodeIt e; g.first(e); return e; 
 
    83 //   template<typename Graph> 
 
    84 //   typename Graph::EdgeIt loopFirstEdge(const Graph& g) const {
 
    85 //     typename Graph::EdgeIt e; g.first(e); return e; 
 
    87 //   template<typename Graph> 
 
    88 //   typename Graph::OutEdgeIt 
 
    89 //   loopFirstOutEdge(const Graph& g, const Node& n) const {
 
    90 //     typename Graph::OutEdgeIt e; g.first(e, n); return e; 
 
    92 //   template<typename Graph> 
 
    93 //   typename Graph::InEdgeIt 
 
    94 //   loopFirstIn Edge(const Graph& g, const Node& n) const {
 
    95 //     typename Graph::InEdgeIt e; g.first(e, n); return e; 
 
    98 //FIXME ezt hogy a gorcsbe birja levezetni. Csak ugy leveszi a const-ot??
 
    99   template<typename It, typename Graph> 
 
   100   It loopFirst(const It&, const Graph& g) {
 
   101     It e; g.first(e); return e; 
 
   104   template<typename It, typename Graph, typename Node> 
 
   105   It loopFirst(const It&, const Graph& g, const Node& v) {
 
   106     It e; g.first(e, v); return e; 
 
   109 //   template<typename Graph> 
 
   110 //   typename Graph::NodeIt loopFirstNode(const Graph& g) const {
 
   111 //     typename Graph::NodeIt e; g.first(e); return e; 
 
   113 //   template<typename Graph> 
 
   114 //   typename Graph::EdgeIt loopFirstEdge(const Graph& g) const {
 
   115 //     typename Graph::EdgeIt e; g.first(e); return e; 
 
   117 //   template<typename Graph> 
 
   118 //   typename Graph::OutEdgeIt 
 
   119 //   loopFirstOutEdge(const Graph& g, const Node& n) const {
 
   120 //     typename Graph::OutEdgeIt e; g.first(e, n); return e; 
 
   122 //   template<typename Graph> 
 
   123 //   typename Graph::InEdgeIt 
 
   124 //   loopFirstIn Edge(const Graph& g, const Node& n) const {
 
   125 //     typename Graph::InEdgeIt e; g.first(e, n); return e; 
 
   128   /// This macro provides a comfortable interface for iterating with HUGO 
 
   133   /// h_for(Graph::NodeIt, n, g) {
 
   136   /// h_for(Graph::EdgeIt, e, g) {
 
   140   /// Note that the iterated variables \c n and \c e are local ones. 
 
   141 #define h_for(Ittype, e, g) for(Ittype e=loopFirst(Ittype(), (g)); (g).valid(e); (g).next(e))
 
   144 #define FOR_EACH_LOC(Ittype, e, g) for(Ittype e=loopFirst(Ittype(), (g)); (g).valid(e); (g).next(e))
 
   146   /// This macro provides a comfortable interface for iterating with HUGO 
 
   152   /// h_for_inc(Graph::OutEdgeIt, e, g, v) {
 
   155   /// typedef BipartiteGraph<Graph> BGraph;
 
   158   /// h_for_inc(BGraph::ClassNodeIt, n, h, h.S_CLASS) {
 
   162   /// Note that the iterated variables \c e and \c n are local ones. 
 
   163 #define h_for_inc(Ittype, e, g, v) for(Ittype e=loopFirst(Ittype(), (g), (v)); (g).valid(e); (g).next(e))
 
   166 #define FOR_EACH_INC_LOC(Ittype, e, g, v) for(Ittype e=loopFirst(Ittype(), (g), (v)); (g).valid(e); (g).next(e))
 
   168 // #define FOR_EACH_EDGE_LOC(e, g) ezt nem tom hogy kell for((g).first((e)); (g).valid((e)); (g).next((e)))
 
   169 // #define FOR_EACH_NODE_LOC(e, g) for((g).first((e)); (g).valid((e)); (g).next((e)))
 
   170 // #define FOR_EACH_INEDGE_LOC(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e)))
 
   171 // #define FOR_EACH_OUTEDGE_LOC(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e)))
 
   175 #endif //HUGO_FOR_EACH_MACROS_H