|
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. |