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