Files
mruby-mruby/include/mruby/data.h
T
Artur K 6a6c26f530 Changed the RData type field to 'const'
Within the mruby source code the 'type' field is either initialized, or used in const manner.
IMHO changing the type after it has been created might cause hard to track errors.
2013-03-23 22:00:23 +01:00

51 lines
1.3 KiB
C

/*
** mruby/data.h - Data class
**
** See Copyright Notice in mruby.h
*/
#ifndef MRUBY_DATA_H
#define MRUBY_DATA_H 1
#if defined(__cplusplus)
extern "C" {
#endif
typedef struct mrb_data_type {
const char *struct_name;
void (*dfree)(mrb_state *mrb, void*);
} mrb_data_type;
struct RData {
MRB_OBJECT_HEADER;
struct iv_tbl *iv;
const mrb_data_type *type;
void *data;
};
struct RData *mrb_data_object_alloc(mrb_state *mrb, struct RClass* klass, void *datap, const mrb_data_type *type);
#define Data_Wrap_Struct(mrb,klass,type,ptr)\
mrb_data_object_alloc(mrb,klass,ptr,type)
#define Data_Make_Struct(mrb,klass,strct,type,sval,data) (\
sval = mrb_malloc(mrb, sizeof(strct)),\
{ static const strct zero = { 0 }; *sval = zero; },\
data = Data_Wrap_Struct(mrb,klass,type,sval)\
)
#define RDATA(obj) ((struct RData *)((obj).value.p))
#define DATA_PTR(d) (RDATA(d)->data)
#define DATA_TYPE(d) (RDATA(d)->type)
void *mrb_get_datatype(mrb_state *mrb, mrb_value, const mrb_data_type*);
void *mrb_check_datatype(mrb_state *mrb, mrb_value, const mrb_data_type*);
#define Data_Get_Struct(mrb,obj,type,sval) do {\
*(void**)&sval = mrb_check_datatype(mrb, obj, type); \
} while (0)
#if defined(__cplusplus)
} /* extern "C" { */
#endif
#endif /* MRUBY_DATA_H */