Merge branch 'ruby-autoptr'
* ruby-autoptr: Extend std::auto_ptr<> support to Ruby
This commit is contained in:
commit
ebc324dfd5
4 changed files with 64 additions and 1 deletions
3
CHANGES
3
CHANGES
|
|
@ -8,6 +8,9 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
|
||||||
Version 4.0.1 (21 Aug 2019)
|
Version 4.0.1 (21 Aug 2019)
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
|
2019-09-09: vadz
|
||||||
|
[Ruby] Add std::auto_ptr<> typemaps.
|
||||||
|
|
||||||
2019-08-20: TekuConcept
|
2019-08-20: TekuConcept
|
||||||
[Javascript] #1535 Add %native support to Javascript.
|
[Javascript] #1535 Add %native support to Javascript.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
#endif
|
#endif
|
||||||
%}
|
%}
|
||||||
|
|
||||||
#if defined(SWIGCSHARP) || defined(SWIGJAVA) || defined(SWIGPYTHON)
|
#if defined(SWIGCSHARP) || defined(SWIGJAVA) || defined(SWIGPYTHON) || defined(SWIGRUBY)
|
||||||
|
|
||||||
%include "std_auto_ptr.i"
|
%include "std_auto_ptr.i"
|
||||||
|
|
||||||
|
|
|
||||||
43
Examples/test-suite/ruby/li_std_auto_ptr_runme.rb
Normal file
43
Examples/test-suite/ruby/li_std_auto_ptr_runme.rb
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
require 'swig_assert'
|
||||||
|
|
||||||
|
require 'li_std_auto_ptr'
|
||||||
|
|
||||||
|
k1 = Li_std_auto_ptr::makeKlassAutoPtr("first")
|
||||||
|
k2 = Li_std_auto_ptr::makeKlassAutoPtr("second")
|
||||||
|
swig_assert_equal_simple(Li_std_auto_ptr::Klass::getTotal_count(), 2)
|
||||||
|
|
||||||
|
k1 = nil
|
||||||
|
GC.start
|
||||||
|
|
||||||
|
# GC can need a few runs to actually collect the object.
|
||||||
|
100.times do ||
|
||||||
|
next if Li_std_auto_ptr::Klass::getTotal_count() == 2
|
||||||
|
|
||||||
|
swig_assert_equal_simple(Li_std_auto_ptr::Klass::getTotal_count(), 1)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
|
||||||
|
swig_assert_equal_simple(k2.getLabel(), "second")
|
||||||
|
|
||||||
|
if Li_std_auto_ptr::Klass::getTotal_count() != 1
|
||||||
|
STDERR.puts "GC failed to collect the first object, count still #{Li_std_auto_ptr::Klass::getTotal_count()}"
|
||||||
|
|
||||||
|
# Skip the rest of the test as it's not going to work correctly anyhow.
|
||||||
|
exit
|
||||||
|
end
|
||||||
|
|
||||||
|
k2 = nil
|
||||||
|
GC.start
|
||||||
|
|
||||||
|
100.times do ||
|
||||||
|
next if Li_std_auto_ptr::Klass::getTotal_count() == 1
|
||||||
|
|
||||||
|
swig_assert_equal_simple(Li_std_auto_ptr::Klass::getTotal_count(), 0)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
|
||||||
|
if Li_std_auto_ptr::Klass::getTotal_count() != 0
|
||||||
|
STDERR.puts "GC failed to collect the second object, count still #{Li_std_auto_ptr::Klass::getTotal_count()}"
|
||||||
|
end
|
||||||
17
Lib/ruby/std_auto_ptr.i
Normal file
17
Lib/ruby/std_auto_ptr.i
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
/*
|
||||||
|
The typemaps here allow to handle functions returning std::auto_ptr<>,
|
||||||
|
which is the most common use of this type. If you have functions taking it
|
||||||
|
as parameter, these typemaps can't be used for them and you need to do
|
||||||
|
something else (e.g. use shared_ptr<> which SWIG supports fully).
|
||||||
|
*/
|
||||||
|
|
||||||
|
%define %auto_ptr(TYPE)
|
||||||
|
%typemap (out) std::auto_ptr<TYPE > %{
|
||||||
|
%set_output(SWIG_NewPointerObj($1.release(), $descriptor(TYPE *), SWIG_POINTER_OWN | %newpointer_flags));
|
||||||
|
%}
|
||||||
|
%template() std::auto_ptr<TYPE >;
|
||||||
|
%enddef
|
||||||
|
|
||||||
|
namespace std {
|
||||||
|
template <class T> class auto_ptr {};
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue