extpp 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +75 -3
- data/doc/text/news.md +12 -0
- data/ext/extpp/function.hpp +43 -0
- data/include/ruby/object.hpp +24 -0
- data/lib/extpp/version.rb +1 -1
- data/sample/hello/Rakefile +13 -0
- data/sample/hello/extconf.rb +3 -0
- data/sample/hello/hello.cpp +24 -0
- data/test/fixtures/cast/Makefile +264 -0
- data/test/fixtures/cast/cast.o +0 -0
- data/test/fixtures/cast/cast.so +0 -0
- data/test/fixtures/cast/mkmf.log +8 -0
- data/test/fixtures/class/Makefile +264 -0
- data/test/fixtures/class/class.o +0 -0
- data/test/fixtures/class/class.so +0 -0
- data/test/fixtures/class/mkmf.log +8 -0
- data/test/fixtures/object/Makefile +264 -0
- data/test/fixtures/object/mkmf.log +8 -0
- data/test/fixtures/object/object.cpp +96 -72
- data/test/fixtures/object/object.o +0 -0
- data/test/fixtures/object/object.so +0 -0
- data/test/test-object.rb +16 -0
- metadata +29 -1
@@ -3,76 +3,100 @@
|
|
3
3
|
extern "C" void
|
4
4
|
Init_object(void)
|
5
5
|
{
|
6
|
-
rb::Class("ObjectMethods")
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
6
|
+
rb::Class klass("ObjectMethods");
|
7
|
+
klass.define_method("to_bool_true", [](VALUE self) {
|
8
|
+
rb::Object object(Qtrue);
|
9
|
+
if (object) {
|
10
|
+
return Qtrue;
|
11
|
+
} else {
|
12
|
+
return Qfalse;
|
13
|
+
}
|
14
|
+
});
|
15
|
+
klass.define_method("to_bool_false", [](VALUE self) {
|
16
|
+
rb::Object object(Qfalse);
|
17
|
+
if (object) {
|
18
|
+
return Qtrue;
|
19
|
+
} else {
|
20
|
+
return Qfalse;
|
21
|
+
}
|
22
|
+
});
|
23
|
+
klass.define_method("to_bool_nil", [](VALUE self) {
|
24
|
+
rb::Object object(Qnil);
|
25
|
+
if (object) {
|
26
|
+
return Qtrue;
|
27
|
+
} else {
|
28
|
+
return Qfalse;
|
29
|
+
}
|
30
|
+
});
|
31
|
+
klass.define_method("to_ruby", [](int argc, VALUE *argv, VALUE self) {
|
32
|
+
VALUE rb_object;
|
33
|
+
rb_scan_args(argc, argv, "1", &rb_object);
|
34
|
+
rb::Object object(rb_object);
|
35
|
+
return static_cast<VALUE>(object);
|
36
|
+
});
|
37
|
+
klass.define_method("send_no_arguments", [](int argc, VALUE *argv, VALUE self) {
|
38
|
+
VALUE rb_receiver;
|
39
|
+
VALUE rb_method_name;
|
40
|
+
rb_scan_args(argc, argv, "2", &rb_receiver, &rb_method_name);
|
41
|
+
rb::Object receiver(rb_receiver);
|
42
|
+
rb::Object method_name(rb_method_name);
|
43
|
+
auto result = receiver.send(method_name);
|
44
|
+
return static_cast<VALUE>(result);
|
45
|
+
});
|
46
|
+
klass.define_method("send_two_arguments", [](int argc, VALUE *argv, VALUE self) {
|
47
|
+
VALUE rb_receiver;
|
48
|
+
VALUE rb_method_name;
|
49
|
+
VALUE rb_arg1;
|
50
|
+
VALUE rb_arg2;
|
51
|
+
rb_scan_args(argc, argv, "4",
|
52
|
+
&rb_receiver,
|
53
|
+
&rb_method_name,
|
54
|
+
&rb_arg1,
|
55
|
+
&rb_arg2);
|
56
|
+
rb::Object receiver(rb_receiver);
|
57
|
+
rb::Object method_name(rb_method_name);
|
58
|
+
auto result = receiver.send(method_name, {rb_arg1, rb_arg2});
|
59
|
+
return static_cast<VALUE>(result);
|
60
|
+
});
|
61
|
+
klass.define_method("send_block", [](int argc, VALUE *argv, VALUE self) {
|
62
|
+
VALUE rb_receiver;
|
63
|
+
VALUE rb_method_name;
|
64
|
+
rb_scan_args(argc, argv, "2",
|
65
|
+
&rb_receiver,
|
66
|
+
&rb_method_name);
|
67
|
+
rb::Object receiver(rb_receiver);
|
68
|
+
rb::Object method_name(rb_method_name);
|
69
|
+
auto result = receiver.send(method_name,
|
70
|
+
{},
|
71
|
+
[](VALUE rb_n) -> VALUE {
|
72
|
+
auto n = rb::Object(rb_n);
|
73
|
+
auto n_raw = rb::cast<int32_t>(n);
|
74
|
+
return rb::cast<rb::Object>(n_raw * n_raw);
|
75
|
+
});
|
76
|
+
return static_cast<VALUE>(result);
|
77
|
+
});
|
78
|
+
klass.define_method("ivar_set", [](int argc, VALUE *argv, VALUE self) {
|
79
|
+
VALUE rb_receiver;
|
80
|
+
VALUE rb_name;
|
81
|
+
VALUE rb_value;
|
82
|
+
rb_scan_args(argc, argv, "3",
|
83
|
+
&rb_receiver,
|
84
|
+
&rb_name,
|
85
|
+
&rb_value);
|
86
|
+
rb::Object receiver(rb_receiver);
|
87
|
+
rb::Object name(rb_name);
|
88
|
+
auto result = receiver.ivar_set(name, rb_value);
|
89
|
+
return static_cast<VALUE>(result);
|
90
|
+
});
|
91
|
+
klass.define_method("ivar_get", [](int argc, VALUE *argv, VALUE self) {
|
92
|
+
VALUE rb_receiver;
|
93
|
+
VALUE rb_name;
|
94
|
+
rb_scan_args(argc, argv, "2",
|
95
|
+
&rb_receiver,
|
96
|
+
&rb_name);
|
97
|
+
rb::Object receiver(rb_receiver);
|
98
|
+
rb::Object name(rb_name);
|
99
|
+
auto result = receiver.ivar_get(name);
|
100
|
+
return static_cast<VALUE>(result);
|
101
|
+
});
|
78
102
|
}
|
Binary file
|
Binary file
|
data/test/test-object.rb
CHANGED
@@ -49,4 +49,20 @@ class ObjectTest < Test::Unit::TestCase
|
|
49
49
|
ObjectMethods.new.send_block([1, 2, 3], "collect"))
|
50
50
|
end
|
51
51
|
end
|
52
|
+
|
53
|
+
sub_test_case("instance variable") do
|
54
|
+
def test_set
|
55
|
+
object = Object.new
|
56
|
+
methods = ObjectMethods.new
|
57
|
+
assert_equal("me", methods.ivar_set(object, "@name", "me"))
|
58
|
+
assert_equal("me", object.instance_variable_get("@name"))
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_get
|
62
|
+
object = Object.new
|
63
|
+
object.instance_variable_set("@name", "me")
|
64
|
+
methods = ObjectMethods.new
|
65
|
+
assert_equal("me", methods.ivar_get(object, "@name"))
|
66
|
+
end
|
67
|
+
end
|
52
68
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: extpp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kouhei Sutou
|
@@ -111,6 +111,7 @@ files:
|
|
111
111
|
- ext/extpp/class.cpp
|
112
112
|
- ext/extpp/extconf.rb
|
113
113
|
- ext/extpp/function.cpp
|
114
|
+
- ext/extpp/function.hpp
|
114
115
|
- ext/extpp/object.cpp
|
115
116
|
- include/ruby.hpp
|
116
117
|
- include/ruby/cast.hpp
|
@@ -120,12 +121,27 @@ files:
|
|
120
121
|
- lib/extpp.rb
|
121
122
|
- lib/extpp/compiler.rb
|
122
123
|
- lib/extpp/version.rb
|
124
|
+
- sample/hello/Rakefile
|
125
|
+
- sample/hello/extconf.rb
|
126
|
+
- sample/hello/hello.cpp
|
127
|
+
- test/fixtures/cast/Makefile
|
123
128
|
- test/fixtures/cast/cast.cpp
|
129
|
+
- test/fixtures/cast/cast.o
|
130
|
+
- test/fixtures/cast/cast.so
|
124
131
|
- test/fixtures/cast/extconf.rb
|
132
|
+
- test/fixtures/cast/mkmf.log
|
133
|
+
- test/fixtures/class/Makefile
|
125
134
|
- test/fixtures/class/class.cpp
|
135
|
+
- test/fixtures/class/class.o
|
136
|
+
- test/fixtures/class/class.so
|
126
137
|
- test/fixtures/class/extconf.rb
|
138
|
+
- test/fixtures/class/mkmf.log
|
139
|
+
- test/fixtures/object/Makefile
|
127
140
|
- test/fixtures/object/extconf.rb
|
141
|
+
- test/fixtures/object/mkmf.log
|
128
142
|
- test/fixtures/object/object.cpp
|
143
|
+
- test/fixtures/object/object.o
|
144
|
+
- test/fixtures/object/object.so
|
129
145
|
- test/helper.rb
|
130
146
|
- test/run-test.rb
|
131
147
|
- test/test-cast.rb
|
@@ -161,9 +177,21 @@ test_files:
|
|
161
177
|
- test/test-object.rb
|
162
178
|
- test/test-class.rb
|
163
179
|
- test/test-cast.rb
|
180
|
+
- test/fixtures/object/object.o
|
181
|
+
- test/fixtures/object/object.so
|
164
182
|
- test/fixtures/object/object.cpp
|
183
|
+
- test/fixtures/object/mkmf.log
|
184
|
+
- test/fixtures/object/Makefile
|
165
185
|
- test/fixtures/object/extconf.rb
|
186
|
+
- test/fixtures/cast/mkmf.log
|
187
|
+
- test/fixtures/cast/Makefile
|
166
188
|
- test/fixtures/cast/extconf.rb
|
167
189
|
- test/fixtures/cast/cast.cpp
|
190
|
+
- test/fixtures/cast/cast.so
|
191
|
+
- test/fixtures/cast/cast.o
|
192
|
+
- test/fixtures/class/class.so
|
193
|
+
- test/fixtures/class/mkmf.log
|
194
|
+
- test/fixtures/class/Makefile
|
168
195
|
- test/fixtures/class/extconf.rb
|
196
|
+
- test/fixtures/class/class.o
|
169
197
|
- test/fixtures/class/class.cpp
|