diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-04-21 00:43:17 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-04-21 00:43:17 +0900 |
| commit | 3bce663568453518f267392ee4a4049fb86aede4 (patch) | |
| tree | cac708049dffddb434079bf042fa209ca162468f | |
| parent | a6941101933a06e234f57a180d7119eafa9f1904 (diff) | |
| parent | 3675832b0ed0ddb84eb8e9e7050348abcf20b871 (diff) | |
| download | mruby-3bce663568453518f267392ee4a4049fb86aede4.tar.gz mruby-3bce663568453518f267392ee4a4049fb86aede4.zip | |
Merge pull request #2091 from take-cheeze/struct_len
Implement Struct#size and Struct#length .
| -rw-r--r-- | mrbgems/mruby-struct/src/struct.c | 16 | ||||
| -rw-r--r-- | mrbgems/mruby-struct/test/struct.rb | 6 |
2 files changed, 22 insertions, 0 deletions
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 @@ -780,6 +780,19 @@ mrb_struct_eql(mrb_state *mrb, mrb_value s) } /* + * 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 <code>Struct</code> is a convenient way to bundle a number of * attributes together, using accessor methods, without having to write * an explicit class. @@ -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 diff --git a/mrbgems/mruby-struct/test/struct.rb b/mrbgems/mruby-struct/test/struct.rb index d647cd3a3..f4cb30b13 100644 --- a/mrbgems/mruby-struct/test/struct.rb +++ b/mrbgems/mruby-struct/test/struct.rb @@ -107,4 +107,10 @@ if Object.const_defined?(:Struct) cc = c.new(1,2,3,4,5) assert_equal "#<struct #{c.inspect} m1=1, m2=2, m3=3, m4=4, m5=5>", cc.inspect end + + assert('Struct#length, Struct#size') do + s = Struct.new(:f1, :f2).new(0, 1) + assert_equal 2, s.size + assert_equal 2, s.length + end end |
