[Groonga-commit] groonga/groonga [master] Simplify grn_array_set_value().

Back to archive index

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


Susumu Yata	2012-03-29 13:16:05 +0900 (Thu, 29 Mar 2012)

  New Revision: 23096eb2ad986ed4a0302516dcd4b97ba7309039

  Log:
    Simplify grn_array_set_value().

  Modified files:
    lib/hash.c

  Modified: lib/hash.c (+48 -42)
===================================================================
--- lib/hash.c    2012-03-29 13:08:20 +0900 (0a7d634)
+++ lib/hash.c    2012-03-29 13:16:05 +0900 (d3b44f0)
@@ -435,12 +435,14 @@ int
 grn_array_get_value(grn_ctx *ctx, grn_array *array, grn_id id, void *valuebuf)
 {
   if (ctx && array) {
-    void *ee;
-    if (!grn_array_bitmap_at(ctx, array, id)) { return 0; }
-    ee = grn_array_entry_at(ctx, array, id, 0);
-    if (ee) {
-      if (valuebuf) { memcpy(valuebuf, ee, array->value_size); }
-      return array->value_size;
+    if (grn_array_bitmap_at(ctx, array, id)) {
+      void * const entry = grn_array_entry_at(ctx, array, id, 0);
+      if (entry) {
+        if (valuebuf) {
+          memcpy(valuebuf, entry, array->value_size);
+        }
+        return array->value_size;
+      }
     }
   }
   return 0;
@@ -460,48 +462,52 @@ grn_rc
 grn_array_set_value(grn_ctx *ctx, grn_array *array, grn_id id,
                     const void *value, int flags)
 {
-  if (ctx && array && value) {
-    void *ee;
-    if (!grn_array_bitmap_at(ctx, array, id)) { return GRN_INVALID_ARGUMENT; }
-    ee = grn_array_entry_at(ctx, array, id, 0);
-    if (ee) {
-      switch ((flags & GRN_OBJ_SET_MASK)) {
-      case GRN_OBJ_SET :
-        memcpy(ee, value, array->value_size);
+  if (!ctx || !array || !value) {
+    return GRN_INVALID_ARGUMENT;
+  }
+  if (!grn_array_bitmap_at(ctx, array, id)) {
+    return GRN_INVALID_ARGUMENT;
+  }
+
+  {
+    void * const entry = grn_array_entry_at(ctx, array, id, 0);
+    if (!entry) {
+      return GRN_NO_MEMORY_AVAILABLE;
+    }
+
+    switch ((flags & GRN_OBJ_SET_MASK)) {
+    case GRN_OBJ_SET :
+      memcpy(entry, value, array->value_size);
+      return GRN_SUCCESS;
+    case GRN_OBJ_INCR :
+      switch (array->value_size) {
+      case sizeof(int32_t) :
+        *((int32_t *)entry) += *((int32_t *)value);
+        return GRN_SUCCESS;
+      case sizeof(int64_t) :
+        *((int64_t *)entry) += *((int64_t *)value);
         return GRN_SUCCESS;
-      case GRN_OBJ_INCR :
-        switch (array->value_size) {
-        case sizeof(int32_t) :
-          *((int32_t *)ee) += *((int32_t *)value);
-          return GRN_SUCCESS;
-        case sizeof(int64_t) :
-          *((int64_t *)ee) += *((int64_t *)value);
-          return GRN_SUCCESS;
-        default :
-          return GRN_INVALID_ARGUMENT;
-        }
-        break;
-      case GRN_OBJ_DECR :
-        switch (array->value_size) {
-        case sizeof(int32_t) :
-          *((int32_t *)ee) -= *((int32_t *)value);
-          return GRN_SUCCESS;
-        case sizeof(int64_t) :
-          *((int64_t *)ee) -= *((int64_t *)value);
-          return GRN_SUCCESS;
-        default :
-          return GRN_INVALID_ARGUMENT;
-        }
-        break;
       default :
-        // todo : support other types.
         return GRN_INVALID_ARGUMENT;
       }
-    } else {
-      return GRN_NO_MEMORY_AVAILABLE;
+      break;
+    case GRN_OBJ_DECR :
+      switch (array->value_size) {
+      case sizeof(int32_t) :
+        *((int32_t *)entry) -= *((int32_t *)value);
+        return GRN_SUCCESS;
+      case sizeof(int64_t) :
+        *((int64_t *)entry) -= *((int64_t *)value);
+        return GRN_SUCCESS;
+      default :
+        return GRN_INVALID_ARGUMENT;
+      }
+      break;
+    default :
+      // todo : support other types.
+      return GRN_INVALID_ARGUMENT;
     }
   }
-  return GRN_INVALID_ARGUMENT;
 }
 
 grn_rc




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