# HG changeset patch # User marci # Date 1084545778 0 # Node ID 75ad3e24425ed341cb0b0531d9321af0536f0f76 # Parent e59b0c363a9e4956f07d7df6d7781b2137264701 for_each_macros.h in include diff -r e59b0c363a9e -r 75ad3e24425e src/hugo/for_each_macros.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/hugo/for_each_macros.h Fri May 14 14:42:58 2004 +0000 @@ -0,0 +1,158 @@ +// -*- c++ -*- +#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 +// It loopFirst(const Graph& g) const { +// It e; g.first(e); return e; +// } + +// template +// It loopFirst(const Graph& g, const Node& v) const { +// It e; g.first(e, v); return e; +// } + +// template +// typename Graph::NodeIt loopFirstNode(const Graph& g) const { +// typename Graph::NodeIt e; g.first(e); return e; +// } +// template +// typename Graph::EdgeIt loopFirstEdge(const Graph& g) const { +// typename Graph::EdgeIt e; g.first(e); return e; +// } +// template +// typename Graph::OutEdgeIt +// loopFirstOutEdge(const Graph& g, const Node& n) const { +// typename Graph::OutEdgeIt e; g.first(e, n); return e; +// } +// template +// typename Graph::InEdgeIt +// loopFirstIn Edge(const Graph& g, const Node& n) const { +// typename Graph::InEdgeIt e; g.first(e, n); return e; +// } + +//FIXME ezt hogy a gorcsbe birja levezetni. Csak ugy leveszi a const-ot?? + template + It loopFirst(const It&, const Graph& g) { + It e; g.first(e); return e; + } + + template + It loopFirst(const It&, const Graph& g, const Node& v) { + It e; g.first(e, v); return e; + } + +// template +// typename Graph::NodeIt loopFirstNode(const Graph& g) const { +// typename Graph::NodeIt e; g.first(e); return e; +// } +// template +// typename Graph::EdgeIt loopFirstEdge(const Graph& g) const { +// typename Graph::EdgeIt e; g.first(e); return e; +// } +// template +// typename Graph::OutEdgeIt +// loopFirstOutEdge(const Graph& g, const Node& n) const { +// typename Graph::OutEdgeIt e; g.first(e, n); return e; +// } +// template +// typename Graph::InEdgeIt +// loopFirstIn Edge(const Graph& g, const Node& n) const { +// 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))) +// #define FOR_EACH_NODE_LOC(e, g) for((g).first((e)); (g).valid((e)); (g).next((e))) +// #define FOR_EACH_INEDGE_LOC(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e))) +// #define FOR_EACH_OUTEDGE_LOC(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e))) + + +} //namespace hugo + +#endif //FOR_EACH_MACROS_H diff -r e59b0c363a9e -r 75ad3e24425e src/work/Doxyfile --- a/src/work/Doxyfile Fri May 14 14:41:30 2004 +0000 +++ b/src/work/Doxyfile Fri May 14 14:42:58 2004 +0000 @@ -400,7 +400,8 @@ marci/bfs_dfs.h \ marci/bfs_dfs_misc.h \ jacint/graph_gen.h \ - marci/max_bipartite_matching.h + marci/max_bipartite_matching.h \ + marci/bipartite_graph_wrapper.h # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp diff -r e59b0c363a9e -r 75ad3e24425e src/work/marci/for_each_macros.h --- a/src/work/marci/for_each_macros.h Fri May 14 14:41:30 2004 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,158 +0,0 @@ -// -*- c++ -*- -#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 -// It loopFirst(const Graph& g) const { -// It e; g.first(e); return e; -// } - -// template -// It loopFirst(const Graph& g, const Node& v) const { -// It e; g.first(e, v); return e; -// } - -// template -// typename Graph::NodeIt loopFirstNode(const Graph& g) const { -// typename Graph::NodeIt e; g.first(e); return e; -// } -// template -// typename Graph::EdgeIt loopFirstEdge(const Graph& g) const { -// typename Graph::EdgeIt e; g.first(e); return e; -// } -// template -// typename Graph::OutEdgeIt -// loopFirstOutEdge(const Graph& g, const Node& n) const { -// typename Graph::OutEdgeIt e; g.first(e, n); return e; -// } -// template -// typename Graph::InEdgeIt -// loopFirstIn Edge(const Graph& g, const Node& n) const { -// typename Graph::InEdgeIt e; g.first(e, n); return e; -// } - -//FIXME ezt hogy a gorcsbe birja levezetni. Csak ugy leveszi a const-ot?? - template - It loopFirst(const It&, const Graph& g) { - It e; g.first(e); return e; - } - - template - It loopFirst(const It&, const Graph& g, const Node& v) { - It e; g.first(e, v); return e; - } - -// template -// typename Graph::NodeIt loopFirstNode(const Graph& g) const { -// typename Graph::NodeIt e; g.first(e); return e; -// } -// template -// typename Graph::EdgeIt loopFirstEdge(const Graph& g) const { -// typename Graph::EdgeIt e; g.first(e); return e; -// } -// template -// typename Graph::OutEdgeIt -// loopFirstOutEdge(const Graph& g, const Node& n) const { -// typename Graph::OutEdgeIt e; g.first(e, n); return e; -// } -// template -// typename Graph::InEdgeIt -// loopFirstIn Edge(const Graph& g, const Node& n) const { -// 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))) -// #define FOR_EACH_NODE_LOC(e, g) for((g).first((e)); (g).valid((e)); (g).next((e))) -// #define FOR_EACH_INEDGE_LOC(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e))) -// #define FOR_EACH_OUTEDGE_LOC(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e))) - - -} //namespace hugo - -#endif //FOR_EACH_MACROS_H