more examples, and fixes

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@6432 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Marcelo Matus 2004-10-18 02:08:55 +00:00
commit 39ae60f7d8
17 changed files with 123 additions and 28 deletions

View file

@ -46,13 +46,10 @@ LIBPREFIX = lib
# Broken C++ test cases. (Can be run individually using make testcase.cpptest.)
CPP_TEST_BROKEN += \
derived_nested \
derived_byvalue \
multiple_inheritance \
namespace_union \
overload_complicated \
smart_pointer_namespace2 \
template_specialization_defarg \
template_typedef_ptr \
using_namespace
# Broken C test cases. (Can be run individually using make testcase.ctest.)
@ -114,6 +111,7 @@ CPP_TEST_CASES += \
default_args \
default_ref \
defvalue_constructor \
derived_byvalue \
destructor_reprotected \
director_abstract \
director_basic \
@ -165,6 +163,7 @@ CPP_TEST_CASES += \
long_long_apply \
member_template \
minherit \
mixed_types \
name_cxx \
name_inherit \
name_warnings \
@ -253,6 +252,7 @@ CPP_TEST_CASES += \
template_rename \
template_retvalue \
template_specialization \
template_specialization_defarg \
template_specialization_enum \
template_static \
template_tbase_template \
@ -263,6 +263,7 @@ CPP_TEST_CASES += \
template_typedef_cplx3 \
template_typedef_cplx4 \
template_typedef_cplx5 \
template_typedef_ptr \
template_virtual \
template_whitespace \
throw_exception \

View file

