21 #ifndef _cvc3__include__cdmap_h_
22 #define _cvc3__include__cdmap_h_
46 template <
class Key,
class Data,
class HashFcn = std::hash<Key> >
class CDMap;
48 template <
class Key,
class Data,
class HashFcn = std::hash<Key> >
73 d_cdmap->d_trash.push_back(
this);
87 const Key& key,
const Data& data,
int scope = -1)
98 d_prev->d_next = first->d_prev =
this;
102 void set(
const Data& data,
int scope=-1) {
106 const Data&
get()
const {
return d_data; }
107 operator Data() {
return get(); }
127 template <
class Key,
class Data,
class HashFcn>
128 class CDMap:
public ContextObj {
133 std::vector<CDOmap<Key, Data, HashFcn>*>
d_trash;
181 if(i ==
d_map.end()) {
190 void insert(
const Key& k,
const Data& d,
int scope = -1) {
193 if(i ==
d_map.end()) {
198 (*i).second->
set(d, scope);
205 class iterator :
public std::iterator<std::input_iterator_tag,std::pair<const Key, Data>,std::ptrdiff_t> {
226 const std::pair<const Key, CDOmap<Key, Data, HashFcn>*>& p(*
d_it);
227 return std::pair<const Key, Data>(p.first, *p.second);
241 const std::pair<const Key, Data>*
d_pair;
258 iterator
end()
const {
return iterator(
d_map.end()); }
276 return std::pair<const Key, Data>(
d_it->getKey(),
d_it->get());
284 const std::pair<const Key, Data>*
d_pair;
301 orderedIterator
orderedEnd()
const {
return orderedIterator(NULL); }
303 iterator
find(
const Key& k)
const {
return iterator(
d_map.find(k)); }