1 /* -*- c-basic-offset: 2 -*- */ 2 /* 3 Copyright(C) 2014-2015 Brazil 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License version 2.1 as published by the Free Software Foundation. 8 9 This library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public 15 License along with this library; if not, write to the Free Software 16 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA 17 */ 18 19 #include "../grn_ctx_impl.h" 20 21 #ifdef GRN_WITH_MRUBY 22 #include <mruby.h> 23 24 #include "mrb_operator.h" 25 26 mrb_value 27 grn_mrb_value_from_operator(mrb_state *mrb, grn_operator op) 28 { 29 grn_ctx *ctx = (grn_ctx *)(mrb->ud); 30 grn_mrb_data *data = &(ctx->impl->mrb); 31 mrb_value mrb_op_raw; 32 mrb_value mrb_op; 33 34 mrb_op_raw = mrb_fixnum_value(op); 35 mrb_op = mrb_funcall(mrb, mrb_obj_value(data->groonga.operator_class), 36 "find", 1, mrb_op_raw); 37 if (mrb_nil_p(mrb_op)) { 38 return mrb_op_raw; 39 } else { 40 return mrb_op; 41 } 42 } 43 44 grn_operator 45 grn_mrb_value_to_operator(mrb_state *mrb, mrb_value mrb_op) 46 { 47 if (!mrb_fixnum_p(mrb_op)) { 48 mrb_op = mrb_funcall(mrb, mrb_op, "value", 0); 49 } 50 51 return mrb_fixnum(mrb_op); 52 } 53 54 void 55 grn_mrb_operator_init(grn_ctx *ctx) 56 { 57 grn_mrb_data *data = &(ctx->impl->mrb); 58 mrb_state *mrb = data->state; 59 struct RClass *module = ctx->impl->mrb.module; 60 struct RClass *klass; 61 mrb_value klass_obj; 62 63 klass = mrb_class_get_under(mrb, module, "Operator"); 64 data->groonga.operator_class = klass; 65 66 klass_obj = mrb_obj_value(klass); 67 #define DEFINE_OPERATOR(name) \ 68 mrb_funcall(mrb, klass_obj, "register", 1, \ 69 mrb_funcall(mrb, klass_obj, "new", 2, \ 70 mrb_str_new_lit(mrb, #name), \ 71 mrb_fixnum_value(GRN_OP_ ## name))) 72 73 DEFINE_OPERATOR(PUSH); 74 DEFINE_OPERATOR(POP); 75 DEFINE_OPERATOR(NOP); 76 DEFINE_OPERATOR(CALL); 77 DEFINE_OPERATOR(INTERN); 78 DEFINE_OPERATOR(GET_REF); 79 DEFINE_OPERATOR(GET_VALUE); 80 DEFINE_OPERATOR(AND); 81 DEFINE_OPERATOR(AND_NOT); 82 DEFINE_OPERATOR(OR); 83 DEFINE_OPERATOR(ASSIGN); 84 DEFINE_OPERATOR(STAR_ASSIGN); 85 DEFINE_OPERATOR(SLASH_ASSIGN); 86 DEFINE_OPERATOR(MOD_ASSIGN); 87 DEFINE_OPERATOR(PLUS_ASSIGN); 88 DEFINE_OPERATOR(MINUS_ASSIGN); 89 DEFINE_OPERATOR(SHIFTL_ASSIGN); 90 DEFINE_OPERATOR(SHIFTR_ASSIGN); 91 DEFINE_OPERATOR(SHIFTRR_ASSIGN); 92 DEFINE_OPERATOR(AND_ASSIGN); 93 DEFINE_OPERATOR(XOR_ASSIGN); 94 DEFINE_OPERATOR(OR_ASSIGN); 95 DEFINE_OPERATOR(JUMP); 96 DEFINE_OPERATOR(CJUMP); 97 DEFINE_OPERATOR(COMMA); 98 DEFINE_OPERATOR(BITWISE_OR); 99 DEFINE_OPERATOR(BITWISE_XOR); 100 DEFINE_OPERATOR(BITWISE_AND); 101 DEFINE_OPERATOR(BITWISE_NOT); 102 DEFINE_OPERATOR(EQUAL); 103 DEFINE_OPERATOR(NOT_EQUAL); 104 DEFINE_OPERATOR(LESS); 105 DEFINE_OPERATOR(GREATER); 106 DEFINE_OPERATOR(LESS_EQUAL); 107 DEFINE_OPERATOR(GREATER_EQUAL); 108 DEFINE_OPERATOR(IN); 109 DEFINE_OPERATOR(MATCH); 110 DEFINE_OPERATOR(NEAR); 111 DEFINE_OPERATOR(NEAR2); 112 DEFINE_OPERATOR(SIMILAR); 113 DEFINE_OPERATOR(TERM_EXTRACT); 114 DEFINE_OPERATOR(SHIFTL); 115 DEFINE_OPERATOR(SHIFTR); 116 DEFINE_OPERATOR(SHIFTRR); 117 DEFINE_OPERATOR(PLUS); 118 DEFINE_OPERATOR(MINUS); 119 DEFINE_OPERATOR(STAR); 120 DEFINE_OPERATOR(SLASH); 121 DEFINE_OPERATOR(MOD); 122 DEFINE_OPERATOR(DELETE); 123 DEFINE_OPERATOR(INCR); 124 DEFINE_OPERATOR(DECR); 125 DEFINE_OPERATOR(INCR_POST); 126 DEFINE_OPERATOR(DECR_POST); 127 DEFINE_OPERATOR(NOT); 128 DEFINE_OPERATOR(ADJUST); 129 DEFINE_OPERATOR(EXACT); 130 DEFINE_OPERATOR(LCP); 131 DEFINE_OPERATOR(PARTIAL); 132 DEFINE_OPERATOR(UNSPLIT); 133 DEFINE_OPERATOR(PREFIX); 134 DEFINE_OPERATOR(SUFFIX); 135 DEFINE_OPERATOR(GEO_DISTANCE1); 136 DEFINE_OPERATOR(GEO_DISTANCE2); 137 DEFINE_OPERATOR(GEO_DISTANCE3); 138 DEFINE_OPERATOR(GEO_DISTANCE4); 139 DEFINE_OPERATOR(GEO_WITHINP5); 140 DEFINE_OPERATOR(GEO_WITHINP6); 141 DEFINE_OPERATOR(GEO_WITHINP8); 142 DEFINE_OPERATOR(OBJ_SEARCH); 143 DEFINE_OPERATOR(EXPR_GET_VAR); 144 DEFINE_OPERATOR(TABLE_CREATE); 145 DEFINE_OPERATOR(TABLE_SELECT); 146 DEFINE_OPERATOR(TABLE_SORT); 147 DEFINE_OPERATOR(TABLE_GROUP); 148 DEFINE_OPERATOR(JSON_PUT); 149 DEFINE_OPERATOR(GET_MEMBER); 150 DEFINE_OPERATOR(REGEXP); 151 DEFINE_OPERATOR(FUZZY); 152 153 #undef DEFINE_OPERATOR 154 } 155 #endif 156