[Groonga-commit] groonga/groonga [master] Rename entry_new() to grn_hash_add_entry().

Back to archive index

null+****@clear***** null+****@clear*****
2012年 4月 4日 (水) 19:56:29 JST


Susumu Yata	2012-04-04 19:56:29 +0900 (Wed, 04 Apr 2012)

  New Revision: 6bf551d1609caf584c41f34f83fdcbb9b6968ba0

  Log:
    Rename entry_new() to grn_hash_add_entry().

  Modified files:
    lib/hash.c

  Modified: lib/hash.c (+43 -37)
===================================================================
--- lib/hash.c    2012-04-04 19:35:23 +0900 (5e496f7)
+++ lib/hash.c    2012-04-04 19:56:29 +0900 (73fe0fc)
@@ -1731,42 +1731,6 @@ grn_hash_reset(grn_ctx *ctx, grn_hash *hash, uint32_t expected_n_entries)
   return GRN_SUCCESS;
 }
 
-inline static grn_id
-entry_new(grn_ctx *ctx, grn_hash *hash, uint32_t size)
-{
-  grn_id e;
-  if (grn_hash_is_io_hash(hash)) {
-    struct grn_hash_header *hh = hash->header;
-    size -= 1;
-    if ((e = hh->garbages[size])) {
-      entry * const ee = grn_io_hash_entry_at(ctx, hash, e, GRN_TABLE_ADD);
-      if (!ee) { return GRN_ID_NIL; }
-      hh->garbages[size] = ee->key;
-      if (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) {
-        /* keep ee->size && ee->str */
-        memset(((entry_str *)ee)->dummy, 0, hh->value_size);
-      } else {
-        memset(ee, 0, hh->entry_size);
-      }
-    } else {
-      e = ++hh->curr_rec;
-    }
-    grn_io_array_bit_on(ctx, hash->io, GRN_HASH_BITMAP_SEGMENT, e);
-  } else {
-    if (hash->garbages) {
-      entry *ee;
-      e = hash->garbages;
-      ee = grn_tiny_array_at_inline(&hash->a, e);
-      hash->garbages = ee->key;
-      memset(ee, 0, hash->entry_size);
-    } else {
-      e = hash->a.max + 1;
-    }
-    grn_tiny_array_bit_on(&hash->bitmap, e);
-  }
-  return e;
-}
-
 grn_rc
 grn_hash_lock(grn_ctx *ctx, grn_hash *hash, int timeout)
 {
@@ -1810,6 +1774,47 @@ grn_hash_clear_lock(grn_ctx *ctx, grn_hash *hash)
   return GRN_SUCCESS;
 }
 
+inline static grn_id
+grn_hash_add_entry(grn_ctx *ctx, grn_hash *hash, uint32_t key_size)
+{
+  grn_id entry_id;
+  if (grn_hash_is_io_hash(hash)) {
+    struct grn_hash_header * const header = hash->header;
+    key_size -= 1;
+    entry_id = header->garbages[key_size];
+    if (entry_id) {
+      grn_hash_entry * const entry =
+          grn_io_hash_entry_at(ctx, hash, entry_id, GRN_TABLE_ADD);
+      if (!entry) {
+        return GRN_ID_NIL;
+      }
+      header->garbages[key_size] = *(grn_id *)entry;
+      if (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) {
+        /* keep entry->io_entry's hash_value, flag, key_size and key. */
+        memset(entry->io_entry.value, 0, header->value_size);
+      } else {
+        memset(entry, 0, header->entry_size);
+      }
+    } else {
+      entry_id = ++header->curr_rec;
+    }
+    /* TODO: error handling. */
+    grn_io_array_bit_on(ctx, hash->io, GRN_HASH_BITMAP_SEGMENT, entry_id);
+  } else {
+    if (hash->garbages) {
+      grn_hash_entry *entry;
+      entry_id = hash->garbages;
+      entry = (grn_hash_entry *)grn_tiny_array_at_inline(&hash->a, entry_id);
+      hash->garbages = *(grn_id *)entry;
+      memset(entry, 0, hash->entry_size);
+    } else {
+      entry_id = hash->a.max + 1;
+    }
+    /* TODO: error handling. */
+    grn_tiny_array_bit_on(&hash->bitmap, entry_id);
+  }
+  return entry_id;
+}
 
 grn_id
 grn_hash_add(grn_ctx *ctx, grn_hash *hash, const void *key,
@@ -1880,10 +1885,11 @@ grn_hash_add(grn_ctx *ctx, grn_hash *hash, const void *key,
       }
     }
 
-    id = entry_new(ctx, hash, key_size);
+    id = grn_hash_add_entry(ctx, hash, key_size);
     if (!id) {
       return GRN_ID_NIL;
     }
+    /* TODO: error handling. */
     entry = grn_hash_entry_at(ctx, hash, id, GRN_TABLE_ADD);
     if (!entry) {
       return GRN_ID_NIL;




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