aboutsummaryrefslogtreecommitdiff
path: root/Examples/test-suite/template.i
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/test-suite/template.i')
-rw-r--r--Examples/test-suite/template.i46
1 files changed, 46 insertions, 0 deletions
diff --git a/Examples/test-suite/template.i b/Examples/test-suite/template.i
new file mode 100644
index 000000000..68a9aadd1
--- /dev/null
+++ b/Examples/test-suite/template.i
@@ -0,0 +1,46 @@
+/* File : example.i */
+%module "template"
+
+%warnfilter(801) vector<int>; /* Ruby, wrong class name */
+%warnfilter(801) vector<double>; /* Ruby, wrong class name */
+%warnfilter(801) vector<int (*)[10]>; /* Ruby, wrong class name */
+
+/* Let's just grab the original header file here */
+
+%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) { }
+};
+
+%}
+
+/* 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]>;
+
+