lemon/bits/default_map.h
author deba
Wed, 01 Mar 2006 10:25:30 +0000
changeset 1991 d7442141d9ef
parent 1966 65765fb5eb2f
child 1996 5dc13b93f8b4
permissions -rw-r--r--
The graph adadptors can be alteration observed.
In most cases it uses the adapted graph alteration notifiers.
Only special case is now the UndirGraphAdaptor, where
we have to proxy the signals from the graph.

The SubBidirGraphAdaptor is removed, because it doest not
gives more feature than the EdgeSubGraphAdaptor<UndirGraphAdaptor<Graph>>.

The ResGraphAdaptor is based on this composition.
     1 /* -*- C++ -*-
     2  *
     3  * This file is a part of LEMON, a generic C++ optimization library
     4  *
     5  * Copyright (C) 2003-2006
     6  * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
     7  * (Egervary Research Group on Combinatorial Optimization, EGRES).
     8  *
     9  * Permission to use, modify and distribute this software is granted
    10  * provided that this copyright notice appears in all copies. For
    11  * precise terms see the accompanying LICENSE file.
    12  *
    13  * This software is provided "AS IS" with no warranty of any kind,
    14  * express or implied, and with no claim as to its suitability for any
    15  * purpose.
    16  *
    17  */
    18 
    19 #ifndef LEMON_DEFAULT_MAP_H
    20 #define LEMON_DEFAULT_MAP_H
    21 
    22 
    23 #include <lemon/bits/array_map.h>
    24 #include <lemon/bits/vector_map.h>
    25 #include <lemon/bits/static_map.h>
    26 
    27 ///\ingroup graphmapfactory
    28 ///\file
    29 ///\brief Graph maps that construct and destruct
    30 ///their elements dynamically.
    31 
    32 namespace lemon {
    33   
    34   
    35 #ifndef _GLIBCXX_DEBUG
    36 
    37   template <typename _Graph, typename _Item, typename _Value>
    38   struct DefaultMapSelector {
    39     typedef ArrayMap<_Graph, _Item, _Value> Map;
    40   };
    41 
    42 #else
    43 
    44   template <typename _Graph, typename _Item, typename _Value>
    45   struct DefaultMapSelector {
    46     typedef VectorMap<_Graph, _Item, _Value> Map;
    47   };
    48 
    49 #endif
    50 
    51   // bool
    52   template <typename _Graph, typename _Item>
    53   struct DefaultMapSelector<_Graph, _Item, bool> {
    54     typedef VectorMap<_Graph, _Item, bool> Map;
    55   };
    56 
    57   // char
    58   template <typename _Graph, typename _Item>
    59   struct DefaultMapSelector<_Graph, _Item, char> {
    60     typedef VectorMap<_Graph, _Item, char> Map;
    61   };
    62 
    63   template <typename _Graph, typename _Item>
    64   struct DefaultMapSelector<_Graph, _Item, signed char> {
    65     typedef VectorMap<_Graph, _Item, signed char> Map;
    66   };
    67 
    68   template <typename _Graph, typename _Item>
    69   struct DefaultMapSelector<_Graph, _Item, unsigned char> {
    70     typedef VectorMap<_Graph, _Item, unsigned char> Map;
    71   };
    72 
    73 
    74   // int
    75   template <typename _Graph, typename _Item>
    76   struct DefaultMapSelector<_Graph, _Item, signed int> {
    77     typedef VectorMap<_Graph, _Item, signed int> Map;
    78   };
    79 
    80   template <typename _Graph, typename _Item>
    81   struct DefaultMapSelector<_Graph, _Item, unsigned int> {
    82     typedef VectorMap<_Graph, _Item, unsigned int> Map;
    83   };
    84 
    85 
    86   // short
    87   template <typename _Graph, typename _Item>
    88   struct DefaultMapSelector<_Graph, _Item, signed short> {
    89     typedef VectorMap<_Graph, _Item, signed short> Map;
    90   };
    91 
    92   template <typename _Graph, typename _Item>
    93   struct DefaultMapSelector<_Graph, _Item, unsigned short> {
    94     typedef VectorMap<_Graph, _Item, unsigned short> Map;
    95   };
    96 
    97 
    98   // long
    99   template <typename _Graph, typename _Item>
   100   struct DefaultMapSelector<_Graph, _Item, signed long> {
   101     typedef VectorMap<_Graph, _Item, signed long> Map;
   102   };
   103 
   104   template <typename _Graph, typename _Item>
   105   struct DefaultMapSelector<_Graph, _Item, unsigned long> {
   106     typedef VectorMap<_Graph, _Item, unsigned long> Map;
   107   };
   108 
   109 
   110 #ifndef __STRICT_ANSI__
   111 
   112   // long long
   113   template <typename _Graph, typename _Item>
   114   struct DefaultMapSelector<_Graph, _Item, signed long long> {
   115     typedef VectorMap<_Graph, _Item, signed long long> Map;
   116   };
   117 
   118   template <typename _Graph, typename _Item>
   119   struct DefaultMapSelector<_Graph, _Item, unsigned long long> {
   120     typedef VectorMap<_Graph, _Item, unsigned long long> Map;
   121   };
   122 
   123 #endif
   124 
   125 
   126   // float
   127   template <typename _Graph, typename _Item>
   128   struct DefaultMapSelector<_Graph, _Item, float> {
   129     typedef VectorMap<_Graph, _Item, float> Map;
   130   };
   131 
   132 
   133   // double
   134   template <typename _Graph, typename _Item>
   135   struct DefaultMapSelector<_Graph, _Item, double> {
   136     typedef VectorMap<_Graph, _Item,  double> Map;
   137   };
   138 
   139 
   140   // long double
   141   template <typename _Graph, typename _Item>
   142   struct DefaultMapSelector<_Graph, _Item, long double> {
   143     typedef VectorMap<_Graph, _Item, long double> Map;
   144   };
   145 
   146 
   147   // pointer
   148   template <typename _Graph, typename _Item, typename _Ptr>
   149   struct DefaultMapSelector<_Graph, _Item, _Ptr*> {
   150     typedef VectorMap<_Graph, _Item, _Ptr*> Map;
   151   };
   152 
   153   /// \e
   154   template <
   155     typename _Graph, 
   156     typename _Item,
   157     typename _Value>
   158   class DefaultMap 
   159     : public DefaultMapSelector<_Graph, _Item, _Value>::Map {
   160   public:
   161     typedef typename DefaultMapSelector<_Graph, _Item, _Value>::Map Parent;
   162     typedef DefaultMap<_Graph, _Item, _Value> Map;
   163     
   164     typedef typename Parent::Graph Graph;
   165     typedef typename Parent::Value Value;
   166 
   167     DefaultMap(const Graph& _g) : Parent(_g) {}
   168     DefaultMap(const Graph& _g, const Value& _v) : Parent(_g, _v) {}
   169 
   170   };
   171 
   172 }
   173 
   174 #endif