From 3675832b0ed0ddb84eb8e9e7050348abcf20b871 Mon Sep 17 00:00:00 2001 From: take_cheeze Date: Sun, 20 Apr 2014 22:02:48 +0900 Subject: Implement Struct#size and Struct#length . --- mrbgems/mruby-struct/src/struct.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'mrbgems/mruby-struct/src/struct.c') diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c index 6932bb372..b5b498009 100644 --- a/mrbgems/mruby-struct/src/struct.c +++ b/mrbgems/mruby-struct/src/struct.c @@ -779,6 +779,19 @@ mrb_struct_eql(mrb_state *mrb, mrb_value s) return mrb_bool_value(eql_p); } +/* + * call-seq: + * struct.length -> Fixnum + * struct.size -> Fixnum + * + * Returns number of struct members. + */ +static mrb_value +mrb_struct_len(mrb_state *mrb, mrb_value self) +{ + return mrb_fixnum_value(RSTRUCT_LEN(self)); +} + /* * A Struct is a convenient way to bundle a number of * attributes together, using accessor methods, without having to write @@ -811,6 +824,9 @@ mrb_mruby_struct_gem_init(mrb_state* mrb) mrb_define_method(mrb, st, "inspect", mrb_struct_inspect, MRB_ARGS_NONE()); /* 15.2.18.4.10(x) */ mrb_define_alias(mrb, st, "to_s", "inspect"); /* 15.2.18.4.11(x) */ mrb_define_method(mrb, st, "eql?", mrb_struct_eql, MRB_ARGS_REQ(1)); /* 15.2.18.4.12(x) */ + + mrb_define_method(mrb, st, "size", mrb_struct_len, MRB_ARGS_NONE()); + mrb_define_method(mrb, st, "length", mrb_struct_len, MRB_ARGS_NONE()); } void -- cgit v1.2.3