mirror of
https://github.com/ruby/ruby.git
synced 2025-09-15 16:44:01 +02:00
* string.c (rb_str_each_line, rb_str_each_byte): Reflect
enumerator integration. #lines and #bytes are now aliases to #each_line and #each_byte, respectively. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@16000 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
80361e2c47
commit
9fb81662b5
2 changed files with 36 additions and 95 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
Mon Apr 14 13:42:20 2008 Akinori MUSHA <knu@iDaemons.org>
|
||||||
|
|
||||||
|
* string.c (rb_str_each_line, rb_str_each_byte): Reflect
|
||||||
|
enumerator integration. #lines and #bytes are now aliases to
|
||||||
|
#each_line and #each_byte, respectively.
|
||||||
|
|
||||||
Mon Apr 14 13:19:36 2008 Akinori MUSHA <knu@iDaemons.org>
|
Mon Apr 14 13:19:36 2008 Akinori MUSHA <knu@iDaemons.org>
|
||||||
|
|
||||||
* range.c (range_each, range_step): Return an enumerator if no
|
* range.c (range_each, range_step): Return an enumerator if no
|
||||||
|
|
123
string.c
123
string.c
|
@ -3670,6 +3670,19 @@ rb_f_split(argc, argv)
|
||||||
return rb_str_split_m(argc, argv, uscore_get());
|
return rb_str_split_m(argc, argv, uscore_get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Document-method: lines
|
||||||
|
* call-seq:
|
||||||
|
* str.lines(separator=$/) => anEnumerator
|
||||||
|
* str.lines(separator=$/) {|substr| block } => str
|
||||||
|
*
|
||||||
|
* Returns an enumerator that gives each line in the string. If a block is
|
||||||
|
* given, it iterates over each line in the string.
|
||||||
|
*
|
||||||
|
* "foo\nbar\n".lines.to_a #=> ["foo\n", "bar\n"]
|
||||||
|
* "foo\nb ar".lines.sort #=> ["b ar", "foo\n"]
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* call-seq:
|
* call-seq:
|
||||||
* str.each(separator=$/) {|substr| block } => str
|
* str.each(separator=$/) {|substr| block } => str
|
||||||
|
@ -3719,7 +3732,7 @@ rb_str_each_line(argc, argv, str)
|
||||||
if (rb_scan_args(argc, argv, "01", &rs) == 0) {
|
if (rb_scan_args(argc, argv, "01", &rs) == 0) {
|
||||||
rs = rb_rs;
|
rs = rb_rs;
|
||||||
}
|
}
|
||||||
|
RETURN_ENUMERATOR(str, argc, argv);
|
||||||
if (NIL_P(rs)) {
|
if (NIL_P(rs)) {
|
||||||
rb_yield(str);
|
rb_yield(str);
|
||||||
return str;
|
return str;
|
||||||
|
@ -3760,6 +3773,18 @@ rb_str_each_line(argc, argv, str)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Document-method: bytes
|
||||||
|
* call-seq:
|
||||||
|
* str.bytes => anEnumerator
|
||||||
|
* str.bytes {|fixnum| block } => str
|
||||||
|
*
|
||||||
|
* Returns an enumerator that gives each byte in the string. If a block is
|
||||||
|
* given, it iterates over each byte in the string.
|
||||||
|
*
|
||||||
|
* "hello".bytes.to_a #=> [104, 101, 108, 108, 111]
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* call-seq:
|
* call-seq:
|
||||||
* str.each_byte {|fixnum| block } => str
|
* str.each_byte {|fixnum| block } => str
|
||||||
|
@ -3779,6 +3804,7 @@ rb_str_each_byte(str)
|
||||||
{
|
{
|
||||||
long i;
|
long i;
|
||||||
|
|
||||||
|
RETURN_ENUMERATOR(str, 0, 0);
|
||||||
for (i=0; i<RSTRING(str)->len; i++) {
|
for (i=0; i<RSTRING(str)->len; i++) {
|
||||||
rb_yield(INT2FIX(RSTRING(str)->ptr[i] & 0xff));
|
rb_yield(INT2FIX(RSTRING(str)->ptr[i] & 0xff));
|
||||||
}
|
}
|
||||||
|
@ -3786,97 +3812,6 @@ rb_str_each_byte(str)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static VALUE str_enumerator _((VALUE, VALUE, int, VALUE *));
|
|
||||||
static VALUE
|
|
||||||
str_enumerator(str, sym, argc, argv)
|
|
||||||
VALUE str, sym;
|
|
||||||
int argc;
|
|
||||||
VALUE *argv;
|
|
||||||
{
|
|
||||||
static VALUE enumerator;
|
|
||||||
static ID new;
|
|
||||||
int nargc;
|
|
||||||
VALUE *nargv, result;
|
|
||||||
volatile VALUE args;
|
|
||||||
|
|
||||||
if (!enumerator) {
|
|
||||||
rb_require("enumerator");
|
|
||||||
enumerator = rb_path2class("Enumerable::Enumerator");
|
|
||||||
new = rb_intern("new");
|
|
||||||
}
|
|
||||||
args = rb_ary_new2(nargc = argc + 2);
|
|
||||||
RBASIC(args)->klass = 0;
|
|
||||||
nargv = RARRAY_PTR(args);
|
|
||||||
nargv[0] = str;
|
|
||||||
nargv[1] = sym;
|
|
||||||
MEMCPY(nargv + 2, argv, VALUE, argc);
|
|
||||||
result = rb_funcall2(enumerator, new, nargc, nargv);
|
|
||||||
rb_ary_clear(args);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Document-method: lines
|
|
||||||
* call-seq:
|
|
||||||
* str.lines(separator=$/) => anEnumerator
|
|
||||||
* str.lines(separator=$/) {|substr| block } => str
|
|
||||||
*
|
|
||||||
* Returns an enumerator that gives each line in the string. If a block is
|
|
||||||
* given, it iterates over each line in the string.
|
|
||||||
*
|
|
||||||
* "foo\nbar\n".lines.to_a #=> ["foo\n", "bar\n"]
|
|
||||||
* "foo\nb ar".lines.sort #=> ["b ar", "foo\n"]
|
|
||||||
*/
|
|
||||||
|
|
||||||
static VALUE
|
|
||||||
rb_str_lines(argc, argv, str)
|
|
||||||
int argc;
|
|
||||||
VALUE *argv;
|
|
||||||
VALUE str;
|
|
||||||
{
|
|
||||||
if (rb_block_given_p()) {
|
|
||||||
return rb_str_each_line(argc, argv, str);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
static VALUE each_line;
|
|
||||||
|
|
||||||
if (!each_line) each_line = ID2SYM(rb_intern("each_line"));
|
|
||||||
return str_enumerator(str, each_line, argc, argv);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Document-method: bytes
|
|
||||||
* call-seq:
|
|
||||||
* str.bytes => anEnumerator
|
|
||||||
* str.bytes {|fixnum| block } => str
|
|
||||||
*
|
|
||||||
* Returns an enumerator that gives each byte in the string. If a block is
|
|
||||||
* given, it iterates over each byte in the string.
|
|
||||||
*
|
|
||||||
* "hello".bytes.to_a #=> [104, 101, 108, 108, 111]
|
|
||||||
*/
|
|
||||||
|
|
||||||
static VALUE
|
|
||||||
rb_str_bytes(argc, argv, str)
|
|
||||||
int argc;
|
|
||||||
VALUE *argv;
|
|
||||||
VALUE str;
|
|
||||||
{
|
|
||||||
if (rb_block_given_p()) {
|
|
||||||
return rb_str_each_byte(argc, argv, str);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
static VALUE each_byte;
|
|
||||||
|
|
||||||
if (!each_byte) each_byte = ID2SYM(rb_intern("each_byte"));
|
|
||||||
return str_enumerator(str, each_byte, argc, argv);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* call-seq:
|
* call-seq:
|
||||||
* str.chop! => str or nil
|
* str.chop! => str or nil
|
||||||
|
@ -5016,8 +4951,8 @@ Init_String()
|
||||||
rb_define_method(rb_cString, "each", rb_str_each_line, -1);
|
rb_define_method(rb_cString, "each", rb_str_each_line, -1);
|
||||||
rb_define_method(rb_cString, "each_byte", rb_str_each_byte, 0);
|
rb_define_method(rb_cString, "each_byte", rb_str_each_byte, 0);
|
||||||
|
|
||||||
rb_define_method(rb_cString, "lines", rb_str_lines, -1);
|
rb_define_method(rb_cString, "lines", rb_str_each_line, -1);
|
||||||
rb_define_method(rb_cString, "bytes", rb_str_bytes, -1);
|
rb_define_method(rb_cString, "bytes", rb_str_each_byte, 0);
|
||||||
|
|
||||||
rb_define_method(rb_cString, "sum", rb_str_sum, -1);
|
rb_define_method(rb_cString, "sum", rb_str_sum, -1);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue