ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
Gluco2::Map< K, D, H, E > Class Template Reference

#include <Map.h>

Classes

struct  Pair
 

Public Member Functions

 Map ()
 
 Map (const H &h, const E &e)
 
 ~Map ()
 
const D & operator[] (const K &k) const
 
D & operator[] (const K &k)
 
void insert (const K &k, const D &d)
 
bool peek (const K &k, D &d) const
 
bool has (const K &k) const
 
void remove (const K &k)
 
void clear ()
 
int elems () const
 
int bucket_count () const
 
void moveTo (Map &other)
 
const vec< Pair > & bucket (int i) const
 

Detailed Description

template<class K, class D, class H = Hash<K>, class E = Equal<K>>
class Gluco2::Map< K, D, H, E >

Definition at line 58 of file Map.h.

Constructor & Destructor Documentation

◆ Map() [1/2]

template<class K, class D, class H = Hash<K>, class E = Equal<K>>
Gluco2::Map< K, D, H, E >::Map ( )
inline

Definition at line 104 of file Map.h.

104: table(NULL), cap(0), size(0) {}

◆ Map() [2/2]

template<class K, class D, class H = Hash<K>, class E = Equal<K>>
Gluco2::Map< K, D, H, E >::Map ( const H & h,
const E & e )
inline

Definition at line 105 of file Map.h.

105: hash(h), equals(e), table(NULL), cap(0), size(0){}

◆ ~Map()

template<class K, class D, class H = Hash<K>, class E = Equal<K>>
Gluco2::Map< K, D, H, E >::~Map ( )
inline

Definition at line 106 of file Map.h.

106{ delete [] table; }

Member Function Documentation

◆ bucket()

template<class K, class D, class H = Hash<K>, class E = Equal<K>>
const vec< Pair > & Gluco2::Map< K, D, H, E >::bucket ( int i) const
inline

Definition at line 189 of file Map.h.

189{ return table[i]; }

◆ bucket_count()

template<class K, class D, class H = Hash<K>, class E = Equal<K>>
int Gluco2::Map< K, D, H, E >::bucket_count ( ) const
inline

Definition at line 174 of file Map.h.

174{ return cap; }

◆ clear()

template<class K, class D, class H = Hash<K>, class E = Equal<K>>
void Gluco2::Map< K, D, H, E >::clear ( )
inline

Definition at line 167 of file Map.h.

167 {
168 cap = size = 0;
169 delete [] table;
170 table = NULL;
171 }

◆ elems()

template<class K, class D, class H = Hash<K>, class E = Equal<K>>
int Gluco2::Map< K, D, H, E >::elems ( ) const
inline

Definition at line 173 of file Map.h.

173{ return size; }

◆ has()

template<class K, class D, class H = Hash<K>, class E = Equal<K>>
bool Gluco2::Map< K, D, H, E >::has ( const K & k) const
inline

Definition at line 146 of file Map.h.

146 {
147 if (size == 0) return false;
148 const vec<Pair>& ps = table[index(k)];
149 for (int i = 0; i < ps.size(); i++)
150 if (equals(ps[i].key, k))
151 return true;
152 return false;
153 }

◆ insert()

template<class K, class D, class H = Hash<K>, class E = Equal<K>>
void Gluco2::Map< K, D, H, E >::insert ( const K & k,
const D & d )
inline

Definition at line 135 of file Map.h.

135{ if (checkCap(size+1)) rehash(); _insert(k, d); size++; }

◆ moveTo()

template<class K, class D, class H = Hash<K>, class E = Equal<K>>
void Gluco2::Map< K, D, H, E >::moveTo ( Map< K, D, H, E > & other)
inline

Definition at line 177 of file Map.h.

177 {
178 delete [] other.table;
179
180 other.table = table;
181 other.cap = cap;
182 other.size = size;
183
184 table = NULL;
185 size = cap = 0;
186 }

◆ operator[]() [1/2]

template<class K, class D, class H = Hash<K>, class E = Equal<K>>
D & Gluco2::Map< K, D, H, E >::operator[] ( const K & k)
inline

Definition at line 122 of file Map.h.

123 {
124 assert(size != 0);
125 D* res = NULL;
126 vec<Pair>& ps = table[index(k)];
127 for (int i = 0; i < ps.size(); i++)
128 if (equals(ps[i].key, k))
129 res = &ps[i].data;
130 assert(res != NULL);
131 return *res;
132 }
#define assert(ex)
Definition util_old.h:213

◆ operator[]() [2/2]

template<class K, class D, class H = Hash<K>, class E = Equal<K>>
const D & Gluco2::Map< K, D, H, E >::operator[] ( const K & k) const
inline

Definition at line 109 of file Map.h.

110 {
111 assert(size != 0);
112 const D* res = NULL;
113 const vec<Pair>& ps = table[index(k)];
114 for (int i = 0; i < ps.size(); i++)
115 if (equals(ps[i].key, k))
116 res = &ps[i].data;
117 assert(res != NULL);
118 return *res;
119 }

◆ peek()

template<class K, class D, class H = Hash<K>, class E = Equal<K>>
bool Gluco2::Map< K, D, H, E >::peek ( const K & k,
D & d ) const
inline

Definition at line 136 of file Map.h.

136 {
137 if (size == 0) return false;
138 const vec<Pair>& ps = table[index(k)];
139 for (int i = 0; i < ps.size(); i++)
140 if (equals(ps[i].key, k)){
141 d = ps[i].data;
142 return true; }
143 return false;
144 }

◆ remove()

template<class K, class D, class H = Hash<K>, class E = Equal<K>>
void Gluco2::Map< K, D, H, E >::remove ( const K & k)
inline

Definition at line 156 of file Map.h.

156 {
157 assert(table != NULL);
158 vec<Pair>& ps = table[index(k)];
159 int j = 0;
160 for (; j < ps.size() && !equals(ps[j].key, k); j++);
161 assert(j < ps.size());
162 ps[j] = ps.last();
163 ps.pop();
164 size--;
165 }

The documentation for this class was generated from the following file: