[Groonga-commit] groonga/groonga at 5c5ea3f [master] mrb: make grn_operator object for easy to debug

Back to archive index

Kouhei Sutou null+****@clear*****
Mon Feb 23 13:15:18 JST 2015


Kouhei Sutou	2015-02-23 13:15:18 +0900 (Mon, 23 Feb 2015)

  New Revision: 5c5ea3f6829b3f103cf57de130a2d12d66b2b146
  https://github.com/groonga/groonga/commit/5c5ea3f6829b3f103cf57de130a2d12d66b2b146

  Message:
    mrb: make grn_operator object for easy to debug

  Added files:
    lib/mrb/scripts/operator.rb
  Modified files:
    lib/ctx_impl_mrb.c
    lib/grn_ctx_impl.h
    lib/mrb/mrb_expr.c
    lib/mrb/mrb_object.c
    lib/mrb/mrb_operator.c
    lib/mrb/mrb_operator.h
    lib/mrb/scripts/initialize/pre.rb
    lib/mrb/scripts/sources.am

  Modified: lib/ctx_impl_mrb.c (+1 -0)
===================================================================
--- lib/ctx_impl_mrb.c    2015-02-23 13:12:57 +0900 (05692ee)
+++ lib/ctx_impl_mrb.c    2015-02-23 13:15:18 +0900 (361a13a)
@@ -153,6 +153,7 @@ grn_ctx_impl_mrb_init(grn_ctx *ctx)
     ctx->impl->mrb.checked_procs = NULL;
     ctx->impl->mrb.registered_plugins = NULL;
     ctx->impl->mrb.builtin.time_class = NULL;
+    ctx->impl->mrb.groonga.operator_class = NULL;
   } else {
     mrb_state *mrb;
 

  Modified: lib/grn_ctx_impl.h (+3 -0)
===================================================================
--- lib/grn_ctx_impl.h    2015-02-23 13:12:57 +0900 (9e0b567)
+++ lib/grn_ctx_impl.h    2015-02-23 13:15:18 +0900 (ac2a886)
@@ -111,6 +111,9 @@ struct _grn_mrb_data {
   struct {
     struct RClass *time_class;
   } builtin;
+  struct {
+    struct RClass *operator_class;
+  } groonga;
 };
 #endif
 

  Modified: lib/mrb/mrb_expr.c (+21 -10)
===================================================================
--- lib/mrb/mrb_expr.c    2015-02-23 13:12:57 +0900 (6ece6db)
+++ lib/mrb/mrb_expr.c    2015-02-23 13:15:18 +0900 (a80d24d)
@@ -33,6 +33,7 @@
 #include "mrb_accessor.h"
 #include "mrb_ctx.h"
 #include "mrb_expr.h"
+#include "mrb_operator.h"
 #include "mrb_converter.h"
 #include "mrb_options.h"
 
@@ -122,17 +123,19 @@ mrb_grn_scan_info_get_op(mrb_state *mrb, mrb_value self)
 
   si = DATA_PTR(self);
   op = grn_scan_info_get_op(si);
-  return mrb_fixnum_value(op);
+  return grn_mrb_value_from_operator(mrb, op);
 }
 
 static mrb_value
 mrb_grn_scan_info_set_op(mrb_state *mrb, mrb_value self)
 {
   scan_info *si;
+  mrb_value mrb_op;
   grn_operator op;
 
-  mrb_get_args(mrb, "i", &op);
+  mrb_get_args(mrb, "o", &mrb_op, &op);
   si = DATA_PTR(self);
+  op = grn_mrb_value_to_operator(mrb, mrb_op);
   grn_scan_info_set_op(si, op);
   return self;
 }
@@ -192,10 +195,12 @@ static mrb_value
 mrb_grn_scan_info_set_logical_op(mrb_state *mrb, mrb_value self)
 {
   scan_info *si;
+  mrb_value mrb_logical_op;
   grn_operator logical_op;
 
-  mrb_get_args(mrb, "i", &logical_op);
+  mrb_get_args(mrb, "o", &mrb_logical_op);
   si = DATA_PTR(self);
+  logical_op = grn_mrb_value_to_operator(mrb, mrb_logical_op);
   grn_scan_info_set_logical_op(si, logical_op);
   return self;
 }
