# HG changeset patch # User marci # Date 1084545690 0 # Node ID e59b0c363a9e4956f07d7df6d7781b2137264701 # Parent 933f593824c24740078a3aed562fb762995c916f diff -r 933f593824c2 -r e59b0c363a9e src/work/marci/for_each_macros.h --- a/src/work/marci/for_each_macros.h Thu May 13 17:42:23 2004 +0000 +++ b/src/work/marci/for_each_macros.h Fri May 14 14:41:30 2004 +0000 @@ -2,14 +2,59 @@ #ifndef FOR_EACH_MACROS_H #define FOR_EACH_MACROS_H +// /// \ingroup gwrappers +/// \file +/// \brief Iteraton macros. +/// +/// This file contains several macros which make easier writting +/// for cycles in HUGO, using HUGO iterators. +/// +/// \author Marton Makai + namespace hugo { +/// The iteration with HUGO iterators i.e. for cycles can be +/// written very comfortable with this macro. +/// \code +/// Graph g; +/// Graph::NodeIt n; +/// FOR_EACH_GLOB(n, g) { +/// ... +/// } +/// Graph::EdgeIt e; +/// FOR_EACH_GLOB(e, g) { +/// ... +/// } +/// In the above cycle, the iterator variable \c n and \c e are global ones. +/// \endcode #define FOR_EACH_GLOB(e, g) for((g).first((e)); (g).valid((e)); (g).next((e))) + +/// The iteration with HUGO iterators i.e. for cycles can be +/// written very comfortable with this macro. +/// \code +/// Graph g; +/// Graph::Node v; +/// Graph::OutEdgeIt e; +/// FOR_EACH_INC_GLOB(e, g, v) { +/// ... +/// } +/// typedef BipartiteGraph BGraph; +/// BGraph h; +/// BGraph::ClassNodeIt n; +/// FOR_EACH_INC_GLOB(BGraph::ClassNodeIt, n, h, h.S_CLASS) { +/// ... +/// } +/// In the above cycle, the iterator variable \c e and \c n are global ones. +/// \endcode #define FOR_EACH_INC_GLOB(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e))) +/// \deprecated #define FOR_EACH_EDGE_GLOB(e, g) for((g).first((e)); (g).valid((e)); (g).next((e))) +/// \deprecated #define FOR_EACH_NODE_GLOB(e, g) for((g).first((e)); (g).valid((e)); (g).next((e))) +/// \deprecated #define FOR_EACH_INEDGE_GLOB(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e))) +/// \deprecated #define FOR_EACH_OUTEDGE_GLOB(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e))) // template @@ -71,7 +116,35 @@ // typename Graph::InEdgeIt e; g.first(e, n); return e; // } +/// The iteration with HUGO iterators i.e. for cycles can be +/// written very comfortable with this macro. +/// \code +/// Graph g; +/// FOR_EACH_LOC(Graph::NodeIt, n, g) { +/// ... +/// } +/// FOR_EACH_LOC(Graph::EdgeIt, e, g) { +/// ... +/// } +/// In the above cycle, the iterator variable \c n and \c e are local ones. +/// \endcode #define FOR_EACH_LOC(Ittype, e, g) for(Ittype e=loopFirst(Ittype(), (g)); (g).valid(e); (g).next(e)) + +/// The iteration with HUGO iterators i.e. for cycles can be +/// written very comfortable with this macro. +/// \code +/// Graph g; +/// Graph::Node v; +/// FOR_EACH_INC_LOC(Graph::OutEdgeIt, e, g, v) { +/// ... +/// } +/// typedef BipartiteGraph BGraph; +/// BGraph h; +/// FOR_EACH_INC_LOC(BGraph::ClassNodeIt, n, h, h.S_CLASS) { +/// ... +/// } +/// In the above cycle, the iterator variable \c e and \c n are local ones. +/// \endcode #define FOR_EACH_INC_LOC(Ittype, e, g, v) for(Ittype e=loopFirst(Ittype(), (g), (v)); (g).valid(e); (g).next(e)) // #define FOR_EACH_EDGE_LOC(e, g) ezt nem tom hogy kell for((g).first((e)); (g).valid((e)); (g).next((e)))