Merge branch 'python-stl-overloading'
* python-stl-overloading: Python STL container method overloading fix
This commit is contained in:
commit
5e2b8f3ec9
9 changed files with 200 additions and 24 deletions
|
|
@ -643,6 +643,7 @@ CPP_STD_TEST_CASES += \
|
|||
director_string \
|
||||
ignore_template_constructor \
|
||||
li_std_combinations \
|
||||
li_std_containers_overload \
|
||||
li_std_deque \
|
||||
li_std_except \
|
||||
li_std_except_as_class \
|
||||
|
|
|
|||
33
Examples/test-suite/li_std_containers_overload.i
Normal file
33
Examples/test-suite/li_std_containers_overload.i
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
%module li_std_containers_overload
|
||||
|
||||
// Suppress warning that ought not to appear, but there is no easy fix
|
||||
%warnfilter(SWIGWARN_LANG_OVERLOAD_SHADOW) VectorOverload;
|
||||
|
||||
%include <std_string.i>
|
||||
%include <std_vector.i>
|
||||
|
||||
%inline %{
|
||||
struct X {};
|
||||
struct Y {};
|
||||
%}
|
||||
|
||||
%template(VectorX) std::vector<X>;
|
||||
%template(VectorY) std::vector<Y>;
|
||||
%template(VectorString) std::vector<std::string>;
|
||||
%template(VectorInt) std::vector<int>;
|
||||
|
||||
%inline %{
|
||||
using namespace std;
|
||||
string VectorOverload(vector<X> v) {
|
||||
return "vector<X>";
|
||||
}
|
||||
string VectorOverload(vector<Y> v) {
|
||||
return "vector<Y>";
|
||||
}
|
||||
string VectorOverload(vector<string> v) {
|
||||
return "vector<string>";
|
||||
}
|
||||
string VectorOverload(vector<int> v) {
|
||||
return "vector<int>";
|
||||
}
|
||||
%}
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
# do not dump Octave core
|
||||
if exist("crash_dumps_octave_core", "builtin")
|
||||
crash_dumps_octave_core(0);
|
||||
endif
|
||||
|
||||
li_std_containers_overload
|
||||
|
||||
function check(got, expected)
|
||||
if (!strcmp(got, expected))
|
||||
error("Failed check. '%s' != '%s'", got, expected)
|
||||
endif
|
||||
end
|
||||
|
||||
v = VectorX();
|
||||
check(VectorOverload(v), "vector<X>");
|
||||
|
||||
v = VectorY();
|
||||
check(VectorOverload(v), "vector<Y>");
|
||||
|
||||
v = VectorInt();
|
||||
check(VectorOverload(v), "vector<int>");
|
||||
|
||||
v = VectorString();
|
||||
check(VectorOverload(v), "vector<string>");
|
||||
|
||||
# TODO: Conversion from an Octave sequence not implemented yet
|
||||
# v = {X()};
|
||||
# check(VectorOverload(v), "vector<X>");
|
||||
|
||||
# v = {Y()};
|
||||
# check(VectorOverload(v), "vector<Y>");
|
||||
|
||||
# v = {1, 2, 3};
|
||||
# check(VectorOverload(v), "vector<int>");
|
||||
|
||||
# v = {"aaa", "bbb", "ccc"};
|
||||
# check(VectorOverload(v), "vector<string>");
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
from li_std_containers_overload import *
|
||||
|
||||
def check(got, expected):
|
||||
if got != expected:
|
||||
raise RuntimeError("Failed check. '{}' != '{}'".format(got, expected))
|
||||
|
||||
v = VectorX()
|
||||
check(VectorOverload(v), "vector<X>")
|
||||
|
||||
v = VectorY()
|
||||
check(VectorOverload(v), "vector<Y>")
|
||||
|
||||
v = VectorInt()
|
||||
check(VectorOverload(v), "vector<int>")
|
||||
|
||||
v = VectorString()
|
||||
check(VectorOverload(v), "vector<string>")
|
||||
|
||||
v = [X()]
|
||||
check(VectorOverload(v), "vector<X>")
|
||||
|
||||
v = [Y()]
|
||||
check(VectorOverload(v), "vector<Y>")
|
||||
|
||||
v = [1, 2, 3]
|
||||
check(VectorOverload(v), "vector<int>")
|
||||
|
||||
v = ["aaa", "bbb", "ccc"]
|
||||
check(VectorOverload(v), "vector<string>")
|
||||
44
Examples/test-suite/ruby/li_std_containers_overload_runme.rb
Normal file
44
Examples/test-suite/ruby/li_std_containers_overload_runme.rb
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
#!/usr/bin/env ruby
|
||||
#
|
||||
# Put description here
|
||||
#
|
||||
#
|
||||
#
|
||||
#
|
||||
#
|
||||
|
||||
require 'swig_assert'
|
||||
|
||||
require 'li_std_containers_overload'
|
||||
|
||||
include Li_std_containers_overload
|
||||
|
||||
def check(got, expected)
|
||||
if (got != expected)
|
||||
raise RuntimeError, "Failed check. '#{got}' != '#{expected}'"
|
||||
end
|
||||
end
|
||||
|
||||
v = VectorX.new()
|
||||
check(VectorOverload(v), "vector<X>")
|
||||
|
||||
v = VectorY.new()
|
||||
check(VectorOverload(v), "vector<Y>")
|
||||
|
||||
v = VectorInt.new()
|
||||
check(VectorOverload(v), "vector<int>")
|
||||
|
||||
v = VectorString.new()
|
||||
check(VectorOverload(v), "vector<string>")
|
||||
|
||||
v = [X.new()]
|
||||
check(VectorOverload(v), "vector<X>")
|
||||
|
||||
v = [Y.new()]
|
||||
check(VectorOverload(v), "vector<Y>")
|
||||
|
||||
v = [1, 2, 3]
|
||||
check(VectorOverload(v), "vector<int>")
|
||||
|
||||
v = ["aaa", "bbb", "ccc"]
|
||||
check(VectorOverload(v), "vector<string>")
|
||||
Loading…
Add table
Add a link
Reference in a new issue