@@ -208,7 +213,7 @@ mrb_grn_scan_info_get_logical_op(mrb_state *mrb, mrb_value self)
 
   si = DATA_PTR(self);
   logical_op = grn_scan_info_get_logical_op(si);
-  return mrb_fixnum_value(logical_op);
+  return grn_mrb_value_from_operator(mrb, logical_op);
 }
 
 static mrb_value
@@ -388,7 +393,7 @@ mrb_grn_expr_code_get_op(mrb_state *mrb, mrb_value self)
   grn_expr_code *expr_code;
 
   expr_code = DATA_PTR(self);
-  return mrb_fixnum_value(expr_code->op);
+  return grn_mrb_value_from_operator(mrb, expr_code->op);
 }
 
 static mrb_value
@@ -562,13 +567,15 @@ mrb_grn_expression_append_object(mrb_state *mrb, mrb_value self)
   grn_obj *expr;
   mrb_value mrb_object;
   grn_obj *object;
+  mrb_value mrb_op;
   grn_operator op;
   int n_args;
 
   expr = DATA_PTR(self);
-  mrb_get_args(mrb, "oii", &mrb_object, &op, &n_args);
+  mrb_get_args(mrb, "ooi", &mrb_object, &mrb_op, &n_args);
 
   object = DATA_PTR(mrb_object);
+  op = grn_mrb_value_to_operator(mrb, mrb_op);
   grn_expr_append_obj(ctx, expr, object, op, n_args);
   grn_mrb_ctx_check(mrb);
 
@@ -581,12 +588,14 @@ mrb_grn_expression_append_constant(mrb_state *mrb, mrb_value self)
   grn_ctx *ctx = (grn_ctx *)mrb->ud;
   grn_obj *expr;
   mrb_value mrb_constant;
+  mrb_value mrb_op;
   grn_operator op;
   int n_args;
 
   expr = DATA_PTR(self);
-  mrb_get_args(mrb, "oii", &mrb_constant, &op, &n_args);
+  mrb_get_args(mrb, "ooi", &mrb_constant, &mrb_op, &n_args);
 
