9#ifdef HAVE_RUBY_MEMORY_VIEW_H
17# define RB_OBJ_CLASSNAME(obj) rb_obj_class(obj)
18# define RB_OBJ_STRING(obj) (obj)
21# define RB_OBJ_CLASSNAME(obj) rb_obj_classname(obj)
22# define RB_OBJ_STRING(obj) StringValueCStr(obj)
37#define RPTR_DATA(obj) ((struct ptr_data *)(DATA_PTR(obj)))
48 *wrap = (addrnum != func) ? func : 0;
55fiddle_ptr_mark(
void *
ptr)
67fiddle_ptr_free_ptr(
void *
ptr)
77fiddle_ptr_free(
void *
ptr)
79 fiddle_ptr_free_ptr(
ptr);
84fiddle_ptr_memsize(
const void *
ptr)
87 return sizeof(*data) + data->
size;
92 {fiddle_ptr_mark, fiddle_ptr_free, fiddle_ptr_memsize,},
95#ifdef FIDDLE_MEMORY_VIEW
97fiddle_ptr_check_memory_view(
VALUE obj)
106fiddle_ptr_memory_view_available_p(
VALUE obj)
108 return fiddle_ptr_check_memory_view(obj) !=
NULL;
114 struct ptr_data *data = fiddle_ptr_check_memory_view(obj);
121 fiddle_ptr_get_memory_view,
123 fiddle_ptr_memory_view_available_p
155 return rb_fiddle_ptr_new2(klass,
ptr,
size, func);
159rb_fiddle_ptr2cptr(
VALUE val)
168 else if (val ==
Qnil) {
179rb_fiddle_ptr_s_allocate(
VALUE klass)
221 f = get_freefunc(
sym, &funcwrap);
231 data->
wrap[1] = funcwrap;
241rb_fiddle_ptr_call_free(
VALUE self);
305 rb_bug(
"rb_fiddle_ptr_s_malloc");
308 obj = rb_fiddle_ptr_malloc(klass, s,
f);
313 rb_raise(
rb_eArgError,
"a free function must be supplied to Fiddle::Pointer.malloc when it is called with a block");
327rb_fiddle_ptr_to_i(
VALUE self)
341rb_fiddle_ptr_to_value(
VALUE self)
357rb_fiddle_ptr_ptr(
VALUE self)
362 return rb_fiddle_ptr_new(*((
void**)(data->
ptr)),0,0);
374rb_fiddle_ptr_ref(
VALUE self)
379 return rb_fiddle_ptr_new(&(data->
ptr),0,0);
388rb_fiddle_ptr_null_p(
VALUE self)
408 data->
free = get_freefunc(val, &data->
wrap[1]);
423rb_fiddle_ptr_free_get(
VALUE self)
450rb_fiddle_ptr_call_free(
VALUE self)
454 fiddle_ptr_free_ptr(pdata);
464rb_fiddle_ptr_freed_p(
VALUE self)
503 rb_bug(
"rb_fiddle_ptr_to_s");
541 rb_bug(
"rb_fiddle_ptr_to_str");
554rb_fiddle_ptr_inspect(
VALUE self)
560 RB_OBJ_CLASSNAME(self), (
void *)data, data->ptr, data->size, (
void *)data->free);
578 ptr1 = rb_fiddle_ptr2cptr(self);
579 ptr2 = rb_fiddle_ptr2cptr(other);
600 ptr1 = rb_fiddle_ptr2cptr(self);
601 ptr2 = rb_fiddle_ptr2cptr(other);
619 ptr = rb_fiddle_ptr2cptr(self);
637 ptr = rb_fiddle_ptr2cptr(self);
674 rb_bug(
"rb_fiddle_ptr_aref()");
693 VALUE arg0, arg1, arg2;
714 mem = rb_fiddle_ptr2cptr(arg2);
723 rb_bug(
"rb_fiddle_ptr_aset()");
746rb_fiddle_ptr_size_get(
VALUE self)
769 ptr = rb_fiddle_ptr_new(fp, 0,
NULL);
835#ifdef FIDDLE_MEMORY_VIEW
VALUE rb_ary_push(VALUE ary, VALUE item)
Our own, locale independent, character handling routines.
#define rb_define_method(klass, mid, func, arity)
Defines klass#mid.
#define rb_define_singleton_method(klass, mid, func, arity)
Defines klass.mid.
char str[HTML_ESCAPE_MAX_LEN+1]
#define RSTRING_LEN(string)
VALUE rb_fiddle_new_function(VALUE address, VALUE arg_types, VALUE ret_type)
void rb_gc_mark(VALUE ptr)
void * ruby_xmalloc(size_t size)
Allocates a storage instance.
VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super)
Defines a class under the namespace of outer.
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
int rb_block_given_p(void)
Determines if the current method is given a block.
void rb_raise(VALUE exc, const char *fmt,...)
void rb_bug(const char *fmt,...)
VALUE rb_ensure(VALUE(*b_proc)(VALUE), VALUE data1, VALUE(*e_proc)(VALUE), VALUE data2)
An equivalent to ensure clause.
VALUE rb_cObject
Object class.
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.
#define rb_str_new(str, len)
VALUE rb_check_funcall(VALUE, ID, int, const VALUE *)
void rb_define_alloc_func(VALUE, rb_alloc_func_t)
ID rb_intern(const char *)
void rb_define_const(VALUE, const char *, VALUE)
FILE * rb_io_stdio_file(rb_io_t *fptr)
bool rb_memory_view_register(VALUE klass, const rb_memory_view_entry_t *entry)
bool rb_memory_view_init_as_byte_array(rb_memory_view_t *view, VALUE obj, void *data, const ssize_t len, const bool readonly)
#define RB_OBJ_CLASSNAME(obj)
void Init_fiddle_pointer(void)
void(* freefunc_t)(void *)
#define StringValuePtr(v)
#define TypedData_Get_Struct(obj, type, data_type, sval)
#define TypedData_Make_Struct(klass, type, data_type, sval)
VALUE rb_sprintf(const char *,...)