[Groonga-commit] groonga/groonga [master] Use grn_hash_entry in grn_hash_set_value().

Back to archive index

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


Susumu Yata	2012-04-04 15:52:33 +0900 (Wed, 04 Apr 2012)

  New Revision: 4ef12e62a375e524ef788182384d19aadc8f83ed

  Log:
    Use grn_hash_entry in grn_hash_set_value().

  Modified files:
    lib/hash.c

  Modified: lib/hash.c (+47 -41)
===================================================================
--- lib/hash.c    2012-04-04 15:43:48 +0900 (2682920)
+++ lib/hash.c    2012-04-04 15:52:33 +0900 (c86752f)
@@ -2031,49 +2031,55 @@ grn_rc
 grn_hash_set_value(grn_ctx *ctx, grn_hash *hash, grn_id id,
                    const void *value, int flags)
 {
-  if (value) {
-    void *v;
-    entry_str *ee;
-    if (!grn_hash_bitmap_at(ctx, hash, id)) { return GRN_INVALID_ARGUMENT; }
-    ee = grn_hash_entry_at(ctx, hash, id, 0);
-    if (ee && (v = get_value(hash, ee))) {
-      switch ((flags & GRN_OBJ_SET_MASK)) {
-      case GRN_OBJ_SET :
-        memcpy(v, value, hash->value_size);
-        return GRN_SUCCESS;
-      case GRN_OBJ_INCR :
-        switch (hash->value_size) {
-        case sizeof(int32_t) :
-          *((int32_t *)v) += *((int32_t *)value);
-          return GRN_SUCCESS;
-        case sizeof(int64_t) :
-          *((int64_t *)v) += *((int64_t *)value);
-          return GRN_SUCCESS;
-        default :
-          return GRN_INVALID_ARGUMENT;
-        }
-        break;
-      case GRN_OBJ_DECR :
-        switch (hash->value_size) {
-        case sizeof(int32_t) :
-          *((int32_t *)v) -= *((int32_t *)value);
-          return GRN_SUCCESS;
-        case sizeof(int64_t) :
-          *((int64_t *)v) -= *((int64_t *)value);
-          return GRN_SUCCESS;
-        default :
-          return GRN_INVALID_ARGUMENT;
-        }
-        break;
-      default :
-        ERR(GRN_INVALID_ARGUMENT, "flags = %d", flags);
-        return ctx->rc;
-      }
-    } else {
-      return GRN_NO_MEMORY_AVAILABLE;
+  void *entry_value;
+  grn_hash_entry *entry;
+  if (!value) {
+    return GRN_INVALID_ARGUMENT;
+  }
+  if (!grn_hash_bitmap_at(ctx, hash, id)) {
+    return GRN_INVALID_ARGUMENT;
+  }
+  entry = grn_hash_entry_at(ctx, hash, id, 0);
+  if (!entry) {
+    return GRN_NO_MEMORY_AVAILABLE;
+  }
+  entry_value = grn_hash_entry_get_value(hash, entry);
+  if (!entry_value) {
+    return GRN_NO_MEMORY_AVAILABLE;
+  }
+
+  switch (flags & GRN_OBJ_SET_MASK) {
+  case GRN_OBJ_SET :
+    memcpy(entry_value, value, hash->value_size);
+    return GRN_SUCCESS;
+  case GRN_OBJ_INCR :
+    switch (hash->value_size) {
+    case sizeof(int32_t) :
+      *((int32_t *)entry_value) += *((int32_t *)value);
+      return GRN_SUCCESS;
+    case sizeof(int64_t) :
+      *((int64_t *)entry_value) += *((int64_t *)value);
+      return GRN_SUCCESS;
+    default :
+      return GRN_INVALID_ARGUMENT;
+    }
+    break;
+  case GRN_OBJ_DECR :
+    switch (hash->value_size) {
+    case sizeof(int32_t) :
+      *((int32_t *)entry_value) -= *((int32_t *)value);
+      return GRN_SUCCESS;
+    case sizeof(int64_t) :
+      *((int64_t *)entry_value) -= *((int64_t *)value);
+      return GRN_SUCCESS;
+    default :
+      return GRN_INVALID_ARGUMENT;
     }
+    break;
+  default :
+    ERR(GRN_INVALID_ARGUMENT, "flags = %d", flags);
+    return ctx->rc;
   }
-  return GRN_INVALID_ARGUMENT;
 }
 
 #define DELETE_IT do {\




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