+  op = grn_mrb_value_to_operator(mrb, mrb_op);
   switch (mrb_type(mrb_constant)) {
   case MRB_TT_FALSE :
     if (mrb_nil_p(mrb_constant)) {
@@ -674,12 +683,14 @@ mrb_grn_expression_append_operator(mrb_state *mrb, mrb_value self)
 {
   grn_ctx *ctx = (grn_ctx *)mrb->ud;
   grn_obj *expr;
-  grn_operator op;
+  mrb_value mrb_op;
   int n_args;
+  grn_operator op;
 
   expr = DATA_PTR(self);
-  mrb_get_args(mrb, "ii", &op, &n_args);
+  mrb_get_args(mrb, "oi", &mrb_op, &n_args);
 
+  op = grn_mrb_value_to_operator(mrb, mrb_op);
   grn_expr_append_op(ctx, expr, op, n_args);
   grn_mrb_ctx_check(mrb);
 
@@ -810,7 +821,7 @@ grn_mrb_scan_info_build(grn_ctx *ctx, grn_obj *expr, int *n,
 
   mrb_expression = grn_mrb_value_from_grn_obj(mrb, expr);
   mrb_sis = mrb_funcall(mrb, mrb_expression, "build_scan_info", 2,
-                        mrb_fixnum_value(op),
+                        grn_mrb_value_from_operator(mrb, op),
                         mrb_fixnum_value(size));
 
   if (mrb_nil_p(mrb_sis)) {

  Modified: lib/mrb/mrb_object.c (+5 -2)
===================================================================
--- lib/mrb/mrb_object.c    2015-02-23 13:12:57 +0900 (59f715c)
+++ lib/mrb/mrb_object.c    2015-02-23 13:15:18 +0900 (b61c7b3)
@@ -1,6 +1,6 @@
 /* -*- c-basic-offset: 2 -*- */
 /*
-  Copyright(C) 2013-2014 Brazil
+  Copyright(C) 2013-2015 Brazil
 
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
@@ -27,6 +27,7 @@
 
 #include "../grn_mrb.h"
 #include "mrb_object.h"
+#include "mrb_operator.h"
 #include "mrb_converter.h"
 
 static mrb_value
@@ -89,15 +90,17 @@ object_find_index(mrb_state *mrb, mrb_value self)
   grn_ctx *ctx = (grn_ctx *)mrb->ud;
   grn_obj *object;
   mrb_value mrb_operator;
+  grn_operator operator;
   grn_obj *index;
   int n_indexes;
   int section_id;
 
   mrb_get_args(mrb, "o", &mrb_operator);
   object = DATA_PTR(self);
+  operator = grn_mrb_value_to_operator(mrb, mrb_operator);
   n_indexes = grn_column_index(ctx,
                                object,
-                               mrb_fixnum(mrb_operator),
+                               operator,
                                &index,
                                1,
                                &section_id);

  Modified: lib/mrb/mrb_operator.c (+121 -158)
===================================================================
--- lib/mrb/mrb_operator.c    2015-02-23 13:12:57 +0900 (ca2fc74)
+++ lib/mrb/mrb_operator.c    2015-02-23 13:15:18 +0900 (59f68ee)
@@ -1,6 +1,6 @@
 /* -*- c-basic-offset: 2 -*- */
 /*
-  Copyright(C) 2014 Brazil
+  Copyright(C) 2014-2015 Brazil
 
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
@@ -23,168 +23,131 @@
 
 #include "mrb_operator.h"
 
+mrb_value
+grn_mrb_value_from_operator(mrb_state *mrb, grn_operator op)
+{
+  grn_ctx *ctx = (grn_ctx *)(mrb->ud);
+  grn_mrb_data *data = &(ctx->impl->mrb);
+  mrb_value mrb_op_raw;
+  mrb_value mrb_op;
+
+  mrb_op_raw = mrb_fixnum_value(op);
+  mrb_op = mrb_funcall(mrb, mrb_obj_value(data->groonga.operator_class),
+                       "find", 1, mrb_op_raw);
+  if (mrb_nil_p(mrb_op)) {
+    return mrb_op_raw;
+  } else {
+    return mrb_op;
+  }
+}
+
+grn_operator
+grn_mrb_value_to_operator(mrb_state *mrb, mrb_value mrb_op)
+{
+  if (!mrb_fixnum_p(mrb_op)) {
+    mrb_op = mrb_funcall(mrb, mrb_op, "value", 0);
+  }
+
+  return mrb_fixnum(mrb_op);
+}
+
 void
 grn_mrb_operator_init(grn_ctx *ctx)
 {
-  mrb_state *mrb = ctx->impl->mrb.state;
+  grn_mrb_data *data = &(ctx->impl->mrb);
+  mrb_state *mrb = data->state;
   struct RClass *module = ctx->impl->mrb.module;
-  struct RClass *operator_module;
+  struct RClass *klass;
+  mrb_value klass_obj;
+
+  klass = mrb_class_get_under(mrb, module, "Operator");
+  data->groonga.operator_class = klass;
+
+  klass_obj = mrb_obj_value(klass);
+#define DEFINE_OPERATOR(name)                                   \
+  mrb_funcall(mrb, klass_obj, "register", 1,                    \
+              mrb_funcall(mrb, klass_obj, "new", 2,             \
+                          mrb_str_new_lit(mrb, #name),          \
+                          mrb_fixnum_value(GRN_OP_ ## name)))
 
-  operator_module = mrb_define_module_under(mrb, module, "Operator");
+  DEFINE_OPERATOR(PUSH);
+  DEFINE_OPERATOR(POP);
+  DEFINE_OPERATOR(NOP);
+  DEFINE_OPERATOR(CALL);
+  DEFINE_OPERATOR(INTERN);
+  DEFINE_OPERATOR(GET_REF);
+  DEFINE_OPERATOR(GET_VALUE);
+  DEFINE_OPERATOR(AND);
+  DEFINE_OPERATOR(AND_NOT);
+  DEFINE_OPERATOR(OR);
+  DEFINE_OPERATOR(ASSIGN);
+  DEFINE_OPERATOR(STAR_ASSIGN);
+  DEFINE_OPERATOR(SLASH_ASSIGN);
+  DEFINE_OPERATOR(MOD_ASSIGN);
+  DEFINE_OPERATOR(PLUS_ASSIGN);
+  DEFINE_OPERATOR(MINUS_ASSIGN);
+  DEFINE_OPERATOR(SHIFTL_ASSIGN);
+  DEFINE_OPERATOR(SHIFTR_ASSIGN);
+  DEFINE_OPERATOR(SHIFTRR_ASSIGN);
+  DEFINE_OPERATOR(AND_ASSIGN);
+  DEFINE_OPERATOR(XOR_ASSIGN);
+  DEFINE_OPERATOR(OR_ASSIGN);
+  DEFINE_OPERATOR(JUMP);
+  DEFINE_OPERATOR(CJUMP);
+  DEFINE_OPERATOR(COMMA);
+  DEFINE_OPERATOR(BITWISE_OR);
+  DEFINE_OPERATOR(BITWISE_XOR);
+  DEFINE_OPERATOR(BITWISE_AND);
+  DEFINE_OPERATOR(BITWISE_NOT);
+  DEFINE_OPERATOR(EQUAL);
+  DEFINE_OPERATOR(NOT_EQUAL);
+  DEFINE_OPERATOR(LESS);
+  DEFINE_OPERATOR(GREATER);
+  DEFINE_OPERATOR(LESS_EQUAL);
+  DEFINE_OPERATOR(GREATER_EQUAL);
+  DEFINE_OPERATOR(IN);
+  DEFINE_OPERATOR(MATCH);
+  DEFINE_OPERATOR(NEAR);
+  DEFINE_OPERATOR(NEAR2);
+  DEFINE_OPERATOR(SIMILAR);
+  DEFINE_OPERATOR(TERM_EXTRACT);
+  DEFINE_OPERATOR(SHIFTL);
+  DEFINE_OPERATOR(SHIFTR);
+  DEFINE_OPERATOR(SHIFTRR);
+  DEFINE_OPERATOR(PLUS);
+  DEFINE_OPERATOR(MINUS);
+  DEFINE_OPERATOR(STAR);
+  DEFINE_OPERATOR(SLASH);
+  DEFINE_OPERATOR(MOD);
+  DEFINE_OPERATOR(DELETE);
+  DEFINE_OPERATOR(INCR);
+  DEFINE_OPERATOR(DECR);
+  DEFINE_OPERATOR(INCR_POST);
+  DEFINE_OPERATOR(DECR_POST);
+  DEFINE_OPERATOR(NOT);
+  DEFINE_OPERATOR(ADJUST);
+  DEFINE_OPERATOR(EXACT);
+  DEFINE_OPERATOR(LCP);
+  DEFINE_OPERATOR(PARTIAL);
+  DEFINE_OPERATOR(UNSPLIT);
+  DEFINE_OPERATOR(PREFIX);
+  DEFINE_OPERATOR(SUFFIX);
+  DEFINE_OPERATOR(GEO_DISTANCE1);
+  DEFINE_OPERATOR(GEO_DISTANCE2);
+  DEFINE_OPERATOR(GEO_DISTANCE3);
+  DEFINE_OPERATOR(GEO_DISTANCE4);
+  DEFINE_OPERATOR(GEO_WITHINP5);
+  DEFINE_OPERATOR(GEO_WITHINP6);
+  DEFINE_OPERATOR(GEO_WITHINP8);
+  DEFINE_OPERATOR(OBJ_SEARCH);
+  DEFINE_OPERATOR(EXPR_GET_VAR);
+  DEFINE_OPERATOR(TABLE_CREATE);
+  DEFINE_OPERATOR(TABLE_SELECT);
+  DEFINE_OPERATOR(TABLE_SORT);
+  DEFINE_OPERATOR(TABLE_GROUP);
+  DEFINE_OPERATOR(JSON_PUT);
+  DEFINE_OPERATOR(GET_MEMBER);
 
-  mrb_define_const(mrb, operator_module, "PUSH",
-                   mrb_fixnum_value(GRN_OP_PUSH));
-  mrb_define_const(mrb, operator_module, "POP",
-                   mrb_fixnum_value(GRN_OP_POP));
-  mrb_define_const(mrb, operator_module, "NOP",
-                   mrb_fixnum_value(GRN_OP_NOP));
-  mrb_define_const(mrb, operator_module, "CALL",
-                   mrb_fixnum_value(GRN_OP_CALL));
-  mrb_define_const(mrb, operator_module, "INTERN",
-                   mrb_fixnum_value(GRN_OP_INTERN));
-  mrb_define_const(mrb, operator_module, "GET_REF",
-                   mrb_fixnum_value(GRN_OP_GET_REF));
-  mrb_define_const(mrb, operator_module, "GET_VALUE",
-                   mrb_fixnum_value(GRN_OP_GET_VALUE));
-  mrb_define_const(mrb, operator_module, "AND",
-                   mrb_fixnum_value(GRN_OP_AND));
-  mrb_define_const(mrb, operator_module, "AND_NOT",
-                   mrb_fixnum_value(GRN_OP_AND_NOT));
-  mrb_define_const(mrb, operator_module, "OR",
-                   mrb_fixnum_value(GRN_OP_OR));
-  mrb_define_const(mrb, operator_module, "ASSIGN",
-                   mrb_fixnum_value(GRN_OP_ASSIGN));
-  mrb_define_const(mrb, operator_module, "STAR_ASSIGN",
-                   mrb_fixnum_value(GRN_OP_STAR_ASSIGN));
-  mrb_define_const(mrb, operator_module, "SLASH_ASSIGN",
-                   mrb_fixnum_value(GRN_OP_SLASH_ASSIGN));
-  mrb_define_const(mrb, operator_module, "MOD_ASSIGN",
-                   mrb_fixnum_value(GRN_OP_MOD_ASSIGN));
-  mrb_define_const(mrb, operator_module, "PLUS_ASSIGN",
-                   mrb_fixnum_value(GRN_OP_PLUS_ASSIGN));
-  mrb_define_const(mrb, operator_module, "MINUS_ASSIGN",
-                   mrb_fixnum_value(GRN_OP_MINUS_ASSIGN));
-  mrb_define_const(mrb, operator_module, "SHIFTL_ASSIGN",
-                   mrb_fixnum_value(GRN_OP_SHIFTL_ASSIGN));
-  mrb_define_const(mrb, operator_module, "SHIFTR_ASSIGN",
-                   mrb_fixnum_value(GRN_OP_SHIFTR_ASSIGN));
-  mrb_define_const(mrb, operator_module, "SHIFTRR_ASSIGN",
-                   mrb_fixnum_value(GRN_OP_SHIFTRR_ASSIGN));
-  mrb_define_const(mrb, operator_module, "AND_ASSIGN",
-                   mrb_fixnum_value(GRN_OP_AND_ASSIGN));
-  mrb_define_const(mrb, operator_module, "XOR_ASSIGN",
-                   mrb_fixnum_value(GRN_OP_XOR_ASSIGN));
-  mrb_define_const(mrb, operator_module, "OR_ASSIGN",
-                   mrb_fixnum_value(GRN_OP_OR_ASSIGN));
-  mrb_define_const(mrb, operator_module, "JUMP",
-                   mrb_fixnum_value(GRN_OP_JUMP));
-  mrb_define_const(mrb, operator_module, "CJUMP",
-                   mrb_fixnum_value(GRN_OP_CJUMP));
-  mrb_define_const(mrb, operator_module, "COMMA",
-                   mrb_fixnum_value(GRN_OP_COMMA));
-  mrb_define_const(mrb, operator_module, "BITWISE_OR",
-                   mrb_fixnum_value(GRN_OP_BITWISE_OR));
-  mrb_define_const(mrb, operator_module, "BITWISE_XOR",
-                   mrb_fixnum_value(GRN_OP_BITWISE_XOR));
-  mrb_define_const(mrb, operator_module, "BITWISE_AND",
-                   mrb_fixnum_value(GRN_OP_BITWISE_AND));
-  mrb_define_const(mrb, operator_module, "BITWISE_NOT",
-                   mrb_fixnum_value(GRN_OP_BITWISE_NOT));
-  mrb_define_const(mrb, operator_module, "EQUAL",
-                   mrb_fixnum_value(GRN_OP_EQUAL));
-  mrb_define_const(mrb, operator_module, "NOT_EQUAL",
-                   mrb_fixnum_value(GRN_OP_NOT_EQUAL));
-  mrb_define_const(mrb, operator_module, "LESS",
-                   mrb_fixnum_value(GRN_OP_LESS));
-  mrb_define_const(mrb, operator_module, "GREATER",
-                   mrb_fixnum_value(GRN_OP_GREATER));
-  mrb_define_const(mrb, operator_module, "LESS_EQUAL",
-                   mrb_fixnum_value(GRN_OP_LESS_EQUAL));
-  mrb_define_const(mrb, operator_module, "GREATER_EQUAL",
-                   mrb_fixnum_value(GRN_OP_GREATER_EQUAL));
-  mrb_define_const(mrb, operator_module, "IN",
-                   mrb_fixnum_value(GRN_OP_IN));
-  mrb_define_const(mrb, operator_module, "MATCH",
-                   mrb_fixnum_value(GRN_OP_MATCH));
-  mrb_define_const(mrb, operator_module, "NEAR",
-                   mrb_fixnum_value(GRN_OP_NEAR));
-  mrb_define_const(mrb, operator_module, "NEAR2",
-                   mrb_fixnum_value(GRN_OP_NEAR2));
-  mrb_define_const(mrb, operator_module, "SIMILAR",
-                   mrb_fixnum_value(GRN_OP_SIMILAR));
-  mrb_define_const(mrb, operator_module, "TERM_EXTRACT",
-                   mrb_fixnum_value(GRN_OP_TERM_EXTRACT));
-  mrb_define_const(mrb, operator_module, "SHIFTL",
-                   mrb_fixnum_value(GRN_OP_SHIFTL));
-  mrb_define_const(mrb, operator_module, "SHIFTR",
-                   mrb_fixnum_value(GRN_OP_SHIFTR));
-  mrb_define_const(mrb, operator_module, "SHIFTRR",
-                   mrb_fixnum_value(GRN_OP_SHIFTRR));
-  mrb_define_const(mrb, operator_module, "PLUS",
-                   mrb_fixnum_value(GRN_OP_PLUS));
-  mrb_define_const(mrb, operator_module, "MINUS",
-                   mrb_fixnum_value(GRN_OP_MINUS));
-  mrb_define_const(mrb, operator_module, "STAR",
-                   mrb_fixnum_value(GRN_OP_STAR));
-  mrb_define_const(mrb, operator_module, "SLASH",
-                   mrb_fixnum_value(GRN_OP_SLASH));
-  mrb_define_const(mrb, operator_module, "MOD",
-                   mrb_fixnum_value(GRN_OP_MOD));
-  mrb_define_const(mrb, operator_module, "DELETE",
-                   mrb_fixnum_value(GRN_OP_DELETE));
-  mrb_define_const(mrb, operator_module, "INCR",
-                   mrb_fixnum_value(GRN_OP_INCR));
-  mrb_define_const(mrb, operator_module, "DECR",
-                   mrb_fixnum_value(GRN_OP_DECR));
-  mrb_define_const(mrb, operator_module, "INCR_POST",
-                   mrb_fixnum_value(GRN_OP_INCR_POST));
-  mrb_define_const(mrb, operator_module, "DECR_POST",
-                   mrb_fixnum_value(GRN_OP_DECR_POST));
-  mrb_define_const(mrb, operator_module, "NOT",
-                   mrb_fixnum_value(GRN_OP_NOT));
-  mrb_define_const(mrb, operator_module, "ADJUST",
-                   mrb_fixnum_value(GRN_OP_ADJUST));
-  mrb_define_const(mrb, operator_module, "EXACT",
-                   mrb_fixnum_value(GRN_OP_EXACT));
-  mrb_define_const(mrb, operator_module, "LCP",
-                   mrb_fixnum_value(GRN_OP_LCP));
-  mrb_define_const(mrb, operator_module, "PARTIAL",
-                   mrb_fixnum_value(GRN_OP_PARTIAL));
-  mrb_define_const(mrb, operator_module, "UNSPLIT",
-                   mrb_fixnum_value(GRN_OP_UNSPLIT));
-  mrb_define_const(mrb, operator_module, "PREFIX",
-                   mrb_fixnum_value(GRN_OP_PREFIX));
-  mrb_define_const(mrb, operator_module, "SUFFIX",
-                   mrb_fixnum_value(GRN_OP_SUFFIX));
-  mrb_define_const(mrb, operator_module, "GEO_DISTANCE1",
-                   mrb_fixnum_value(GRN_OP_GEO_DISTANCE1));
-  mrb_define_const(mrb, operator_module, "GEO_DISTANCE2",
-                   mrb_fixnum_value(GRN_OP_GEO_DISTANCE2));
-  mrb_define_const(mrb, operator_module, "GEO_DISTANCE3",
-                   mrb_fixnum_value(GRN_OP_GEO_DISTANCE3));
-  mrb_define_const(mrb, operator_module, "GEO_DISTANCE4",
-                   mrb_fixnum_value(GRN_OP_GEO_DISTANCE4));
-  mrb_define_const(mrb, operator_module, "GEO_WITHINP5",
-                   mrb_fixnum_value(GRN_OP_GEO_WITHINP5));
-  mrb_define_const(mrb, operator_module, "GEO_WITHINP6",
-                   mrb_fixnum_value(GRN_OP_GEO_WITHINP6));
-  mrb_define_const(mrb, operator_module, "GEO_WITHINP8",
-                   mrb_fixnum_value(GRN_OP_GEO_WITHINP8));
-  mrb_define_const(mrb, operator_module, "OBJ_SEARCH",
-                   mrb_fixnum_value(GRN_OP_OBJ_SEARCH));
-  mrb_define_const(mrb, operator_module, "EXPR_GET_VAR",
-                   mrb_fixnum_value(GRN_OP_EXPR_GET_VAR));
-  mrb_define_const(mrb, operator_module, "TABLE_CREATE",
-                   mrb_fixnum_value(GRN_OP_TABLE_CREATE));
-  mrb_define_const(mrb, operator_module, "TABLE_SELECT",
-                   mrb_fixnum_value(GRN_OP_TABLE_SELECT));
-  mrb_define_const(mrb, operator_module, "TABLE_SORT",
-                   mrb_fixnum_value(GRN_OP_TABLE_SORT));
-  mrb_define_const(mrb, operator_module, "TABLE_GROUP",
-                   mrb_fixnum_value(GRN_OP_TABLE_GROUP));
-  mrb_define_const(mrb, operator_module, "JSON_PUT",
-                   mrb_fixnum_value(GRN_OP_JSON_PUT));
-  mrb_define_const(mrb, operator_module, "GET_MEMBER",
-                   mrb_fixnum_value(GRN_OP_GET_MEMBER));
+#undef DEFINE_OPERATOR
 }
 #endif

  Modified: lib/mrb/mrb_operator.h (+3 -1)
===================================================================
--- lib/mrb/mrb_operator.h    2015-02-23 13:12:57 +0900 (683b9da)
+++ lib/mrb/mrb_operator.h    2015-02-23 13:15:18 +0900 (b76c498)
@@ -1,6 +1,6 @@
 /* -*- c-basic-offset: 2 -*- */
 /*
-  Copyright(C) 2014 Brazil
+  Copyright(C) 2014-2015 Brazil
 
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
@@ -26,6 +26,8 @@ extern "C" {
 #endif
 
 void grn_mrb_operator_init(grn_ctx *ctx);
+mrb_value grn_mrb_value_from_operator(mrb_state *mrb, grn_operator op);
+grn_operator grn_mrb_value_to_operator(mrb_state *mrb, mrb_value mrb_op);
 
 #ifdef __cplusplus
 }

  Modified: lib/mrb/scripts/initialize/pre.rb (+2 -0)
===================================================================
--- lib/mrb/scripts/initialize/pre.rb    2015-02-23 13:12:57 +0900 (c9a74a8)
+++ lib/mrb/scripts/initialize/pre.rb    2015-02-23 13:15:18 +0900 (99300d1)
@@ -1 +1,3 @@
 require "backtrace_entry"
+
+require "operator"

  Added: lib/mrb/scripts/operator.rb (+22 -0) 100644
===================================================================
--- /dev/null
+++ lib/mrb/scripts/operator.rb    2015-02-23 13:15:18 +0900 (349695e)
@@ -0,0 +1,22 @@
+module Groonga
+  class Operator
+    @values = {}
+    class << self
+      def register(operator)
+        const_set(operator.name, operator)
+        @values[operator.value] = operator
+      end
+
+      def find(value)
+        @values[value]
+      end
+    end
+
+    attr_reader :name
+    attr_reader :value
+    def initialize(name, value)
+      @name = name
+      @value = value
+    end
+  end
+end

  Modified: lib/mrb/scripts/sources.am (+1 -0)
===================================================================
--- lib/mrb/scripts/sources.am    2015-02-23 13:12:57 +0900 (b1254e9)
+++ lib/mrb/scripts/sources.am    2015-02-23 13:15:18 +0900 (9b2ef95)
@@ -17,6 +17,7 @@ RUBY_SCRIPT_FILES =				\
 	initialize/post.rb			\
 	logger.rb				\
 	logger/level.rb				\
+	operator.rb				\
 	plugin_loader.rb			\
 	require.rb				\
 	scan_info.rb				\
-------------- next part --------------
HTML����������������������������...
Download 



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