mbed I/F binding for mruby
Dependents: mruby_mbed_web mirb_mbed
data.h
00001 /* 00002 ** mruby/data.h - Data class 00003 ** 00004 ** See Copyright Notice in mruby.h 00005 */ 00006 00007 #ifndef MRUBY_DATA_H 00008 #define MRUBY_DATA_H 00009 00010 #if defined(__cplusplus) 00011 extern "C" { 00012 #endif 00013 00014 typedef struct mrb_data_type { 00015 const char *struct_name; 00016 void (*dfree)(mrb_state *mrb, void*); 00017 } mrb_data_type; 00018 00019 struct RData { 00020 MRB_OBJECT_HEADER; 00021 struct iv_tbl *iv; 00022 const mrb_data_type *type; 00023 void *data; 00024 }; 00025 00026 MRB_API struct RData *mrb_data_object_alloc(mrb_state *mrb, struct RClass* klass, void *datap, const mrb_data_type *type); 00027 00028 #define Data_Wrap_Struct(mrb,klass,type,ptr)\ 00029 mrb_data_object_alloc(mrb,klass,ptr,type) 00030 00031 #define Data_Make_Struct(mrb,klass,strct,type,sval,data) do { \ 00032 sval = mrb_malloc(mrb, sizeof(strct)); \ 00033 { static const strct zero = { 0 }; *sval = zero; };\ 00034 data = Data_Wrap_Struct(mrb,klass,type,sval);\ 00035 } while (0) 00036 00037 #define RDATA(obj) ((struct RData *)(mrb_ptr(obj))) 00038 #define DATA_PTR(d) (RDATA(d)->data) 00039 #define DATA_TYPE(d) (RDATA(d)->type) 00040 MRB_API void mrb_data_check_type(mrb_state *mrb, mrb_value, const mrb_data_type*); 00041 MRB_API void *mrb_data_get_ptr(mrb_state *mrb, mrb_value, const mrb_data_type*); 00042 #define DATA_GET_PTR(mrb,obj,dtype,type) (type*)mrb_data_get_ptr(mrb,obj,dtype) 00043 MRB_API void *mrb_data_check_get_ptr(mrb_state *mrb, mrb_value, const mrb_data_type*); 00044 #define DATA_CHECK_GET_PTR(mrb,obj,dtype,type) (type*)mrb_data_check_get_ptr(mrb,obj,dtype) 00045 00046 /* obsolete functions and macros */ 00047 #define mrb_data_check_and_get(mrb,obj,dtype) mrb_data_get_ptr(mrb,obj,dtype) 00048 #define mrb_get_datatype(mrb,val,type) mrb_data_get_ptr(mrb, val, type) 00049 #define mrb_check_datatype(mrb,val,type) mrb_data_get_ptr(mrb, val, type) 00050 #define Data_Get_Struct(mrb,obj,type,sval) do {\ 00051 *(void**)&sval = mrb_data_get_ptr(mrb, obj, type); \ 00052 } while (0) 00053 00054 static inline void 00055 mrb_data_init(mrb_value v, void *ptr, const mrb_data_type *type) 00056 { 00057 mrb_assert(mrb_type(v) == MRB_TT_DATA); 00058 DATA_PTR(v) = ptr; 00059 DATA_TYPE(v) = type; 00060 } 00061 00062 #if defined(__cplusplus) 00063 } /* extern "C" { */ 00064 #endif 00065 00066 #endif /* MRUBY_DATA_H */ 00067
Generated on Tue Jul 12 2022 18:00:34 by 1.7.2