[Groonga-commit] groonga/groonga at 19cbbf4 [master] Use GRN_MALLOCN() instead of GRN_PVECTOR for non grn_obj **

Zurück zum Archiv-Index

Kouhei Sutou null+****@clear*****
Sun Jun 19 21:30:13 JST 2016


Kouhei Sutou	2016-06-19 21:30:13 +0900 (Sun, 19 Jun 2016)

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

  Message:
    Use GRN_MALLOCN() instead of GRN_PVECTOR for non grn_obj **
    
    Because GRN_PVECTOR is for grn_obj **.

  Modified files:
    lib/grn_token_cursor.h
    lib/token_cursor.c

  Modified: lib/grn_token_cursor.h (+1 -1)
===================================================================
--- lib/grn_token_cursor.h    2016-06-19 16:31:07 +0900 (40ccaed)
+++ lib/grn_token_cursor.h    2016-06-19 21:30:13 +0900 (e946f14)
@@ -60,7 +60,7 @@ typedef struct {
   grn_proc_ctx pctx;
   struct {
     grn_obj *objects;
-    grn_obj user_data_ptrs;
+    void **data;
   } token_filters;
   uint32_t variant;
   grn_obj *nstr;

  Modified: lib/token_cursor.c (+28 -13)
===================================================================
--- lib/token_cursor.c    2016-06-19 16:31:07 +0900 (8cc9831)
+++ lib/token_cursor.c    2016-06-19 21:30:13 +0900 (690c7b3)
@@ -27,23 +27,31 @@ grn_token_cursor_open_initialize_token_filters(grn_ctx *ctx,
   grn_obj *token_filters = token_cursor->token_filters.objects;
   unsigned int i, n_token_filters;
 
+  token_cursor->token_filters.data = NULL;
+
   if (token_filters) {
     n_token_filters = GRN_BULK_VSIZE(token_filters) / sizeof(grn_obj *);
   } else {
     n_token_filters = 0;
   }
-  GRN_PTR_INIT(&(token_cursor->token_filters.user_data_ptrs),
-               GRN_OBJ_VECTOR, GRN_ID_NIL);
+
+  if (n_token_filters == 0) {
+    return;
+  }
+
+  token_cursor->token_filters.data = GRN_MALLOCN(void *, n_token_filters);
+  if (!token_cursor->token_filters.data) {
+    return;
+  }
 
   for (i = 0; i < n_token_filters; i++) {
     grn_obj *token_filter_object = GRN_PTR_VALUE_AT(token_filters, i);
     grn_proc *token_filter = (grn_proc *)token_filter_object;
-    void *user_data;
 
-    user_data = token_filter->callbacks.token_filter.init(ctx,
-                                                          token_cursor->table,
-                                                          token_cursor->mode);
-    GRN_PTR_PUT(ctx, &(token_cursor->token_filters.user_data_ptrs), user_data);
+    token_cursor->token_filters.data[i] =
+      token_filter->callbacks.token_filter.init(ctx,
+                                                token_cursor->table,
+                                                token_cursor->mode);
   }
 }
 
@@ -114,7 +122,9 @@ grn_token_cursor_open(grn_ctx *ctx, grn_obj *table,
     }
   }
 
-  grn_token_cursor_open_initialize_token_filters(ctx, token_cursor);
+  if (ctx->rc == GRN_SUCCESS) {
+    grn_token_cursor_open_initialize_token_filters(ctx, token_cursor);
+  }
 
   if (ctx->rc) {
     grn_token_cursor_close(ctx, token_cursor);
@@ -154,7 +164,7 @@ grn_token_cursor_next_apply_token_filters(grn_ctx *ctx,
   for (i = 0; i < n_token_filters; i++) {
     grn_obj *token_filter_object = GRN_PTR_VALUE_AT(token_filters, i);
     grn_proc *token_filter = (grn_proc *)token_filter_object;
-    void *user_data = GRN_PTR_VALUE_AT(&(token_cursor->token_filters.user_data_ptrs), i);
+    void *data = token_cursor->token_filters.data[i];
 
 #define SKIP_FLAGS\
     (GRN_TOKEN_SKIP |\
@@ -167,7 +177,7 @@ grn_token_cursor_next_apply_token_filters(grn_ctx *ctx,
     token_filter->callbacks.token_filter.filter(ctx,
                                                 &current_token,
                                                 &next_token,
-                                                user_data);
+                                                data);
     GRN_TEXT_SET(ctx, &(current_token.data),
                  GRN_TEXT_VALUE(&(next_token.data)),
                  GRN_TEXT_LEN(&(next_token.data)));
@@ -336,14 +346,19 @@ grn_token_cursor_close_token_filters(grn_ctx *ctx,
   } else {
     n_token_filters = 0;
   }
+
+  if (n_token_filters == 0) {
+    return;
+  }
+
   for (i = 0; i < n_token_filters; i++) {
     grn_obj *token_filter_object = GRN_PTR_VALUE_AT(token_filters, i);
     grn_proc *token_filter = (grn_proc *)token_filter_object;
-    void *user_data = GRN_PTR_VALUE_AT(&(token_cursor->token_filters.user_data_ptrs), i);
+    void *data = token_cursor->token_filters.data[i];
 
-    token_filter->callbacks.token_filter.fin(ctx, user_data);
+    token_filter->callbacks.token_filter.fin(ctx, data);
   }
-  GRN_OBJ_FIN(ctx, &(token_cursor->token_filters.user_data_ptrs));
+  GRN_FREE(token_cursor->token_filters.data);
 }
 
 grn_rc
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Zurück zum Archiv-Index