Kouhei Sutou
null+****@clear*****
Wed Mar 9 11:35:48 JST 2016
Kouhei Sutou 2016-03-09 11:35:48 +0900 (Wed, 09 Mar 2016) New Revision: a66fe5d507e774801d2320b77e161f78ce272eff https://github.com/groonga/groonga/commit/a66fe5d507e774801d2320b77e161f78ce272eff Message: Reduce duplicated code Modified files: lib/hash.c Modified: lib/hash.c (+28 -22) =================================================================== --- lib/hash.c 2016-03-09 11:19:51 +0900 (a749116) +++ lib/hash.c 2016-03-09 11:35:48 +0900 (c936b09) @@ -1604,32 +1604,38 @@ grn_hash_entry_put_key(grn_ctx *ctx, grn_hash *hash, { if (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) { if (grn_hash_is_io_hash(hash)) { - if (grn_hash_is_large_total_key_size(ctx, hash)) { - if (key_size <= sizeof(entry->io_entry_large.key.buf)) { - grn_memcpy(entry->io_entry_large.key.buf, key, key_size); - entry->io_entry_large.flag = HASH_IMMEDIATE; - } else { - const grn_rc rc = - grn_io_hash_entry_put_key(ctx, hash, entry, key, key_size); - if (rc) { - return rc; - } - entry->io_entry_large.flag = 0; + grn_bool is_large_mode; + uint8_t *buffer; + size_t buffer_size; + uint16_t flag; + + is_large_mode = grn_hash_is_large_total_key_size(ctx, hash); + if (is_large_mode) { + buffer = entry->io_entry_large.key.buf; + buffer_size = sizeof(entry->io_entry_large.key.buf); + } else { + buffer = entry->io_entry_normal.key.buf; + buffer_size = sizeof(entry->io_entry_normal.key.buf); + } + + if (key_size <= buffer_size) { + grn_memcpy(buffer, key, key_size); + flag = HASH_IMMEDIATE; + } else { + const grn_rc rc = + grn_io_hash_entry_put_key(ctx, hash, entry, key, key_size); + if (rc) { + return rc; } + flag = 0; + } + + if (is_large_mode) { + entry->io_entry_large.flag = flag; entry->io_entry_large.hash_value = hash_value; entry->io_entry_large.key_size = key_size; } else { - if (key_size <= sizeof(entry->io_entry_normal.key.buf)) { - grn_memcpy(entry->io_entry_normal.key.buf, key, key_size); - entry->io_entry_normal.flag = HASH_IMMEDIATE; - } else { - const grn_rc rc = - grn_io_hash_entry_put_key(ctx, hash, entry, key, key_size); - if (rc) { - return rc; - } - entry->io_entry_normal.flag = 0; - } + entry->io_entry_normal.flag = flag; entry->io_entry_normal.hash_value = hash_value; entry->io_entry_normal.key_size = key_size; } -------------- next part -------------- HTML����������������������������... Download