naoa
null+****@clear*****
Sun Apr 3 21:49:56 JST 2016
naoa 2016-04-03 21:49:56 +0900 (Sun, 03 Apr 2016) New Revision: ac4b8544e986867f324cf75f228adc53f0662ac6 https://github.com/groonga/groonga/commit/ac4b8544e986867f324cf75f228adc53f0662ac6 Merged 7e7735a: Merge pull request #519 from naoa/reduce-loop-ii-cursor-set-min Message: Reduce loop for seeking current chunk rid Modified files: lib/ii.c Modified: lib/ii.c (+13 -4) =================================================================== --- lib/ii.c 2016-04-03 11:31:19 +0900 (55136ea) +++ lib/ii.c 2016-04-03 21:49:56 +0900 (7fe0438) @@ -4206,6 +4206,8 @@ struct _grn_ii_cursor { uint32_t *ppseg; int weight; + + uint32_t curr_chunk_rid; }; static int @@ -4337,7 +4339,10 @@ grn_ii_cursor_open(grn_ctx *ctx, grn_ii *ii, grn_id tid, GRN_B_DEC(c->cinfo[i].size, c->cp); GRN_B_DEC(c->cinfo[i].dgap, c->cp); crid += c->cinfo[i].dgap; - if (crid < min) { c->curr_chunk = i + 1; } + if (crid < min) { + c->curr_chunk = i + 1; + c->curr_chunk_rid = crid; + } } if (chunk_is_reused(ctx, ii, c, chunk, c->buf->header.chunk_size)) { grn_ii_cursor_close(ctx, c); @@ -4368,10 +4373,11 @@ grn_ii_cursor_set_min(grn_ctx *ctx, grn_ii_cursor *c, grn_id min) if (grn_ii_cursor_set_min_enable) { c->min = min; - if (c->buf && c->pc.rid < c->min && c->curr_chunk < c->nchunks) { - uint32_t i, skip_chunk = 0; + if (c->buf && c->pc.rid < c->min && c->curr_chunk_rid < c-> min && c->curr_chunk < c->nchunks) { + uint32_t i, skip_chunk = c->curr_chunk - 1; grn_id rid; - for (i = 0, rid = GRN_ID_NIL; i < c->nchunks; i++) { + + for (i = skip_chunk, rid = c->curr_chunk_rid; i < c->nchunks; i++) { rid += c->cinfo[i].dgap; if (rid < c->min) { skip_chunk = i + 1; @@ -4384,6 +4390,7 @@ grn_ii_cursor_set_min(grn_ctx *ctx, grn_ii_cursor *c, grn_id min) c->pc.rid = rid; c->curr_chunk = skip_chunk; c->crp = c->cdp + c->cdf; + c->curr_chunk_rid = rid; } } } @@ -4481,6 +4488,7 @@ grn_ii_cursor_next(grn_ctx *ctx, grn_ii_cursor *c) } c->cpp = c->rdv[j].data; } + c->curr_chunk_rid = c->pc.rid; c->pc.rid = 0; c->pc.sid = 0; c->pc.rest = 0; @@ -7345,6 +7353,7 @@ grn_ii_cursor_next_all(grn_ctx *ctx, grn_ii_cursor *c) } c->cpp = c->rdv[j].data; } + c->curr_chunk_rid = c->pc.rid; c->pc.rid = 0; c->pc.sid = 0; c->pc.rest = 0; -------------- next part -------------- HTML����������������������������...다운로드