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); } |