Ejemplo n.º 1
0
static void BaseUtilTest()
{
    assert(roundToPowerOf2(0) == 1);
    assert(roundToPowerOf2(1) == 1);
    assert(roundToPowerOf2(2) == 2);
    assert(roundToPowerOf2(3) == 4);
    assert(roundToPowerOf2(15) == 16);
    assert(roundToPowerOf2((1 << 13) + 1) == (1 << 14));
    assert(roundToPowerOf2(MAX_SIZE_T) == MAX_SIZE_T);

    assert(murmur_hash2(NULL, 0) == 0x342CE6C);
    assert(murmur_hash2("test", 4) != murmur_hash2("Test", 4));
}
Ejemplo n.º 2
0
void* getHashtable(Hashtable* hashTable,HashKey key){
	int index,hashcode;
	HashElement* element=NULL;
	assert(hashTable);
	if(hashTable->hashType == HASH_TYPE_NUMBER){
		hashcode=key.i;
	}
	else if(hashTable->hashType == HASH_TYPE_STRING){
		hashcode = (uint64_t)murmur_hash2(key.v,strlen(key.v)); 
	}
	index = hashcode % hashTable->capacity;
	element = hashTable->elements[index];
	while(element){
		bool equal;
		if(hashTable->hashType == HASH_TYPE_NUMBER){
			equal = element->key.i == key.i;
		}
		else if(hashTable->hashType == HASH_TYPE_STRING){
			equal = element->key.v == key.v;
		}
		if(equal)
			return element->value;
		else{
			element = element->next;
		}
	}
	return NULL;
}
Ejemplo n.º 3
0
void removeHashtable(Hashtable* hashTable,HashKey key){
	int index,hashcode;
	HashElement* element=NULL;
	HashElement* preElement=NULL;
	assert(hashTable);
	if(hashTable->hashType == HASH_TYPE_NUMBER){
		hashcode=key.i;
	}
	else if(hashTable->hashType == HASH_TYPE_STRING){
		hashcode = (uint64_t)murmur_hash2(key.v,strlen(key.v)); 
	}	
	index = hashcode % hashTable->capacity;
	element = hashTable->elements[index];
	while(element){
		bool equal;
		if(hashTable->hashType == HASH_TYPE_NUMBER){
			equal = element->key.i == key.i;
		}
		else if(hashTable->hashType == HASH_TYPE_STRING){
			equal = element->key.v == key.v;
		}
		if(equal){
			if(preElement)
				preElement->next = element->next;
			else{
				hashTable->elements[index] = element->next;
			}
			hashTable->size--;
			free(element);
			break;
		}
		else{
			preElement = element;
			element = element->next;
		}
	}
	//free element
}
Ejemplo n.º 4
0
int insertHashtable(Hashtable* hashTable,HashKey key,char* value){
	int index;
	uint64_t hashcode;
	HashElement* element=NULL;
	assert(hashTable);
	assert(value);
	reHashTable(hashTable);
	if(hashTable->hashType == HASH_TYPE_NUMBER){
		hashcode=key.i;
	}
	else if(hashTable->hashType == HASH_TYPE_STRING){
		hashcode = (uint64_t)murmur_hash2(key.v,strlen(key.v)); 
	}
	index = hashcode % hashTable->capacity;
	element = hashTable->elements[index];
	if(element){
		while(element->next){
			element = element->next;
		}
		element->next = (HashElement*)malloc(sizeof(HashElement));
		if(!element->next)
			return 0;
		element->next->key=key;
		element->next->value=value;
		element->next->next=NULL;
		hashTable->size++;
	}
	else{
		hashTable->elements[index] = (HashElement*)malloc(sizeof(HashElement));
		if(!hashTable->elements[index])
			return 0;
		hashTable->elements[index]->key=key;
		hashTable->elements[index]->value=value;
		hashTable->elements[index]->next=NULL;
		hashTable->size++;
	}
	return 1;
}
Ejemplo n.º 5
0
static unsigned int svr_req_hash(void* id) 
{
	return murmur_hash2(id, sizeof(unsigned int));
}