示例#1
0
int hash_insert(HashTable *ht, char *key, void *value)
{
	// check if we need to resize the hashtable
	resize_hash_table_if_needed(ht);

	int index = HASH_INDEX(ht, key);

	Bucket *org_bucket = ht->buckets[index];
	Bucket *bucket = (Bucket *)malloc(sizeof(Bucket));

	bucket->key	  = strdup(key);
	bucket->value = value;

	LOG_MSG("Insert data p: %p\n", value);

	ht->elem_num += 1;

	if(org_bucket != NULL) {
		LOG_MSG("Index collision found with org hashtable: %p\n", org_bucket);
		bucket->next = org_bucket;
	}

	ht->buckets[index]= bucket;

	LOG_MSG("Element inserted at index %i, now we have: %i elements\n", index, ht->elem_num);

	return SUCCESS;
}
示例#2
0
文件: hash.c 项目: wangxinghu/script
int hash_insert(HashTable *ht, char *key, void *value)
{
    // check if we need to resize the hashtable
    resize_hash_table_if_needed(ht);

    int index = HASH_INDEX(ht, key);

    Bucket *org_bucket = ht->buckets[index];
    Bucket *tmp_bucket = org_bucket;

    // check if the key exits already
    while(tmp_bucket)
    {
        if(strcmp(key, tmp_bucket->key) == 0)
        {
            LOG_MSG("[update]\tkey: %s\n", key);
            tmp_bucket->value = value;

            return SUCCESS;
        }

        tmp_bucket = tmp_bucket->next;
    }

    Bucket *bucket = (Bucket *)malloc(sizeof(Bucket));

    bucket->key   = key;
    bucket->value = value;
    bucket->next  = NULL;

    ht->elem_num += 1;

    if(org_bucket != NULL)
    {
        LOG_MSG("[collision]\tindex:%d key:%s\n", index, key);
        bucket->next = org_bucket;
    }

    ht->buckets[index]= bucket;

    LOG_MSG("[insert]\tindex:%d key:%s\tht(num:%d)\n",
        index, key, ht->elem_num);

    return SUCCESS;
}