src/work/marci/for_each_macros.h
changeset 330 7ac0d4e8a31c
child 333 e0a80761dfd9
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/work/marci/for_each_macros.h	Thu Apr 15 14:41:20 2004 +0000
     1.3 @@ -0,0 +1,85 @@
     1.4 +// -*- c++ -*-
     1.5 +#ifndef FOR_EACH_MACROS_H
     1.6 +#define FOR_EACH_MACROS_H
     1.7 +
     1.8 +namespace hugo {
     1.9 +
    1.10 +#define FOR_EACH(e, g) for((g).first((e)); (g).valid((e)); (g).next((e)))
    1.11 +#define FOR_EACH_INC(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e)))
    1.12 +
    1.13 +#define FOR_EACH_EDGE(e, g) for((g).first((e)); (g).valid((e)); (g).next((e)))
    1.14 +#define FOR_EACH_NODE(e, g) for((g).first((e)); (g).valid((e)); (g).next((e)))
    1.15 +#define FOR_EACH_INEDGE(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e)))
    1.16 +#define FOR_EACH_OUTEDGE(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e)))
    1.17 +
    1.18 +//   template<typename It, typename Graph> 
    1.19 +//   It loopFirst(const Graph& g) const {
    1.20 +//     It e; g.first(e); return e; 
    1.21 +//   }
    1.22 +
    1.23 +//   template<typename It, typename Graph> 
    1.24 +//   It loopFirst(const Graph& g, const Node& v) const {
    1.25 +//     It e; g.first(e, v); return e; 
    1.26 +//   }
    1.27 +
    1.28 +//   template<typename Graph> 
    1.29 +//   typename Graph::NodeIt loopFirstNode(const Graph& g) const {
    1.30 +//     typename Graph::NodeIt e; g.first(e); return e; 
    1.31 +//   }
    1.32 +//   template<typename Graph> 
    1.33 +//   typename Graph::EdgeIt loopFirstEdge(const Graph& g) const {
    1.34 +//     typename Graph::EdgeIt e; g.first(e); return e; 
    1.35 +//   }
    1.36 +//   template<typename Graph> 
    1.37 +//   typename Graph::OutEdgeIt 
    1.38 +//   loopFirstOutEdge(const Graph& g, const Node& n) const {
    1.39 +//     typename Graph::OutEdgeIt e; g.first(e, n); return e; 
    1.40 +//   }
    1.41 +//   template<typename Graph> 
    1.42 +//   typename Graph::InEdgeIt 
    1.43 +//   loopFirstIn Edge(const Graph& g, const Node& n) const {
    1.44 +//     typename Graph::InEdgeIt e; g.first(e, n); return e; 
    1.45 +//   }
    1.46 +
    1.47 +//FIXME ezt hogy a gorcsbe birja levezetni. Csak ugy leveszi a const-ot??
    1.48 +  template<typename It, typename Graph> 
    1.49 +  It loopFirst(const It& i, const Graph& g) {
    1.50 +    It e=i; g.first(e); return e; 
    1.51 +  }
    1.52 +
    1.53 +  template<typename It, typename Graph, typename Node> 
    1.54 +  It loopFirst(const It& i, const Graph& g, const Node& v) {
    1.55 +    It e=i; g.first(e, v); return e; 
    1.56 +  }
    1.57 +
    1.58 +//   template<typename Graph> 
    1.59 +//   typename Graph::NodeIt loopFirstNode(const Graph& g) const {
    1.60 +//     typename Graph::NodeIt e; g.first(e); return e; 
    1.61 +//   }
    1.62 +//   template<typename Graph> 
    1.63 +//   typename Graph::EdgeIt loopFirstEdge(const Graph& g) const {
    1.64 +//     typename Graph::EdgeIt e; g.first(e); return e; 
    1.65 +//   }
    1.66 +//   template<typename Graph> 
    1.67 +//   typename Graph::OutEdgeIt 
    1.68 +//   loopFirstOutEdge(const Graph& g, const Node& n) const {
    1.69 +//     typename Graph::OutEdgeIt e; g.first(e, n); return e; 
    1.70 +//   }
    1.71 +//   template<typename Graph> 
    1.72 +//   typename Graph::InEdgeIt 
    1.73 +//   loopFirstIn Edge(const Graph& g, const Node& n) const {
    1.74 +//     typename Graph::InEdgeIt e; g.first(e, n); return e; 
    1.75 +//   }
    1.76 +
    1.77 +#define FOR_EACH_LOC(Ittype, e, g) for(Ittype (e)=loopFirst(Ittype(), (g)); (g).valid((e)); (g).next((e)))
    1.78 +#define FOR_EACH_INC_LOC(Ittype, e, g, v) for(Ittype (e)=loopFirst(Ittype(), (g), (v)); (g).valid((e)); (g).next((e)))
    1.79 +
    1.80 +// #define FOR_EACH_EDGE_LOC(e, g) for((g).first((e)); (g).valid((e)); (g).next((e)))
    1.81 +// #define FOR_EACH_NODE_LOC(e, g) for((g).first((e)); (g).valid((e)); (g).next((e)))
    1.82 +// #define FOR_EACH_INEDGE_LOC(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e)))
    1.83 +// #define FOR_EACH_OUTEDGE_LOC(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e)))
    1.84 +
    1.85 +
    1.86 +} //namespace hugo
    1.87 +
    1.88 +#endif //FOR_EACH_MACROS_H