wanabe
null+****@clear*****
Wed Oct 9 20:22:22 JST 2013
wanabe 2013-10-09 20:22:22 +0900 (Wed, 09 Oct 2013) New Revision: 76191f5b25fc3bb9b1f062e0b76625729bc011ff https://github.com/groonga/groonga/commit/76191f5b25fc3bb9b1f062e0b76625729bc011ff Merged 0988a3d: Merge pull request #114 from wanabe/mruby-exprcode-get_weight Message: Wrap grn_expr_code_get_weight() in ruby method Modified files: lib/mrb/mrb_expr.c Modified: lib/mrb/mrb_expr.c (+32 -7) =================================================================== --- lib/mrb/mrb_expr.c 2013-10-09 23:03:38 +0900 (601042d) +++ lib/mrb/mrb_expr.c 2013-10-09 20:22:22 +0900 (cb89ac7) @@ -159,7 +159,9 @@ scan_info_build(grn_ctx *ctx, grn_obj *expr, int *n, switch (ec->value->header.type) { case GRN_ACCESSOR : if (grn_column_index(ctx, ec->value, c->op, &index, 1, &sid)) { - int32_t weight = grn_expr_code_get_weight(ctx, ec); + int32_t weight = mrb_fixnum( + mrb_funcall(mrb, mrb_obj_value(ctx->impl->mrb.module), "weight", 1, + mrb_cptr_value(mrb, ec))); grn_scan_info_set_flags(si, grn_scan_info_get_flags(si) | SCAN_ACCESSOR); mrb_si = mrb_grn_scan_info_new(mrb, si); if (((grn_accessor *)ec->value)->next) { @@ -178,11 +180,14 @@ scan_info_build(grn_ctx *ctx, grn_obj *expr, int *n, case GRN_COLUMN_FIX_SIZE : case GRN_COLUMN_VAR_SIZE : if (grn_column_index(ctx, ec->value, c->op, &index, 1, &sid)) { + int32_t weight = mrb_fixnum( + mrb_funcall(mrb, mrb_obj_value(ctx->impl->mrb.module), "weight", 1, + mrb_cptr_value(mrb, ec))); mrb_si = mrb_grn_scan_info_new(mrb, si); mrb_funcall(mrb, mrb_si, "put_index", 3, mrb_cptr_value(mrb, index), mrb_fixnum_value(sid), - mrb_fixnum_value(grn_expr_code_get_weight(ctx, ec))); + mrb_fixnum_value(weight)); } break; case GRN_COLUMN_INDEX : @@ -196,11 +201,16 @@ scan_info_build(grn_ctx *ctx, grn_obj *expr, int *n, j -= 2; ec += 2; } - mrb_si = mrb_grn_scan_info_new(mrb, si); - mrb_funcall(mrb, mrb_si, "put_index", 3, - mrb_cptr_value(mrb, index), - mrb_fixnum_value(sid), - mrb_fixnum_value(grn_expr_code_get_weight(ctx, ec))); + { + int32_t weight = mrb_fixnum( + mrb_funcall(mrb, mrb_obj_value(ctx->impl->mrb.module), "weight", 1, + mrb_cptr_value(mrb, ec))); + mrb_si = mrb_grn_scan_info_new(mrb, si); + mrb_funcall(mrb, mrb_si, "put_index", 3, + mrb_cptr_value(mrb, index), + mrb_fixnum_value(sid), + mrb_fixnum_value(weight)); + } break; } } @@ -423,6 +433,18 @@ mrb_grn_scan_info_put_index(mrb_state *mrb, mrb_value self) return self; } +static mrb_value +mrb_grn_expr_code_get_weight(mrb_state *mrb, mrb_value self) +{ + int32_t weight; + grn_ctx *ctx = (grn_ctx *)mrb->ud; + mrb_value mrb_ec; + + mrb_get_args(mrb, "o", &mrb_ec); + weight = grn_expr_code_get_weight(ctx, mrb_cptr(mrb_ec)); + return mrb_fixnum_value(weight); +} + void grn_mrb_expr_init(grn_ctx *ctx) { @@ -437,6 +459,9 @@ grn_mrb_expr_init(grn_ctx *ctx) MRB_SET_INSTANCE_TT(klass, MRB_TT_DATA); mrb_define_method(mrb, klass, "initialize", mrb_grn_scan_info_initialize, MRB_ARGS_REQ(1)); mrb_define_method(mrb, klass, "put_index", mrb_grn_scan_info_put_index, MRB_ARGS_REQ(3)); + + mrb_define_class_method(mrb, module, + "weight", mrb_grn_expr_code_get_weight, MRB_ARGS_REQ(1)); grn_mrb_load(ctx, "expression.rb"); } -------------- next part -------------- HTML����������������������������... Download