@ -15,6 +15,7 @@ public:
%feature("director") Foo;
class Foo {
public:
virtual ~Foo() {}
@ -25,7 +26,12 @@ public:
%{
#include <complex>
%}
%feature("director") A;
%feature("director");
// basic renaming
%rename(rg) A::gg;
%feature("nodirector") hi::A1::gg;
%inline %{
struct A{
@ -34,11 +40,18 @@ struct A{
virtual ~A() {}
virtual int f(int i=0) {return i;}
virtual int gg(int i=0) {return i;}
};
struct A1 : public A{
namespace hi {
struct A1 : public A{
A1(std::complex<int> i, double d=0.0) : A(i, d) {}
A1(int i, bool j=false) : A(i, j) {}
};
virtual int ff(int i = 0) {return i;}
};
}
%}

View file

@ -5,9 +5,9 @@
%}
%feature("director");
%feature("nodirector") Bravo::abs_method(); // ok
%feature("director") Charlie::abs_method(); // ok
%feature("nodirector") Delta::abs_method(); // doesn't work
%feature("nodirector") Bravo::abs_method(); // ok
%feature("director") Charlie::abs_method(); // ok
%feature("nodirector") Delta::abs_method(); // ok
%inline %{

View file

@ -2,6 +2,10 @@
%module extend_default
%warnfilter(302) Override::over;
%warnfilter(302) Override::overload;
%warnfilter(302) Override::ride;
// %extend before the class definition
%extend Before {
Before(int i = -1, double d = -1.0) {
@ -86,9 +90,6 @@ struct OverAfter {
%}
#pragma SWIG nowarn=-302
//%warnfilter(302) over; // why doesn't this work?
// %extend overrides the class definition
%extend Override {
int over(int a) { return a*a; } // SWIG should give a warning then choose this one over the real one

View file

@ -21,12 +21,13 @@
%}
namespace hello
namespace hello
{
%template(Hi_hi0) Hi<hi::hi0>;
}
%inline %{
namespace hello
@ -48,7 +49,9 @@ namespace hello
template <class T1>
struct hi1 : T1
{
};
};
typedef hello::Hi<hello::hi::hi0> h0;
}
%}

View file

@ -4,7 +4,10 @@
%typemap(default) double y "$1=1000;";
#endif
#pragma SWIG nowarn=-302
%warnfilter(302) Foo::test;
%extend Foo {
int test() { return 0; }
int test(int x) { x = 0; return 1; }

View file

@ -146,7 +146,7 @@
//
// These applies shouldn't be needed ....!!
//
%apply const int& { const Hello& };
//%apply const int& { const Hello& };
%apply void* { pint };
%apply const void*& { const pint& };
@ -154,6 +154,10 @@
//
// Some simple types
%apply char FIXSIZE[ANY] {char fixsize[8]};
%inline %{
enum Hello {
Hi, Hola
@ -170,7 +174,8 @@
const namet def_namet = {'h','o',0, 'l','a'};
extern namet gbl_namet;
char fixsize[8] = {'h','o',0, 'l','a', 0, 0, 0};
%}
@ -383,6 +388,16 @@ macro(size_t, pfx, sizet)
};
typedef Foo* foo_ptr;
foo_ptr fptr_val(foo_ptr a) {
return a;
}
const foo_ptr& fptr_ref(const foo_ptr& a) {
return a;
}
struct Test
{

View file

@ -1,6 +1,6 @@
%module lib_std_except
%include "std_except.i"
%include <std_except.i>
%inline %{

View file

@ -1,5 +1,6 @@
%module lib_std_string
%include "std_string.i"
%include <std_basic_string.i>
%include <std_string.i>
%template(string) std::basic_string<char>;
%inline %{

View file

@ -1,6 +1,6 @@
%module lib_std_wstring
%include "std_wstring.i"
%include <std_basic_string.i>
%include <std_wstring.i>
%template(wstring) std::basic_string<wchar_t>;

View file

@ -329,3 +329,18 @@ t2 = p.vtest(t)
if t.var_namet != t2.var_namet:
raise RuntimeError, "bad SWIGTYPE* typemap"
if cvar.fixsize != 'ho\0la\0\0\0':
raise RuntimeError, "bad FIXSIZE typemap"
cvar.fixsize = 'ho'
if cvar.fixsize != 'ho\0\0\0\0\0\0':
raise RuntimeError, "bad FIXSIZE typemap"
f = Foo(3)
f1 = fptr_val(f)
f2 = fptr_ref(f)
if f1._a != f2._a:
raise RuntimeError, "bad const ptr& typemap"

View file

@ -2,7 +2,7 @@ import template_default_arg
helloInt = template_default_arg.Hello_int()
helloInt.foo(Hello_int.Hi.hi)
helloInt.foo(template_default_arg.Hello_int.hi)
x = template_default_arg.X_int()

View file

@ -33,7 +33,7 @@ except:
# the old large format
if not SWIG_TypeQuery("vfncs::ArithUnaryFunction<vfncs::arith_traits<float,real>::argument_type,vfncs::arith_traits<float,real >::result_type > *"):
if not SWIG_TypeQuery("vfncs::ArithUnaryFunction<vfncs::arith_traits<float,double>::argument_type,vfncs::arith_traits<float,double >::result_type > *"):
raise RuntimeError

View file

@ -5,11 +5,11 @@
%warnfilter(801) vector<double>; /* Ruby, wrong class name */
%warnfilter(801) vector<int (*)[10]>; /* Ruby, wrong class name */
// This warnfilter doesn't work
// %warnfilter(320);
// back to pragma
// #pragma is used for warnings that are not associated to
// specific nodes.
#pragma SWIG nowarn=-320
/* Let's just grab the original header file here */
%inline %{

View file

@ -14,7 +14,7 @@
%inline {
namespace A {
struct OpaqueStruct;
typedef struct OpaqueStruct OpaqueType;
typedef OpaqueStruct OpaqueType;
typedef std::vector<OpaqueType> OpaqueVectorType;
void FillVector(OpaqueVectorType& v)

View file

@ -36,6 +36,42 @@
}
};
template <class T>
struct Alloc
{
};
template <class T, class A = double >
struct D
{
D(int){}
};
template <>
struct D<double>
{
D(){}
int foo() { return 0; }
};
template <class T, class A = Alloc<T> >
struct Vector
{
Vector(int){}
};
template <>
struct Vector<double>
{
Vector(){}
int foo() { return 0; }
};
%}
@ -49,4 +85,11 @@
//
// This one fails
//
%template(C_dd) C<double,double>;
%template(C_d) C<double>;
%template(D_i) D<int>;
%template(D_d) D<double>;
%template(Vector_i) Vector<int>;
%template(Vector_d) Vector<double, Alloc<double> >;

View file

@ -17,7 +17,7 @@
template <class A, class B>
struct Test<A, B*>
{
Test (A a, B* b)
Test (B* a)
{
}