1 | // -*- c++ -*- |
---|
2 | #ifndef FOR_EACH_MACROS_H |
---|
3 | #define FOR_EACH_MACROS_H |
---|
4 | |
---|
5 | namespace hugo { |
---|
6 | |
---|
7 | #define FOR_EACH(e, g) for((g).first((e)); (g).valid((e)); (g).next((e))) |
---|
8 | #define FOR_EACH_INC(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e))) |
---|
9 | |
---|
10 | #define FOR_EACH_EDGE(e, g) for((g).first((e)); (g).valid((e)); (g).next((e))) |
---|
11 | #define FOR_EACH_NODE(e, g) for((g).first((e)); (g).valid((e)); (g).next((e))) |
---|
12 | #define FOR_EACH_INEDGE(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e))) |
---|
13 | #define FOR_EACH_OUTEDGE(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e))) |
---|
14 | |
---|
15 | // template<typename It, typename Graph> |
---|
16 | // It loopFirst(const Graph& g) const { |
---|
17 | // It e; g.first(e); return e; |
---|
18 | // } |
---|
19 | |
---|
20 | // template<typename It, typename Graph> |
---|
21 | // It loopFirst(const Graph& g, const Node& v) const { |
---|
22 | // It e; g.first(e, v); return e; |
---|
23 | // } |
---|
24 | |
---|
25 | // template<typename Graph> |
---|
26 | // typename Graph::NodeIt loopFirstNode(const Graph& g) const { |
---|
27 | // typename Graph::NodeIt e; g.first(e); return e; |
---|
28 | // } |
---|
29 | // template<typename Graph> |
---|
30 | // typename Graph::EdgeIt loopFirstEdge(const Graph& g) const { |
---|
31 | // typename Graph::EdgeIt e; g.first(e); return e; |
---|
32 | // } |
---|
33 | // template<typename Graph> |
---|
34 | // typename Graph::OutEdgeIt |
---|
35 | // loopFirstOutEdge(const Graph& g, const Node& n) const { |
---|
36 | // typename Graph::OutEdgeIt e; g.first(e, n); return e; |
---|
37 | // } |
---|
38 | // template<typename Graph> |
---|
39 | // typename Graph::InEdgeIt |
---|
40 | // loopFirstIn Edge(const Graph& g, const Node& n) const { |
---|
41 | // typename Graph::InEdgeIt e; g.first(e, n); return e; |
---|
42 | // } |
---|
43 | |
---|
44 | //FIXME ezt hogy a gorcsbe birja levezetni. Csak ugy leveszi a const-ot?? |
---|
45 | template<typename It, typename Graph> |
---|
46 | It loopFirst(const It&, const Graph& g) { |
---|
47 | It e; g.first(e); return e; |
---|
48 | } |
---|
49 | |
---|
50 | template<typename It, typename Graph, typename Node> |
---|
51 | It loopFirst(const It&, const Graph& g, const Node& v) { |
---|
52 | It e; g.first(e, v); return e; |
---|
53 | } |
---|
54 | |
---|
55 | // template<typename Graph> |
---|
56 | // typename Graph::NodeIt loopFirstNode(const Graph& g) const { |
---|
57 | // typename Graph::NodeIt e; g.first(e); return e; |
---|
58 | // } |
---|
59 | // template<typename Graph> |
---|
60 | // typename Graph::EdgeIt loopFirstEdge(const Graph& g) const { |
---|
61 | // typename Graph::EdgeIt e; g.first(e); return e; |
---|
62 | // } |
---|
63 | // template<typename Graph> |
---|
64 | // typename Graph::OutEdgeIt |
---|
65 | // loopFirstOutEdge(const Graph& g, const Node& n) const { |
---|
66 | // typename Graph::OutEdgeIt e; g.first(e, n); return e; |
---|
67 | // } |
---|
68 | // template<typename Graph> |
---|
69 | // typename Graph::InEdgeIt |
---|
70 | // loopFirstIn Edge(const Graph& g, const Node& n) const { |
---|
71 | // typename Graph::InEdgeIt e; g.first(e, n); return e; |
---|
72 | // } |
---|
73 | |
---|
74 | #define FOR_EACH_LOC(Ittype, e, g) for(Ittype e=loopFirst(Ittype(), (g)); (g).valid(e); (g).next(e)) |
---|
75 | #define FOR_EACH_INC_LOC(Ittype, e, g, v) for(Ittype e=loopFirst(Ittype(), (g), (v)); (g).valid(e); (g).next(e)) |
---|
76 | |
---|
77 | // #define FOR_EACH_EDGE_LOC(e, g) ezt nem tom hogy kell for((g).first((e)); (g).valid((e)); (g).next((e))) |
---|
78 | // #define FOR_EACH_NODE_LOC(e, g) for((g).first((e)); (g).valid((e)); (g).next((e))) |
---|
79 | // #define FOR_EACH_INEDGE_LOC(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e))) |
---|
80 | // #define FOR_EACH_OUTEDGE_LOC(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e))) |
---|
81 | |
---|
82 | |
---|
83 | } //namespace hugo |
---|
84 | |
---|
85 | #endif //FOR_EACH_MACROS_H |
---|