rice 2.1.3 → 2.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9ec6fa915a48070fcd2fcc2bfb2a5711bba327832fa9701e1a5cd0ea5f4470d9
4
- data.tar.gz: 8ddb3bdf9ab7008efa5ed2dea6449a50cd9851af28801269e1e6cea3fb0748da
3
+ metadata.gz: cfc3c808fd3b1c836e1788866f93b00cf739ea459b38f3db85304adcec9c3557
4
+ data.tar.gz: 5b61d235b4f964750929e825bcb18ab9e91fb12b85d8d29f19f8a886e0fdd204
5
5
  SHA512:
6
- metadata.gz: 7b39fdd96ae02efd1599ed1336ad4058584780939f545146302486ef5e853aae8c35a4f4768eaacced5257b5857ae9f6381fca8de8b315324fc86962c6a7bf66
7
- data.tar.gz: e8f2ec83dbce8beb5df264aaeeac9a53cdaaea3d055f132460914c58ec25ab8b8b3f6a73bf4bb78561a0c684521952c4fce53da4a19a5d87f2c0908d0b774b1c
6
+ metadata.gz: 0c2e7b10676fece41e12fca65ada008b87ca3faa6148771cf68bf07c75c01618b49d99df4ee8d11c3fd7d0b95d18367fd26923587bedf37ae677fefd090c6c44
7
+ data.tar.gz: bb1340b89738f90f222cfabf6c5bf9a1496154cf8eea2e607afba793c824fcb2497c2c2b141d11e97eae9e232eff755451b477ec568ecc4d7a98200a94856aaf
data/extconf.rb CHANGED
@@ -23,12 +23,9 @@ if RbConfig::CONFIG["ENABLE_SHARED"] == "no"
23
23
  Unfortunately Rice does not build against a staticly linked Ruby.
24
24
  You'll need to rebuild Ruby with --enable-shared to use this library.
25
25
 
26
- If you're on rvm: rvm reinstall [version] -- --enable-shared
27
- If you're on rbenv: CONFIGURE_OPTS="--enable-shared" rbenv install [version]
28
-
29
- If you are using Heroku, they use a own custom configured, staticly linked Ruby
30
- for their stack and it unfortunately does not work with Rice. You will need to use
31
- a custom Ruby build pack that builds and uses a non-static version of Ruby.
26
+ If you're on rvm: rvm reinstall [version] -- --enable-shared
27
+ If you're on rbenv: CONFIGURE_OPTS="--enable-shared" rbenv install [version]
28
+ If you're on Heroku: upgrade your stack to heroku-16 or later
32
29
  EOC
33
30
  end
34
31
 
@@ -31,6 +31,12 @@ method_data()
31
31
  return (store == Qnil) ? Qnil : rb_ivar_get(store, id);
32
32
  }
33
33
 
34
+ // Ruby 2.7 now includes a similarly named macro that uses templates to
35
+ // pick the right overload for the underlying function. That doesn't work
36
+ // for our cases because we are using this method dynamically and get a
37
+ // compilation error otherwise. This removes the macro and lets us fall
38
+ // back to the C-API underneath again.
39
+ #undef rb_define_method_id
34
40
 
35
41
  // Define a method and attach data to it.
36
42
  // The method looks to ruby like a normal aliased CFUNC, with a modified
