V value_;
bool free_b_;
- Hash_table_entry() {
+ Hash_table_entry () {
free_b_ = true;
}
Hash_table_entry (K s, V v)
A hash table of prime size.
We use quadratic probing.
- */
+
+ DEPRECATED. Use either SCM (preferred) or STL
+*/
template<class K, class V>
class Fixed_size_hash_table
{
Fixed_size_hash_table (int size_idx)
{
size_idx_ = size_idx;
- int sz = prime_list(size_idx_);
+ int sz = prime_list (size_idx_);
dict_arr_.set_size (sz);
}
/// find #s#, or find first empty entry corresponding to #s#
- int lookup (K s, unsigned int initial_hash)
+ int lookup (K s, unsigned int initial_hash)
{
int sz =dict_arr_.size ();
- int i = initial_hash % sz;
+ initial_hash = initial_hash % sz;
+ int i;
int j = 0;
while (j <= sz/2) {
+ i = (initial_hash + j*j) % sz;
+
if (dict_arr_[i].free_b_)
return i;
return i;
j++;
- i = (i + j*j) % sz;
}
{
Fixed_size_hash_table<K,V> *f = new Fixed_size_hash_table<K,V> (fixed_p_->size_idx_ +1);
- for (int i=0; i < fixed_p_->dict_arr_.size(); i++)
+ for (int i=0; i < fixed_p_->dict_arr_.size (); i++)
{
if (fixed_p_->dict_arr_[i].free_b_)
continue;
K nm (fixed_p_->dict_arr_[i].key_);
- unsigned int h = (*hash_func_)(nm);
+ unsigned int h = (*hash_func_) (nm);
int nl = f->lookup (nm, h);
f->dict_arr_[nl] = Hash_table_entry<K,V> (nm, fixed_p_->dict_arr_[i].value_);
}
bool elem_b (K s) const
{
- int l = fixed_p_->lookup (s, (*hash_func_)(s));
+ int l = fixed_p_->lookup (s, (*hash_func_) (s));
return (l >= 0 && !fixed_p_->dict_arr_[l].free_b_) ;
}
/**
- Find and return element. If #s# is not in the table, create an entry in the table, and init
- */
+ Find and return element. If #s# is not in the table, create an
+ entry in the table, and init */
V& elem (K s)
{
int l;
- unsigned int h = (*hash_func_)(s);
+ unsigned int h = (*hash_func_) (s);
while ((l= fixed_p_->lookup (s,h)) <0)
{
enlarge ();
}
bool try_retrieve (K k, V *v)
{
- int l = fixed_p_->lookup (k, (*hash_func_)(k));
+ int l = fixed_p_->lookup (k, (*hash_func_) (k));
if (l < 0 || fixed_p_->dict_arr_[l].free_b_)
return false;
else
V remove (K s)
{
- return fixed_p_->remove (s, (*hash_func_)(s));
+ return fixed_p_->remove (s, (*hash_func_) (s));
}
friend class Hash_table_iter<K,V>;
public:
- unsigned int (*hash_func_)(K);
+ unsigned int (*hash_func_) (K);
};