# HG changeset patch # User Balazs Dezso <deba@inf.elte.hu> # Date 1209031004 -7200 # Node ID 4e2581021300caee6e11d6f9797e5bce857f0a8c # Parent 7c39a090cfc31b530dd93726768eb7455c220350 Revert 356930927a71 and add TEMPLATE_GRAPH_TYPEDEFS instead (ticket #89) diff -r 7c39a090cfc3 -r 4e2581021300 lemon/graph_utils.h --- a/lemon/graph_utils.h Wed Apr 23 15:33:53 2008 +0200 +++ b/lemon/graph_utils.h Thu Apr 24 11:56:44 2008 +0200 @@ -42,136 +42,83 @@ /// \addtogroup gutils /// @{ - namespace _graph_utils_bits { - template <typename Graph> - struct Node { typedef typename Graph::Node type; }; - - template <typename Graph> - struct NodeIt { typedef typename Graph::NodeIt type; }; - - template <typename Graph> - struct Arc { typedef typename Graph::Arc type; }; - - template <typename Graph> - struct ArcIt { typedef typename Graph::ArcIt type; }; - - template <typename Graph> - struct Edge { typedef typename Graph::Edge type; }; - - template <typename Graph> - struct EdgeIt { typedef typename Graph::EdgeIt type; }; - - template <typename Graph> - struct OutArcIt { typedef typename Graph::OutArcIt type; }; - - template <typename Graph> - struct InArcIt { typedef typename Graph::InArcIt type; }; - - template <typename Graph> - struct IncEdgeIt { typedef typename Graph::IncEdgeIt type; }; - - template <typename Graph> - struct BoolNodeMap { - typedef typename Graph::template NodeMap<bool> type; - }; - - template <typename Graph> - struct IntNodeMap { - typedef typename Graph::template NodeMap<int> type; - }; - - template <typename Graph> - struct DoubleNodeMap { - typedef typename Graph::template NodeMap<double> type; - }; - - template <typename Graph> - struct BoolArcMap { - typedef typename Graph::template ArcMap<bool> type; - }; - - template <typename Graph> - struct IntArcMap { - typedef typename Graph::template ArcMap<int> type; - }; - - template <typename Graph> - struct DoubleArcMap { - typedef typename Graph::template ArcMap<double> type; - }; - - template <typename Graph> - struct BoolEdgeMap { - typedef typename Graph::template EdgeMap<bool> type; - }; - - template <typename Graph> - struct IntEdgeMap { - typedef typename Graph::template EdgeMap<int> type; - }; - - template <typename Graph> - struct DoubleEdgeMap { - typedef typename Graph::template EdgeMap<double> type; - }; - - - } - ///Creates convenience typedefs for the digraph types and iterators ///This \c \#define creates convenience typedefs for the following types ///of \c Digraph: \c Node, \c NodeIt, \c Arc, \c ArcIt, \c InArcIt, ///\c OutArcIt, \c BoolNodeMap, \c IntNodeMap, \c DoubleNodeMap, - ///\c BoolArcMap, \c IntArcMap, \c DoubleArcMap. + ///\c BoolArcMap, \c IntArcMap, \c DoubleArcMap. + /// + ///\note If the graph type is a dependent type, ie. the graph type depend + ///on a template parameter, then use \c TEMPLATE_DIGRAPH_TYPEDEFS() + ///macro. #define DIGRAPH_TYPEDEFS(Digraph) \ - typedef typename ::lemon::_graph_utils_bits:: \ - Node<Digraph>::type Node; \ - typedef typename ::lemon::_graph_utils_bits:: \ - NodeIt<Digraph>::type NodeIt; \ - typedef typename ::lemon::_graph_utils_bits:: \ - Arc<Digraph>::type Arc; \ - typedef typename ::lemon::_graph_utils_bits:: \ - ArcIt<Digraph>::type ArcIt; \ - typedef typename ::lemon::_graph_utils_bits:: \ - OutArcIt<Digraph>::type OutArcIt; \ - typedef typename ::lemon::_graph_utils_bits:: \ - InArcIt<Digraph>::type InArcIt; \ - typedef typename ::lemon::_graph_utils_bits:: \ - BoolNodeMap<Digraph>::type BoolNodeMap; \ - typedef typename ::lemon::_graph_utils_bits:: \ - IntNodeMap<Digraph>::type IntNodeMap; \ - typedef typename ::lemon::_graph_utils_bits:: \ - DoubleNodeMap<Digraph>::type DoubleNodeMap; \ - typedef typename ::lemon::_graph_utils_bits:: \ - BoolArcMap<Digraph>::type BoolArcMap; \ - typedef typename ::lemon::_graph_utils_bits:: \ - IntArcMap<Digraph>::type IntArcMap; \ - typedef typename ::lemon::_graph_utils_bits:: \ - DoubleArcMap<Digraph>::type DoubleArcMap + typedef Digraph::Node Node; \ + typedef Digraph::NodeIt NodeIt; \ + typedef Digraph::Arc Arc; \ + typedef Digraph::ArcIt ArcIt; \ + typedef Digraph::InArcIt InArcIt; \ + typedef Digraph::OutArcIt OutArcIt; \ + typedef Digraph::NodeMap<bool> BoolNodeMap; \ + typedef Digraph::NodeMap<int> IntNodeMap; \ + typedef Digraph::NodeMap<double> DoubleNodeMap; \ + typedef Digraph::ArcMap<bool> BoolArcMap; \ + typedef Digraph::ArcMap<int> IntArcMap; \ + typedef Digraph::ArcMap<double> DoubleArcMap + ///Creates convenience typedefs for the digraph types and iterators + ///\see DIGRAPH_TYPEDEFS + /// + ///\note Use this macro, if the graph type is a dependent type, + ///ie. the graph type depend on a template parameter. +#define TEMPLATE_DIGRAPH_TYPEDEFS(Digraph) \ + typedef typename Digraph::Node Node; \ + typedef typename Digraph::NodeIt NodeIt; \ + typedef typename Digraph::Arc Arc; \ + typedef typename Digraph::ArcIt ArcIt; \ + typedef typename Digraph::InArcIt InArcIt; \ + typedef typename Digraph::OutArcIt OutArcIt; \ + typedef typename Digraph::template NodeMap<bool> BoolNodeMap; \ + typedef typename Digraph::template NodeMap<int> IntNodeMap; \ + typedef typename Digraph::template NodeMap<double> DoubleNodeMap; \ + typedef typename Digraph::template ArcMap<bool> BoolArcMap; \ + typedef typename Digraph::template ArcMap<int> IntArcMap; \ + typedef typename Digraph::template ArcMap<double> DoubleArcMap + ///Creates convenience typedefs for the graph types and iterators ///This \c \#define creates the same convenience typedefs as defined ///by \ref DIGRAPH_TYPEDEFS(Graph) and six more, namely it creates ///\c Edge, \c EdgeIt, \c IncEdgeIt, \c BoolEdgeMap, \c IntEdgeMap, ///\c DoubleEdgeMap. + /// + ///\note If the graph type is a dependent type, ie. the graph type depend + ///on a template parameter, then use \c TEMPLATE_DIGRAPH_TYPEDEFS() + ///macro. #define GRAPH_TYPEDEFS(Graph) \ DIGRAPH_TYPEDEFS(Graph); \ - typedef typename ::lemon::_graph_utils_bits:: \ - Edge<Graph>::type Edge; \ - typedef typename ::lemon::_graph_utils_bits:: \ - EdgeIt<Graph>::type EdgeIt; \ - typedef typename ::lemon::_graph_utils_bits:: \ - IncEdgeIt<Graph>::type IncEdgeIt; \ - typedef typename ::lemon::_graph_utils_bits:: \ - BoolEdgeMap<Graph>::type BoolEdgeMap; \ - typedef typename ::lemon::_graph_utils_bits:: \ - IntEdgeMap<Graph>::type IntEdgeMap; \ - typedef typename ::lemon::_graph_utils_bits:: \ - DoubleEdgeMap<Graph>::type DoubleEdgeMap + typedef Graph::Edge Edge; \ + typedef Graph::EdgeIt EdgeIt; \ + typedef Graph::IncEdgeIt IncEdgeIt; \ + typedef Graph::EdgeMap<bool> BoolEdgeMap; \ + typedef Graph::EdgeMap<int> IntEdgeMap; \ + typedef Graph::EdgeMap<double> DoubleEdgeMap + ///Creates convenience typedefs for the graph types and iterators + + ///\see GRAPH_TYPEDEFS + /// + ///\note Use this macro, if the graph type is a dependent type, + ///ie. the graph type depend on a template parameter. +#define TEMPLATE_GRAPH_TYPEDEFS(Graph) \ + TEMPLATE_DIGRAPH_TYPEDEFS(Graph); \ + typedef typename Graph::Edge Edge; \ + typedef typename Graph::EdgeIt EdgeIt; \ + typedef typename Graph::IncEdgeIt IncEdgeIt; \ + typedef typename Graph::template EdgeMap<bool> BoolEdgeMap; \ + typedef typename Graph::template EdgeMap<int> IntEdgeMap; \ + typedef typename Graph::template EdgeMap<double> DoubleEdgeMap /// \brief Function to count the items in the graph. /// @@ -2161,7 +2108,7 @@ typedef typename ItemSetTraits<G, typename G::Arc> ::ItemNotifier::ObserverBase Parent; - DIGRAPH_TYPEDEFS(G); + TEMPLATE_DIGRAPH_TYPEDEFS(G); typedef G Digraph; protected: @@ -2598,7 +2545,7 @@ class ArcLookUp { public: - DIGRAPH_TYPEDEFS(G); + TEMPLATE_DIGRAPH_TYPEDEFS(G); typedef G Digraph; protected: @@ -2715,7 +2662,7 @@ using ArcLookUp<G>::_left; using ArcLookUp<G>::_head; - DIGRAPH_TYPEDEFS(G); + TEMPLATE_DIGRAPH_TYPEDEFS(G); typedef G Digraph; typename Digraph::template ArcMap<Arc> _next; diff -r 7c39a090cfc3 -r 4e2581021300 lemon/lgf_reader.h --- a/lemon/lgf_reader.h Wed Apr 23 15:33:53 2008 +0200 +++ b/lemon/lgf_reader.h Thu Apr 24 11:56:44 2008 +0200 @@ -302,7 +302,7 @@ public: typedef _Digraph Digraph; - DIGRAPH_TYPEDEFS(Digraph); + TEMPLATE_DIGRAPH_TYPEDEFS(Digraph); private: diff -r 7c39a090cfc3 -r 4e2581021300 lemon/lgf_writer.h --- a/lemon/lgf_writer.h Wed Apr 23 15:33:53 2008 +0200 +++ b/lemon/lgf_writer.h Thu Apr 24 11:56:44 2008 +0200 @@ -237,7 +237,7 @@ public: typedef _Digraph Digraph; - DIGRAPH_TYPEDEFS(Digraph); + TEMPLATE_DIGRAPH_TYPEDEFS(Digraph); private: