COIN-OR::LEMON - Graph Library

Ticket #53: graph_typedef_fix.patch

File graph_typedef_fix.patch, 9.0 KB (added by Balazs Dezso, 17 years ago)
  • lemon/graph_utils.h

    # HG changeset patch
    # User Balazs Dezso <deba@inf.elte.hu>
    # Date 1209031004 -7200
    # Node ID 2aa15d4385c3d9ed660e27cc9f9273eee516f5fd
    # Parent  7c39a090cfc31b530dd93726768eb7455c220350
    Different interface for dependent type GRAPH_TYPEDEFS and revert implementation
    
    diff -r 7c39a090cfc3 -r 2aa15d4385c3 lemon/graph_utils.h
    a b  
    4242  /// \addtogroup gutils
    4343  /// @{
    4444
    45   namespace _graph_utils_bits {
    46     template <typename Graph>
    47     struct Node { typedef typename Graph::Node type; };
    48 
    49     template <typename Graph>
    50     struct NodeIt { typedef typename Graph::NodeIt type; };
    51 
    52     template <typename Graph>
    53     struct Arc { typedef typename Graph::Arc type; };
    54 
    55     template <typename Graph>
    56     struct ArcIt { typedef typename Graph::ArcIt type; };
    57 
    58     template <typename Graph>
    59     struct Edge { typedef typename Graph::Edge type; };
    60 
    61     template <typename Graph>
    62     struct EdgeIt { typedef typename Graph::EdgeIt type; };
    63 
    64     template <typename Graph>
    65     struct OutArcIt { typedef typename Graph::OutArcIt type; };
    66 
    67     template <typename Graph>
    68     struct InArcIt { typedef typename Graph::InArcIt type; };
    69 
    70     template <typename Graph>
    71     struct IncEdgeIt { typedef typename Graph::IncEdgeIt type; };
    72 
    73     template <typename Graph>
    74     struct BoolNodeMap {
    75       typedef typename Graph::template NodeMap<bool> type;
    76     };
    77 
    78     template <typename Graph>
    79     struct IntNodeMap {
    80       typedef typename Graph::template NodeMap<int> type;
    81     };
    82 
    83     template <typename Graph>
    84     struct DoubleNodeMap {
    85       typedef typename Graph::template NodeMap<double> type;
    86     };
    87 
    88     template <typename Graph>
    89     struct BoolArcMap {
    90       typedef typename Graph::template ArcMap<bool> type;
    91     };
    92 
    93     template <typename Graph>
    94     struct IntArcMap {
    95       typedef typename Graph::template ArcMap<int> type;
    96     };
    97 
    98     template <typename Graph>
    99     struct DoubleArcMap {
    100       typedef typename Graph::template ArcMap<double> type;
    101     };
    102 
    103     template <typename Graph>
    104     struct BoolEdgeMap {
    105       typedef typename Graph::template EdgeMap<bool> type;
    106     };
    107 
    108     template <typename Graph>
    109     struct IntEdgeMap {
    110       typedef typename Graph::template EdgeMap<int> type;
    111     };
    112 
    113     template <typename Graph>
    114     struct DoubleEdgeMap {
    115       typedef typename Graph::template EdgeMap<double> type;
    116     };
    117 
    118    
    119   }
    120 
    12145  ///Creates convenience typedefs for the digraph types and iterators
    12246
    12347  ///This \c \#define creates convenience typedefs for the following types
    12448  ///of \c Digraph: \c Node,  \c NodeIt, \c Arc, \c ArcIt, \c InArcIt,
    12549  ///\c OutArcIt, \c BoolNodeMap, \c IntNodeMap, \c DoubleNodeMap,
    126   ///\c BoolArcMap, \c IntArcMap, \c DoubleArcMap.
     50  ///\c BoolArcMap, \c IntArcMap, \c DoubleArcMap.
     51  ///
     52  ///\note If the graph type is a dependent type, ie. the graph type depend
     53  ///on a template parameter, then use \c TEMPLATE_DIGRAPH_TYPEDEFS()
     54  ///macro.
    12755#define DIGRAPH_TYPEDEFS(Digraph)                                       \
    128   typedef typename ::lemon::_graph_utils_bits::                         \
    129   Node<Digraph>::type Node;                                             \
    130   typedef typename ::lemon::_graph_utils_bits::                         \
    131   NodeIt<Digraph>::type NodeIt;                                         \
    132   typedef typename ::lemon::_graph_utils_bits::                         \
    133   Arc<Digraph>::type Arc;                                               \
    134   typedef typename ::lemon::_graph_utils_bits::                         \
    135   ArcIt<Digraph>::type ArcIt;                                           \
    136   typedef typename ::lemon::_graph_utils_bits::                         \
    137   OutArcIt<Digraph>::type OutArcIt;                                     \
    138   typedef typename ::lemon::_graph_utils_bits::                         \
    139   InArcIt<Digraph>::type InArcIt;                                       \
    140   typedef typename ::lemon::_graph_utils_bits::                         \
    141   BoolNodeMap<Digraph>::type BoolNodeMap;                               \
    142   typedef typename ::lemon::_graph_utils_bits::                         \
    143   IntNodeMap<Digraph>::type IntNodeMap;                                 \
    144   typedef typename ::lemon::_graph_utils_bits::                         \
    145   DoubleNodeMap<Digraph>::type DoubleNodeMap;                           \
    146   typedef typename ::lemon::_graph_utils_bits::                         \
    147   BoolArcMap<Digraph>::type BoolArcMap;                                 \
    148   typedef typename ::lemon::_graph_utils_bits::                         \
    149   IntArcMap<Digraph>::type IntArcMap;                                   \
    150   typedef typename ::lemon::_graph_utils_bits::                         \
    151   DoubleArcMap<Digraph>::type DoubleArcMap
     56  typedef Digraph::Node Node;                                           \
     57  typedef Digraph::NodeIt NodeIt;                                       \
     58  typedef Digraph::Arc Arc;                                             \
     59  typedef Digraph::ArcIt ArcIt;                                         \
     60  typedef Digraph::InArcIt InArcIt;                                     \
     61  typedef Digraph::OutArcIt OutArcIt;                                   \
     62  typedef Digraph::NodeMap<bool> BoolNodeMap;                           \
     63  typedef Digraph::NodeMap<int> IntNodeMap;                             \
     64  typedef Digraph::NodeMap<double> DoubleNodeMap;                       \
     65  typedef Digraph::ArcMap<bool> BoolArcMap;                             \
     66  typedef Digraph::ArcMap<int> IntArcMap;                               \
     67  typedef Digraph::ArcMap<double> DoubleArcMap
    15268
     69  ///Creates convenience typedefs for the digraph types and iterators
    15370
     71  ///\see DIGRAPH_TYPEDEFS
     72  ///
     73  ///\note Use this macro, if the graph type is a dependent type,
     74  ///ie. the graph type depend on a template parameter.
     75#define TEMPLATE_DIGRAPH_TYPEDEFS(Digraph)                              \
     76  typedef typename Digraph::Node Node;                                  \
     77  typedef typename Digraph::NodeIt NodeIt;                              \
     78  typedef typename Digraph::Arc Arc;                                    \
     79  typedef typename Digraph::ArcIt ArcIt;                                \
     80  typedef typename Digraph::InArcIt InArcIt;                            \
     81  typedef typename Digraph::OutArcIt OutArcIt;                          \
     82  typedef typename Digraph::template NodeMap<bool> BoolNodeMap;         \
     83  typedef typename Digraph::template NodeMap<int> IntNodeMap;           \
     84  typedef typename Digraph::template NodeMap<double> DoubleNodeMap;     \
     85  typedef typename Digraph::template ArcMap<bool> BoolArcMap;           \
     86  typedef typename Digraph::template ArcMap<int> IntArcMap;             \
     87  typedef typename Digraph::template ArcMap<double> DoubleArcMap
     88 
    15489  ///Creates convenience typedefs for the graph types and iterators
    15590
    15691  ///This \c \#define creates the same convenience typedefs as defined
    15792  ///by \ref DIGRAPH_TYPEDEFS(Graph) and six more, namely it creates
    15893  ///\c Edge, \c EdgeIt, \c IncEdgeIt, \c BoolEdgeMap, \c IntEdgeMap,
    15994  ///\c DoubleEdgeMap.
     95  ///
     96  ///\note If the graph type is a dependent type, ie. the graph type depend
     97  ///on a template parameter, then use \c TEMPLATE_DIGRAPH_TYPEDEFS()
     98  ///macro.
    16099#define GRAPH_TYPEDEFS(Graph)                                           \
    161100  DIGRAPH_TYPEDEFS(Graph);                                              \
    162   typedef typename ::lemon::_graph_utils_bits::                         \
    163   Edge<Graph>::type Edge;                                               \
    164   typedef typename ::lemon::_graph_utils_bits::                         \
    165   EdgeIt<Graph>::type EdgeIt;                                           \
    166   typedef typename ::lemon::_graph_utils_bits::                         \
    167   IncEdgeIt<Graph>::type IncEdgeIt;                                     \
    168   typedef typename ::lemon::_graph_utils_bits::                         \
    169   BoolEdgeMap<Graph>::type BoolEdgeMap;                                 \
    170   typedef typename ::lemon::_graph_utils_bits::                         \
    171   IntEdgeMap<Graph>::type IntEdgeMap;                                   \
    172   typedef typename ::lemon::_graph_utils_bits::                         \
    173   DoubleEdgeMap<Graph>::type DoubleEdgeMap
     101  typedef Graph::Edge Edge;                                             \
     102  typedef Graph::EdgeIt EdgeIt;                                         \
     103  typedef Graph::IncEdgeIt IncEdgeIt;                                   \
     104  typedef Graph::EdgeMap<bool> BoolEdgeMap;                             \
     105  typedef Graph::EdgeMap<int> IntEdgeMap;                               \
     106  typedef Graph::EdgeMap<double> DoubleEdgeMap
    174107
     108  ///Creates convenience typedefs for the graph types and iterators
     109
     110  ///\see GRAPH_TYPEDEFS
     111  ///
     112  ///\note Use this macro, if the graph type is a dependent type,
     113  ///ie. the graph type depend on a template parameter.
     114#define TEMPLATE_GRAPH_TYPEDEFS(Graph)                                  \
     115  TEMPLATE_DIGRAPH_TYPEDEFS(Graph);                                     \
     116  typedef typename Graph::Edge Edge;                                    \
     117  typedef typename Graph::EdgeIt EdgeIt;                                \
     118  typedef typename Graph::IncEdgeIt IncEdgeIt;                          \
     119  typedef typename Graph::template EdgeMap<bool> BoolEdgeMap;           \
     120  typedef typename Graph::template EdgeMap<int> IntEdgeMap;             \
     121  typedef typename Graph::template EdgeMap<double> DoubleEdgeMap
    175122
    176123  /// \brief Function to count the items in the graph.
    177124  ///
     
    21612108    typedef typename ItemSetTraits<G, typename G::Arc>
    21622109    ::ItemNotifier::ObserverBase Parent;
    21632110
    2164     DIGRAPH_TYPEDEFS(G);
     2111    TEMPLATE_DIGRAPH_TYPEDEFS(G);
    21652112    typedef G Digraph;
    21662113
    21672114  protected:
     
    25982545  class ArcLookUp
    25992546  {
    26002547  public:
    2601     DIGRAPH_TYPEDEFS(G);
     2548    TEMPLATE_DIGRAPH_TYPEDEFS(G);
    26022549    typedef G Digraph;
    26032550
    26042551  protected:
     
    27152662    using ArcLookUp<G>::_left;
    27162663    using ArcLookUp<G>::_head;
    27172664
    2718     DIGRAPH_TYPEDEFS(G);
     2665    TEMPLATE_DIGRAPH_TYPEDEFS(G);
    27192666    typedef G Digraph;
    27202667   
    27212668    typename Digraph::template ArcMap<Arc> _next;
  • lemon/lgf_reader.h

    diff -r 7c39a090cfc3 -r 2aa15d4385c3 lemon/lgf_reader.h
    a b  
    302302  public:
    303303
    304304    typedef _Digraph Digraph;
    305     DIGRAPH_TYPEDEFS(Digraph);
     305    TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
    306306   
    307307  private:
    308308
  • lemon/lgf_writer.h

    diff -r 7c39a090cfc3 -r 2aa15d4385c3 lemon/lgf_writer.h
    a b  
    237237  public:
    238238
    239239    typedef _Digraph Digraph;
    240     DIGRAPH_TYPEDEFS(Digraph);
     240    TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
    241241   
    242242  private:
    243243