00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef _MPCL_UTIL_COLLECTION_MAP__
00027 #define _MPCL_UTIL_COLLECTION_MAP__
00028
00029 #include <map>
00030 #include "../../exceptions.hh"
00031
00032
00034 namespace mpcl
00035 {
00036
00038 namespace util
00039 {
00040
00042 namespace collection
00043 {
00044
00050 template < typename TKey ,
00051 typename TItem ,
00052 typename TCompare = std::less<TKey> ,
00053 typename TItemAllocator = std::allocator<TItem> >
00054 class TMap : public std::map<TKey, TItem, TCompare, TItemAllocator>
00055 {
00056
00057 public:
00058
00059 typedef
00060 typename std::map<TKey, TItem, TCompare, TItemAllocator>::const_iterator
00061 const_iterator;
00062
00063 typedef
00064 typename std::map<TKey, TItem, TCompare, TItemAllocator>::const_pointer
00065 const_pointer;
00066
00067 typedef
00068 typename std::map<TKey, TItem, TCompare, TItemAllocator>::const_reference
00069 const_reference;
00070
00071 typedef
00072 typename std::map<TKey, TItem, TCompare, TItemAllocator>::const_reverse_iterator
00073 const_reverse_iterator;
00074
00075 typedef
00076 typename std::map<TKey, TItem, TCompare, TItemAllocator>::difference_type
00077 difference_type;
00078
00079 typedef
00080 typename std::map<TKey, TItem, TCompare, TItemAllocator>::iterator
00081 iterator;
00082
00083 typedef
00084 typename std::map<TKey, TItem, TCompare, TItemAllocator>::key_compare
00085 key_compare;
00086
00087 typedef
00088 typename std::map<TKey, TItem, TCompare, TItemAllocator>::key_type
00089 key_type;
00090
00091 typedef
00092 typename std::map<TKey, TItem, TCompare, TItemAllocator>::mapped_type
00093 mapped_type;
00094
00095 typedef
00096 typename std::map<TKey, TItem, TCompare, TItemAllocator>::pointer
00097 pointer;
00098
00099 typedef
00100 typename std::map<TKey, TItem, TCompare, TItemAllocator>::reference
00101 reference;
00102
00103 typedef
00104 typename std::map<TKey, TItem, TCompare, TItemAllocator>::reverse_iterator
00105 reverse_iterator;
00106
00107 typedef
00108 typename std::map<TKey, TItem, TCompare, TItemAllocator>::size_type
00109 size_type;
00110
00111 typedef
00112 typename std::map<TKey, TItem, TCompare, TItemAllocator>::value_type
00113 value_type;
00114
00115
00116 public:
00117
00118
00119
00120
00121
00123 TMap (void) :
00124 std::map<TKey, TItem, TCompare, TItemAllocator>() {}
00125
00127 explicit TMap (const TCompare& rktCOMPARE) :
00128 std::map<TKey, TItem, TCompare, TItemAllocator> (rktCOMPARE) {}
00129
00131 template <typename InputIterator>
00132 TMap (InputIterator tBEGIN, InputIterator tEND) :
00133 std::map<TKey, TItem, TCompare, TItemAllocator> (tBEGIN, tEND) {}
00134
00136 template <typename InputIterator>
00137 TMap ( InputIterator tBEGIN ,
00138 InputIterator tEND ,
00139 const TCompare& rktCOMPARE ) :
00140 std::map<TKey, TItem, TCompare, TItemAllocator> (tBEGIN, tEND, rktCOMPARE) {}
00141
00143 TMap (const std::map<TKey, TItem, TCompare, TItemAllocator>& rktSOURCE_MAP) :
00144 std::map<TKey, TItem, TCompare, TItemAllocator> (rktSOURCE_MAP) {}
00145
00151 TMap& operator = (const TMap& rktSOURCE_MAP)
00152 {
00153 std::map<TKey, TItem, TCompare, TItemAllocator>::operator = (rktSOURCE_MAP);
00154 return *this;
00155 }
00156
00163 TMap& bind (const TKey& rktKEY, const TItem& rktITEM)
00164 {
00165 insert (std::make_pair (rktKEY, rktITEM));
00166 return *this;
00167 }
00168
00169
00170 public:
00171
00172
00173
00174
00175
00181 bool isBound (const key_type& rktKEY) const
00182 {
00183 return ( find (rktKEY) != end() );
00184 }
00185
00191 TItem& operator [] (const key_type& rktKEY)
00192 {
00193 iterator tIter = find (rktKEY);
00194
00195 if ( tIter == end() )
00196 {
00197 throw TConstraintException ("item not in map", __FILE__, __LINE__);
00198 }
00199 return tIter->second;
00200 }
00201
00207 const TItem& operator [] (const key_type& rktKEY) const
00208 {
00209 const_iterator ktIter = find (rktKEY);
00210
00211 if ( ktIter == end() )
00212 {
00213 throw TConstraintException ("item not in map", __FILE__, __LINE__);
00214 }
00215 return ktIter->second;
00216 }
00217
00218 };
00219
00220 }
00221
00222 }
00223
00224 }
00225
00226
00227 #endif // not _MPCL_UTIL_COLLECTION_MAP__