static int metrics_hash_probe(struct metrics *m, const char *key, long len) { uint32_t h, k, n; int i; h = fast_hash(key,(int)len); k = h % MAX_METRICS; if (m->metrics[k] == NULL) { return k; } else if (strcmp(m->metrics[k]->name,key) == 0) { return k; } n = 1; for (i =0; i < 32; i++) { k = (h + n) % MAX_METRICS; if (m->metrics[k] == NULL) { return k; } else if (strcmp(m->metrics[k]->name,key) == 0) { return k; } n = n * 2; } return -1; }
size_t operator()(const T& p) const { #ifndef MOOST_FASTHASH_NO_ISPOD_CHECK BOOST_STATIC_ASSERT((boost::is_pod<T>::value)); #endif return fast_hash(&p, sizeof(T), TSeed); }
static int stats_hash_probe(struct stats_data *data, const char *key, int len) { uint32_t h, k, n; int i, probes = 1; h = fast_hash(key,len); k = h % COUNTER_TABLE_SIZE; if (data->ctr[k].ctr_allocation_status == ALLOCATION_STATUS_FREE) { return k; } else if (data->ctr[k].ctr_allocation_status == ALLOCATION_STATUS_ALLOCATED && data->ctr[k].ctr_key_len == len && memcmp(data->ctr[k].ctr_key,key,len) == 0) { return k; } n = 1; for (i =0; i < 32; i++) { k = (h + n) % COUNTER_TABLE_SIZE; probes++; if (data->ctr[k].ctr_allocation_status == ALLOCATION_STATUS_FREE) { return k; } else if (data->ctr[k].ctr_allocation_status == ALLOCATION_STATUS_ALLOCATED && data->ctr[k].ctr_key_len == len && memcmp(data->ctr[k].ctr_key,key,len) == 0) { return k; } n = n * 2; } return -1; }
inline operator size_t() const { return fast_hash(this, sizeof(*this)); }
// specialization for strings, override seed size_t operator()( const std::string& str, size_t seed) const { return fast_hash( str.data(), str.size(), seed ); }
// overrides default seed size_t operator()( const void* key, size_t size, size_t seed ) const { return fast_hash(key, size, seed); }