mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* string.c (rb_str_getbyte): new method.
(rb_str_setbyte): new method. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15484 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
b0333388ab
commit
12b1578cab
2 changed files with 50 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
|||
Fri Feb 15 15:34:47 2008 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* string.c (rb_str_getbyte): new method.
|
||||
(rb_str_setbyte): new method.
|
||||
|
||||
Fri Feb 15 15:29:03 2008 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* lib/require_relative.rb: new file.
|
||||
|
|
45
string.c
45
string.c
|
@ -3125,6 +3125,49 @@ rb_str_chr(VALUE str)
|
|||
return rb_str_substr(str, 0, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* str.getbyte(index) => 0 .. 255
|
||||
*
|
||||
* returns the <i>index</i>th byte as an integer.
|
||||
*/
|
||||
static VALUE
|
||||
rb_str_getbyte(VALUE str, VALUE index)
|
||||
{
|
||||
long pos = NUM2LONG(index);
|
||||
|
||||
if (pos < 0)
|
||||
pos += RSTRING_LEN(str);
|
||||
if (pos < 0 || RSTRING_LEN(str) <= pos)
|
||||
return Qnil;
|
||||
|
||||
return INT2FIX((unsigned char)RSTRING_PTR(str)[pos]);
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* str.setbyte(index, int) => int
|
||||
*
|
||||
* modifies the <i>index</i>th byte as <i>int</i>.
|
||||
*/
|
||||
static VALUE
|
||||
rb_str_setbyte(VALUE str, VALUE index, VALUE value)
|
||||
{
|
||||
long pos = NUM2LONG(index);
|
||||
int byte = NUM2INT(value);
|
||||
|
||||
rb_str_modify(str);
|
||||
|
||||
if (pos < -RSTRING_LEN(str) || RSTRING_LEN(str) <= pos)
|
||||
rb_raise(rb_eIndexError, "index %ld out of string", pos);
|
||||
if (pos < 0)
|
||||
pos += RSTRING_LEN(str);
|
||||
|
||||
RSTRING_PTR(str)[pos] = byte;
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* str.reverse => new_str
|
||||
|
@ -6107,6 +6150,8 @@ Init_String(void)
|
|||
rb_define_method(rb_cString, "replace", rb_str_replace, 1);
|
||||
rb_define_method(rb_cString, "clear", rb_str_clear, 0);
|
||||
rb_define_method(rb_cString, "chr", rb_str_chr, 0);
|
||||
rb_define_method(rb_cString, "getbyte", rb_str_getbyte, 1);
|
||||
rb_define_method(rb_cString, "setbyte", rb_str_setbyte, 2);
|
||||
|
||||
rb_define_method(rb_cString, "to_i", rb_str_to_i, -1);
|
||||
rb_define_method(rb_cString, "to_f", rb_str_to_f, 0);
|
||||
|
|
Loading…
Reference in a new issue