|
Ruby 4.1.0dev (2026-04-04 revision 3b6245536cf55da9e8bfcdb03c845fe9ef931d7f)
|
Defines struct RTypedData. More...
#include "ruby/internal/config.h"#include "ruby/assert.h"#include "ruby/internal/assume.h"#include "ruby/internal/attr/artificial.h"#include "ruby/internal/attr/flag_enum.h"#include "ruby/internal/attr/nonnull.h"#include "ruby/internal/attr/pure.h"#include "ruby/internal/cast.h"#include "ruby/internal/core/rbasic.h"#include "ruby/internal/core/rdata.h"#include "ruby/internal/dllexport.h"#include "ruby/internal/error.h"#include "ruby/internal/fl_type.h"#include "ruby/internal/static_assert.h"#include "ruby/internal/stdbool.h"#include "ruby/internal/value_type.h"

Go to the source code of this file.
Data Structures | |
| struct | rb_data_type_struct |
| This is the struct that holds necessary info for a struct. More... | |
| struct | RTypedData |
| "Typed" user data. More... | |
Macros | |
| #define | HAVE_TYPE_RB_DATA_TYPE_T 1 |
| #define | HAVE_RB_DATA_TYPE_T_FUNCTION 1 |
| #define | HAVE_RB_DATA_TYPE_T_PARENT 1 |
| #define | RUBY_TYPED_DEFAULT_FREE RUBY_DEFAULT_FREE |
| This is a value you can set to rb_data_type_struct::dfree. | |
| #define | RUBY_TYPED_NEVER_FREE RUBY_NEVER_FREE |
| This is a value you can set to rb_data_type_struct::dfree. | |
| #define | RTYPEDDATA(obj) RBIMPL_CAST((struct RTypedData *)(obj)) |
| Convenient casting macro. | |
| #define | RTYPEDDATA_DATA(v) (RTYPEDDATA(rbimpl_check_external_typeddata(v))->data) |
| Convenient getter macro. | |
| #define | Check_TypedStruct(v, t) rb_check_typeddata(RBIMPL_CAST((VALUE)(v)), (t)) |
| Old name of rb_check_typeddata. | |
| #define | RUBY_TYPED_FREE_IMMEDIATELY RUBY_TYPED_FREE_IMMEDIATELY |
| Macros to see if each corresponding flag is defined. | |
| #define | RUBY_TYPED_FROZEN_SHAREABLE RUBY_TYPED_FROZEN_SHAREABLE |
| #define | RUBY_TYPED_WB_PROTECTED RUBY_TYPED_WB_PROTECTED |
| #define | RUBY_TYPED_EMBEDDABLE RUBY_TYPED_EMBEDDABLE |
| #define | RUBY_TYPED_PROMOTED1 RUBY_TYPED_PROMOTED1 |
| #define | RBIMPL_TYPEDDATA_PRECONDITION(obj, unreachable) RBIMPL_ASSERT_NOTHING |
| #define | TypedData_Wrap_Struct(klass, data_type, sval) rb_data_typed_object_wrap((klass),(sval),(data_type)) |
| Converts sval, a pointer to your struct, into a Ruby object. | |
| #define | TypedData_Make_Struct0(result, klass, type, size, data_type, sval) |
| This is an implementation detail of TypedData_Make_Struct. | |
| #define | TypedData_Make_Struct(klass, type, data_type, sval) |
| Identical to TypedData_Wrap_Struct, except it allocates a new data region internally instead of taking an existing one. | |
| #define | rb_typeddata_inherited_p rbimpl_typeddata_inherited_p_inline |
| #define | rb_typeddata_is_kind_of rbimpl_typeddata_is_kind_of_inline |
| #define | TypedData_Get_Struct(obj, type, data_type, sval) ((sval) = RBIMPL_CAST((type *)rbimpl_check_typeddata((obj), (data_type)))) |
| Obtains a C struct from inside of a wrapper Ruby object. | |
Typedefs | |
| typedef struct rb_data_type_struct | rb_data_type_t |
| This is the struct that holds necessary info for a struct. | |
Functions | |
| static VALUE | rbimpl_check_external_typeddata (VALUE obj) |
| This is an implementation detail of RTYPEDDATA_DATA(). | |
| RBIMPL_STATIC_ASSERT (data_in_rtypeddata, offsetof(struct RData, data)==offsetof(struct RTypedData, data)) | |
| VALUE | rb_data_typed_object_wrap (VALUE klass, void *datap, const rb_data_type_t *type) |
| This is the primitive way to wrap an existing C struct into RTypedData. | |
| VALUE | rb_data_typed_object_zalloc (VALUE klass, size_t size, const rb_data_type_t *type) |
| Identical to rb_data_typed_object_wrap(), except it allocates a new data region internally instead of taking an existing one. | |
| int | rb_typeddata_inherited_p (const rb_data_type_t *child, const rb_data_type_t *parent) |
| Checks for the domestic relationship between the two. | |
| int | rb_typeddata_is_kind_of (VALUE obj, const rb_data_type_t *data_type) |
| Checks if the given object is of given kind. | |
| void * | rb_check_typeddata (VALUE obj, const rb_data_type_t *data_type) |
| Identical to rb_typeddata_is_kind_of(), except it raises exceptions instead of returning false. | |
| static bool | rbimpl_typeddata_embedded_p (VALUE obj) |
| static bool | RTYPEDDATA_EMBEDDED_P (VALUE obj) |
| static void * | rbimpl_typeddata_get_data (VALUE obj) |
| static void * | RTYPEDDATA_GET_DATA (VALUE obj) |
| static bool | RTYPEDDATA_P (VALUE obj) |
| Checks whether the passed object is RTypedData or RData. | |
| static const rb_data_type_t * | RTYPEDDATA_TYPE (VALUE obj) |
| Queries for the type of given object. | |
| static bool | rbimpl_typeddata_inherited_p_inline (const rb_data_type_t *child, const rb_data_type_t *parent) |
| static bool | rbimpl_typeddata_is_kind_of_inline (VALUE obj, const rb_data_type_t *data_type) |
| static VALUE | rb_data_typed_object_make (VALUE klass, const rb_data_type_t *type, void **datap, size_t size) |
| While we don't stop you from using this function, it seems to be an implementation detail of TypedData_Make_Struct, which is preferred over this one. | |
Defines struct RTypedData.
RBIMPL or rbimpl are implementation details. Don't take them as canon. They could rapidly appear then vanish. The name (path) of this header file is also an implementation detail. Do not expect it to persist at the place it is now. Developers are free to move it anywhere anytime at will. __VA_ARGS__ is always available. We assume C99 for ruby itself but we don't assume languages of extension libraries. They could be written in C++98. Definition in file rtypeddata.h.
| #define HAVE_RB_DATA_TYPE_T_FUNCTION 1 |
Definition at line 61 of file rtypeddata.h.
| #define HAVE_RB_DATA_TYPE_T_PARENT 1 |
Definition at line 70 of file rtypeddata.h.
| #define HAVE_TYPE_RB_DATA_TYPE_T 1 |
Definition at line 52 of file rtypeddata.h.
| #define rb_typeddata_inherited_p rbimpl_typeddata_inherited_p_inline |
Definition at line 707 of file rtypeddata.h.
| #define rb_typeddata_is_kind_of rbimpl_typeddata_is_kind_of_inline |
Definition at line 717 of file rtypeddata.h.
| #define RBIMPL_TYPEDDATA_PRECONDITION | ( | obj, | |
| unreachable | |||
| ) | RBIMPL_ASSERT_NOTHING |
Definition at line 517 of file rtypeddata.h.
| #define RTYPEDDATA | ( | obj | ) | RBIMPL_CAST((struct RTypedData *)(obj)) |
Convenient casting macro.
| obj | An object, which is in fact an RTypedData. |
Definition at line 96 of file rtypeddata.h.
| #define RTYPEDDATA_DATA | ( | v | ) | (RTYPEDDATA(rbimpl_check_external_typeddata(v))->data) |
Convenient getter macro.
| v | An object, which is in fact an RTypedData. |
Definition at line 106 of file rtypeddata.h.
| #define RUBY_TYPED_DEFAULT_FREE RUBY_DEFAULT_FREE |
This is a value you can set to rb_data_type_struct::dfree.
Setting this means the data was allocated using ruby_xmalloc() (or variants), and shall be freed using ruby_xfree().
Definition at line 81 of file rtypeddata.h.
| #define RUBY_TYPED_EMBEDDABLE RUBY_TYPED_EMBEDDABLE |
Definition at line 125 of file rtypeddata.h.
| #define RUBY_TYPED_FREE_IMMEDIATELY RUBY_TYPED_FREE_IMMEDIATELY |
Macros to see if each corresponding flag is defined.
Definition at line 122 of file rtypeddata.h.
| #define RUBY_TYPED_FROZEN_SHAREABLE RUBY_TYPED_FROZEN_SHAREABLE |
Definition at line 123 of file rtypeddata.h.
| #define RUBY_TYPED_NEVER_FREE RUBY_NEVER_FREE |
This is a value you can set to rb_data_type_struct::dfree.
Setting this means the data is managed by someone else, like, statically allocated. Of course you are on your own then.
Definition at line 88 of file rtypeddata.h.
| #define RUBY_TYPED_PROMOTED1 RUBY_TYPED_PROMOTED1 |
Definition at line 126 of file rtypeddata.h.
| #define RUBY_TYPED_WB_PROTECTED RUBY_TYPED_WB_PROTECTED |
Definition at line 124 of file rtypeddata.h.
| #define TypedData_Get_Struct | ( | obj, | |
| type, | |||
| data_type, | |||
| sval | |||
| ) | ((sval) = RBIMPL_CAST((type *)rbimpl_check_typeddata((obj), (data_type)))) |
Obtains a C struct from inside of a wrapper Ruby object.
| obj | An instance of RTypedData. |
| type | Type name of the C struct. |
| data_type | The data type describing type. |
| sval | Variable name of obtained C struct. |
| rb_eTypeError | `obj` is not a kind of `data_type`. |
obj holds. Definition at line 769 of file rtypeddata.h.
| #define TypedData_Make_Struct | ( | klass, | |
| type, | |||
| data_type, | |||
| sval | |||
| ) |
Identical to TypedData_Wrap_Struct, except it allocates a new data region internally instead of taking an existing one.
The allocation is done using ruby_calloc().
| klass | Ruby level class of the object. |
| type | Type name of the C struct. |
| data_type | The data type describing type. |
| sval | Variable name of created C struct. |
| rb_eTypeError | `klass` is not a class. |
| rb_eNoMemError | Out of memory. |
Definition at line 578 of file rtypeddata.h.
| #define TypedData_Make_Struct0 | ( | result, | |
| klass, | |||
| type, | |||
| size, | |||
| data_type, | |||
| sval | |||
| ) |
This is an implementation detail of TypedData_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. |
| data_type | The data type describing type. |
| sval | Variable name of created C struct. |
Definition at line 547 of file rtypeddata.h.
| #define TypedData_Wrap_Struct | ( | klass, | |
| data_type, | |||
| sval | |||
| ) | rb_data_typed_object_wrap((klass),(sval),(data_type)) |
Converts sval, a pointer to your struct, into a Ruby object.
| klass | A ruby level class. |
| data_type | The type of sval. |
| sval | A pointer to your struct. |
| rb_eTypeError | `klass` is not a class. |
| rb_eNoMemError | Out of memory. |
Definition at line 531 of file rtypeddata.h.
| typedef struct rb_data_type_struct rb_data_type_t |
This is the struct that holds necessary info for a struct.
It roughly resembles a Ruby level class; multiple objects can share a rb_data_type_t instance.
Definition at line 226 of file rtypeddata.h.
|
inlinestatic |
While we don't stop you from using this function, it seems to be an implementation detail of TypedData_Make_Struct, which is preferred over this one.
| [in] | klass | Ruby level class of the returning object. |
| [in] | type | The data type |
| [out] | datap | Return pointer. |
| [in] | size | Size of the C struct. |
| rb_eTypeError | `klass` is not a class. |
| rb_eNoMemError | Out of memory. |
*datap points to the C struct wrapped by the returned object. Definition at line 788 of file rtypeddata.h.
| VALUE rb_data_typed_object_wrap | ( | VALUE | klass, |
| void * | datap, | ||
| const rb_data_type_t * | type | ||
| ) |
This is the primitive way to wrap an existing C struct into RTypedData.
| [in] | klass | Ruby level class of the returning object. |
| [in] | datap | Pointer to the target C struct. |
| [in] | type | The characteristics of the passed data. |
| rb_eTypeError | `klass` is not a class. |
| rb_eNoMemError | Out of memory. |
datap. | VALUE rb_data_typed_object_zalloc | ( | VALUE | klass, |
| size_t | size, | ||
| const rb_data_type_t * | type | ||
| ) |
Identical to rb_data_typed_object_wrap(), except it allocates a new data region internally instead of taking an existing one.
The allocation is done using ruby_calloc().
| [in] | klass | Ruby level class of the returning object. |
| [in] | size | Requested size of memory to allocate. |
| [in] | type | The characteristics of the passed data. |
| rb_eTypeError | `klass` is not a class. |
| rb_eNoMemError | Out of memory. |
size byte region. This is an implementation detail of RTYPEDDATA_DATA().
Don't use it directly.
Definition at line 751 of file rtypeddata.h.
|
inlinestatic |
Definition at line 587 of file rtypeddata.h.
|
inlinestatic |
Definition at line 602 of file rtypeddata.h.
|
inlinestatic |
Definition at line 700 of file rtypeddata.h.
|
inlinestatic |
Definition at line 712 of file rtypeddata.h.
|
inlinestatic |
Definition at line 594 of file rtypeddata.h.
|
inlinestatic |
Definition at line 611 of file rtypeddata.h.
|
inlinestatic |
Checks whether the passed object is RTypedData or RData.
| [in] | obj | Object in question |
| true | obj is an instance of RTypedData. |
| false | obj is an instance of RData. |
obj must be a Ruby object of RUBY_T_DATA. Definition at line 669 of file rtypeddata.h.
Referenced by rb_free_generic_ivar(), and rb_rand_if().
|
inlinestatic |
Queries for the type of given object.
| [in] | obj | Object in question |
obj. obj must be an instance of RTypedData. Definition at line 687 of file rtypeddata.h.
Referenced by rb_rand_if().