Groonga 3.0.9 Source Code Document
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
data.h
Go to the documentation of this file.
1 /*
2 ** mruby/data.h - Data class
3 **
4 ** See Copyright Notice in mruby.h
5 */
6 
7 #ifndef MRUBY_DATA_H
8 #define MRUBY_DATA_H 1
9 
10 #if defined(__cplusplus)
11 extern "C" {
12 #endif
13 
14 typedef struct mrb_data_type {
15  const char *struct_name;
16  void (*dfree)(mrb_state *mrb, void*);
18 
19 struct RData {
21  struct iv_tbl *iv;
23  void *data;
24 };
25 
26 struct RData *mrb_data_object_alloc(mrb_state *mrb, struct RClass* klass, void *datap, const mrb_data_type *type);
27 
28 #define Data_Wrap_Struct(mrb,klass,type,ptr)\
29  mrb_data_object_alloc(mrb,klass,ptr,type)
30 
31 #define Data_Make_Struct(mrb,klass,strct,type,sval,data) do { \
32  sval = mrb_malloc(mrb, sizeof(strct)); \
33  { static const strct zero = { 0 }; *sval = zero; };\
34  data = Data_Wrap_Struct(mrb,klass,type,sval);\
35 } while (0)
36 
37 #define RDATA(obj) ((struct RData *)(mrb_ptr(obj)))
38 #define DATA_PTR(d) (RDATA(d)->data)
39 #define DATA_TYPE(d) (RDATA(d)->type)
42 #define DATA_GET_PTR(mrb,obj,dtype,type) (type*)mrb_data_get_ptr(mrb,obj,dtype)
44 #define DATA_CHECK_GET_PTR(mrb,obj,dtype,type) (type*)mrb_data_check_get_ptr(mrb,obj,dtype)
45 
46 /* obsolete functions and macros */
47 #define mrb_data_check_and_get(mrb,obj,dtype) mrb_data_get_ptr(mrb,obj,dtype)
48 #define mrb_get_datatype(mrb,val,type) mrb_data_get_ptr(mrb, val, type)
49 #define mrb_check_datatype(mrb,val,type) mrb_data_get_ptr(mrb, val, type)
50 #define Data_Get_Struct(mrb,obj,type,sval) do {\
51  *(void**)&sval = mrb_data_get_ptr(mrb, obj, type); \
52 } while (0)
53 
54 #if defined(__cplusplus)
55 } /* extern "C" { */
56 #endif
57 
58 #endif /* MRUBY_DATA_H */