Class: Barracuda::OutputBuffer

Inherits:
Buffer show all
Defined in:
ext/barracuda.c

Instance Method Summary collapse

Methods inherited from Buffer

#data, #data=, #read, #size_changed, #write

Constructor Details

#initialize(type, size) ⇒ Object



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

Instance Method Details

#clearObject



421
422
423
424
425
426
427
# File 'ext/barracuda.c', line 421

static VALUE
obuffer_clear(VALUE self)
{
    GET_BUFFER();
    memset(buffer->cachebuf, 0, buffer->member_size * buffer->num_items);
    return self;
}

#sizeObject



429
430
431
432
433
434
# File 'ext/barracuda.c', line 429

static VALUE
obuffer_size(VALUE self)
{
    GET_BUFFER();
    return INT2FIX(buffer->num_items);
}