src/hugo/skeletons/maps.h
author deba
Mon, 20 Sep 2004 22:57:48 +0000
changeset 891 74589d20dbc3
parent 809 ea5ae5266285
child 906 17f31d280385
permissions -rw-r--r--
template<typename CMap> Map(const CMap&) like constructors and
assigns are removed.
     1 // -*- c++ -*-
     2 #ifndef HUGO_MAPSKELETON_H
     3 #define HUGO_MAPSKELETON_H
     4 
     5 ///\ingroup skeletons
     6 ///\file
     7 ///\brief Map concepts checking classes for testing and documenting.
     8 
     9 namespace hugo {
    10 
    11   namespace skeleton {
    12   
    13     /// \addtogroup skeletons
    14     /// @{
    15 
    16     /// Readable map concept
    17     template<typename K, typename T>
    18     class ReadMap
    19     {
    20     public:
    21       /// Map's key type.
    22       typedef K KeyType;    
    23       /// Map's value type. (The type of objects associated with the keys).
    24       typedef T ValueType;
    25 
    26       /// Returns the value associated with a key.
    27       ValueType operator[](const KeyType &k) const {return ValueType();}
    28 
    29       ///Default constructor
    30       ReadMap() {}
    31     };
    32 
    33 
    34     /// Writable map concept
    35     template<typename K, typename T>
    36     class WriteMap
    37     {
    38     public:
    39       /// Map's key type.
    40       typedef K KeyType;    
    41       /// Map's value type. (The type of objects associated with the keys).
    42       typedef T ValueType;
    43 
    44       /// Sets the value associated with a key.
    45       void set(const KeyType &k,const ValueType &t) {}
    46 
    47       ///Default constructor
    48       WriteMap() {}
    49     };
    50 
    51     ///Read/Writable map concept
    52     template<typename K, typename T>
    53     class ReadWriteMap : public ReadMap<K,T>,
    54 			    public WriteMap<K,T>
    55     {
    56     public:
    57       /// Map's key type.
    58       typedef K KeyType;    
    59       /// Map's value type. (The type of objects associated with the keys).
    60       typedef T ValueType;
    61 
    62       /// Returns the value associated with a key.
    63       ValueType operator[](const KeyType &k) const {return ValueType();}
    64       /// Sets the value associated with a key.
    65       void set(const KeyType &k,const ValueType &t) {}
    66 
    67       ///Default constructor
    68       ReadWriteMap() {}
    69     };
    70   
    71   
    72     ///Dereferable map concept
    73     template<typename K, typename T>
    74     class ReferenceMap : public ReadWriteMap<K,T>
    75     {
    76     public:
    77       /// Map's key type.
    78       typedef K KeyType;    
    79       /// Map's value type. (The type of objects associated with the keys).
    80       typedef T ValueType;
    81 
    82     protected:
    83       ValueType tmp;
    84     public:
    85       typedef ValueType& ReferenceType;
    86       /// Map's const reference type.
    87       typedef const ValueType& ConstReferenceType;
    88 
    89       ///Returns a reference to the value associated to a key.
    90       ReferenceType operator[](const KeyType &i) { return tmp; }
    91       ///Returns a const reference to the value associated to a key.
    92       ConstReferenceType operator[](const KeyType &i) const
    93       { return tmp; }
    94       /// Sets the value associated with a key.
    95       void set(const KeyType &k,const ValueType &t) { operator[](k)=t; }
    96 
    97       ///Default constructor
    98       ReferenceMap() {}
    99     };
   100 
   101     // @}
   102 
   103   } //namespace skeleton
   104 } //namespace hugo
   105 #endif // HUGO_MAPSKELETON_H