null+****@clear*****
null+****@clear*****
2012年 4月 4日 (水) 14:50:32 JST
Susumu Yata 2012-04-04 14:50:32 +0900 (Wed, 04 Apr 2012) New Revision: c00b2513765e6b7174927c5af8c65b1b49cbb14d Log: Rename bin_hash() to grn_hash_calculate_hash_value(). Modified files: lib/hash.c Modified: lib/hash.c (+13 -10) =================================================================== --- lib/hash.c 2012-04-04 14:49:27 +0900 (5c4fdbe) +++ lib/hash.c 2012-04-04 14:50:32 +0900 (9f2a0c7) @@ -1668,11 +1668,14 @@ grn_hash_reset(grn_ctx *ctx, grn_hash *hash, uint32_t ne) } inline static uint32_t -bin_hash(const uint8_t *p, uint32_t length) +grn_hash_calculate_hash_value(const void *ptr, uint32_t size) { - uint32_t r; - for (r = 0; length--; p++) { r = (r * 1021) + *p; } - return r; + uint32_t i; + uint32_t hash_value = 0; + for (i = 0; i < size; i++) { + hash_value = (hash_value * 1021) + ((const uint8_t *)ptr)[i]; + } + return hash_value; } inline static grn_id @@ -1767,7 +1770,7 @@ grn_hash_add(grn_ctx *ctx, grn_hash *hash, const void *key, ERR(GRN_INVALID_ARGUMENT, "too long key"); return GRN_ID_NIL; } - h = bin_hash((unsigned char *)key, key_size); + h = grn_hash_calculate_hash_value(key, key_size); } else { if (key_size != hash->key_size) { ERR(GRN_INVALID_ARGUMENT, "key size unmatch"); @@ -1776,7 +1779,7 @@ grn_hash_add(grn_ctx *ctx, grn_hash *hash, const void *key, if (key_size == sizeof(uint32_t)) { h = *((uint32_t *)key); } else { - h = bin_hash((unsigned char *)key, key_size); + h = grn_hash_calculate_hash_value(key, key_size); } } s = STEP(h); @@ -1824,13 +1827,13 @@ grn_hash_get(grn_ctx *ctx, grn_hash *hash, const void *key, uint32_t h, i, m, s; if (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) { if (key_size > hash->key_size) { return GRN_ID_NIL; } - h = bin_hash((unsigned char *)key, key_size); + h = grn_hash_calculate_hash_value(key, key_size); } else { if (key_size != hash->key_size) { return GRN_ID_NIL; } if (key_size == sizeof(uint32_t)) { h = *((uint32_t *)key); } else { - h = bin_hash((unsigned char *)key, key_size); + h = grn_hash_calculate_hash_value(key, key_size); } } s = STEP(h); @@ -2064,13 +2067,13 @@ grn_hash_delete(grn_ctx *ctx, grn_hash *hash, const void *key, uint32_t key_size grn_rc rc = GRN_INVALID_ARGUMENT; if (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) { if (key_size > hash->key_size) { return GRN_INVALID_ARGUMENT; } - h = bin_hash((unsigned char *)key, key_size); + h = grn_hash_calculate_hash_value(key, key_size); } else { if (key_size != hash->key_size) { return GRN_INVALID_ARGUMENT; } if (key_size == sizeof(uint32_t)) { h = *((uint32_t *)key); } else { - h = bin_hash((unsigned char *)key, key_size); + h = grn_hash_calculate_hash_value(key, key_size); } } s = STEP(h);