add tests and fix the value wrapper for opaque types, including the template cases

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@6374 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Marcelo Matus 2004-10-08 09:08:06 +00:00
commit cf81f4a4e9
3 changed files with 134 additions and 9 deletions

View file

@ -119,6 +119,7 @@ CPP_TEST_CASES += \
director_basic \
director_detect \
director_default \
director_enum \
director_exception \
director_frob \
director_finalizer \
@ -288,6 +289,7 @@ CPP_TEST_CASES += \
valuewrapper_base \
valuewrapper_const \
valuewrapper_default \
valuewrapper_opaque \
varargs \
virtual_destructor \
virtual_poly \

View file

@ -0,0 +1,96 @@
%module valuewrapper_opaque
/*
* Opaque types
*/
%{
template<typename T> class TemplateClass {
public:
TemplateClass<T>(T a) {}
};
struct B
{
};
class C
{
public:
C(int){}
};
%}
/*
* Hint swig that the Opaque type B don't need the value wrapper.
* This hint is only necessary in very very special cases.
*/
%feature("novaluewrapper") B;
class B;
%inline %{
class A
{
public:
A(int){}
};
class Klass {};
TemplateClass<Klass> getKlass(Klass k) {
TemplateClass<Klass> t(k);
return t;
}
TemplateClass<A> getA(A a) {
TemplateClass<A> t(a);
return t;
}
TemplateClass<B> getA(B b) {
TemplateClass<B> t(b);
return t;
}
TemplateClass<C> getC(C a) {
TemplateClass<C> t(a);
return t;
}
TemplateClass<int> getInt(int a) {
TemplateClass<int> t(a);
return t;
}
A sgetA(A a) {
return a;
}
Klass sgetKlass(Klass a) {
return a;
}
template <class T>
struct auto_ptr
{
auto_ptr(T a){}
};
auto_ptr<A> getPtrA(auto_ptr<A> a) {
return a;
}
B getB(B a) {
return a;
}
%}
%template() auto_ptr<A>;