[Groonga-commit] groonga/groonga at a66fe5d [master] Reduce duplicated code

Back to archive index

Kouhei Sutou null+****@clear*****
Wed Mar 9 11:35:48 JST 2016


Kouhei Sutou	2016-03-09 11:35:48 +0900 (Wed, 09 Mar 2016)

  New Revision: a66fe5d507e774801d2320b77e161f78ce272eff
  https://github.com/groonga/groonga/commit/a66fe5d507e774801d2320b77e161f78ce272eff

  Message:
    Reduce duplicated code

  Modified files:
    lib/hash.c

  Modified: lib/hash.c (+28 -22)
===================================================================
--- lib/hash.c    2016-03-09 11:19:51 +0900 (a749116)
+++ lib/hash.c    2016-03-09 11:35:48 +0900 (c936b09)
@@ -1604,32 +1604,38 @@ grn_hash_entry_put_key(grn_ctx *ctx, grn_hash *hash,
 {
   if (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) {
     if (grn_hash_is_io_hash(hash)) {
-      if (grn_hash_is_large_total_key_size(ctx, hash)) {
-        if (key_size <= sizeof(entry->io_entry_large.key.buf)) {
-          grn_memcpy(entry->io_entry_large.key.buf, key, key_size);
-          entry->io_entry_large.flag = HASH_IMMEDIATE;
-        } else {
-          const grn_rc rc =
-            grn_io_hash_entry_put_key(ctx, hash, entry, key, key_size);
-          if (rc) {
-            return rc;
-          }
-          entry->io_entry_large.flag = 0;
+      grn_bool is_large_mode;
+      uint8_t *buffer;
+      size_t buffer_size;
+      uint16_t flag;
+
+      is_large_mode = grn_hash_is_large_total_key_size(ctx, hash);
+      if (is_large_mode) {
+        buffer = entry->io_entry_large.key.buf;
+        buffer_size = sizeof(entry->io_entry_large.key.buf);
+      } else {
+        buffer = entry->io_entry_normal.key.buf;
+        buffer_size = sizeof(entry->io_entry_normal.key.buf);
+      }
+
+      if (key_size <= buffer_size) {
+        grn_memcpy(buffer, key, key_size);
+        flag = HASH_IMMEDIATE;
+      } else {
+        const grn_rc rc =
+          grn_io_hash_entry_put_key(ctx, hash, entry, key, key_size);
+        if (rc) {
+          return rc;
         }
+        flag = 0;
+      }
+
+      if (is_large_mode) {
+        entry->io_entry_large.flag = flag;
         entry->io_entry_large.hash_value = hash_value;
         entry->io_entry_large.key_size = key_size;
       } else {
-        if (key_size <= sizeof(entry->io_entry_normal.key.buf)) {
-          grn_memcpy(entry->io_entry_normal.key.buf, key, key_size);
-          entry->io_entry_normal.flag = HASH_IMMEDIATE;
-        } else {
-          const grn_rc rc =
-            grn_io_hash_entry_put_key(ctx, hash, entry, key, key_size);
-          if (rc) {
-            return rc;
-          }
-          entry->io_entry_normal.flag = 0;
-        }
+        entry->io_entry_normal.flag = flag;
         entry->io_entry_normal.hash_value = hash_value;
         entry->io_entry_normal.key_size = key_size;
       }
-------------- next part --------------
HTML����������������������������...
下载 



More information about the Groonga-commit mailing list
Back to archive index