static rb_context_t * cont_new(VALUE klass) { rb_context_t *cont; volatile VALUE contval; rb_thread_t *th = GET_THREAD(); THREAD_MUST_BE_RUNNING(th); contval = TypedData_Make_Struct(klass, rb_context_t, &cont_data_type, cont); cont->self = contval; cont_init(cont, th); return cont; }
static VALUE xthread_monitor_cond_alloc(VALUE klass) { VALUE volatile obj; xthread_monitor_cond_t *cv; obj = TypedData_Make_Struct(klass, xthread_monitor_cond_t, &xthread_monitor_cond_data_type, cv); cv->monitor = Qnil; cv->cond = rb_xthread_cond_new(); return obj; }
static VALUE thread_alloc(VALUE klass) { VALUE volatile obj; #ifdef USE_THREAD_RECYCLE rb_thread_t *th = thread_recycle_struct(); obj = TypedData_Wrap_Struct(klass, &thread_data_type, th); #else rb_thread_t *th; obj = TypedData_Make_Struct(klass, rb_thread_t, &thread_data_type, th); #endif return obj; }
static VALUE sysvmq_alloc(VALUE klass) { sysvmq_t* sysv; VALUE obj = TypedData_Make_Struct(klass, sysvmq_t, &sysvmq_type, sysv); sysv->key = 0; sysv->id = -1; sysv->buffer_size = 0; sysv->msgbuf = NULL; return obj; }
static VALUE fairy_string_buffer_alloc(VALUE klass) { VALUE volatile obj; fairy_string_buffer_t *sb; obj = TypedData_Make_Struct(klass, fairy_string_buffer_t, &fairy_string_buffer_data_type, sb); sb->size = 0; sb->string_sizes = Qnil; sb->buffer = Qnil; return obj; }
static VALUE xthread_fifo_alloc(VALUE klass) { VALUE volatile obj; xthread_fifo_t *fifo; obj = TypedData_Make_Struct(klass, xthread_fifo_t, &xthread_fifo_data_type, fifo); fifo->push = 0; fifo->pop = 0; fifo->capa = 0; fifo->elements = NULL; return obj; }
static VALUE allocate(VALUE klass) { fiddle_closure * closure; VALUE i = TypedData_Make_Struct(klass, fiddle_closure, &closure_data_type, closure); #ifndef DONT_USE_FFI_CLOSURE_ALLOC closure->pcl = ffi_closure_alloc(sizeof(ffi_closure), &closure->code); #else closure->pcl = mmap(NULL, sizeof(ffi_closure), PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); #endif return i; }
VALUE rb_task_create(VALUE (*func)(VALUE *argv), int argc, ...) { va_list args; if (worker_thread_num > 0) { rb_task_t *task; VALUE *argv = xmalloc(sizeof(VALUE) * argc); VALUE obj; int i; obj = TypedData_Make_Struct(rb_cTask, rb_task_t, &task_data_type, task); /* setup argv */ va_init_list(args, argc); for (i=0; i<argc; i++) { argv[i] = va_arg(args, VALUE); } va_end(args); task->func = func; task->argc = argc; task->argv = argv; task->result = Qundef; task->ptask = ptask_create(task_dispatch_callback, task); ptask_dispatch(task->ptask); return obj; } else { /* Do it immediately */ int i; VALUE *argv = ALLOCA_N(VALUE, argc); va_init_list(args, argc); for (i=0; i<argc; i++) { argv[i] = va_arg(args, VALUE); } va_end(args); return (VALUE)func(argv); } }
static VALUE imf_jpeg_src_mgr_new(VALUE image_source) { imf_jpeg_src_mgr_t *srcmgr; VALUE obj = TypedData_Make_Struct( cSourceManager, imf_jpeg_src_mgr_t, &imf_jpeg_src_mgr_data_type, srcmgr); srcmgr->image_source = image_source; srcmgr->buffer = rb_str_tmp_new(IMF_JPEG_BUFFER_SIZE); srcmgr->pub.init_source = imf_jpeg_src_mgr_init_source; srcmgr->pub.fill_input_buffer = imf_jpeg_src_mgr_fill_input_buffer; srcmgr->pub.skip_input_data = imf_jpeg_src_mgr_skip_input_data; srcmgr->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */ srcmgr->pub.term_source = imf_jpeg_src_mgr_term_source; srcmgr->pub.bytes_in_buffer = 0; srcmgr->pub.next_input_byte = NULL; return obj; }
static VALUE tp_alloc(VALUE klass) { rb_tp_t *tp; return TypedData_Make_Struct(klass, rb_tp_t, &tp_data_type, tp); }
static VALUE cState_s_allocate(VALUE klass) { JSON_Generator_State *state; return TypedData_Make_Struct(klass, JSON_Generator_State, &JSON_Generator_State_type, state); }