[Groonga-commit] groonga/groonga at cd92faf [master] Add some API to handle scan_info from outside expr.c

Back to archive index

wanabe null+****@clear*****
Thu Oct 3 18:12:02 JST 2013


wanabe	2013-10-03 18:12:02 +0900 (Thu, 03 Oct 2013)

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

  Merged f61480e: Merge pull request #109 from wanabe/scaninfo-api2

  Message:
    Add some API to handle scan_info from outside expr.c

  Modified files:
    lib/expr.c
    lib/expr.h

  Modified: lib/expr.c (+97 -0)
===================================================================
--- lib/expr.c    2013-10-04 01:40:05 +0900 (fb10c4b)
+++ lib/expr.c    2013-10-03 18:12:02 +0900 (68e9cd3)
@@ -3943,6 +3943,103 @@ get_weight(grn_ctx *ctx, grn_expr_code *ec)
   }
 }
 
+scan_info *
+grn_scan_info_alloc(grn_ctx *ctx, int st)
+{
+  scan_info *si = GRN_MALLOCN(scan_info, 1);
+  if (si) {
+    GRN_INT32_INIT(&si->wv, GRN_OBJ_VECTOR);
+    GRN_PTR_INIT(&si->index, GRN_OBJ_VECTOR, GRN_ID_NIL);
+    si->logical_op = GRN_OP_OR;
+    si->flags = SCAN_PUSH;
+    si->nargs = 0;
+    si->start = st;
+  }
+  return si;
+}
+
+void
+grn_scan_info_free(grn_ctx *ctx, scan_info *si)
+{
+  SI_FREE(si);
+}
+
+void
+grn_scan_info_put_index(grn_ctx *ctx, scan_info *si, grn_obj *index, uint32_t sid, int32_t weight)
+{
+  scan_info_put_index(ctx, si, index, sid, weight);
+}
+
+int32_t
+grn_expr_code_get_weight(grn_ctx *ctx, grn_expr_code *ec)
+{
+  return get_weight(ctx, ec);
+}
+
+int
+grn_scan_info_get_flags(scan_info *si)
+{
+  return si->flags;
+}
+
+void
+grn_scan_info_set_flags(scan_info *si, int flags)
+{
+  si->flags = flags;
+}
+
+grn_operator
+grn_scan_info_get_logical_op(scan_info *si)
+{
+  return si->logical_op;
+}
+
+void
+grn_scan_info_set_logical_op(scan_info *si, grn_operator logical_op)
+{
+  si->logical_op = logical_op;
+}
+
+void
+grn_scan_info_set_op(scan_info *si, grn_operator op)
+{
+  si->op = op;
+}
+
+void
+grn_scan_info_set_end(scan_info *si, uint32_t end)
+{
+  si->end = end;
+}
+
+void
+grn_scan_info_set_query(scan_info *si, grn_obj *query)
+{
+  si->query = query;
+}
+
+grn_bool
+grn_scan_info_push_arg(scan_info *si, grn_obj *arg)
+{
+  if (si->nargs < 8) {
+    si->args[si->nargs++] = arg;
+    return GRN_TRUE;
+  }
+  return GRN_FALSE;
+}
+
+void
+grn_scan_info_each_arg(grn_ctx *ctx, scan_info *si,
+                       grn_scan_info_each_arg_callback callback, void *user_data)
+{
+  grn_obj **p, **pe;
+  p = si->args;
+  pe = si->args + si->nargs;
+  for (; p < pe; p++) {
+    callback(ctx, *p, user_data);
+  }
+}
+
 static scan_info **
 scan_info_build(grn_ctx *ctx, grn_obj *expr, int *n,
                 grn_operator op, uint32_t size)

  Modified: lib/expr.h (+25 -0)
===================================================================
--- lib/expr.h    2013-10-04 01:40:05 +0900 (ad6cf3b)
+++ lib/expr.h    2013-10-03 18:12:02 +0900 (cf3ddef)
@@ -19,6 +19,8 @@
 #ifndef GRN_EXPR_H
 #define GRN_EXPR_H
 
+#include "db.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -37,6 +39,29 @@ typedef enum {
 } scan_stat;
 
 typedef struct _grn_scan_info scan_info;
+typedef grn_bool (*grn_scan_info_each_arg_callback)(grn_ctx *ctx, grn_obj *obj, void *user_data);
+
+scan_info *grn_scan_info_alloc(grn_ctx *ctx, int start);
+void grn_scan_info_free(grn_ctx *ctx, scan_info *si);
+void grn_scan_info_put_index(grn_ctx *ctx, scan_info *si, grn_obj *index,
+                             uint32_t sid, int32_t weight);
+grn_bool grn_scan_info_check_flags(scan_info *si, int flags);
+void grn_scan_info_reset_flags(scan_info *si, int flags);
+int grn_scan_info_get_flags(scan_info *si);
+void grn_scan_info_set_flags(scan_info *si, int flags);
+void grn_scan_info_unset_flags(scan_info *si, int flags);
+grn_operator grn_scan_info_get_logical_op(scan_info *si);
+void grn_scan_info_set_logical_op(scan_info *si, grn_operator logical_op);
+grn_operator grn_scan_info_get_op(scan_info *si);
+void grn_scan_info_set_op(scan_info *si, grn_operator op);
+void grn_scan_info_set_end(scan_info *si, uint32_t end);
+void grn_scan_info_set_query(scan_info *si, grn_obj *query);
+grn_bool grn_scan_info_push_arg(scan_info *si, grn_obj *arg);
+void grn_scan_info_each_arg(grn_ctx *ctx, scan_info *si,
+                                grn_scan_info_each_arg_callback callback,
+                                void *user_data);
+
+int32_t grn_expr_code_get_weight(grn_ctx *ctx, grn_expr_code *ec);
 
 #ifdef __cplusplus
 }
-------------- next part --------------
HTML����������������������������...
Download 



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