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 {\