[Groonga-commit] groonga/groonga [master] Replace STEP() with grn_hash_calculate_step().

Back to archive index

null+****@clear***** null+****@clear*****
2012年 4月 4日 (水) 15:03:17 JST


Susumu Yata	2012-04-04 15:03:17 +0900 (Wed, 04 Apr 2012)

  New Revision: 916ae6e1b69dd5b61381f2400f8c6dd461cb7915

  Log:
    Replace STEP() with grn_hash_calculate_step().

  Modified files:
    lib/hash.c

  Modified: lib/hash.c (+25 -20)
===================================================================
--- lib/hash.c    2012-04-04 14:50:32 +0900 (9f2a0c7)
+++ lib/hash.c    2012-04-04 15:03:17 +0900 (8500a4c)
@@ -1275,9 +1275,7 @@ match_key(grn_ctx *ctx, grn_hash *hash, entry_str *ee, uint32_t h,
 
 #define GARBAGE (0xffffffff)
 
-#define STEP(x) (((x) >> 2) | 0x1010101)
-
-static uint32_t
+inline static uint32_t
 grn_io_hash_calculate_entry_size(uint32_t key_size, uint32_t value_size,
                                  uint32_t flags)
 {
@@ -1606,6 +1604,24 @@ grn_hash_truncate(grn_ctx *ctx, grn_hash *hash)
   return rc;
 }
 
+inline static uint32_t
+grn_hash_calculate_hash_value(const void *ptr, uint32_t size)
+{
+  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 uint32_t
+grn_hash_calculate_step(uint32_t hash_value)
+{
+  return (hash_value >> 2) | 0x1010101;
+}
+
+/* TODO: to be fixed later. */
 static grn_rc
 grn_hash_reset(grn_ctx *ctx, grn_hash *hash, uint32_t ne)
 {
@@ -1642,7 +1658,7 @@ grn_hash_reset(grn_ctx *ctx, grn_hash *hash, uint32_t ne)
       if (!e || (e == GARBAGE)) { continue; }
       ee = grn_hash_entry_at(ctx, hash, e, GRN_TABLE_ADD);
       if (!ee) { return GRN_NO_MEMORY_AVAILABLE; }
-      for (i = ee->key, s = STEP(i); ; i += s) {
+      for (i = ee->key, s = grn_hash_calculate_step(i); ; i += s) {
         if (grn_hash_is_io_hash(hash)) {
           dp = grn_io_hash_idx_at(ctx, hash, (i & m) + offd);
           if (!dp) { return GRN_NO_MEMORY_AVAILABLE; }
@@ -1667,17 +1683,6 @@ grn_hash_reset(grn_ctx *ctx, grn_hash *hash, uint32_t ne)
   return GRN_SUCCESS;
 }
 
-inline static uint32_t
-grn_hash_calculate_hash_value(const void *ptr, uint32_t size)
-{
-  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
 entry_new(grn_ctx *ctx, grn_hash *hash, uint32_t size)
 {
@@ -1782,7 +1787,7 @@ grn_hash_add(grn_ctx *ctx, grn_hash *hash, const void *key,
       h = grn_hash_calculate_hash_value(key, key_size);
     }
   }
-  s = STEP(h);
+  s = grn_hash_calculate_step(h);
   /* lock */
   if ((*hash->n_entries + *hash->n_garbages) * 2 > *hash->max_offset) {
     grn_hash_reset(ctx, hash, 0);
@@ -1836,7 +1841,7 @@ grn_hash_get(grn_ctx *ctx, grn_hash *hash, const void *key,
       h = grn_hash_calculate_hash_value(key, key_size);
     }
   }
-  s = STEP(h);
+  s = grn_hash_calculate_step(h);
   m = *hash->max_offset;
   for (i = h; ; i += s) {
     if (!(ep = grn_hash_idx_at(ctx, hash, i))) { return GRN_ID_NIL; }
@@ -2044,7 +2049,7 @@ grn_hash_delete_by_id(grn_ctx *ctx, grn_hash *hash, grn_id id,
   ee = grn_hash_entry_at(ctx, hash, id, 0);
   if (ee) {
     grn_id e, *ep;
-    uint32_t i, key_size, h = ee->key, s = STEP(h);
+    uint32_t i, key_size, h = ee->key, s = grn_hash_calculate_step(h);
     key_size = (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) ? ee->size : hash->key_size;
     for (i = h; ; i += s) {
       if (!(ep = grn_hash_idx_at(ctx, hash, i))) { return GRN_NO_MEMORY_AVAILABLE; }
@@ -2076,7 +2081,7 @@ grn_hash_delete(grn_ctx *ctx, grn_hash *hash, const void *key, uint32_t key_size
       h = grn_hash_calculate_hash_value(key, key_size);
     }
   }
-  s = STEP(h);
+  s = grn_hash_calculate_step(h);
   {
     grn_id e, *ep;
     /* lock */
@@ -2558,7 +2563,7 @@ entry2id(grn_ctx *ctx, grn_hash *hash, entry *e)
 {
   entry *e2;
   grn_id id, *ep;
-  uint32_t i, h = e->key, s = STEP(h);
+  uint32_t i, h = e->key, s = grn_hash_calculate_step(h);
   for (i = h; ; i += s) {
     if (!(ep = grn_hash_idx_at(ctx, hash, i))) { return GRN_ID_NIL; }
     if (!(id = *ep)) { break; }




Groonga-commit メーリングリストの案内
Back to archive index