summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-string-ext
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-03-07 06:21:52 -0800
committerYukihiro "Matz" Matsumoto <[email protected]>2013-03-07 06:21:52 -0800
commit7ce2d2636463fbcf9228f4ab2b284ef3625dc42d (patch)
tree9949313d9fe68e1eff7b2de1270716d804f04fda /mrbgems/mruby-string-ext
parent9736d44d5ccde8f20cd03b76032e72ecaae4a02e (diff)
parent7cd583ef27b0c3376f5dfb1d7785896c2bb0e611 (diff)
downloadmruby-7ce2d2636463fbcf9228f4ab2b284ef3625dc42d.tar.gz
mruby-7ce2d2636463fbcf9228f4ab2b284ef3625dc42d.zip
Merge pull request #963 from skandhas/pr-add-mrbgems-mruby-string-ext
add mrbgems/mruby-string-ext, and method: String#getbyte
Diffstat (limited to 'mrbgems/mruby-string-ext')
-rw-r--r--mrbgems/mruby-string-ext/mrbgem.rake4
-rw-r--r--mrbgems/mruby-string-ext/src/string.c30
-rw-r--r--mrbgems/mruby-string-ext/test/string.rb15
3 files changed, 49 insertions, 0 deletions
diff --git a/mrbgems/mruby-string-ext/mrbgem.rake b/mrbgems/mruby-string-ext/mrbgem.rake
new file mode 100644
index 000000000..83db97eb4
--- /dev/null
+++ b/mrbgems/mruby-string-ext/mrbgem.rake
@@ -0,0 +1,4 @@
+MRuby::Gem::Specification.new('mruby-string-ext') do |spec|
+ spec.license = 'MIT'
+ spec.authors = 'mruby developers'
+end
diff --git a/mrbgems/mruby-string-ext/src/string.c b/mrbgems/mruby-string-ext/src/string.c
new file mode 100644
index 000000000..175426638
--- /dev/null
+++ b/mrbgems/mruby-string-ext/src/string.c
@@ -0,0 +1,30 @@
+#include "mruby.h"
+#include "mruby/string.h"
+
+static mrb_value
+mrb_str_getbyte(mrb_state *mrb, mrb_value str)
+{
+ mrb_int pos;
+ mrb_get_args(mrb, "i", &pos);
+
+ if (pos < 0)
+ pos += RSTRING_LEN(str);
+ if (pos < 0 || RSTRING_LEN(str) <= pos)
+ return mrb_nil_value();
+
+ return mrb_fixnum_value((unsigned char)RSTRING_PTR(str)[pos]);
+}
+
+
+void
+mrb_mruby_string_ext_gem_init(mrb_state* mrb)
+{
+ struct RClass * s = mrb->string_class;
+
+ mrb_define_method(mrb, s, "getbyte", mrb_str_getbyte, ARGS_REQ(1));
+}
+
+void
+mrb_mruby_string_ext_gem_final(mrb_state* mrb)
+{
+}
diff --git a/mrbgems/mruby-string-ext/test/string.rb b/mrbgems/mruby-string-ext/test/string.rb
new file mode 100644
index 000000000..9a7579131
--- /dev/null
+++ b/mrbgems/mruby-string-ext/test/string.rb
@@ -0,0 +1,15 @@
+##
+# String(Ext) Test
+
+assert('String#getbyte') do
+ str1 = "hello"
+ bytes1 = [104, 101, 108, 108, 111]
+ assert_equal bytes1[0], str1.getbyte(0)
+ assert_equal bytes1[-1], str1.getbyte(-1)
+ assert_equal bytes1[6], str1.getbyte(6)
+
+ str2 = "\xFF"
+ bytes2 = [0xFF]
+ assert_equal bytes2[0], str2.getbyte(0)
+end
+