rice 2.1.1 → 4.0.0
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 +5 -5
- data/CHANGELOG.md +121 -0
- data/CONTRIBUTORS.md +19 -0
- data/COPYING +2 -2
- data/Gemfile +3 -0
- data/README.md +69 -0
- data/Rakefile +95 -12
- data/include/rice/rice.hpp +7766 -0
- data/lib/mkmf-rice.rb +127 -0
- data/lib/version.rb +3 -0
- data/rice/Address_Registration_Guard.ipp +75 -32
- data/rice/Address_Registration_Guard_defn.hpp +60 -56
- data/rice/Arg.hpp +80 -4
- data/rice/Arg.ipp +51 -0
- data/rice/Constructor.hpp +30 -376
- data/rice/Data_Object.ipp +234 -107
- data/rice/Data_Object_defn.hpp +77 -117
- data/rice/Data_Type.hpp +1 -2
- data/rice/Data_Type.ipp +251 -295
- data/rice/Data_Type_defn.hpp +175 -243
- data/rice/Director.hpp +14 -9
- data/rice/Enum.hpp +54 -104
- data/rice/Enum.ipp +104 -230
- data/rice/Exception.hpp +2 -8
- data/rice/Exception.ipp +65 -0
- data/rice/Exception_defn.hpp +46 -47
- data/rice/Identifier.hpp +28 -28
- data/rice/Identifier.ipp +23 -27
- data/rice/Return.hpp +39 -0
- data/rice/Return.ipp +33 -0
- data/rice/detail/Exception_Handler.ipp +22 -62
- data/rice/detail/Exception_Handler_defn.hpp +76 -91
- data/rice/detail/Iterator.hpp +18 -88
- data/rice/detail/Iterator.ipp +47 -0
- data/rice/detail/Jump_Tag.hpp +21 -0
- data/rice/detail/MethodInfo.hpp +44 -0
- data/rice/detail/MethodInfo.ipp +78 -0
- data/rice/detail/NativeAttribute.hpp +53 -0
- data/rice/detail/NativeAttribute.ipp +83 -0
- data/rice/detail/NativeFunction.hpp +69 -0
- data/rice/detail/NativeFunction.ipp +248 -0
- data/rice/detail/RubyFunction.hpp +39 -0
- data/rice/detail/RubyFunction.ipp +92 -0
- data/rice/detail/Type.hpp +29 -0
- data/rice/detail/Type.ipp +138 -0
- data/rice/detail/TypeRegistry.hpp +50 -0
- data/rice/detail/TypeRegistry.ipp +106 -0
- data/rice/detail/Wrapper.hpp +51 -0
- data/rice/detail/Wrapper.ipp +151 -0
- data/rice/detail/default_allocation_func.hpp +8 -19
- data/rice/detail/default_allocation_func.ipp +9 -8
- data/rice/detail/from_ruby.hpp +2 -37
- data/rice/detail/from_ruby.ipp +1020 -46
- data/rice/detail/from_ruby_defn.hpp +38 -0
- data/rice/detail/function_traits.hpp +124 -0
- data/rice/detail/method_data.hpp +23 -15
- data/rice/detail/method_data.ipp +53 -0
- data/rice/detail/rice_traits.hpp +116 -0
- data/rice/detail/ruby.hpp +9 -49
- data/rice/detail/to_ruby.hpp +3 -17
- data/rice/detail/to_ruby.ipp +409 -31
- data/rice/detail/to_ruby_defn.hpp +48 -0
- data/rice/forward_declares.ipp +82 -0
- data/rice/global_function.hpp +16 -20
- data/rice/global_function.ipp +8 -17
- data/rice/rice.hpp +59 -0
- data/rice/ruby_mark.hpp +5 -3
- data/rice/ruby_try_catch.hpp +4 -4
- data/rice/stl.hpp +11 -0
- data/sample/callbacks/extconf.rb +6 -0
- data/sample/callbacks/sample_callbacks.cpp +35 -0
- data/sample/callbacks/test.rb +28 -0
- data/sample/enum/extconf.rb +3 -0
- data/sample/enum/sample_enum.cpp +3 -17
- data/sample/enum/test.rb +2 -2
- data/sample/inheritance/animals.cpp +8 -24
- data/sample/inheritance/extconf.rb +3 -0
- data/sample/inheritance/test.rb +1 -1
- data/sample/map/extconf.rb +3 -0
- data/sample/map/map.cpp +10 -18
- data/sample/map/test.rb +1 -1
- data/test/embed_ruby.cpp +34 -0
- data/test/embed_ruby.hpp +4 -0
- data/test/ext/t1/extconf.rb +3 -0
- data/test/ext/t1/t1.cpp +1 -3
- data/test/ext/t2/extconf.rb +3 -0
- data/test/ext/t2/t2.cpp +1 -1
- data/test/extconf.rb +23 -0
- data/test/ruby/test_callbacks_sample.rb +28 -0
- data/test/ruby/test_multiple_extensions.rb +18 -0
- data/test/ruby/test_multiple_extensions_same_class.rb +14 -0
- data/test/ruby/test_multiple_extensions_with_inheritance.rb +20 -0
- data/test/test_Address_Registration_Guard.cpp +25 -11
- data/test/test_Array.cpp +131 -74
- data/test/test_Attribute.cpp +147 -0
- data/test/test_Builtin_Object.cpp +36 -15
- data/test/test_Class.cpp +151 -274
- data/test/test_Constructor.cpp +10 -9
- data/test/test_Data_Object.cpp +135 -193
- data/test/test_Data_Type.cpp +323 -252
- data/test/test_Director.cpp +56 -42
- data/test/test_Enum.cpp +230 -104
- data/test/test_Exception.cpp +7 -7
- data/test/test_Hash.cpp +33 -31
- data/test/test_Identifier.cpp +6 -6
- data/test/test_Inheritance.cpp +221 -0
- data/test/test_Iterator.cpp +161 -0
- data/test/test_Jump_Tag.cpp +1 -1
- data/test/test_Keep_Alive.cpp +161 -0
- data/test/test_Memory_Management.cpp +4 -5
- data/test/test_Module.cpp +169 -111
- data/test/test_Object.cpp +51 -19
- data/test/test_Ownership.cpp +275 -0
- data/test/test_Self.cpp +205 -0
- data/test/test_Stl_Optional.cpp +90 -0
- data/test/test_Stl_Pair.cpp +144 -0
- data/test/test_Stl_SmartPointer.cpp +200 -0
- data/test/test_Stl_String.cpp +74 -0
- data/test/test_Stl_Vector.cpp +652 -0
- data/test/test_String.cpp +3 -3
- data/test/test_Struct.cpp +31 -40
- data/test/test_Symbol.cpp +3 -3
- data/test/test_To_From_Ruby.cpp +283 -218
- data/test/test_global_functions.cpp +41 -20
- data/test/unittest.cpp +34 -8
- data/test/unittest.hpp +0 -4
- metadata +117 -137
- data/Doxyfile +0 -2280
- data/Makefile.am +0 -26
- data/Makefile.in +0 -920
- data/README +0 -1055
- data/README.mingw +0 -8
- data/aclocal.m4 +0 -1088
- data/bootstrap +0 -8
- data/check_stdcxx_11.ac +0 -142
- data/config.guess +0 -1421
- data/config.sub +0 -1807
- data/configure +0 -7481
- data/configure.ac +0 -55
- data/depcomp +0 -791
- data/doxygen.ac +0 -314
- data/doxygen.am +0 -186
- data/extconf.rb +0 -69
- data/install-sh +0 -501
- data/missing +0 -215
- data/post-autoconf.rb +0 -22
- data/post-automake.rb +0 -28
- data/rice/Address_Registration_Guard.cpp +0 -22
- data/rice/Arg_impl.hpp +0 -129
- data/rice/Arg_operators.cpp +0 -21
- data/rice/Arg_operators.hpp +0 -19
- data/rice/Array.hpp +0 -214
- data/rice/Array.ipp +0 -256
- data/rice/Builtin_Object.hpp +0 -8
- data/rice/Builtin_Object.ipp +0 -50
- data/rice/Builtin_Object_defn.hpp +0 -50
- data/rice/Class.cpp +0 -57
- data/rice/Class.hpp +0 -8
- data/rice/Class.ipp +0 -6
- data/rice/Class_defn.hpp +0 -83
- data/rice/Data_Type.cpp +0 -54
- data/rice/Data_Type_fwd.hpp +0 -12
- data/rice/Director.cpp +0 -13
- data/rice/Exception.cpp +0 -59
- data/rice/Exception_Base.hpp +0 -8
- data/rice/Exception_Base.ipp +0 -13
- data/rice/Exception_Base_defn.hpp +0 -27
- data/rice/Hash.hpp +0 -227
- data/rice/Hash.ipp +0 -329
- data/rice/Identifier.cpp +0 -8
- data/rice/Jump_Tag.hpp +0 -24
- data/rice/Makefile.am +0 -124
- data/rice/Makefile.in +0 -839
- data/rice/Module.cpp +0 -84
- data/rice/Module.hpp +0 -8
- data/rice/Module.ipp +0 -6
- data/rice/Module_defn.hpp +0 -88
- data/rice/Module_impl.hpp +0 -281
- data/rice/Module_impl.ipp +0 -345
- data/rice/Object.cpp +0 -169
- data/rice/Object.hpp +0 -8
- data/rice/Object.ipp +0 -19
- data/rice/Object_defn.hpp +0 -191
- data/rice/Require_Guard.hpp +0 -21
- data/rice/String.cpp +0 -94
- data/rice/String.hpp +0 -91
- data/rice/Struct.cpp +0 -117
- data/rice/Struct.hpp +0 -162
- data/rice/Struct.ipp +0 -26
- data/rice/Symbol.cpp +0 -25
- data/rice/Symbol.hpp +0 -66
- data/rice/Symbol.ipp +0 -44
- data/rice/config.hpp +0 -47
- data/rice/config.hpp.in +0 -46
- data/rice/detail/Arguments.hpp +0 -118
- data/rice/detail/Auto_Function_Wrapper.hpp +0 -898
- data/rice/detail/Auto_Function_Wrapper.ipp +0 -3694
- data/rice/detail/Auto_Member_Function_Wrapper.hpp +0 -897
- data/rice/detail/Auto_Member_Function_Wrapper.ipp +0 -2774
- data/rice/detail/Caster.hpp +0 -103
- data/rice/detail/Not_Copyable.hpp +0 -25
- data/rice/detail/Wrapped_Function.hpp +0 -33
- data/rice/detail/cfp.hpp +0 -24
- data/rice/detail/cfp.ipp +0 -51
- data/rice/detail/check_ruby_type.cpp +0 -27
- data/rice/detail/check_ruby_type.hpp +0 -23
- data/rice/detail/creation_funcs.hpp +0 -37
- data/rice/detail/creation_funcs.ipp +0 -36
- data/rice/detail/define_method_and_auto_wrap.hpp +0 -31
- data/rice/detail/define_method_and_auto_wrap.ipp +0 -30
- data/rice/detail/demangle.cpp +0 -56
- data/rice/detail/demangle.hpp +0 -19
- data/rice/detail/env.hpp +0 -11
- data/rice/detail/method_data.cpp +0 -86
- data/rice/detail/node.hpp +0 -13
- data/rice/detail/object_call.hpp +0 -69
- data/rice/detail/object_call.ipp +0 -131
- data/rice/detail/protect.cpp +0 -29
- data/rice/detail/protect.hpp +0 -34
- data/rice/detail/ruby_version_code.hpp +0 -6
- data/rice/detail/ruby_version_code.hpp.in +0 -6
- data/rice/detail/st.hpp +0 -22
- data/rice/detail/traits.hpp +0 -43
- data/rice/detail/win32.hpp +0 -16
- data/rice/detail/wrap_function.hpp +0 -341
- data/rice/detail/wrap_function.ipp +0 -514
- data/rice/protect.hpp +0 -92
- data/rice/protect.ipp +0 -1134
- data/rice/rubypp.rb +0 -97
- data/rice/to_from_ruby.hpp +0 -8
- data/rice/to_from_ruby.ipp +0 -294
- data/rice/to_from_ruby_defn.hpp +0 -70
- data/ruby.ac +0 -135
- data/ruby/Makefile.am +0 -1
- data/ruby/Makefile.in +0 -625
- data/ruby/lib/Makefile.am +0 -3
- data/ruby/lib/Makefile.in +0 -503
- data/ruby/lib/mkmf-rice.rb.in +0 -217
- data/ruby/lib/version.rb +0 -3
- data/sample/Makefile.am +0 -47
- data/sample/Makefile.in +0 -486
- data/test/Makefile.am +0 -72
- data/test/Makefile.in +0 -1150
- data/test/ext/Makefile.am +0 -41
- data/test/ext/Makefile.in +0 -480
- data/test/test_rice.rb +0 -41
data/rice/rubypp.rb
DELETED
@@ -1,97 +0,0 @@
|
|
1
|
-
class Preprocessor
|
2
|
-
def initialize(input, output, filename)
|
3
|
-
@input = input
|
4
|
-
@output = output
|
5
|
-
@filename = filename
|
6
|
-
@linenum = 1
|
7
|
-
end
|
8
|
-
|
9
|
-
def getline
|
10
|
-
line = @input.gets
|
11
|
-
@linenum += 1 if not line.nil?
|
12
|
-
return line
|
13
|
-
end
|
14
|
-
|
15
|
-
def preprocess
|
16
|
-
success = false
|
17
|
-
begin
|
18
|
-
loop do
|
19
|
-
line = getline
|
20
|
-
break if line.nil?
|
21
|
-
case line
|
22
|
-
when /(.*[^\\]|^)\#\{(.*?)\}(.*)/
|
23
|
-
puts "#{$1}#{evaluate($2, @linenum)}#{$3}"
|
24
|
-
when /^\#ruby\s+<<(.*)/
|
25
|
-
marker = $1
|
26
|
-
str = ''
|
27
|
-
evalstart = @linenum
|
28
|
-
loop do
|
29
|
-
line = getline
|
30
|
-
if line.nil? then
|
31
|
-
raise "End of input without #{marker}"
|
32
|
-
end
|
33
|
-
break if line.chomp == marker
|
34
|
-
str << line
|
35
|
-
end
|
36
|
-
result = evaluate(str, evalstart)
|
37
|
-
puts result if not result.nil?
|
38
|
-
when /^\#ruby\s+(.*)/
|
39
|
-
str = line = $1
|
40
|
-
while line[-1] == ?\\
|
41
|
-
str.chop!
|
42
|
-
line = getline
|
43
|
-
break if line.nil?
|
44
|
-
line.chomp!
|
45
|
-
str << line
|
46
|
-
end
|
47
|
-
result = evaluate(str, @linenum)
|
48
|
-
puts result if not result.nil?
|
49
|
-
else
|
50
|
-
puts line
|
51
|
-
end
|
52
|
-
end
|
53
|
-
success = true
|
54
|
-
ensure
|
55
|
-
if not success then
|
56
|
-
$stderr.puts "Error on line #{@linenum}:"
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def evaluate(str, linenum)
|
62
|
-
result = eval(str, TOPLEVEL_BINDING, @filename, linenum)
|
63
|
-
success = true
|
64
|
-
return result
|
65
|
-
end
|
66
|
-
|
67
|
-
def puts(line='')
|
68
|
-
@output.puts(line)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def puts(line='')
|
73
|
-
$preprocessor.puts(line)
|
74
|
-
end
|
75
|
-
|
76
|
-
def rubypp(input_file, output_file)
|
77
|
-
input = input_file ? File.open(input_file) : $stdin
|
78
|
-
output = output_file ? File.open(output_file, 'w') : $stdout
|
79
|
-
|
80
|
-
success = false
|
81
|
-
begin
|
82
|
-
$preprocessor = Preprocessor.new(input, output, input_file || "(stdin)")
|
83
|
-
$preprocessor.preprocess()
|
84
|
-
success = true
|
85
|
-
ensure
|
86
|
-
if not success then
|
87
|
-
File.unlink(output_file) rescue Errno::ENOENT
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
if __FILE__ == $0 then
|
93
|
-
input_file = ARGV[0]
|
94
|
-
output_file = ARGV[1]
|
95
|
-
rubypp(input_file, output_file)
|
96
|
-
end
|
97
|
-
|
data/rice/to_from_ruby.hpp
DELETED
data/rice/to_from_ruby.ipp
DELETED
@@ -1,294 +0,0 @@
|
|
1
|
-
#include "protect.hpp"
|
2
|
-
#include "Object.hpp"
|
3
|
-
#include "detail/from_ruby.ipp"
|
4
|
-
#include "detail/to_ruby.ipp"
|
5
|
-
|
6
|
-
// ---------------------------------------------------------------------
|
7
|
-
template<>
|
8
|
-
inline
|
9
|
-
Rice::Object from_ruby<Rice::Object>(Rice::Object x)
|
10
|
-
{
|
11
|
-
return x;
|
12
|
-
}
|
13
|
-
|
14
|
-
template<>
|
15
|
-
inline
|
16
|
-
Rice::Object to_ruby<Rice::Object>(Rice::Object const & x)
|
17
|
-
{
|
18
|
-
return x;
|
19
|
-
}
|
20
|
-
|
21
|
-
// ---------------------------------------------------------------------
|
22
|
-
namespace Rice
|
23
|
-
{
|
24
|
-
namespace detail
|
25
|
-
{
|
26
|
-
inline int num2int(VALUE x)
|
27
|
-
{
|
28
|
-
return NUM2INT(x);
|
29
|
-
}
|
30
|
-
|
31
|
-
inline VALUE int2num(int x)
|
32
|
-
{
|
33
|
-
return INT2NUM(x);
|
34
|
-
}
|
35
|
-
}
|
36
|
-
}
|
37
|
-
|
38
|
-
template<>
|
39
|
-
inline
|
40
|
-
int from_ruby<int>(Rice::Object x)
|
41
|
-
{
|
42
|
-
return Rice::detail::num2int(x);
|
43
|
-
}
|
44
|
-
|
45
|
-
template<>
|
46
|
-
inline
|
47
|
-
Rice::Object to_ruby<int>(int const & x)
|
48
|
-
{
|
49
|
-
return Rice::protect(Rice::detail::int2num, x);
|
50
|
-
}
|
51
|
-
|
52
|
-
// ---------------------------------------------------------------------
|
53
|
-
namespace Rice
|
54
|
-
{
|
55
|
-
namespace detail
|
56
|
-
{
|
57
|
-
inline long num2long(VALUE x)
|
58
|
-
{
|
59
|
-
return NUM2LONG(x);
|
60
|
-
}
|
61
|
-
|
62
|
-
inline VALUE long2num(long x)
|
63
|
-
{
|
64
|
-
return LONG2NUM(x);
|
65
|
-
}
|
66
|
-
}
|
67
|
-
}
|
68
|
-
|
69
|
-
template<>
|
70
|
-
inline
|
71
|
-
long from_ruby<long>(Rice::Object x)
|
72
|
-
{
|
73
|
-
return Rice::protect(Rice::detail::num2long, x);
|
74
|
-
}
|
75
|
-
|
76
|
-
template<>
|
77
|
-
inline
|
78
|
-
Rice::Object to_ruby<long>(long const & x)
|
79
|
-
{
|
80
|
-
return Rice::protect(Rice::detail::long2num, x);
|
81
|
-
}
|
82
|
-
|
83
|
-
// ---------------------------------------------------------------------
|
84
|
-
namespace Rice
|
85
|
-
{
|
86
|
-
namespace detail
|
87
|
-
{
|
88
|
-
inline unsigned int num2uint(VALUE x)
|
89
|
-
{
|
90
|
-
return NUM2UINT(x);
|
91
|
-
}
|
92
|
-
|
93
|
-
inline VALUE uint2num(unsigned int x)
|
94
|
-
{
|
95
|
-
return UINT2NUM(x);
|
96
|
-
}
|
97
|
-
}
|
98
|
-
}
|
99
|
-
|
100
|
-
template<>
|
101
|
-
inline
|
102
|
-
unsigned int from_ruby<unsigned int>(Rice::Object x)
|
103
|
-
{
|
104
|
-
return Rice::detail::num2uint(x);
|
105
|
-
}
|
106
|
-
|
107
|
-
template<>
|
108
|
-
inline
|
109
|
-
Rice::Object to_ruby<unsigned int>(unsigned int const & x)
|
110
|
-
{
|
111
|
-
return Rice::protect(Rice::detail::uint2num, x);
|
112
|
-
}
|
113
|
-
|
114
|
-
// ---------------------------------------------------------------------
|
115
|
-
namespace Rice
|
116
|
-
{
|
117
|
-
namespace detail
|
118
|
-
{
|
119
|
-
inline unsigned long num2ulong(VALUE x)
|
120
|
-
{
|
121
|
-
return NUM2ULONG(x);
|
122
|
-
}
|
123
|
-
|
124
|
-
inline VALUE ulong2num(unsigned long x)
|
125
|
-
{
|
126
|
-
return ULONG2NUM(x);
|
127
|
-
}
|
128
|
-
}
|
129
|
-
}
|
130
|
-
|
131
|
-
template<>
|
132
|
-
inline
|
133
|
-
unsigned long from_ruby<unsigned long>(Rice::Object x)
|
134
|
-
{
|
135
|
-
return Rice::protect(Rice::detail::num2ulong, x);
|
136
|
-
}
|
137
|
-
|
138
|
-
template<>
|
139
|
-
inline
|
140
|
-
Rice::Object to_ruby<unsigned long>(unsigned long const & x)
|
141
|
-
{
|
142
|
-
return Rice::protect(Rice::detail::ulong2num, x);
|
143
|
-
}
|
144
|
-
|
145
|
-
// ---------------------------------------------------------------------
|
146
|
-
template<>
|
147
|
-
inline
|
148
|
-
bool from_ruby<bool>(Rice::Object x)
|
149
|
-
{
|
150
|
-
return RTEST(x);
|
151
|
-
}
|
152
|
-
|
153
|
-
template<>
|
154
|
-
inline
|
155
|
-
Rice::Object to_ruby<bool>(bool const & x)
|
156
|
-
{
|
157
|
-
return x ? Qtrue : Qfalse;
|
158
|
-
}
|
159
|
-
|
160
|
-
// ---------------------------------------------------------------------
|
161
|
-
template<>
|
162
|
-
inline
|
163
|
-
char from_ruby<char>(Rice::Object x)
|
164
|
-
{
|
165
|
-
if(x.rb_type() == T_STRING)
|
166
|
-
{
|
167
|
-
if(RSTRING_LEN(x.value()) == 1)
|
168
|
-
{
|
169
|
-
return RSTRING_PTR(x.value())[0];
|
170
|
-
}
|
171
|
-
else
|
172
|
-
{
|
173
|
-
throw std::invalid_argument("from_ruby<char>: string must have length 1");
|
174
|
-
}
|
175
|
-
}
|
176
|
-
else
|
177
|
-
{
|
178
|
-
return from_ruby<int>(x) & 0xff;
|
179
|
-
}
|
180
|
-
}
|
181
|
-
|
182
|
-
template<>
|
183
|
-
inline
|
184
|
-
Rice::Object to_ruby<char>(char const & x)
|
185
|
-
{
|
186
|
-
return to_ruby<int>(x);
|
187
|
-
}
|
188
|
-
|
189
|
-
// ---------------------------------------------------------------------
|
190
|
-
|
191
|
-
template<>
|
192
|
-
inline
|
193
|
-
unsigned char from_ruby<unsigned char>(Rice::Object x)
|
194
|
-
{
|
195
|
-
// TODO: I'm not sure if this is the right behavior yet
|
196
|
-
return from_ruby<char>(x);
|
197
|
-
}
|
198
|
-
|
199
|
-
template<>
|
200
|
-
inline
|
201
|
-
Rice::Object to_ruby<unsigned char>(unsigned char const & x)
|
202
|
-
{
|
203
|
-
return to_ruby<unsigned int>(x);
|
204
|
-
}
|
205
|
-
|
206
|
-
// ---------------------------------------------------------------------
|
207
|
-
|
208
|
-
namespace Rice
|
209
|
-
{
|
210
|
-
namespace detail
|
211
|
-
{
|
212
|
-
inline VALUE num2dbl(VALUE x, double * d)
|
213
|
-
{
|
214
|
-
*d = NUM2DBL(x);
|
215
|
-
return Qnil;
|
216
|
-
}
|
217
|
-
|
218
|
-
inline VALUE dbl2num(double x)
|
219
|
-
{
|
220
|
-
return rb_float_new(x);
|
221
|
-
}
|
222
|
-
}
|
223
|
-
}
|
224
|
-
|
225
|
-
template<>
|
226
|
-
inline
|
227
|
-
float from_ruby<float>(Rice::Object x)
|
228
|
-
{
|
229
|
-
double d;
|
230
|
-
Rice::protect(Rice::detail::num2dbl, x, &d);
|
231
|
-
return float(d);
|
232
|
-
}
|
233
|
-
|
234
|
-
template<>
|
235
|
-
inline
|
236
|
-
Rice::Object to_ruby<float>(float const & x)
|
237
|
-
{
|
238
|
-
return Rice::protect(Rice::detail::dbl2num, x);
|
239
|
-
}
|
240
|
-
|
241
|
-
// ---------------------------------------------------------------------
|
242
|
-
|
243
|
-
template<>
|
244
|
-
inline
|
245
|
-
double from_ruby<double>(Rice::Object x)
|
246
|
-
{
|
247
|
-
double d;
|
248
|
-
Rice::protect(Rice::detail::num2dbl, x, &d);
|
249
|
-
return d;
|
250
|
-
}
|
251
|
-
|
252
|
-
template<>
|
253
|
-
inline
|
254
|
-
Rice::Object to_ruby<double>(double const & x)
|
255
|
-
{
|
256
|
-
return Rice::protect(Rice::detail::dbl2num, x);
|
257
|
-
}
|
258
|
-
|
259
|
-
// ---------------------------------------------------------------------
|
260
|
-
template<>
|
261
|
-
inline
|
262
|
-
char const * from_ruby<char const *>(Rice::Object x)
|
263
|
-
{
|
264
|
-
return Rice::String(x).str().data();
|
265
|
-
}
|
266
|
-
|
267
|
-
template<>
|
268
|
-
inline
|
269
|
-
Rice::Object to_ruby<char const *>(char const * const & x)
|
270
|
-
{
|
271
|
-
return Rice::protect(rb_str_new2, x);
|
272
|
-
}
|
273
|
-
|
274
|
-
// ---------------------------------------------------------------------
|
275
|
-
template<>
|
276
|
-
inline
|
277
|
-
std::string from_ruby<std::string>(Rice::Object x)
|
278
|
-
{
|
279
|
-
return Rice::String(x).str();
|
280
|
-
}
|
281
|
-
|
282
|
-
template<>
|
283
|
-
inline
|
284
|
-
Rice::Object to_ruby<std::string>(std::string const & x)
|
285
|
-
{
|
286
|
-
return Rice::protect(rb_str_new, x.data(), x.size());
|
287
|
-
}
|
288
|
-
|
289
|
-
template<>
|
290
|
-
inline
|
291
|
-
std::string* from_ruby<std::string* >(Rice::Object x)
|
292
|
-
{
|
293
|
-
return new std::string(Rice::String(x).str());
|
294
|
-
}
|
data/rice/to_from_ruby_defn.hpp
DELETED
@@ -1,70 +0,0 @@
|
|
1
|
-
#ifndef Rice__to_from_ruby_defn__hpp_
|
2
|
-
#define Rice__to_from_ruby_defn__hpp_
|
3
|
-
|
4
|
-
#include "Object_defn.hpp"
|
5
|
-
#include "detail/from_ruby.hpp"
|
6
|
-
#include "detail/to_ruby.hpp"
|
7
|
-
|
8
|
-
#include <typeinfo>
|
9
|
-
#include <string>
|
10
|
-
#include <stdexcept>
|
11
|
-
|
12
|
-
// ---------------------------------------------------------------------
|
13
|
-
|
14
|
-
//! Convert a Ruby object to C++.
|
15
|
-
/*! If the Ruby object can be converted to an immediate value, returns a
|
16
|
-
* copy of the Ruby object. If the Ruby object is holding a C++
|
17
|
-
* object and the type specified is a pointer to that type, returns a
|
18
|
-
* pointer to that object.
|
19
|
-
*
|
20
|
-
* Conversions from ruby to a pointer type are automatically generated
|
21
|
-
* when a type is bound using Data_Type. If no conversion exists an
|
22
|
-
* exception is thrown.
|
23
|
-
*
|
24
|
-
* \param T the C++ type to which to convert.
|
25
|
-
* \param x the Ruby object to convert.
|
26
|
-
* \return a C++ representation of the Ruby object.
|
27
|
-
*
|
28
|
-
* Example:
|
29
|
-
* \code
|
30
|
-
* Object x = INT2NUM(42);
|
31
|
-
* std::cout << from_ruby<int>(x);
|
32
|
-
*
|
33
|
-
* Data_Object<Foo> foo(new Foo);
|
34
|
-
* Object obj(foo);
|
35
|
-
* std::cout << *from_ruby<Foo *>(obj) << std::endl;
|
36
|
-
* \endcode
|
37
|
-
*/
|
38
|
-
template<typename T>
|
39
|
-
inline
|
40
|
-
typename Rice::detail::from_ruby_<T>::Retval_T from_ruby(Rice::Object x)
|
41
|
-
{
|
42
|
-
return Rice::detail::from_ruby_<T>::convert(x);
|
43
|
-
}
|
44
|
-
|
45
|
-
//! Convert a C++ object to Ruby.
|
46
|
-
/*! If x is a pointer, wraps the pointee as a Ruby object. If x is an
|
47
|
-
* Object, returns x.
|
48
|
-
*
|
49
|
-
* If no conversion exists a compile-time error is generated.
|
50
|
-
*
|
51
|
-
* \param x the object to convert.
|
52
|
-
* \return a Ruby representation of the C++ object.
|
53
|
-
*
|
54
|
-
* Example:
|
55
|
-
* \code
|
56
|
-
* rb_p(to_ruby(42));
|
57
|
-
*
|
58
|
-
* Foo * p_foo = new Foo();
|
59
|
-
* rb_p(to_ruby(p_foo));
|
60
|
-
* \endcode
|
61
|
-
*/
|
62
|
-
template<typename T>
|
63
|
-
inline
|
64
|
-
Rice::Object to_ruby(T const & x)
|
65
|
-
{
|
66
|
-
return Rice::detail::to_ruby_<T>::convert(x);
|
67
|
-
}
|
68
|
-
|
69
|
-
#endif // Rice__to_from_ruby_defn__hpp_
|
70
|
-
|