null+****@clear*****
null+****@clear*****
2012年 4月 4日 (水) 15:37:55 JST
Susumu Yata 2012-04-04 15:37:55 +0900 (Wed, 04 Apr 2012)
New Revision: 2c6d7cb2358c5ce95013109ac07033707d518908
Log:
Use grn_hash_entry in grn_hash_get_key_value().
Modified files:
lib/hash.c
Modified: lib/hash.c (+22 -9)
===================================================================
--- lib/hash.c 2012-04-04 15:31:48 +0900 (7d10d22)
+++ lib/hash.c 2012-04-04 15:37:55 +0900 (7c1ede3)
@@ -1976,16 +1976,29 @@ int
grn_hash_get_key_value(grn_ctx *ctx, grn_hash *hash, grn_id id,
void *keybuf, int bufsize, void *valuebuf)
{
- void *v;
+ void *value;
int key_size;
- entry_str *ee;
- if (!grn_hash_bitmap_at(ctx, hash, id)) { return 0; }
- ee = grn_hash_entry_at(ctx, hash, id, 0);
- if (!ee) { return 0; }
- key_size = (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) ? ee->size : hash->key_size;
- if (bufsize >= key_size) { memcpy(keybuf, get_key(ctx, hash, ee), key_size); }
- if (valuebuf && (v = get_value(hash, ee))) {
- memcpy(valuebuf, v, hash->value_size);
+ grn_hash_entry *entry;
+ if (!grn_hash_bitmap_at(ctx, hash, id)) {
+ return 0;
+ }
+ entry = grn_hash_entry_at(ctx, hash, id, 0);
+ if (!entry) {
+ return 0;
+ }
+ if (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) {
+ key_size = entry->header.key_size;
+ } else {
+ key_size = hash->key_size;
+ }
+ if (bufsize >= key_size) {
+ memcpy(keybuf, grn_hash_entry_get_key(ctx, hash, entry), key_size);
+ }
+ if (valuebuf) {
+ value = grn_hash_entry_get_value(hash, entry);
+ if (value) {
+ memcpy(valuebuf, value, hash->value_size);
+ }
}
return key_size;
}