mruby 3.3.0
mruby is the lightweight implementation of the Ruby language
Loading...
Searching...
No Matches
data.h
Go to the documentation of this file.
1
7#ifndef MRUBY_DATA_H
8#define MRUBY_DATA_H
9
10#include "common.h"
11
18
22typedef struct mrb_data_type {
24 const char *struct_name;
25
27 void (*dfree)(mrb_state *mrb, void*);
29
30struct RData {
31 MRB_OBJECT_HEADER;
32 struct iv_tbl *iv;
33 const mrb_data_type *type;
34 void *data;
35};
36
37MRB_API struct RData *mrb_data_object_alloc(mrb_state *mrb, struct RClass* klass, void *datap, const mrb_data_type *type);
38
39#define Data_Wrap_Struct(mrb,klass,type,ptr)\
40 mrb_data_object_alloc(mrb,klass,ptr,type)
41
42#define Data_Make_Struct(mrb,klass,strct,type,sval,data_obj) do { \
43 (data_obj) = Data_Wrap_Struct(mrb,klass,type,NULL);\
44 (sval) = (strct*)mrb_malloc(mrb, sizeof(strct)); \
45 { static const strct zero = { 0 }; *(sval) = zero; };\
46 (data_obj)->data = (sval);\
47} while (0)
48
49#define RDATA(obj) ((struct RData*)(mrb_ptr(obj)))
50#define DATA_PTR(d) (RDATA(d)->data)
51#define DATA_TYPE(d) (RDATA(d)->type)
52MRB_API void mrb_data_check_type(mrb_state *mrb, mrb_value, const mrb_data_type*);
53MRB_API void *mrb_data_get_ptr(mrb_state *mrb, mrb_value, const mrb_data_type*);
54#define DATA_GET_PTR(mrb,obj,dtype,type) (type*)mrb_data_get_ptr(mrb,obj,dtype)
55MRB_API void *mrb_data_check_get_ptr(mrb_state *mrb, mrb_value, const mrb_data_type*);
56#define DATA_CHECK_GET_PTR(mrb,obj,dtype,type) (type*)mrb_data_check_get_ptr(mrb,obj,dtype)
57
58/* obsolete functions and macros */
59#define mrb_data_check_and_get(mrb,obj,dtype) mrb_data_get_ptr(mrb,obj,dtype)
60#define mrb_get_datatype(mrb,val,type) mrb_data_get_ptr(mrb, val, type)
61#define mrb_check_datatype(mrb,val,type) mrb_data_get_ptr(mrb, val, type)
62#define Data_Get_Struct(mrb,obj,type,sval) do {\
63 *(void**)&sval = mrb_data_get_ptr(mrb, obj, type); \
64} while (0)
65
66MRB_INLINE void
67mrb_data_init(mrb_value v, void *ptr, const mrb_data_type *type)
68{
69 mrb_assert(mrb_data_p(v));
70 DATA_PTR(v) = ptr;
71 DATA_TYPE(v) = type;
72}
73
75
76#endif /* MRUBY_DATA_H */
mruby common platform definition"
#define MRB_INLINE
Declare a function as always inlined.
Definition common.h:68
#define MRB_END_DECL
End declarations in C mode.
Definition common.h:28
#define MRB_BEGIN_DECL
Start declarations in C mode.
Definition common.h:26
#define MRB_API
Declare a public mruby API function.
Definition common.h:79
Class class.
Definition class.h:17
Definition data.h:30
Definition variable.c:17
Custom C wrapped data.
Definition data.h:22
const char * struct_name
data type name
Definition data.h:24
void(* dfree)(mrb_state *mrb, void *)
data type release function pointer
Definition data.h:27
Definition mruby.h:256
Definition boxing_nan.h:40