@@ -75,9 +81,9 @@ define_method_with_data(
75
81
  rb_ivar_set(store, id, data);
76
82
 
77
83
  // Create the aliased method on the origin class
78
- rb_define_method(
84
+ rb_define_method_id(
79
85
  klass,
80
- rb_id2name(id),
86
+ id,
81
87
  cfunc,
82
88
  arity);
83
89
 
@@ -1,6 +1,6 @@
1
1
  #ifndef Rice__detail__ruby_version_code__hpp
2
2
  #define Rice__detail__ruby_version_code__hpp
3
3
 
4
- #define RICE__RUBY_VERSION_CODE 253
4
+ #define RICE__RUBY_VERSION_CODE 270
5
5
 
6
6
  #endif // Rice__detail__ruby_version_code__hpp
@@ -18,6 +18,37 @@ Rice::Object to_ruby<Rice::Object>(Rice::Object const & x)
18
18
  return x;
19
19
  }
20
20
 
21
+ // ---------------------------------------------------------------------
22
+ namespace Rice
23
+ {
24
+ namespace detail
25
+ {
26
+ inline short num2short(VALUE x)
27
+ {
28
+ return NUM2SHORT(x);
29
+ }
30
+
31
+ inline VALUE short2num(short x)
32
+ {
33
+ return INT2NUM(x);
34
+ }
35
+ }
36
+ }
37
+
38
+ template<>
39
+ inline
40
+ short from_ruby<short>(Rice::Object x)
41
+ {
42
+ return Rice::detail::num2short(x);
43
+ }
44
+
45
+ template<>
46
+ inline
47
+ Rice::Object to_ruby<short>(short const & x)
48
+ {
49
+ return Rice::protect(Rice::detail::short2num, x);
50
+ }
51
+
21
52
  // ---------------------------------------------------------------------
22
53
  namespace Rice
23
54
  {
@@ -80,6 +111,68 @@ Rice::Object to_ruby<long>(long const & x)
80
111
  return Rice::protect(Rice::detail::long2num, x);
81
112
  }
82
113
 
114
+ // ---------------------------------------------------------------------
115
+ namespace Rice
116
+ {
117
+ namespace detail
118
+ {
119
+ inline long long num2longlong(VALUE x)
120
+ {
121
+ return NUM2LL(x);
122
+ }
123
+
124
+ inline VALUE longlong2num(long long x)
125
+ {
126
+ return LL2NUM(x);
127
+ }
128
+ }
129
+ }
130
+
131
+ template<>
132
+ inline
133
+ long long from_ruby<long long>(Rice::Object x)
134
+ {
135
+ return Rice::protect(Rice::detail::num2longlong, x);
136
+ }
137
+
138
+ template<>
139
+ inline
140
+ Rice::Object to_ruby<long long>(long long const & x)
141
+ {
142
+ return Rice::protect(Rice::detail::longlong2num, x);
143
+ }
144
+
145
+ // ---------------------------------------------------------------------
146
+ namespace Rice
147
+ {
148
+ namespace detail
149
+ {
150
+ inline unsigned short num2ushort(VALUE x)
151
+ {
152
+ return NUM2USHORT(x);
153
+ }
154
+
155
+ inline VALUE ushort2num(unsigned short x)
156
+ {
157
+ return UINT2NUM(x);
158
+ }
159
+ }
160
+ }
161
+
162
+ template<>
163
+ inline
164
+ unsigned short from_ruby<unsigned short>(Rice::Object x)
165
+ {
166
+ return Rice::detail::num2ushort(x);
167
+ }
168
+
169
+ template<>
170
+ inline
171
+ Rice::Object to_ruby<unsigned short>(unsigned short const & x)
172
+ {
173
+ return Rice::protect(Rice::detail::ushort2num, x);
174
+ }
175
+
83
176
  // ---------------------------------------------------------------------
84
177
  namespace Rice
85
178
  {
@@ -142,6 +235,37 @@ Rice::Object to_ruby<unsigned long>(unsigned long const & x)
142
235
  return Rice::protect(Rice::detail::ulong2num, x);
143
236
  }
144
237
 
238
+ // ---------------------------------------------------------------------
239
+ namespace Rice
240
+ {
241
+ namespace detail
242
+ {
243
+ inline unsigned long long num2ulonglong(VALUE x)
244
+ {
245
+ return NUM2ULL(x);
246
+ }
247
+
248
+ inline VALUE ulonglong2num(unsigned long long x)
249
+ {
250
+ return ULL2NUM(x);
251
+ }
252
+ }
253
+ }
254
+
255
+ template<>
256
+ inline
257
+ unsigned long long from_ruby<unsigned long long>(Rice::Object x)
258
+ {
259
+ return Rice::protect(Rice::detail::num2ulonglong, x);
260
+ }
261
+
262
+ template<>
263
+ inline
264
+ Rice::Object to_ruby<unsigned long long>(unsigned long long const & x)
265
+ {
266
+ return Rice::protect(Rice::detail::ulonglong2num, x);
267
+ }
268
+
145
269
  // ---------------------------------------------------------------------
146
270
  template<>
147
271
  inline
@@ -1,3 +1,3 @@
1
1
  module Rice
2
- VERSION = "2.1.3"
2
+ VERSION = "2.2.0"
3
3
  end
@@ -27,6 +27,32 @@ TESTCASE(object_from_ruby)
27
27
  ASSERT_EQUAL(o.value(), from_ruby<Object>(o).value());
28
28
  }
