11 # define RB_OBJ_CLASSNAME(obj) rb_obj_class(obj)
12 # define RB_OBJ_STRING(obj) (obj)
14 # define PRIsVALUE "s"
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;
48 fiddle_ptr_mark(
void *
ptr)
60 fiddle_ptr_free(
void *
ptr)
72 fiddle_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);
114 rb_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);
237 rb_fiddle_ptr_to_i(
VALUE self)
251 rb_fiddle_ptr_to_value(
VALUE self)
267 rb_fiddle_ptr_ptr(
VALUE self)
272 return rb_fiddle_ptr_new(*((
void**)(data->
ptr)),0,0);
284 rb_fiddle_ptr_ref(
VALUE self)
289 return rb_fiddle_ptr_new(&(data->
ptr),0,0);
298 rb_fiddle_ptr_null_p(
VALUE self)
318 data->
free = get_freefunc(val, &data->
wrap[1]);
333 rb_fiddle_ptr_free_get(
VALUE self)
385 rb_bug(
"rb_fiddle_ptr_to_s");
423 rb_bug(
"rb_fiddle_ptr_to_str");
436 rb_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()");
628 rb_fiddle_ptr_size_get(
VALUE self)
651 ptr = rb_fiddle_ptr_new(fp, 0,
NULL);
668 if (num == val)
wrap = 0;