Revision
3701
Author
lsansonetti@apple.com
Date
2010-03-04 18:21:32 -0800 (Thu, 04 Mar 2010)

Log Message

added #bytes

Modified Paths

Diff

Modified: MacRuby/branches/icu/string.c (3700 => 3701)


--- MacRuby/branches/icu/string.c	2010-03-05 01:51:40 UTC (rev 3700)
+++ MacRuby/branches/icu/string.c	2010-03-05 02:21:32 UTC (rev 3701)
@@ -4159,7 +4159,33 @@
 }
 
 /*
+ *  Document-method: each_byte
  *  call-seq:
+ *     str.each_byte {|fixnum| block }    => str
+ *  
+ *  Passes each byte in <i>str</i> to the given block.
+ *     
+ *     "hello".each_byte {|c| print c, ' ' }
+ *     
+ *  <em>produces:</em>
+ *     
+ *     104 101 108 108 111
+ */
+
+static VALUE
+rstr_each_byte(VALUE str, SEL sel)
+{
+    RETURN_ENUMERATOR(str, 0, 0);
+
+    for (long i = 0; i < RSTR(str)->length_in_bytes; i++) {
+	rb_yield(INT2FIX(RSTR(str)->data.bytes[i]));
+	RETURN_IF_BROKEN();
+    }
+    return str;
+}
+
+/*
+ *  call-seq:
  *     str.succ   => new_str
  *     str.next   => new_str
  *  
@@ -4946,6 +4972,8 @@
     rb_objc_define_method(rb_cRubyString, "each_line", rstr_each_line, -1);
     rb_objc_define_method(rb_cRubyString, "chars", rstr_each_char, 0);
     rb_objc_define_method(rb_cRubyString, "each_char", rstr_each_char, 0);
+    rb_objc_define_method(rb_cRubyString, "bytes", rstr_each_byte, 0);
+    rb_objc_define_method(rb_cRubyString, "each_byte", rstr_each_byte, 0);
     rb_objc_define_method(rb_cRubyString, "succ", rstr_succ, 0);
     rb_objc_define_method(rb_cRubyString, "succ!", rstr_succ_bang, 0);
     rb_objc_define_method(rb_cRubyString, "next", rstr_succ, 0);