|
Go to the documentation of this file.
19 #ifndef _DATAHASHTABLE_H_
20 #define _DATAHASHTABLE_H_
28 #define HASHTABLE_FILLFACTOR 0.7
75 template < class HashItem, class Info >
84 template < class ElemHashItem, class ElemInfo >
100 typedef Element< HashItem, Info > Elem;
129 bool has( const HashItem& h) const
131 return index(h) >= 0;
139 const Info* get( const HashItem& h) const
143 return (i >= 0) ? & m_elem[i].info : 0;
165 void add( const HashItem& h, const Info& info)
172 assert(m_used < m_elem.size());
193 void remove( const HashItem& h)
204 for( int i = 0; i < m_elem.size(); i++)
214 void reMax ( int newSize = -1, int newHashSize = 0)
224 for( int i = 0; i < save. size(); i++)
226 add(save[i].item, save[i].info);
236 #ifdef ENABLE_CONSISTENCY_CHECKS
239 for( int i = 0; i < m_elem.size(); i++)
251 return m_elem.isConsistent();
275 int (*hashfun)( const HashItem*),
378 int oldsize = m_elem.size();
384 while( left <= right)
386 middle = (left + right) / 2;
388 if( oldsize < primes[middle])
392 else if( oldsize > primes[middle])
398 assert(oldsize == primes[middle]);
399 return primes[middle + 1];
403 assert(left == right + 1);
417 int maxsize = m_elem.size();
420 for (i = 2; i < maxsize; i++)
423 for (i = 2; i < maxsize; ++i)
427 for ( int j = i; j < maxsize; j += i)
430 if ( m_elem.size() % i != 0)
434 if (hashsize > maxsize)
460 assert( m_elem.size() > 0);
462 int i = (*m_hashfun)(&h) % m_elem.size();
483 #endif // _DATAHASHTABLE_H_
|