diff options
Diffstat (limited to 'Examples/test-suite/template_explicit.i')
| -rw-r--r-- | Examples/test-suite/template_explicit.i | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/Examples/test-suite/template_explicit.i b/Examples/test-suite/template_explicit.i new file mode 100644 index 0000000..ede854a --- /dev/null +++ b/Examples/test-suite/template_explicit.i @@ -0,0 +1,60 @@ +/* File : example.i */ +%module "template_explicit" + +%warnfilter(SWIGWARN_RUBY_WRONG_NAME) vector<int>; /* Ruby, wrong class name */ +%warnfilter(SWIGWARN_RUBY_WRONG_NAME) vector<double>; /* Ruby, wrong class name */ +%warnfilter(SWIGWARN_RUBY_WRONG_NAME) vector<int (*)[10]>; /* Ruby, wrong class name */ + +// #pragma is used for warnings that are not associated to +// specific nodes. +#pragma SWIG nowarn=-SWIGWARN_PARSE_EXPLICIT_TEMPLATE + + +/* Let's just grab the original header file here */ +%{ +#ifdef max +#undef max +#endif +%} + +%inline %{ + +template<class T> T max(const T a, const T b) { return a>b ? a : b; } + +template<class T> class vector { + T *v; + int sz; + public: + vector(int _sz) { + v = new T[_sz]; + sz = _sz; + } + T &get(int index) { + return v[index]; + } + void set(int index, T &val) { + v[index] = val; + } + // This really doesn't do anything except test const handling + void testconst(const T x) { } +}; + +/* Explicit instantiation. SWIG should ignore */ +template class vector<int>; +template class vector<double>; +template class vector<int *>; +%} + +/* Now instantiate some specific template declarations */ + +%template(maxint) max<int>; +%template(maxdouble) max<double>; +%template(vecint) vector<int>; +%template(vecdouble) vector<double>; + +/* Now try to break constness */ + +%template(maxintp) max<int (*)[10]>; +%template(vecintp) vector<int (*)[10]>; + + |
