@@ -104,37 +104,42 @@ struct Binder {
104
104
// ===========================================================================
105
105
// Interface
106
106
107
- extern RClass *mod_mrubybind;
108
-
109
- int initialize (mrb_state* mrb);
110
-
111
- // Bind function.
112
- template <class Func >
113
- void bind (mrb_state *mrb, const char * name, Func f) {
114
- mrb_value binder = mrb_voidp_value ((void *)Binder<Func>::call);
115
- mrb_value fn = mrb_str_new_cstr (mrb, name);
116
- mrb_value fp = mrb_voidp_value ((void *)f);
117
- mrb_funcall (mrb, mrb_obj_value (mod_mrubybind), " define_function" , 3 , binder, fn, fp);
118
- }
119
-
120
- // Bind class.
121
- template <class Func >
122
- void define_class (mrb_state* mrb, const char * class_name, Func f) {
123
- mrb_value binder = mrb_voidp_value ((void *)Binder<Func>::call);
124
- mrb_value cn = mrb_str_new_cstr (mrb, class_name);
125
- mrb_value fp = mrb_voidp_value ((void *)f);
126
- mrb_funcall (mrb, mrb_obj_value (mod_mrubybind), " create_class" , 3 , binder, cn, fp);
127
- }
128
-
129
- // Bind class method.
130
- template <class Method >
131
- void define_class_method (mrb_state* mrb, const char * class_name, const char * method_name, Method m) {
132
- mrb_value binder = mrb_voidp_value ((void *)Binder<Method>::call);
133
- mrb_value cn = mrb_str_new_cstr (mrb, class_name);
134
- mrb_value mn = mrb_str_new_cstr (mrb, method_name);
135
- mrb_value mp = mrb_str_new (mrb, (char *)&m, sizeof (m));
136
- mrb_funcall (mrb, mrb_obj_value (mod_mrubybind), " define_class_method" , 4 , binder, cn, mn, mp);
137
- }
107
+ class MrubyBind {
108
+ public:
109
+ MrubyBind (mrb_state* mrb);
110
+
111
+ // Bind function.
112
+ template <class Func >
113
+ void bind (const char * name, Func f) {
114
+ mrb_value binder = mrb_voidp_value ((void *)Binder<Func>::call);
115
+ mrb_value fn = mrb_str_new_cstr (mrb, name);
116
+ mrb_value fp = mrb_voidp_value ((void *)f);
117
+ mrb_funcall (mrb, mod_mrubybind, " define_function" , 3 , binder, fn, fp);
118
+ }
119
+
120
+ // Bind class.
121
+ template <class Func >
122
+ void define_class (const char * class_name, Func f) {
123
+ mrb_value binder = mrb_voidp_value ((void *)Binder<Func>::call);
124
+ mrb_value cn = mrb_str_new_cstr (mrb, class_name);
125
+ mrb_value fp = mrb_voidp_value ((void *)f);
126
+ mrb_funcall (mrb, mod_mrubybind, " create_class" , 3 , binder, cn, fp);
127
+ }
128
+
129
+ // Bind class method.
130
+ template <class Method >
131
+ void define_class_method (const char * class_name, const char * method_name, Method m) {
132
+ mrb_value binder = mrb_voidp_value ((void *)Binder<Method>::call);
133
+ mrb_value cn = mrb_str_new_cstr (mrb, class_name);
134
+ mrb_value mn = mrb_str_new_cstr (mrb, method_name);
135
+ mrb_value mp = mrb_str_new (mrb, (char *)&m, sizeof (m));
136
+ mrb_funcall (mrb, mod_mrubybind, " define_class_method" , 4 , binder, cn, mn, mp);
137
+ }
138
+
139
+ private:
140
+ mrb_state* mrb;
141
+ mrb_value mod_mrubybind;
142
+ };
138
143
139
144
} // namespace mrubybind
140
145
0 commit comments