mirror of https://github.com/swig/swig
92 lines
3.2 KiB
OpenEdge ABL
92 lines
3.2 KiB
OpenEdge ABL
%module java_prepost
|
|
|
|
// Test the pre, post attributes for javain typemaps
|
|
|
|
%include "std_vector.i"
|
|
|
|
%define VECTOR_DOUBLE_JAVAIN_POST
|
|
" int count$javainput = d$javainput.size();
|
|
$javainput = new double[count$javainput];
|
|
for (int i=0; i<count$javainput; ++i) {
|
|
$javainput[i] = d$javainput.get(i);
|
|
}"
|
|
%enddef
|
|
|
|
// pre and post in javain typemaps
|
|
//%typemap(jtype, nopgcpp=1) std::vector<double> &v "long" // could suppress pgcpp instead of using pgcppname, but not recommended
|
|
%typemap(jstype) std::vector<double> &v "double[]"
|
|
%typemap(javain, pre=" DoubleVector d$javainput = new DoubleVector();", post=VECTOR_DOUBLE_JAVAIN_POST, pgcppname="d$javainput") std::vector<double> &v
|
|
"$javaclassname.getCPtr(d$javainput)"
|
|
|
|
%apply std::vector<double> & v { std::vector<double> & v2 }
|
|
|
|
// pre only in javain typemap
|
|
//%typemap(jtype, nopgcpp=1) std::vector<double> &vpre "long" // could suppress pgcpp instead of using pgcppname, but not recommended
|
|
%typemap(jstype) std::vector<double> &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<double> &vpre
|
|
"$javaclassname.getCPtr(d$javainput)"
|
|
|
|
// post only in javain typemap
|
|
%typemap(javain, post=" int size = $javainput.size();\n for (int i=0; i<size; ++i) {\n $javainput.set(i, $javainput.get(i)/100);\n }") std::vector<double> &vpost
|
|
"$javaclassname.getCPtr($javainput)"
|
|
|
|
%inline %{
|
|
bool globalfunction(std::vector<double> & v) {
|
|
v.push_back(0.0);
|
|
v.push_back(1.1);
|
|
v.push_back(2.2);
|
|
return true;
|
|
}
|
|
struct PrePostTest {
|
|
PrePostTest() {
|
|
}
|
|
PrePostTest(std::vector<double> & v) {
|
|
v.push_back(3.3);
|
|
v.push_back(4.4);
|
|
}
|
|
bool method(std::vector<double> & v) {
|
|
v.push_back(5.5);
|
|
v.push_back(6.6);
|
|
return true;
|
|
}
|
|
static bool staticmethod(std::vector<double> & 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<double> & v, std::vector<double> &v2, std::vector<double> & vpre, std::vector<double> & vpost) {
|
|
return true;
|
|
}
|
|
struct PrePost2 {
|
|
PrePost2() {
|
|
}
|
|
PrePost2(std::vector<double> & v, std::vector<double> &v2, std::vector<double> & vpre, std::vector<double> & vpost) {
|
|
}
|
|
bool method(std::vector<double> & v, std::vector<double> &v2, std::vector<double> & vpre, std::vector<double> & vpost) {
|
|
return true;
|
|
}
|
|
static bool staticmethod(std::vector<double> & v, std::vector<double> &v2, std::vector<double> & vpre, std::vector<double> & vpost) {
|
|
return true;
|
|
}
|
|
};
|
|
%}
|
|
|
|
%template(DoubleVector) std::vector<double>;
|
|
|
|
|
|
// 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) {
|
|
}
|
|
};
|
|
%}
|
|
|
|
|