Kouhei Sutou
null+****@clear*****
Fri Feb 20 19:14:45 JST 2015
Kouhei Sutou 2015-02-20 19:14:45 +0900 (Fri, 20 Feb 2015) New Revision: dc3898f76a1b318f858b9a2fad55d9f6ba6fa5ce https://github.com/groonga/groonga/commit/dc3898f76a1b318f858b9a2fad55d9f6ba6fa5ce Message: mrb: add Table#[] Modified files: lib/mrb/mrb_table.c Modified: lib/mrb/mrb_table.c (+37 -0) =================================================================== --- lib/mrb/mrb_table.c 2015-02-20 19:12:45 +0900 (46f8508) +++ lib/mrb/mrb_table.c 2015-02-20 19:14:45 +0900 (651a77e) @@ -32,6 +32,40 @@ #include "mrb_options.h" static mrb_value +mrb_grn_table_array_reference(mrb_state *mrb, mrb_value self) +{ + grn_ctx *ctx = (grn_ctx *)mrb->ud; + grn_obj *table; + grn_id key_domain_id; + mrb_value mrb_key; + grn_id record_id; + grn_mrb_value_to_raw_data_buffer buffer; + void *key; + unsigned int key_size; + + mrb_get_args(mrb, "o", &mrb_key); + + table = DATA_PTR(self); + if (table->header.type == GRN_DB) { + key_domain_id = GRN_DB_SHORT_TEXT; + } else { + key_domain_id = table->header.domain; + } + + grn_mrb_value_to_raw_data_buffer_init(mrb, &buffer); + grn_mrb_value_to_raw_data(mrb, "key", mrb_key, key_domain_id, + &buffer, &key, &key_size); + record_id = grn_table_get(ctx, table, key, key_size); + grn_mrb_value_to_raw_data_buffer_fin(mrb, &buffer); + + if (record_id == GRN_ID_NIL) { + return mrb_nil_value(); + } else { + return mrb_fixnum_value(record_id); + } +} + +static mrb_value mrb_grn_table_is_locked(mrb_state *mrb, mrb_value self) { grn_ctx *ctx = (grn_ctx *)mrb->ud; @@ -204,6 +238,9 @@ grn_mrb_table_init(grn_ctx *ctx) klass = mrb_define_class_under(mrb, module, "Table", object_class); MRB_SET_INSTANCE_TT(klass, MRB_TT_DATA); + mrb_define_method(mrb, klass, "[]", + mrb_grn_table_array_reference, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, klass, "locked?", mrb_grn_table_is_locked, MRB_ARGS_NONE()); -------------- next part -------------- HTML����������������������������...Download