$search
00001 /* -*- C++ -*- 00002 * $Id: hash_map.hh 957 2005-03-07 16:01:20Z sjoyeux $ 00003 */ 00004 #ifndef UTILMM_HASH_MAP_HEADER 00005 # define UTILMM_HASH_MAP_HEADER 00006 #include "utilmm/config/config.h" 00007 00008 #include "utilmm/functional/utils.hh" 00009 00010 #include "utilmm/hash/bits/table.hh" 00011 00012 namespace utilmm { 00013 00029 template< typename Key, typename Data, class Hash = hash<Key>, 00030 class Equal = std::equal_to<Key> > 00031 class hash_map { 00032 public: 00034 typedef Key key_type; 00039 typedef Data data_type; 00047 typedef std::pair<Key const, Data> value_type; 00048 00049 private: 00050 typedef hash_toolbox::table<key_type, value_type, select_1st<value_type>, 00051 Hash, Equal> container_type; 00052 typedef typename container_type::value_arg value_arg; 00053 typedef typename container_type::key_arg key_arg; 00054 00055 container_type the_table; 00056 00057 public: 00062 typedef typename container_type::iterator iterator; 00067 typedef typename container_type::const_iterator const_iterator; 00068 00073 void swap(hash_map &other) { 00074 the_table.swap(other.the_table); 00075 } 00076 00081 size_t size() const { 00082 return the_table.size(); 00083 } 00088 size_t max_size() const { 00089 return the_table.max_size(); 00090 } 00091 00096 bool empty() const { 00097 return the_table.empty(); 00098 } 00099 00104 iterator begin() { 00105 return the_table.begin(); 00106 } 00111 iterator end() { 00112 return the_table.end(); 00113 } 00118 const_iterator begin() const { 00119 return the_table.begin(); 00120 } 00125 const_iterator end() const { 00126 return the_table.end(); 00127 } 00128 00139 iterator find(key_arg key) { 00140 return the_table.equal_range(key).first; 00141 } 00146 const_iterator find(key_arg key) const { 00147 return the_table.equal_range(key).first; 00148 } 00149 00162 std::pair<iterator, bool> insert(value_arg val) { 00163 return the_table.insert_unique(val); 00164 } 00165 00170 void erase(iterator const &first, iterator const &last) { 00171 the_table.erase(first, last); 00172 } 00179 void erase(iterator const &i) { 00180 if( end()!=i ) 00181 erase(i, i+1); 00182 } 00189 void erase(key_arg key) { 00190 erase(find(key)); 00191 } 00192 00197 void clear() { 00198 the_table.clear(); 00199 } 00200 00201 }; // class utilmm::hash_map<> 00202 00203 } // namespace utilmm 00204 00205 #endif // UTILMM_HASH_MAP_HEADER 00206