diff --git a/fwk/_src/fwkw.i b/fwk/_src/fwkw.i index 3f3b930fe95e2cb9accf01403bc73d8c64dd6576..70b50333ef229c4bca6db3563e2ac3ec7bf78311 100644 --- a/fwk/_src/fwkw.i +++ b/fwk/_src/fwkw.i @@ -43,6 +43,11 @@ threads="1" %include "fwkw.swg" +// Instantiate some std templates +namespace std { + %template(std_vector_double) std::vector<double>; +} + %include "fwk.h" //%#define SHARED_PTR_DISOWN $disown diff --git a/run.py b/run.py old mode 100644 new mode 100755 diff --git a/tbox/_src/tboxw.i b/tbox/_src/tboxw.i index 135b6a94aeca4184098dd2ad2ef54ffaefd6aa7d..4cd315deb498dc78bcb27dc142e56c39121d5669 100644 --- a/tbox/_src/tboxw.i +++ b/tbox/_src/tboxw.i @@ -59,7 +59,6 @@ threads="1" // Instantiate some std templates namespace std { %template(std_vector_int) std::vector<int>; - %template(std_vector_double) std::vector<double>; %template(std_vector_vector_double) std::vector<std::vector<double>>; %template(std_vector_string) std::vector<std::string>; } diff --git a/tbox/tests/stdvec.py b/tbox/tests/stdvec.py new file mode 100644 index 0000000000000000000000000000000000000000..d763f39d3ebd0a8f27f5f17b97ce17e29c5fd44a --- /dev/null +++ b/tbox/tests/stdvec.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# Copyright 2020 University of Liège +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# basic test of std::vector<double> binding + +# note: +# std_vector_double was defined in tbox.i, but now it is now defined in fwk.i. +# This is because std::vector<double> is a type seen by swig in fwk. +# In version <4.2.0, swig was able to understand that std::vector<double> in fwk +# was the same as std::vector<double> in tbox where the bindings were +# instanciated by the %template command. From 4.2.0, swig fails to understand +# that link and the __setitem__ generates cast failure. + + +import fwk + +v = fwk.std_vector_double() +v.push_back(1.0) +v.push_back(2.0) +# next command fails with swig >4.2.0 if std_vector_double is +# instanciated (%template) in tbox.i: +print('v[0] =', v[0]) +v[1] = 3.0 +print('vector length =', v.size())