11# define RB_OBJ_CLASSNAME(obj) rb_obj_class(obj)
12# define RB_OBJ_STRING(obj) (obj)
15# define RB_OBJ_CLASSNAME(obj) rb_obj_classname(obj)
16# define RB_OBJ_STRING(obj) StringValueCStr(obj)
30#define RPTR_DATA(obj) ((struct ptr_data *)(DATA_PTR(obj)))
41 *wrap = (addrnum != func) ? func : 0;
48fiddle_ptr_mark(
void *
ptr)
60fiddle_ptr_free(
void *
ptr)
72fiddle_ptr_memsize(
const void *
ptr)
75 return sizeof(*data) + data->
size;
80 {fiddle_ptr_mark, fiddle_ptr_free, fiddle_ptr_memsize,},
110 return rb_fiddle_ptr_new(
ptr,
size, func);
114rb_fiddle_ptr2cptr(
VALUE val)
123 else if (val ==
Qnil) {
175 f = get_freefunc(
sym, &funcwrap);
185 data->
wrap[1] = funcwrap;
222 rb_bug(
"rb_fiddle_ptr_s_malloc");
225 obj = rb_fiddle_ptr_malloc(s,
f);
237rb_fiddle_ptr_to_i(
VALUE self)
251rb_fiddle_ptr_to_value(
VALUE self)
267rb_fiddle_ptr_ptr(
VALUE self)
272 return rb_fiddle_ptr_new(*((
void**)(data->
ptr)),0,0);
284rb_fiddle_ptr_ref(
VALUE self)
289 return rb_fiddle_ptr_new(&(data->
ptr),0,0);
298rb_fiddle_ptr_null_p(
VALUE self)
318 data->
free = get_freefunc(val, &data->
wrap[1]);
333rb_fiddle_ptr_free_get(
VALUE self)
385 rb_bug(
"rb_fiddle_ptr_to_s");
423 rb_bug(
"rb_fiddle_ptr_to_str");
436rb_fiddle_ptr_inspect(
VALUE self)
442 RB_OBJ_CLASSNAME(
self), (
void *)data, data->ptr, data->size, (
void *)data->free);
460 ptr1 = rb_fiddle_ptr2cptr(
self);
461 ptr2 = rb_fiddle_ptr2cptr(other);
482 ptr1 = rb_fiddle_ptr2cptr(
self);
483 ptr2 = rb_fiddle_ptr2cptr(other);
501 ptr = rb_fiddle_ptr2cptr(
self);
504 return rb_fiddle_ptr_new((
char *)
ptr + num,
size - num, 0);
519 ptr = rb_fiddle_ptr2cptr(
self);
522 return rb_fiddle_ptr_new((
char *)
ptr - num,
size + num, 0);
548 retval =
INT2NUM(*((
char *)data->
ptr + offset));
556 rb_bug(
"rb_fiddle_ptr_aref()");
575 VALUE arg0, arg1, arg2;
596 mem = rb_fiddle_ptr2cptr(arg2);
605 rb_bug(
"rb_fiddle_ptr_aset()");
628rb_fiddle_ptr_size_get(
VALUE self)
651 ptr = rb_fiddle_ptr_new(fp, 0,
NULL);
668 if (num == val)
wrap = 0;
char str[HTML_ESCAPE_MAX_LEN+1]
VALUE rb_fiddle_new_function(VALUE address, VALUE arg_types, VALUE ret_type)
VALUE rb_define_class_under(VALUE, const char *, VALUE)
Defines a class under the namespace of outer.
VALUE rb_cObject
Object class.
void rb_raise(VALUE exc, const char *fmt,...)
void rb_bug(const char *fmt,...)
VALUE rb_Integer(VALUE)
Equivalent to Kernel#Integer in Ruby.
VALUE rb_obj_is_kind_of(VALUE, VALUE)
Determines if obj is a kind of c.
FILE * rb_io_stdio_file(rb_io_t *fptr)
#define GetOpenFile(obj, fp)
#define RB_OBJ_CLASSNAME(obj)
void Init_fiddle_pointer(void)
void(* freefunc_t)(void *)