null+****@clear*****
null+****@clear*****
2012年 3月 29日 (木) 18:52:37 JST
Susumu Yata 2012-03-29 18:52:37 +0900 (Thu, 29 Mar 2012)
New Revision: d2c8f933a2128e4fd050ee43c4bea281e684dc50
Log:
Replace IDX_AT() with grn_hash_idx_at().
Modified files:
lib/hash.c
Modified: lib/hash.c (+15 -9)
===================================================================
--- lib/hash.c 2012-03-29 18:48:23 +0900 (c5e3ca7)
+++ lib/hash.c 2012-03-29 18:52:37 +0900 (a920d74)
@@ -878,10 +878,16 @@ grn_hash_io_idx_at(grn_ctx *ctx, grn_hash *hash, grn_id id)
return pp;
}
-#define IDX_AT(h,i) \
- (IO_HASHP(h) ?\
- grn_hash_io_idx_at(ctx, h, ((i) & *(h)->max_offset) + h->header->idx_offset) :\
- h->index + ((i) & *(h)->max_offset))
+inline static grn_id *
+grn_hash_idx_at(grn_ctx *ctx, grn_hash *hash, grn_id id)
+{
+ if (IO_HASHP(hash)) {
+ id = (id & *hash->max_offset) + hash->header->idx_offset;
+ return grn_hash_io_idx_at(ctx, hash, id);
+ } else {
+ return hash->index + (id & *hash->max_offset);
+ }
+}
#define KEY_AT(hash,pos,ptr) do {\
int flags = GRN_TABLE_ADD;\
@@ -1456,7 +1462,7 @@ grn_hash_add(grn_ctx *ctx, grn_hash *hash, const void *key,
}
m = *hash->max_offset;
for (i = h; ; i += s) {
- if (!(ep = IDX_AT(hash, i))) { return GRN_ID_NIL; }
+ if (!(ep = grn_hash_idx_at(ctx, hash, i))) { return GRN_ID_NIL; }
if (!(e = *ep)) { break; }
if (e == GARBAGE) {
if (!np) { np = ep; }
@@ -1506,7 +1512,7 @@ grn_hash_get(grn_ctx *ctx, grn_hash *hash, const void *key,
s = STEP(h);
m = *hash->max_offset;
for (i = h; ; i += s) {
- if (!(ep = IDX_AT(hash, i))) { return GRN_ID_NIL; }
+ if (!(ep = grn_hash_idx_at(ctx, hash, i))) { return GRN_ID_NIL; }
if (!(e = *ep)) { break; }
if (e == GARBAGE) { continue; }
{
@@ -1714,7 +1720,7 @@ grn_hash_delete_by_id(grn_ctx *ctx, grn_hash *hash, grn_id id,
uint32_t i, key_size, h = ee->key, s = STEP(h);
key_size = (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) ? ee->size : hash->key_size;
for (i = h; ; i += s) {
- if (!(ep = IDX_AT(hash, i))) { return GRN_NO_MEMORY_AVAILABLE; }
+ if (!(ep = grn_hash_idx_at(ctx, hash, i))) { return GRN_NO_MEMORY_AVAILABLE; }
if (!(e = *ep)) { break; }
if (e == id) {
DELETE_IT;
@@ -1749,7 +1755,7 @@ grn_hash_delete(grn_ctx *ctx, grn_hash *hash, const void *key, uint32_t key_size
/* lock */
m = *hash->max_offset;
for (i = h; ; i += s) {
- if (!(ep = IDX_AT(hash, i))) { return GRN_NO_MEMORY_AVAILABLE; }
+ if (!(ep = grn_hash_idx_at(ctx, hash, i))) { return GRN_NO_MEMORY_AVAILABLE; }
if (!(e = *ep)) { break; }
if (e == GARBAGE) { continue; }
{
@@ -2226,7 +2232,7 @@ entry2id(grn_ctx *ctx, grn_hash *hash, entry *e)
grn_id id, *ep;
uint32_t i, h = e->key, s = STEP(h);
for (i = h; ; i += s) {
- if (!(ep = IDX_AT(hash, i))) { return GRN_ID_NIL; }
+ if (!(ep = grn_hash_idx_at(ctx, hash, i))) { return GRN_ID_NIL; }
if (!(id = *ep)) { break; }
if (id != GARBAGE) {
e2 = grn_hash_entry_at(ctx, hash, id, 0);