data_t* sstdata_get(sst_data_t* sstdata,const char* key) { unsigned long hash_value; if (sstdata->key_num == 0) { return NULL; } hash_value = PMurHash32(0,key,strlen(key)); if (hash_value <= sstdata->smallest_key->hash_value && hash_value >= sstdata->bigest_key->hash_value) { return NULL; } return _sstdata_binarysearch(sstdata,hash_value,key); }
void* create_data(const char* key, int key_len, const char* value, int value_len, char type) { data_t* data = (data_t*)xmalloc(sizeof(data_t) + key_len + value_len + 2); memset(data,0,sizeof(*data)); data->type = type; data->key_len = key_len; data->value_len = value_len; data->key = data->addr + 1; data->value = data->addr + 2 + data->key_len; memcpy(data->key,key,data->key_len); memcpy(data->value,value,data->value_len); data->addr[data->key_len + 1] = 0; data->addr[data->key_len + data->value_len + 2] = 0; data->version = _time64(NULL); data->hash_value = PMurHash32(0,data->key,data->key_len); return data; }
struct data_item* buffer_getdata( struct buffer *b ) { int len; struct data_item* data; len = buffer_getint(b); data = xmalloc(sizeof(struct data_item) + len + 2); data->key_len = buffer_getint(b); data->value_len = buffer_getint(b); data->type = buffer_getchar(b); data->version = buffer_getlong(b); data->key = data->addr + 1; data->value = data->addr + 2 + data->key_len; memcpy(data->key,buffer_getnstr(b,data->key_len),data->key_len); memcpy(data->value,buffer_getnstr(b,data->value_len),data->value_len); data->addr[data->key_len + 1] = 0; data->addr[data->key_len + data->value_len + 2] = 0; data->hash_value = PMurHash32(0,data->key,data->key_len); return data; }
void hashMurmurx86 ( const void * key, const int len, const unsigned int seed, void * out ) { *(unsigned int*)out = PMurHash32 (seed, key, len); }
// local wrappers uint32_t murmur4(const uint8_t *data, uint32_t len) { return PMurHash32(0, data, len); }