4 VALUE
ss_say_hello(VALUE self
) {
5 const char *str
= "hello";
6 return rb_str_new(str
, strlen(str
));
9 VALUE
ss_say_hello2(VALUE self
) {
10 return rb_str_new2("hello\0invisible");
13 VALUE
ss_dup_string(VALUE self
, VALUE str
) {
14 return rb_str_dup(str
);
17 VALUE
ss_str_append(VALUE self
, VALUE str
, VALUE str2
) {
18 return rb_str_append(str
, str2
);
21 VALUE
ss_cat_as_question(VALUE self
, VALUE str
) {
22 return rb_str_cat(str
, "?", 1);
25 VALUE
ss_cat2_as_question(VALUE self
, VALUE str
) {
26 return rb_str_cat2(str
, "?");
29 VALUE
ss_str_plus(VALUE self
, VALUE str1
, VALUE str2
) {
30 return rb_str_plus(str1
, str2
);
33 VALUE
ss_phrase_as_question(VALUE self
, VALUE str
) {
34 const char *question_mark
= "?";
35 rb_str_buf_cat(str
, question_mark
, strlen(question_mark
));
39 VALUE
ss_rb_str_new2_with_null(VALUE self
) {
40 return rb_str_new2(NULL
);
43 VALUE
ss_str_cmp(VALUE self
, VALUE str1
, VALUE str2
) {
44 return INT2NUM(rb_str_cmp(str1
, str2
));
47 VALUE
ss_str_split(VALUE self
, VALUE str
) {
48 return rb_str_split(str
, ",");
51 VALUE
ss_str2inum(VALUE self
, VALUE str
, VALUE inum
) {
52 int num
= FIX2INT(inum
);
53 return rb_str2inum(str
, num
);
56 VALUE
ss_cstr2inum(VALUE self
, VALUE inum
) {
57 int num
= FIX2INT(inum
);
58 return rb_cstr2inum("10", num
);
61 VALUE
ss_str_substr(VALUE self
, VALUE str
, VALUE beg
, VALUE len
) {
62 return rb_str_substr(str
, FIX2INT(beg
), FIX2INT(len
));
65 VALUE
ss_rstring_see(VALUE self
, VALUE str
) {
66 return rb_str_new2(RSTRING(str
)->ptr
);
69 VALUE
ss_rstring_assign_foo(VALUE self
, VALUE str
) {
70 RSTRING(str
)->len
= 3;
71 RSTRING(str
)->ptr
= ALLOC_N(char, 4);
72 memcpy(RSTRING(str
)->ptr
, "foo", 4);
76 VALUE
ss_rstring_assign_global_foobar(VALUE self
) {
77 VALUE var
= rb_gv_get("$global_rstring_test");
78 RSTRING(var
)->len
= 6;
79 RSTRING(var
)->ptr
= ALLOC_N(char, 7);
80 memcpy(RSTRING(var
)->ptr
, "foobar", 7);
84 VALUE
ss_rstring_set_len(VALUE self
, VALUE str
, VALUE len
) {
85 RSTRING(str
)->len
= NUM2INT(len
);
89 VALUE
ss_rstring_assign_foo_and_upcase(VALUE self
, VALUE str
) {
90 RSTRING(str
)->len
= 3;
91 RSTRING(str
)->ptr
= ALLOC_N(char, 4);
92 memcpy(RSTRING(str
)->ptr
, "foo", 4);
93 rb_funcall(str
, rb_intern("upcase!"), 0, 0);
97 VALUE
ss_str_to_str(VALUE self
, VALUE arg
) {
98 return rb_str_to_str(arg
);
101 void Init_subtend_string() {
103 cls
= rb_define_class("SubtendString", rb_cObject
);
104 rb_define_method(cls
, "say_hello", ss_say_hello
, 0);
105 rb_define_method(cls
, "say_hello2", ss_say_hello2
, 0);
106 rb_define_method(cls
, "rb_str_new2_with_null", ss_rb_str_new2_with_null
, 0);
107 rb_define_method(cls
, "dup_string", ss_dup_string
, 1);
108 rb_define_method(cls
, "rb_str_append", ss_str_append
, 2);
109 rb_define_method(cls
, "rb_str_plus", ss_str_plus
, 2);
110 rb_define_method(cls
, "cat_as_question", ss_cat_as_question
, 1);
111 rb_define_method(cls
, "cat2_as_question", ss_cat2_as_question
, 1);
112 rb_define_method(cls
, "phrase_as_question", ss_phrase_as_question
, 1);
113 rb_define_method(cls
, "rb_str_cmp", ss_str_cmp
, 2);
114 rb_define_method(cls
, "rb_str_split", ss_str_split
, 1);
115 rb_define_method(cls
, "rb_str2inum", ss_str2inum
, 2);
116 rb_define_method(cls
, "rb_cstr2inum", ss_cstr2inum
, 1);
117 rb_define_method(cls
, "rb_str_substr", ss_str_substr
, 3);
118 rb_define_method(cls
, "rb_rstring_see", ss_rstring_see
, 1);
119 rb_define_method(cls
, "rb_rstring_assign_foo", ss_rstring_assign_foo
, 1);
120 rb_define_method(cls
, "rb_rstring_assign_global_foobar", ss_rstring_assign_global_foobar
, 0);
121 rb_define_method(cls
, "rb_rstring_set_len", ss_rstring_set_len
, 2);
122 rb_define_method(cls
, "rb_rstring_assign_foo_and_upcase", ss_rstring_assign_foo_and_upcase
, 1);
123 rb_define_method(cls
, "rb_str_to_str", ss_str_to_str
, 1);