Class: Binyo::ByteList
- Inherits:
-
Object
- Object
- Binyo::ByteList
- Defined in:
- ext/binyo/bytelist.c
Instance Method Summary collapse
- #<<(byteval) ⇒ Object
- #[](vidx) ⇒ Object
- #[]=(vidx, byteval) ⇒ Object
- #each ⇒ Object
- #initialize(*args) ⇒ Object constructor
- #to_s ⇒ Object
Constructor Details
#initialize(*args) ⇒ Object
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'ext/binyo/bytelist.c', line 110
static VALUE
binyo_bytelist_initialize(int argc, VALUE *argv, VALUE self)
{
VALUE vfirst;
VALUE vsize = Qnil;
binyo_bytelist *bytelist;
rb_scan_args(argc, argv, "11", &vfirst, &vsize);
if (NIL_P(vfirst))
rb_raise(rb_eArgError, "First argument may not be nil");
if (argc == 2 && NIL_P(vsize))
rb_raise(rb_eArgError, "Size argument may not be nil");
if (TYPE(vfirst) == T_STRING) {
bytelist = binyo_bytelist_new_bytes((uint8_t *) RSTRING_PTR(vfirst), (size_t) RSTRING_LEN(vfirst));
} else {
bytelist = binyo_bytelist_new_size((size_t) NUM2LONG(vfirst));
}
DATA_PTR(self) = bytelist;
return self;
}
|
Instance Method Details
#<<(byteval) ⇒ Object
166 167 168 169 170 171 172 173 174 175 176 177 178 |
# File 'ext/binyo/bytelist.c', line 166
static VALUE
binyo_bytelist_push(VALUE self, VALUE byteval)
{
binyo_bytelist *bytelist;
int_bytelist_get(self, bytelist);
if (bytelist->len == bytelist->limit)
rb_raise(eBinyoError, "Cannot append to ByteList"); /* TODO auto-resize */
bytelist->bytes[bytelist->len++] = NUM2INT(byteval) & 0xff;
return self;
}
|
#[](vidx) ⇒ Object
134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'ext/binyo/bytelist.c', line 134
static VALUE
binyo_bytelist_get_index(VALUE self, VALUE vidx)
{
binyo_bytelist *bytelist;
size_t i = (size_t) NUM2LONG(vidx);
int_bytelist_get(self, bytelist);
if (i >= bytelist->len)
rb_raise(eBinyoError, "Index out of bounds: %lu", i); /* TODO treat it like Array */
return INT2NUM(bytelist->bytes[i]);
}
|
#[]=(vidx, byteval) ⇒ Object
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'ext/binyo/bytelist.c', line 148
static VALUE
binyo_bytelist_set_index(VALUE self, VALUE vidx, VALUE byteval)
{
binyo_bytelist *bytelist;
size_t i = (size_t) NUM2LONG(vidx);
int_bytelist_get(self, bytelist);
if (i >= bytelist->limit)
rb_raise(eBinyoError, "Index out of bounds: %lu", i); /* TODO treat it like Array */
bytelist->bytes[i] = NUM2INT(byteval) & 0xff;
if (i >= bytelist->len)
bytelist->len = i + 1;
return byteval;
}
|
#each ⇒ Object
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'ext/binyo/bytelist.c', line 180
static VALUE
binyo_bytelist_each(VALUE self)
{
binyo_bytelist *bytelist;
size_t i;
if (!rb_block_given_p()) {
/* TODO */
rb_raise(eBinyoError, "No block given");
}
int_bytelist_get(self, bytelist);
for (i=0; i < bytelist->len; i++) {
rb_yield(INT2NUM(bytelist->bytes[i]));
}
return self;
}
|
#to_s ⇒ Object
200 201 202 203 204 205 206 207 208 |
# File 'ext/binyo/bytelist.c', line 200
static VALUE
binyo_bytelist_to_s(VALUE self)
{
binyo_bytelist *bytelist;
int_bytelist_get(self, bytelist);
return rb_str_new((const char *)bytelist->bytes, (long) bytelist->len);
}
|