[Groonga-commit] groonga/groonga at 19ca944 [master] grn_ii_buffer: use member variables instead of local variables

Back to archive index

susumu.yata null+****@clear*****
Wed Aug 12 18:27:17 JST 2015


susumu.yata	2015-08-12 18:27:17 +0900 (Wed, 12 Aug 2015)

  New Revision: 19ca944f49508eda35d6595713e6ba56efc5f2bc
  https://github.com/groonga/groonga/commit/19ca944f49508eda35d6595713e6ba56efc5f2bc

  Message:
    grn_ii_buffer: use member variables instead of local variables
    
    GitHub: #374

  Modified files:
    lib/ii.c

  Modified: lib/ii.c (+36 -32)
===================================================================
--- lib/ii.c    2015-08-12 12:03:22 +0900 (8faa373)
+++ lib/ii.c    2015-08-12 18:27:17 +0900 (d489192)
@@ -7177,6 +7177,9 @@ struct _grn_ii_buffer {
   size_t packed_buf_size;
   size_t packed_len;
   size_t total_chunk_size;
+  ii_buffer_value *values;
+  unsigned int nvalues;
+  unsigned int max_nvalues;
 };
 
 static ii_buffer_block *
@@ -7888,6 +7891,9 @@ grn_ii_buffer_open(grn_ctx *ctx, grn_ii *ii,
       ii_buffer->packed_len = 0;
       ii_buffer->packed_buf_size = 0;
       ii_buffer->total_chunk_size = 0;
+      ii_buffer->values = NULL;
+      ii_buffer->nvalues = 0;
+      ii_buffer->max_nvalues = 0;
       if (ii_buffer->counters) {
         ii_buffer->block_buf = GRN_MALLOCN(grn_id, II_BUFFER_BLOCK_SIZE);
         if (ii_buffer->block_buf) {
@@ -8044,30 +8050,35 @@ grn_ii_buffer_close(grn_ctx *ctx, grn_ii_buffer *ii_buffer)
     GRN_FREE(ii_buffer->blocks);
   }
   GRN_FREE(ii_buffer);
+  if (ii_buffer->values) {
+    GRN_FREE(ii_buffer->values);
+  }
   return ctx->rc;
 }
 
 static void
-ii_buffer_values_append(grn_ctx *ctx, ii_buffer_value **values,
-                        unsigned *nvalues, unsigned *max_nvalues,
+ii_buffer_values_append(grn_ctx *ctx, grn_ii_buffer *ii_buffer,
                         unsigned int sid, unsigned weight,
                         const char *p, uint32_t len) {
-  if (*nvalues == *max_nvalues) {
-    unsigned new_max_nvalues = *max_nvalues ? (*max_nvalues * 2) : 1;
+  if (ii_buffer->nvalues == ii_buffer->max_nvalues) {
+    unsigned new_max_nvalues = ii_buffer->max_nvalues * 2;
+    if (new_max_nvalues == 0) {
+      new_max_nvalues = 1;
+    }
     unsigned new_size = new_max_nvalues * sizeof(ii_buffer_value);
     ii_buffer_value *new_values;
-    new_values = (ii_buffer_value *)GRN_REALLOC(*values, new_size);
+    new_values = (ii_buffer_value *)GRN_REALLOC(ii_buffer->values, new_size);
     if (new_values) {
-      *values = new_values;
-      *max_nvalues = new_max_nvalues;
+      ii_buffer->values = new_values;
+      ii_buffer->max_nvalues = new_max_nvalues;
     }
   }
-  if (*values) {
-    (*values)[*nvalues].sid = sid;
-    (*values)[*nvalues].weight = weight;
-    (*values)[*nvalues].p = p;
-    (*values)[*nvalues].len = len;
-    ++*nvalues;
+  if (ii_buffer->values) {
+    ii_buffer->values[ii_buffer->nvalues].sid = sid;
+    ii_buffer->values[ii_buffer->nvalues].weight = weight;
+    ii_buffer->values[ii_buffer->nvalues].p = p;
+    ii_buffer->values[ii_buffer->nvalues].len = len;
+    ii_buffer->nvalues++;
   }
 }
 
@@ -8085,9 +8096,6 @@ grn_ii_buffer_parse(grn_ctx *ctx, grn_ii_buffer *ii_buffer,
     if ((tc = grn_table_cursor_open(ctx, target,
                                     NULL, 0, NULL, 0, 0, -1,
                                     GRN_CURSOR_BY_ID))) {
-      ii_buffer_value *values = NULL;
-      unsigned int nvalues = 0;
-      unsigned int max_nvalues = 0;
       uint32_t est_len;
       grn_id rid;
       while ((rid = grn_table_cursor_next(ctx, tc)) != GRN_ID_NIL) {
@@ -8104,8 +8112,8 @@ grn_ii_buffer_parse(grn_ctx *ctx, grn_ii_buffer *ii_buffer,
           }
           switch (rv->header.type) {
           case GRN_BULK :
-            ii_buffer_values_append(ctx, &values, &nvalues, &max_nvalues, sid,
-                                    0, GRN_TEXT_VALUE(rv), GRN_TEXT_LEN(rv));
+            ii_buffer_values_append(ctx, ii_buffer, sid, 0,
+                                    GRN_TEXT_VALUE(rv), GRN_TEXT_LEN(rv));
             break;
           case GRN_UVECTOR :
             {
@@ -8114,8 +8122,7 @@ grn_ii_buffer_parse(grn_ctx *ctx, grn_ii_buffer *ii_buffer,
               size = grn_uvector_size(ctx, rv);
               elem_size = grn_uvector_element_size(ctx, rv);
               for (j = 0; j < size; j++) {
-                ii_buffer_values_append(ctx, &values, &nvalues, &max_nvalues,
-                                        sid, 0,
+                ii_buffer_values_append(ctx, ii_buffer, sid, 0,
                                         GRN_BULK_HEAD(rv) + (elem_size * j),
                                         elem_size);
               }
@@ -8132,8 +8139,7 @@ grn_ii_buffer_parse(grn_ctx *ctx, grn_ii_buffer *ii_buffer,
                 if (section->length == 0) {
                   continue;
                 }
-                ii_buffer_values_append(ctx, &values, &nvalues, &max_nvalues,
-                                        sid, section->weight,
+                ii_buffer_values_append(ctx, ii_buffer, sid, section->weight,
                                         head + section->offset,
                                         section->length);
               }
@@ -8147,8 +8153,8 @@ grn_ii_buffer_parse(grn_ctx *ctx, grn_ii_buffer *ii_buffer,
         }
 
         est_len = 0;
-        for (j = 0; j < nvalues; j++) {
-          est_len += values[j].len * 2 + 2;
+        for (j = 0; j < ii_buffer->nvalues; j++) {
+          est_len += ii_buffer->values[j].len * 2 + 2;
         }
         if (ii_buffer->block_buf_size < ii_buffer->block_pos + est_len) {
           grn_ii_buffer_flush(ctx, ii_buffer);
@@ -8162,15 +8168,13 @@ grn_ii_buffer_parse(grn_ctx *ctx, grn_ii_buffer *ii_buffer,
           }
         }
 
-        for (j = 0; j < nvalues; j++) {
-          grn_ii_buffer_tokenize(ctx, ii_buffer, rid, values[j].sid,
-                                 values[j].weight, values[j].p,
-                                 values[j].len);
+        for (j = 0; j < ii_buffer->nvalues; j++) {
+          grn_ii_buffer_tokenize(ctx, ii_buffer, rid, ii_buffer->values[j].sid,
+                                 ii_buffer->values[j].weight,
+                                 ii_buffer->values[j].p,
+                                 ii_buffer->values[j].len);
         }
-        nvalues = 0;
-      }
-      if (values) {
-        GRN_FREE(values);
+        ii_buffer->nvalues = 0;
       }
       grn_table_cursor_close(ctx, tc);
     }
-------------- next part --------------
HTML����������������������������...
Download 



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