mult 0.2.0-i386-mingw32 → 0.2.2-i386-mingw32

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -1,6 +1,9 @@
1
- # Mult: utility functions for playing with Ruby Objects
1
+ Mult: utility functions for playing with Ruby Objects
2
+ ======================================================
3
+
4
+ Methods:
5
+ ---------
2
6
 
3
- Includes:
4
7
  * actual_class
5
8
  * actual_class=
6
9
  * actual_super
@@ -12,7 +15,24 @@ Includes:
12
15
  * ivar_get
13
16
  * m_tbl
14
17
  * m_tbl=
18
+ * iv_tbl
19
+ * iv_tbl=
20
+ * has_flag?
21
+ * flags
22
+ * flags=
23
+
24
+ Constants:
25
+ ----------
26
+
27
+ * T_CLASS
28
+ * T_MODULE
29
+ * T_OBJECT
30
+ * T_ICLASS
31
+ * T_DATA
32
+ * FL_SINGLETON
33
+ * FL_FREEZE
15
34
 
16
35
  TO USE:
36
+ --------
17
37
 
18
- gem install mult
38
+ `gem install mult`
data/ext/mult/extconf.rb CHANGED
@@ -1,3 +1,9 @@
1
1
  require 'mkmf'
2
2
 
3
+ # 1.9 compatibility
4
+ $CFLAGS += " -DRUBY_19" if RUBY_VERSION =~ /1.9/
5
+
6
+ # let's use c99
7
+ $CFLAGS += " -std=c99"
8
+
3
9
  create_makefile('mult')
data/ext/mult/mult.c CHANGED
@@ -20,7 +20,6 @@ set_class(VALUE self, VALUE klass) {
20
20
  return klass;
21
21
  }
22
22
 
23
-
24
23
  /* get the actual super class of an object */
25
24
  static VALUE
26
25
  get_super(VALUE self)
@@ -76,33 +75,57 @@ set_attached(VALUE self, VALUE klass) {
76
75
  return Qnil;
77
76
  }
78
77
 
78
+ /* generate table get methods */
79
+ #define CREATE_GET_TBL_FUNC(func_name, table_type) \
80
+ static VALUE func_name(VALUE self) { \
81
+ RubyTable * tbl_struct = ALLOC(RubyTable); \
82
+ if (!table_type(self)) \
83
+ table_type(self) = st_init_numtable(); \
84
+ tbl_struct->table = table_type(self); \
85
+ return Data_Wrap_Struct(cRubyTable, 0, free, tbl_struct); \
86
+ }
87
+
88
+ /* generate table set methods */
89
+ #define CREATE_SET_TBL_FUNC(func_name, table_type) \
90
+ static VALUE \
91
+ func_name(VALUE self, VALUE rb_tbl) { \
92
+ Check_Type(rb_tbl, T_DATA); \
93
+ RubyTable * tbl_struct; \
94
+ Data_Get_Struct(rb_tbl, RubyTable, tbl_struct); \
95
+ table_type(self) = tbl_struct->table; \
96
+ rb_clear_cache(); \
97
+ return self; \
98
+ }
99
+
79
100
  /* get the method table */
80
- static VALUE
81
- get_m_tbl(VALUE self) {
82
- RubyTable * m_tbl_struct = ALLOC(RubyTable);
83
-
84
- if (!RCLASS_M_TBL(self))
85
- RCLASS_M_TBL(self) = st_init_numtable();
101
+ CREATE_GET_TBL_FUNC(get_m_tbl, RCLASS_M_TBL)
102
+ /* set the method table */
103
+ CREATE_SET_TBL_FUNC(set_m_tbl, RCLASS_M_TBL)
86
104
 
87
- m_tbl_struct->table = RCLASS_M_TBL(self);
88
- VALUE ret = Data_Wrap_Struct(cRubyTable, 0, free, m_tbl_struct);
105
+ /* get the iv table */
106
+ CREATE_GET_TBL_FUNC(get_iv_tbl, RCLASS_IV_TBL)
107
+ /* set the iv table */
108
+ CREATE_SET_TBL_FUNC(set_iv_tbl, RCLASS_IV_TBL)
89
109
 
90
- return ret;
110
+ static VALUE
111
+ set_flags(VALUE self, VALUE flag)
112
+ {
113
+ Check_Type(flag, T_FIXNUM);
114
+ FL_SET(self, FIX2INT(flag));
115
+ return self;
91
116
  }
92
117
 
93
- /* set the method table */
94
118
  static VALUE
95
- set_m_tbl(VALUE self, VALUE rb_m) {
96
- Check_Type(rb_m, T_DATA);
97
-
98
- RubyTable * m_tbl_struct;
99
- Data_Get_Struct(rb_m, RubyTable, m_tbl_struct);
100
-
101
- RCLASS_M_TBL(self) = m_tbl_struct->table;
119
+ get_flags(VALUE self)
120
+ {
121
+ return INT2FIX(RBASIC(self)->flags);
122
+ }
102
123
 
103
- rb_clear_cache();
104
-
105
- return self;
124
+ static VALUE
125
+ has_flag_p(VALUE self, VALUE flag)
126
+ {
127
+ Check_Type(flag, T_FIXNUM);
128
+ return FL_TEST(self, FIX2INT(flag)) ? Qtrue : Qfalse;
106
129
  }
107
130
 
108
131
  void
@@ -118,6 +141,8 @@ Init_mult() {
118
141
 
119
142
  rb_define_method(rb_cModule, "m_tbl", get_m_tbl, 0);
120
143
  rb_define_method(rb_cModule, "m_tbl=", set_m_tbl, 1);
144
+ rb_define_method(rb_cModule, "iv_tbl", get_iv_tbl, 0);
145
+ rb_define_method(rb_cModule, "iv_tbl=", set_iv_tbl, 1);
121
146
 
122
147
  rb_define_method(rb_cModule, "actual_super", get_super, 0);
123
148
  rb_define_method(rb_cModule, "actual_super=", set_super, 1);
@@ -126,4 +151,17 @@ Init_mult() {
126
151
 
127
152
  rb_define_method(rb_cClass, "attached", get_attached, 0);
128
153
  rb_define_method(rb_cClass, "attached=", set_attached, 1);
154
+
155
+ rb_define_method(rb_cObject, "has_flag?", has_flag_p, 1);
156
+ rb_define_method(rb_cObject, "flags=", set_flags, 1);
157
+ rb_define_method(rb_cObject, "flags", get_flags, 0);
158
+
159
+ // constants
160
+ rb_define_const(rb_cObject, "T_CLASS", INT2FIX(T_CLASS));
161
+ rb_define_const(rb_cObject, "T_MODULE", INT2FIX(T_MODULE));
162
+ rb_define_const(rb_cObject, "T_OBJECT", INT2FIX(T_OBJECT));
163
+ rb_define_const(rb_cObject, "T_DATA", INT2FIX(T_DATA));
164
+ rb_define_const(rb_cObject, "T_ICLASS", INT2FIX(T_ICLASS));
165
+ rb_define_const(rb_cObject, "FL_FREEZE", INT2FIX(FL_FREEZE));
166
+ rb_define_const(rb_cObject, "FL_SINGLETON", INT2FIX(FL_SINGLETON));
129
167
  }
data/lib/1.8/mult.so CHANGED
Binary file
data/lib/1.9/mult.so CHANGED
Binary file
data/lib/mult/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Mult
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.2"
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mult
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 0
10
- version: 0.2.0
9
+ - 2
10
+ version: 0.2.2
11
11
  platform: i386-mingw32
12
12
  authors:
13
13
  - John Mair (banisterfiend)