Ruby 3.4.5p51 (2025-07-16 revision 20cda200d3ce092571d0b5d342dadca69636cb0f)
|
#include "ruby/internal/config.h"
#include "ruby/internal/attr/deprecated.h"
#include "ruby/internal/attr/warning.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/core/rbasic.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/fl_type.h"
#include "ruby/internal/value.h"
#include "ruby/internal/value_type.h"
#include "ruby/defines.h"
Go to the source code of this file.
Data Structures | |
struct | RData |
Macros | |
#define | RDATA(obj) |
Convenient casting macro. | |
#define | DATA_PTR(obj) |
Convenient getter macro. | |
#define | RUBY_DEFAULT_FREE RBIMPL_DATA_FUNC(-1) |
This is a value you can set to RData::dfree. | |
#define | RUBY_NEVER_FREE RBIMPL_DATA_FUNC(0) |
This is a value you can set to RData::dfree. | |
#define | RUBY_UNTYPED_DATA_FUNC(f) |
#define | Data_Wrap_Struct(klass, mark, free, sval) |
Converts sval, a pointer to your struct, into a Ruby object. | |
#define | Data_Make_Struct0(result, klass, type, size, mark, free, sval) |
This is an implementation detail of Data_Make_Struct. | |
#define | Data_Make_Struct(klass, type, mark, free, sval) |
Identical to Data_Wrap_Struct, except it allocates a new data region internally instead of taking an existing one. | |
#define | Data_Get_Struct(obj, type, sval) |
Obtains a C struct from inside of a wrapper Ruby object. |
Typedefs | |
typedef void(* | RUBY_DATA_FUNC) (void *) |
This is the type of callbacks registered to RData. |
Functions | |
VALUE | rb_data_object_wrap (VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree) |
This is the primitive way to wrap an existing C struct into RData. | |
VALUE | rb_data_object_zalloc (VALUE klass, size_t size, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree) |
Identical to rb_data_object_wrap(), except it allocates a new data region internally instead of taking an existing one. | |
static VALUE | rb_data_object_make (VALUE klass, RUBY_DATA_FUNC mark_func, RUBY_DATA_FUNC free_func, void **datap, size_t size) |
This is an implementation detail of Data_Make_Struct. | |
static VALUE | rb_data_object_alloc (VALUE klass, void *data, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree) |
Defines struct RData.
Definition in file rdata.h.
#define Data_Get_Struct | ( | obj, | |
type, | |||
sval ) |
Obtains a C struct from inside of a wrapper Ruby object.
obj | An instance of RData. |
type | Type name of the C struct. |
sval | Variable name of obtained C struct. |
#define Data_Make_Struct | ( | klass, | |
type, | |||
mark, | |||
free, | |||
sval ) |
Identical to Data_Wrap_Struct, except it allocates a new data region internally instead of taking an existing one.
The allocation is done using ruby_calloc(). Hence it makes no sense to pass anything other than RUBY_DEFAULT_FREE to the free argument.
klass | Ruby level class of the returning object. |
type | Type name of the C struct. |
mark | Mark function. |
free | Free function. |
sval | Variable name of created C struct. |
rb_eTypeError | `klass` is not a class. |
rb_eNoMemError | Out of memory. |
#define Data_Make_Struct0 | ( | result, | |
klass, | |||
type, | |||
size, | |||
mark, | |||
free, | |||
sval ) |
This is an implementation detail of Data_Make_Struct.
People don't use it directly.
result | Variable name of created Ruby object. |
klass | Ruby level class of the object. |
type | Type name of the C struct. |
size | Size of the C struct. |
mark | Mark function. |
free | Free function. |
sval | Variable name of created C struct. |
Definition at line 219 of file rdata.h.
Referenced by rb_data_object_make().
#define DATA_PTR | ( | obj | ) |
Convenient getter macro.
obj | An object, which is in fact an RData. |
Definition at line 67 of file rdata.h.
Referenced by rb_data_object_zalloc(), rb_data_typed_object_zalloc(), rb_internal_thread_specific_get(), and rb_internal_thread_specific_set().
#define Data_Wrap_Struct | ( | klass, | |
mark, | |||
free, | |||
sval ) |
Converts sval, a pointer to your struct, into a Ruby object.
klass | A ruby level class. |
mark | Mark function. |
free | Free function. |
sval | A pointer to your struct. |
rb_eTypeError | `klass` is not a class. |
rb_eNoMemError | Out of memory. |
#define RDATA | ( | obj | ) |
Convenient casting macro.
obj | An object, which is in fact an RData. |
Definition at line 59 of file rdata.h.
Referenced by rb_find_encoding(), and rb_to_encoding().
#define RUBY_DEFAULT_FREE RBIMPL_DATA_FUNC(-1) |
This is a value you can set to RData::dfree.
Setting this means the data was allocated using ruby_xmalloc() (or variants), and shall be freed using ruby_xfree().
#define RUBY_NEVER_FREE RBIMPL_DATA_FUNC(0) |
This is a value you can set to RData::dfree.
Setting this means the data is managed by someone else, like, statically allocated. Of course you are on your own then.
#define RUBY_UNTYPED_DATA_FUNC | ( | f | ) |
typedef void(* RUBY_DATA_FUNC) (void *) |
|
inlinestatic |
|
inlinestatic |
This is an implementation detail of Data_Make_Struct.
People don't use it directly.
[in] | klass | Ruby level class of the returning object. |
[in] | mark_func | Mark function. |
[in] | free_func | Free function. |
[in] | datap | Variable of created C struct. |
[in] | size | Requested size of allocation. |
rb_eTypeError | `klass` is not a class. |
rb_eNoMemError | Out of memory. |
VALUE rb_data_object_wrap | ( | VALUE | klass, |
void * | datap, | ||
RUBY_DATA_FUNC | dmark, | ||
RUBY_DATA_FUNC | dfree ) |
This is the primitive way to wrap an existing C struct into RData.
[in] | klass | Ruby level class of the returning object. |
[in] | datap | Pointer to the target C struct. |
[in] | dmark | Mark function. |
[in] | dfree | Free function. |
rb_eTypeError | `klass` is not a class. |
rb_eNoMemError | Out of memory. |
Definition at line 1090 of file gc.c.
Referenced by rb_data_object_alloc().
VALUE rb_data_object_zalloc | ( | VALUE | klass, |
size_t | size, | ||
RUBY_DATA_FUNC | dmark, | ||
RUBY_DATA_FUNC | dfree ) |
Identical to rb_data_object_wrap(), except it allocates a new data region internally instead of taking an existing one.
The allocation is done using ruby_calloc(). Hence it makes no sense to pass anything other than RUBY_DEFAULT_FREE to the last argument.
[in] | klass | Ruby level class of the returning object. |
[in] | size | Requested size of memory to allocate. |
[in] | dmark | Mark function. |
[in] | dfree | Free function. |
rb_eTypeError | `klass` is not a class. |
rb_eNoMemError | Out of memory. |