29
29
 
30
+ TESTCASE(short_to_ruby)
31
+ {
32
+ ASSERT_EQUAL(INT2NUM(0), to_ruby((short)0).value());
33
+ ASSERT_EQUAL(INT2NUM(-1), to_ruby((short)-1).value());
34
+ ASSERT_EQUAL(INT2NUM(1), to_ruby((short)1).value());
35
+ ASSERT_EQUAL(
36
+ Object(INT2NUM(std::numeric_limits<short>::min())),
37
+ to_ruby(std::numeric_limits<short>::min()));
38
+ ASSERT_EQUAL(
39
+ Object(INT2NUM(std::numeric_limits<short>::max())),
40
+ to_ruby(std::numeric_limits<short>::max()));
41
+ }
42
+
43
+ TESTCASE(short_from_ruby)
44
+ {
45
+ ASSERT_EQUAL(0, from_ruby<short>(INT2NUM(0)));
46
+ ASSERT_EQUAL(-1, from_ruby<short>(INT2NUM(-1)));
47
+ ASSERT_EQUAL(1, from_ruby<short>(INT2NUM(1)));
48
+ ASSERT_EQUAL(
49
+ std::numeric_limits<short>::min(),
50
+ from_ruby<short>(INT2NUM(std::numeric_limits<short>::min())));
51
+ ASSERT_EQUAL(
52
+ std::numeric_limits<short>::max(),
53
+ from_ruby<short>(INT2NUM(std::numeric_limits<short>::max())));
54
+ }
55
+
30
56
  TESTCASE(int_to_ruby)
31
57
  {
32
58
  ASSERT_EQUAL(INT2NUM(0), to_ruby((int)0).value());
@@ -91,6 +117,56 @@ TESTCASE(long_from_ruby)
91
117
  from_ruby<long>(LONG2NUM(std::numeric_limits<long>::max())));
92
118
  }
93
119
 
120
+ TESTCASE(long_long_to_ruby)
121
+ {
122
+ ASSERT_EQUAL(LL2NUM(0), to_ruby((long long)0).value());
123
+ ASSERT_EQUAL(LL2NUM(-1), to_ruby((long long)-1).value());
124
+ ASSERT_EQUAL(LL2NUM(1), to_ruby((long long)1).value());
125
+ ASSERT_EQUAL(
126
+ Object(LL2NUM(std::numeric_limits<long long>::min())),
127
+ to_ruby(std::numeric_limits<long long>::min()));
128
+ ASSERT_EQUAL(
129
+ Object(LL2NUM(std::numeric_limits<long long>::max())),
130
+ to_ruby(std::numeric_limits<long long>::max()));
131
+ }
132
+
133
+ TESTCASE(long_long_from_ruby)
134
+ {
135
+ ASSERT_EQUAL(0, from_ruby<long long>(LL2NUM(0)));
136
+ ASSERT_EQUAL(-1, from_ruby<long long>(LL2NUM(-1)));
137
+ ASSERT_EQUAL(1, from_ruby<long long>(LL2NUM(1)));
138
+ ASSERT_EQUAL(
139
+ std::numeric_limits<long long>::min(),
140
+ from_ruby<long long>(LL2NUM(std::numeric_limits<long long>::min())));
141
+ ASSERT_EQUAL(
142
+ std::numeric_limits<long long>::max(),
143
+ from_ruby<long long>(LL2NUM(std::numeric_limits<long long>::max())));
144
+ }
145
+
146
+ TESTCASE(unsigned_short_to_ruby)
147
+ {
148
+ ASSERT_EQUAL(UINT2NUM(0), to_ruby((unsigned short)0).value());
149
+ ASSERT_EQUAL(UINT2NUM(1), to_ruby((unsigned short)1).value());
150
+ ASSERT_EQUAL(
151
+ Object(UINT2NUM(std::numeric_limits<unsigned short>::min())),
152
+ to_ruby(std::numeric_limits<unsigned short>::min()));
153
+ ASSERT_EQUAL(
154
+ Object(UINT2NUM(std::numeric_limits<unsigned short>::max())),
155
+ to_ruby(std::numeric_limits<unsigned short>::max()));
156
+ }
157
+
158
+ TESTCASE(unsigned_short_from_ruby)
159
+ {
160
+ ASSERT_EQUAL(0u, from_ruby<unsigned short>(UINT2NUM(0)));
161
+ ASSERT_EQUAL(1u, from_ruby<unsigned short>(UINT2NUM(1)));
162
+ ASSERT_EQUAL(
163
+ std::numeric_limits<unsigned short>::min(),
164
+ from_ruby<unsigned short>(UINT2NUM(std::numeric_limits<unsigned short>::min())));
165
+ ASSERT_EQUAL(
166
+ std::numeric_limits<unsigned short>::max(),
167
+ from_ruby<unsigned short>(UINT2NUM(std::numeric_limits<unsigned short>::max())));
168
+ }
169
+
94
170
  TESTCASE(unsigned_int_to_ruby)
