source: EcnlProtoTool/trunk/mruby-1.2.0/include/mruby/data.h@ 270

Last change on this file since 270 was 270, checked in by coas-nagasima, 7 years ago

mruby版ECNLプロトタイピング・ツールを追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr
File size: 2.1 KB
Line 
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
9
10#include "mruby/common.h"
11
12/**
13 * Custom C wrapped data.
14 *
15 * Defining Ruby wrappers around native objects.
16 */
17MRB_BEGIN_DECL
18
19/**
20 * Custom data type description.
21 */
22typedef struct mrb_data_type {
23 /** data type name */
24 const char *struct_name;
25
26 /** data type release function pointer */
27 void (*dfree)(mrb_state *mrb, void*);
28} mrb_data_type;
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) do { \
43 sval = mrb_malloc(mrb, sizeof(strct)); \
44 { static const strct zero = { 0 }; *sval = zero; };\
45 data = Data_Wrap_Struct(mrb,klass,type,sval);\
46} while (0)
47
48#define RDATA(obj) ((struct RData *)(mrb_ptr(obj)))
49#define DATA_PTR(d) (RDATA(d)->data)
50#define DATA_TYPE(d) (RDATA(d)->type)
51MRB_API void mrb_data_check_type(mrb_state *mrb, mrb_value, const mrb_data_type*);
52MRB_API void *mrb_data_get_ptr(mrb_state *mrb, mrb_value, const mrb_data_type*);
53#define DATA_GET_PTR(mrb,obj,dtype,type) (type*)mrb_data_get_ptr(mrb,obj,dtype)
54MRB_API void *mrb_data_check_get_ptr(mrb_state *mrb, mrb_value, const mrb_data_type*);
55#define DATA_CHECK_GET_PTR(mrb,obj,dtype,type) (type*)mrb_data_check_get_ptr(mrb,obj,dtype)
56
57/* obsolete functions and macros */
58#define mrb_data_check_and_get(mrb,obj,dtype) mrb_data_get_ptr(mrb,obj,dtype)
59#define mrb_get_datatype(mrb,val,type) mrb_data_get_ptr(mrb, val, type)
60#define mrb_check_datatype(mrb,val,type) mrb_data_get_ptr(mrb, val, type)
61#define Data_Get_Struct(mrb,obj,type,sval) do {\
62 *(void**)&sval = mrb_data_get_ptr(mrb, obj, type); \
63} while (0)
64
65static inline void
66mrb_data_init(mrb_value v, void *ptr, const mrb_data_type *type)
67{
68 mrb_assert(mrb_type(v) == MRB_TT_DATA);
69 DATA_PTR(v) = ptr;
70 DATA_TYPE(v) = type;
71}
72
73MRB_END_DECL
74
75#endif /* MRUBY_DATA_H */
Note: See TracBrowser for help on using the repository browser.