3 static VALUE
sb_gv_get(VALUE self
, VALUE var
) {
4 return rb_gv_get( StringValuePtr(var
) );
7 static VALUE
sb_gv_set(VALUE self
, VALUE var
, VALUE val
) {
8 return rb_gv_set( StringValuePtr(var
), val
);
12 VALUE g_ro_var
= Qnil
;
13 VALUE g_hooked_var
= Qnil
;
15 static VALUE
sb_define_variable(VALUE self
, VALUE var_name
, VALUE val
) {
17 rb_define_variable(StringValuePtr(var_name
), &g_var
);
21 static VALUE
sb_get_global_value(VALUE self
) {
25 static VALUE
sb_define_readonly_variable(VALUE self
, VALUE var_name
, VALUE val
) {
27 rb_define_readonly_variable(StringValuePtr(var_name
), &g_ro_var
);
31 void var_2x_setter(VALUE val
, ID id
, VALUE
*var
) {
32 *var
= INT2NUM(NUM2INT(val
) * 2);
35 static VALUE
sb_define_hooked_variable(VALUE self
, VALUE var_name
) {
36 rb_define_hooked_variable(StringValuePtr(var_name
), &g_hooked_var
, 0, var_2x_setter
);
40 void Init_subtend_global() {
42 cls
= rb_define_class("SubtendGlobal", rb_cObject
);
44 rb_define_method(cls
, "sb_gv_get", sb_gv_get
, 1);
45 rb_define_method(cls
, "sb_gv_set", sb_gv_set
, 2);
46 rb_define_method(cls
, "rb_define_variable", sb_define_variable
, 2);
47 rb_define_method(cls
, "sb_get_global_value", sb_get_global_value
, 0);
48 rb_define_method(cls
, "rb_define_readonly_variable", sb_define_readonly_variable
, 2);
49 rb_define_method(cls
, "rb_define_hooked_variable_2x", sb_define_hooked_variable
, 1);