Class: Cord

Inherits:
Object
  • Object
show all
Defined in:
ext/cord/cord.c

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ Object



150
151
152
153
154
155
156
157
# File 'ext/cord/cord.c', line 150

static VALUE rb_cord_initialize(int argc, VALUE *argv, VALUE obj)
{
    VALUE val;
    RCord *c = GetCord(obj);
    rb_scan_args(argc, argv, "01", &val);
    if (!NIL_P(val)) rb_cord_append(obj, val);
    return obj;
}

Instance Method Details

#<<(str) ⇒ Object



121
122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'ext/cord/cord.c', line 121

static VALUE rb_cord_append(VALUE obj, VALUE str)
{
    RCord *c = GetCord(obj);
    if (rb_obj_is_kind_of(str, rb_cCord)) str = rb_cord_to_s(str);
    Check_Type(str, T_STRING);
    str = rb_str_new4(str);
    if (RSTRING_LEN(str) == 0) return Qnil;
    if (EMPTY_CORD_P(c->cord)){
      c->cord = (void *)str;
    }else{
      c->cord = rb_cord_balance(rb_append_cords((void *)c->cord, (void *)str));
    }
    return obj;
}

#depthObject



143
144
145
146
147
148
# File 'ext/cord/cord.c', line 143

static VALUE rb_cord_depth(VALUE obj)
{
    RCord *c = GetCord(obj);
    if (EMPTY_CORD_P(c->cord)) return INT2FIX(0);
    return INT2FIX(CORD_DEPTH(c->cord));
}

#lengthObject



136
137
138
139
140
141
# File 'ext/cord/cord.c', line 136

static VALUE rb_cord_length(VALUE obj)
{
    RCord *c = GetCord(obj);
    if (EMPTY_CORD_P(c->cord)) return INT2FIX(0);
    return INT2FIX(CORD_LENGTH(c->cord));
}

#slice(*args) ⇒ Object



159
160
161
162
163
164
165
# File 'ext/cord/cord.c', line 159

static VALUE
rb_cord_slice(int argc, VALUE *argv, VALUE obj)
{
    VALUE str;
    str = rb_cord_to_s(obj);
    return rb_funcall2(str, rb_intern("slice"), argc, argv);
}

#to_sObject



107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'ext/cord/cord.c', line 107

static VALUE rb_cord_to_s(VALUE obj)
{
    VALUE buffer;
    RCord *c = GetCord(obj);
    if (EMPTY_CORD_P(c->cord)) return rb_str_new2("");
    if (STRING_CORD_P(c->cord)) return (VALUE)c->cord;
    if (CONCAT_CORD_P(c->cord)){
      buffer = rb_str_buf_new((long)CORD_LENGTH(c->cord));
      concat_cord_to_s(buffer, c->cord);
      return buffer;
    }
    return Qnil;
}

#to_strObject



107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'ext/cord/cord.c', line 107

static VALUE rb_cord_to_s(VALUE obj)
{
    VALUE buffer;
    RCord *c = GetCord(obj);
    if (EMPTY_CORD_P(c->cord)) return rb_str_new2("");
    if (STRING_CORD_P(c->cord)) return (VALUE)c->cord;
    if (CONCAT_CORD_P(c->cord)){
      buffer = rb_str_buf_new((long)CORD_LENGTH(c->cord));
      concat_cord_to_s(buffer, c->cord);
      return buffer;
    }
    return Qnil;
}