395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
|
# File 'ext/barracuda.c', line 395
static VALUE
obuffer_initialize(VALUE self, VALUE type, VALUE size)
{
VALUE type_sym, member_size;
GET_BUFFER();
type_sym = rb_funcall(type, id_to_sym, 0);
member_size = rb_hash_aref(rb_hTypes, type_sym);
if (NIL_P(member_size)) {
rb_raise(rb_eArgError, "type can only be one of %s",
RSTRING_PTR(rb_inspect(rb_funcall(rb_hTypes, rb_intern("keys"), 0))));
}
if (TYPE(size) != T_FIXNUM) {
rb_raise(rb_eArgError, "expecting buffer size as argument 2");
}
buffer->type = SYM2ID(type_sym);
buffer->member_size = FIX2INT(member_size);
buffer->num_items = FIX2UINT(size);
buffer->cachebuf = malloc(buffer->num_items * buffer->member_size);
buffer->data = clCreateBuffer(context, CL_MEM_READ_WRITE,
buffer->member_size * buffer->num_items, NULL, NULL);
return self;
}
|