Groonga 3.0.9 Source Code Document
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
class.h
Go to the documentation of this file.
1 /*
2 ** mruby/class.h - Class class
3 **
4 ** See Copyright Notice in mruby.h
5 */
6 
7 #ifndef MRUBY_CLASS_H
8 #define MRUBY_CLASS_H
9 
10 #if defined(__cplusplus)
11 extern "C" {
12 #endif
13 
14 struct RClass {
16  struct iv_tbl *iv;
17  struct kh_mt *mt;
18  struct RClass *super;
19 };
20 
21 #define mrb_class_ptr(v) ((struct RClass*)(mrb_ptr(v)))
22 #define RCLASS_SUPER(v) (((struct RClass*)(mrb_ptr(v)))->super)
23 #define RCLASS_IV_TBL(v) (((struct RClass*)(mrb_ptr(v)))->iv)
24 #define RCLASS_M_TBL(v) (((struct RClass*)(mrb_ptr(v)))->mt)
25 
26 static inline struct RClass*
27 mrb_class(mrb_state *mrb, mrb_value v)
28 {
29  switch (mrb_type(v)) {
30  case MRB_TT_FALSE:
31  if (v.value.i)
32  return mrb->false_class;
33  return mrb->nil_class;
34  case MRB_TT_TRUE:
35  return mrb->true_class;
36  case MRB_TT_SYMBOL:
37  return mrb->symbol_class;
38  case MRB_TT_FIXNUM:
39  return mrb->fixnum_class;
40  case MRB_TT_FLOAT:
41  return mrb->float_class;
42  case MRB_TT_CPTR:
43  return mrb->object_class;
44  default:
45  return mrb_obj_ptr(v)->c;
46  }
47 }
48 
49 #define MRB_SET_INSTANCE_TT(c, tt) c->flags = ((c->flags & ~0xff) | (char)tt)
50 #define MRB_INSTANCE_TT(c) (enum mrb_vtype)(c->flags & 0xff)
51 
57 void mrb_define_method_raw(mrb_state*, struct RClass*, mrb_sym, struct RProc *);
58 void mrb_define_method_id(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_func_t func, mrb_aspec aspec);
59 void mrb_alias_method(mrb_state *mrb, struct RClass *c, mrb_sym a, mrb_sym b);
60 
61 struct RClass *mrb_class_outer_module(mrb_state*, struct RClass *);
63 struct RProc *mrb_method_search(mrb_state*, struct RClass*, mrb_sym);
64 
65 struct RClass* mrb_class_real(struct RClass* cl);
66 
67 void mrb_gc_mark_mt(mrb_state*, struct RClass*);
68 size_t mrb_gc_mark_mt_size(mrb_state*, struct RClass*);
69 void mrb_gc_free_mt(mrb_state*, struct RClass*);
70 
71 #if defined(__cplusplus)
72 } /* extern "C" { */
73 #endif
74 
75 #endif /* MRUBY_CLASS_H */