[Tcl] Prevent SWIG_Tcl_ConvertPtr from calling the unknown proc.

Add Examples/tcl/std_vector/ which this change fixes.  Patch
is from "Cliff C" in SF#1809819.


git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@9989 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Olly Betts 2007-10-15 02:02:47 +00:00
commit 6fdeeafb88
7 changed files with 136 additions and 5 deletions

View file

@ -11,5 +11,6 @@ operator
pointer
reference
simple
std_vector
value
variables

View file

@ -0,0 +1,20 @@
TOP = ../..
SWIG = $(TOP)/../preinst-swig
CXXSRCS =
TARGET = my_tclsh
DLTARGET = example
INTERFACE = example.i
LIBS = -lm
all::
$(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \
TARGET='$(DLTARGET)' INTERFACE='$(INTERFACE)' tcl_cpp
static::
$(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \
TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' tclsh_cpp_static
clean::
$(MAKE) -f $(TOP)/Makefile tcl_clean
check: all

View file

@ -0,0 +1,25 @@
/* File : example.h */
#include <vector>
#include <algorithm>
#include <functional>
#include <numeric>
double average(std::vector<int> v) {
return std::accumulate(v.begin(),v.end(),0.0)/v.size();
}
std::vector<double> half(const std::vector<double>& v) {
std::vector<double> w(v);
for (unsigned int i=0; i<w.size(); i++)
w[i] /= 2.0;
return w;
}
void halve_in_place(std::vector<double>& v) {
// would you believe this is the same as the above?
std::transform(v.begin(),v.end(),v.begin(),
std::bind2nd(std::divides<double>(),2.0));
}

View file

@ -0,0 +1,17 @@
/* File : example.i */
%module example
%{
#include "example.h"
%}
%include stl.i
/* instantiate the required template specializations */
namespace std {
%template(IntVector) vector<int>;
%template(DoubleVector) vector<double>;
}
/* Let's just grab the original header file here */
%include "example.h"

View file

@ -0,0 +1,40 @@
# file: runme.tcl
catch { load ./example[info sharedlibextension] example}
# Exercise IntVector
set iv [IntVector]
$iv push 1
$iv push 3
$iv push 5
puts "IntVector size: [$iv size] (should be 3)"
puts "IntVector average: [average $iv] (should be 3.0)"
puts "IntVector pop: [$iv pop] (should be 5)"
puts "IntVector pop: [$iv pop] (should be 3)"
puts "IntVector get 0: [$iv get 0] (should be 1)"
puts ""
# Exercise DoubleVector
set dv [DoubleVector]
$dv push 2
$dv push 4
$dv push 6
puts "DoubleVector size: [$dv size] (should be 3)"
puts "DoubleVector data: [$dv get 0] [$dv get 1] [$dv get 2] (should be 2.0 4.0 6.0)"
halve_in_place $dv
puts "DoubleVector halved: [$dv get 0] [$dv get 1] [$dv get 2] (should be 1.0 2.0 3.0)"
puts ""
# Complain if unknown is called
rename unknown unknown_orig
proc unknown {args} {
puts "ERROR: unknown called with: $args"
uplevel 1 unknown_orig $args
}
puts "average \"1 2 3\": [average [list 1 2 3]]"