95
171
  {
96
172
  ASSERT_EQUAL(UINT2NUM(0), to_ruby((unsigned int)0).value());
@@ -145,6 +221,30 @@ TESTCASE(unsigned_long_from_ruby)
145
221
  from_ruby<unsigned long>(ULONG2NUM(std::numeric_limits<unsigned long>::max())));
146
222
  }
147
223
 
224
+ TESTCASE(unsigned_long_long_to_ruby)
225
+ {
226
+ ASSERT_EQUAL(ULL2NUM(0), to_ruby((unsigned long long)0).value());
227
+ ASSERT_EQUAL(ULL2NUM(1), to_ruby((unsigned long long)1).value());
228
+ ASSERT_EQUAL(
229
+ Object(ULL2NUM(std::numeric_limits<unsigned long long>::min())),
230
+ to_ruby(std::numeric_limits<unsigned long long>::min()));
231
+ ASSERT_EQUAL(
232
+ Object(ULL2NUM(std::numeric_limits<unsigned long long>::max())),
233
+ to_ruby(std::numeric_limits<unsigned long long>::max()));
234
+ }
235
+
236
+ TESTCASE(unsigned_long_long_from_ruby)
237
+ {
238
+ ASSERT_EQUAL(0u, from_ruby<unsigned long>(ULL2NUM(0)));
239
+ ASSERT_EQUAL(1u, from_ruby<unsigned long>(ULL2NUM(1)));
240
+ ASSERT_EQUAL(
241
+ std::numeric_limits<unsigned long long>::min(),
242
+ from_ruby<unsigned long long>(ULL2NUM(std::numeric_limits<unsigned long long>::min())));
243
+ ASSERT_EQUAL(
244
+ std::numeric_limits<unsigned long long>::max(),
245
+ from_ruby<unsigned long long>(ULL2NUM(std::numeric_limits<unsigned long long>::max())));
246
+ }
247
+
148
248
  TESTCASE(bool_to_ruby)
149
249
  {
150
250
  ASSERT_EQUAL(Qfalse, to_ruby(false).value());
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rice
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.3
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Brannan
@@ -9,8 +9,50 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-02-28 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2020-01-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: minitest
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
14
56
  description: |
15
57
  Rice is a C++ interface to Ruby's C API. It provides a type-safe and
16
58
  exception-safe interface in order to make embedding Ruby and writing
@@ -230,15 +272,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
230
272
  requirements:
231
273
  - - ">="
232
274
  - !ruby/object:Gem::Version
233
- version: '0'
275
+ version: '2.4'
234
276
  required_rubygems_version: !ruby/object:Gem::Requirement
235
277
  requirements:
236
278
  - - ">="
237
279
  - !ruby/object:Gem::Version
238
280
  version: '0'
239
281
  requirements: []
240
- rubyforge_project:
241
- rubygems_version: 2.7.6
282
+ rubygems_version: 3.1.2
242
283
  signing_key:
243
284
  specification_version: 4
244
285
  summary: Ruby Interface for C++ Extensions