[Groonga-commit] groonga/groonga [master] Update grn_array_delete_by_id().

アーカイブの一覧に戻る

null+****@clear***** null+****@clear*****
2012年 3月 29日 (木) 13:25:28 JST


Susumu Yata	2012-03-29 13:25:28 +0900 (Thu, 29 Mar 2012)

  New Revision: 4c9e2c9aac402946d690e572c5ce0f1066fd827a

  Log:
    Update grn_array_delete_by_id().
    
    Rename ee to entry, hh to header.
    Remove goto.

  Modified files:
    lib/hash.c

  Modified: lib/hash.c (+43 -28)
===================================================================
--- lib/hash.c    2012-03-29 13:16:05 +0900 (d3b44f0)
+++ lib/hash.c    2012-03-29 13:25:28 +0900 (4ef2fb5)
@@ -514,36 +514,51 @@ grn_rc
 grn_array_delete_by_id(grn_ctx *ctx, grn_array *array, grn_id id,
                        grn_table_delete_optarg *optarg)
 {
-  grn_rc rc = GRN_SUCCESS;
-  if (!ctx || !array) { return GRN_INVALID_ARGUMENT; }
-  if (!grn_array_bitmap_at(ctx, array, id)) { rc = GRN_INVALID_ARGUMENT; goto exit; }
-  /* lock */
-  if (IO_ARRAYP(array)) {
-    if (array->value_size >= sizeof(grn_id)) {
-      void *ee;
-      struct grn_array_header *hh = array->header;
-      ee = grn_array_io_entry_at(ctx, array, id, 0);
-      if (!ee) { rc = GRN_INVALID_ARGUMENT; goto exit; }
-      *((grn_id *)ee) = hh->garbages;
-      hh->garbages = id;
-    }
-    (*array->n_entries)--;
-    (*array->n_garbages)++;
-    GRN_IO_ARRAY_BIT_OFF(array->io, array_seg_bitmap, id);
-  } else {
-    if (array->value_size >= sizeof(grn_id)) {
-      void *ee = grn_tiny_array_at_inline(&array->a, id);
-      if (!ee) { rc = GRN_INVALID_ARGUMENT; goto exit; }
-      *((grn_id *)ee) = array->garbages;
-      array->garbages = id;
+  if (!ctx || !array) {
+    return GRN_INVALID_ARGUMENT;
+  }
+  if (!grn_array_bitmap_at(ctx, array, id)) {
+    return GRN_INVALID_ARGUMENT;
+  }
+
+  {
+    grn_rc rc = GRN_SUCCESS;
+    /* lock */
+    if (IO_ARRAYP(array)) {
+      if (array->value_size >= sizeof(grn_id)) {
+        struct grn_array_header * const header = array->header;
+        void * const entry = grn_array_io_entry_at(ctx, array, id, 0);
+        if (!entry) {
+          rc = GRN_INVALID_ARGUMENT;
+        } else {
+          *((grn_id *)entry) = header->garbages;
+          header->garbages = id;
+        }
+      }
+      if (!rc) {
+        (*array->n_entries)--;
+        (*array->n_garbages)++;
+        GRN_IO_ARRAY_BIT_OFF(array->io, array_seg_bitmap, id);
+      }
+    } else {
+      if (array->value_size >= sizeof(grn_id)) {
+        void * const entry = grn_tiny_array_at_inline(&array->a, id);
+        if (!entry) {
+          rc = GRN_INVALID_ARGUMENT;
+        } else {
+          *((grn_id *)entry) = array->garbages;
+          array->garbages = id;
+        }
+      }
+      if (!rc) {
+        (*array->n_entries)--;
+        (*array->n_garbages)++;
+        grn_tiny_array_bit_off(&array->bitmap, id);
+      }
     }
-    (*array->n_entries)--;
-    (*array->n_garbages)++;
-    grn_tiny_array_bit_off(&array->bitmap, id);
+    /* unlock */
+    return rc;
   }
-exit :
-  /* unlock */
-  return rc;
 }
 
 grn_id




Groonga-commit メーリングリストの案内
アーカイブの一覧に戻る