%module java_prepost // Test the pre, post attributes for javain typemaps %include "std_vector.i" %define VECTOR_DOUBLE_JAVAIN_POST " int count$javainput = (int)d$javainput.size(); $javainput = new double[count$javainput]; for (int i=0; i &v "long" // could suppress pgcpp instead of using pgcppname, but not recommended %typemap(jstype) std::vector &v "double[]" %typemap(javain, pre=" DoubleVector d$javainput = new DoubleVector();", post=VECTOR_DOUBLE_JAVAIN_POST, pgcppname="d$javainput") std::vector &v "$javaclassname.getCPtr(d$javainput)" %apply std::vector & v { std::vector & v2 } // pre only in javain typemap //%typemap(jtype, nopgcpp=1) std::vector &vpre "long" // could suppress pgcpp instead of using pgcppname, but not recommended %typemap(jstype) std::vector &vpre "double[]" %typemap(javain, pre=" DoubleVector d$javainput = new DoubleVector();\n for (int i=0; i<$javainput.length; ++i) {\n double d = $javainput[i];\n d$javainput.add(d);\n }", pgcppname="d$javainput") std::vector &vpre "$javaclassname.getCPtr(d$javainput)" // post only in javain typemap %typemap(javain, post=" int size = (int)$javainput.size();\n for (int i=0; i &vpost "$javaclassname.getCPtr($javainput)" %inline %{ bool globalfunction(std::vector & v) { v.push_back(0.0); v.push_back(1.1); v.push_back(2.2); return true; } struct PrePostTest { PrePostTest() { } PrePostTest(std::vector & v) { v.push_back(3.3); v.push_back(4.4); } bool method(std::vector & v) { v.push_back(5.5); v.push_back(6.6); return true; } static bool staticmethod(std::vector & v) { v.push_back(7.7); v.push_back(8.8); return true; } }; // Check pre and post only typemaps and that they coexist okay and that the generated code line spacing looks okay bool globalfunction2(std::vector & v, std::vector &v2, std::vector & vpre, std::vector & vpost) { return true; } struct PrePost2 { PrePost2() { } PrePost2(std::vector & v, std::vector &v2, std::vector & vpre, std::vector & vpost) { } bool method(std::vector & v, std::vector &v2, std::vector & vpre, std::vector & vpost) { return true; } static bool staticmethod(std::vector & v, std::vector &v2, std::vector & vpre, std::vector & vpost) { return true; } }; %} %template(DoubleVector) std::vector; // Check pre post constructor helper deals with checked exceptions, InstantiationException is just a random checked exception %typemap(javain, pre=" if ($javainput == null)\n throw new InstantiationException(\"empty value!!\");", throws="InstantiationException") PrePostTest * "$javaclassname.getCPtr($javainput)" %inline %{ struct PrePostThrows { PrePostThrows(PrePostTest *ppt, bool) { } }; %}