[Groonga-commit] groonga/groonga at ac4b854 [master] Reduce loop for seeking current chunk rid

Back to archive index

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����������������������������...
Télécharger 



More information about the Groonga-commit mailing list
Back to archive index