Class: FFI::StructLayout::Function
- Defined in:
- ext/ffi_c/StructLayout.c,
ext/ffi_c/StructLayout.c
Overview
A function pointer Field in a FFI::StructLayout.
Instance Method Summary collapse
-
#get(pointer) ⇒ Function
Get a Function from memory pointed by
pointer. -
#put(pointer, proc) ⇒ Function
Set a Function to memory pointed by
pointeras a function.
Methods inherited from Field
#alignment, #initialize, #name, #offset, #size, #type
Constructor Details
This class inherits a constructor from FFI::StructLayout::Field
Instance Method Details
#get(pointer) ⇒ Function
Get a FFI::StructLayout::Function from memory pointed by pointer.
304 305 306 307 308 309 310 311 312 |
# File 'ext/ffi_c/StructLayout.c', line 304 static VALUE function_field_get(VALUE self, VALUE pointer) { StructField* f; TypedData_Get_Struct(self, StructField, &rbffi_struct_field_data_type, f); return rbffi_Function_NewInstance(f->rbType, (*rbffi_AbstractMemoryOps.pointer->get)(MEMORY(pointer), f->offset)); } |
#put(pointer, proc) ⇒ Function
Set a FFI::StructLayout::Function to memory pointed by pointer as a function.
If a Proc is submitted as proc, it is automatically transformed to a FFI::StructLayout::Function.
323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 |
# File 'ext/ffi_c/StructLayout.c', line 323 static VALUE function_field_put(VALUE self, VALUE pointer, VALUE proc) { StructField* f; VALUE value = Qnil; TypedData_Get_Struct(self, StructField, &rbffi_struct_field_data_type, f); if (NIL_P(proc) || rb_obj_is_kind_of(proc, rbffi_FunctionClass)) { value = proc; } else if (rb_obj_is_kind_of(proc, rb_cProc) || rb_respond_to(proc, rb_intern("call"))) { value = rbffi_Function_ForProc(f->rbType, proc); } else { rb_raise(rb_eTypeError, "wrong type (expected Proc or Function)"); } (*rbffi_AbstractMemoryOps.pointer->put)(MEMORY(pointer), f->offset, value); return self; } |