[Groonga-commit] groonga/groonga at 720bd52 [master] grn_ts: prefer grn_ts_buf_reserve() rather than grn_ts_buf_write()

Back to archive index

susumu.yata null+****@clear*****
Wed Sep 9 15:48:17 JST 2015


susumu.yata	2015-09-09 15:48:17 +0900 (Wed, 09 Sep 2015)

  New Revision: 720bd52a1e91290267654f41b13f29c4aeb1ab32
  https://github.com/groonga/groonga/commit/720bd52a1e91290267654f41b13f29c4aeb1ab32

  Message:
    grn_ts: prefer grn_ts_buf_reserve() rather than grn_ts_buf_write()
    
    GitHub: #394

  Modified files:
    lib/ts.c

  Modified: lib/ts.c (+12 -13)
===================================================================
--- lib/ts.c    2015-09-09 15:16:06 +0900 (76585e8)
+++ lib/ts.c    2015-09-09 15:48:17 +0900 (ed2cb1e)
@@ -1750,26 +1750,25 @@ grn_ts_expr_column_node_evaluate_ref_vector(grn_ctx *ctx,
     node->buf.pos = 0;\
     for (i = 0; i < n_in; i++) {\
       grn_rc rc;\
-      size_t n_bytes;\
+      size_t n_bytes, new_n_bytes;\
       node->body_buf.pos = 0;\
       rc = grn_ts_ja_get_value(ctx, (grn_ja *)node->column, in[i].id,\
                                &node->body_buf, &n_bytes);\
       if (rc == GRN_SUCCESS) {\
-        type ## _t *src_ptr = (type ## _t *)node->body_buf.ptr;\
         out_ptr[i].size = n_bytes / sizeof(type ## _t);\
+      } else {\
+        out_ptr[i].size = 0;\
+      }\
+      new_n_bytes = node->buf.pos + (sizeof(grn_ts_int) * out_ptr[i].size);\
+      rc = grn_ts_buf_reserve(ctx, &node->buf, new_n_bytes);\
+      if (rc == GRN_SUCCESS) {\
+        type ## _t *src_ptr = (type ## _t *)node->body_buf.ptr;\
+        grn_ts_int *dest_ptr;\
+        dest_ptr = (grn_ts_int *)((char *)node->buf.ptr + node->buf.pos);\
         for (j = 0; j < out_ptr[i].size; j++) {\
-          grn_ts_int value = (grn_ts_int)src_ptr[j];\
-          grn_rc rc = grn_ts_buf_write(ctx, &node->buf, &value,\
-                                       sizeof(value));\
-          if (rc != GRN_SUCCESS) {\
-            if (j) {\
-              /* Cancel written values. */\
-              node->buf.pos -= sizeof(value) * j;\
-            }\
-            out_ptr[i].size = 0;\
-            break;\
-          }\
+          dest_ptr[j] = (grn_ts_int)src_ptr[j];\
         }\
+        node->buf.pos = new_n_bytes;\
       } else {\
         out_ptr[i].size = 0;\
       }\
-------------- next part --------------
HTML����������������������������...
Download 



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