[Groonga-commit] groonga/groonga at f581c8e [master] grn_ts: add grn_ts_expr_parser_reserve_stack()

Back to archive index

susumu.yata null+****@clear*****
Fri Sep 18 10:05:12 JST 2015


susumu.yata	2015-09-18 10:05:12 +0900 (Fri, 18 Sep 2015)

  New Revision: f581c8e77fca2a3475501a6f2f9b8ea67baaca10
  https://github.com/groonga/groonga/commit/f581c8e77fca2a3475501a6f2f9b8ea67baaca10

  Message:
    grn_ts: add grn_ts_expr_parser_reserve_stack()

  Modified files:
    lib/ts.c

  Modified: lib/ts.c (+22 -0)
===================================================================
--- lib/ts.c    2015-09-17 22:49:39 +0900 (f0e6831)
+++ lib/ts.c    2015-09-18 10:05:12 +0900 (ad06ad3)
@@ -4491,6 +4491,28 @@ grn_ts_expr_parser_tokenize(grn_ctx *ctx, grn_ts_expr_parser *parser,
   return GRN_SUCCESS;
 }
 
+/* grn_ts_expr_parser_reserve_stack() extends a stack. */
+static grn_rc
+grn_ts_expr_parser_reserve_stack(grn_ctx *ctx, grn_ts_expr_parser *parser) {
+  size_t i, n_bytes, new_size;
+  grn_ts_expr_token **new_stack;
+  if (parser->stack_depth < parser->stack_size) {
+    return GRN_SUCCESS;
+  }
+  new_size = parser->stack_size ? (parser->stack_size * 2) : 1;
+  n_bytes = sizeof(grn_ts_expr_token *) * new_size;
+  new_stack = GRN_REALLOC(parser->stack, n_bytes);
+  if (!new_stack) {
+    return GRN_NO_MEMORY_AVAILABLE;
+  }
+  for (i = parser->stack_size; i < new_size; i++) {
+    new_stack[i] = NULL;
+  }
+  parser->stack = new_stack;
+  parser->stack_size = new_size;
+  return GRN_SUCCESS;
+}
+
 /* grn_ts_expr_parser_analyze_token() analyzes a token. */
 static grn_rc
 grn_ts_expr_parser_analyze_token(grn_ctx *ctx, grn_ts_expr_parser *parser,
-------------- next part --------------
HTML����������������������������...
Download 



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