update swig on windows
This commit is contained in:
231
winx64/bin/swigwin-4.0.0/Examples/test-suite/csharp_prepost.i
Normal file
231
winx64/bin/swigwin-4.0.0/Examples/test-suite/csharp_prepost.i
Normal file
@@ -0,0 +1,231 @@
|
||||
%module (directors="1") csharp_prepost
|
||||
|
||||
// Test the pre, post, terminate and cshin attributes for csin typemaps
|
||||
|
||||
%include "std_vector.i"
|
||||
|
||||
%define VECTOR_DOUBLE_CSIN_POST
|
||||
" int count$csinput = d$csinput.Count;
|
||||
$csinput = new double[count$csinput];
|
||||
for (int i=0; i<count$csinput; ++i) {
|
||||
$csinput[i] = d$csinput[i];
|
||||
}"
|
||||
%enddef
|
||||
|
||||
// pre and post in csin typemaps
|
||||
%typemap(cstype) std::vector<double> &v "out double[]"
|
||||
%typemap(csin, pre=" DoubleVector d$csinput = new DoubleVector();", post=VECTOR_DOUBLE_CSIN_POST, cshin="out $csinput") std::vector<double> &v
|
||||
"$csclassname.getCPtr(d$csinput)"
|
||||
|
||||
%apply std::vector<double> & v { std::vector<double> & v2 }
|
||||
|
||||
// pre only in csin typemap
|
||||
%typemap(cstype) std::vector<double> &vpre "ref double[]"
|
||||
%typemap(csin, pre=" DoubleVector d$csinput = new DoubleVector();\n foreach (double d in $csinput) {\n d$csinput.Add(d);\n }", cshin="ref $csinput") std::vector<double> &vpre
|
||||
"$csclassname.getCPtr(d$csinput)"
|
||||
|
||||
// post only in csin typemap
|
||||
%typemap(csin, post=" int size = $csinput.Count;\n"
|
||||
" for (int i=0; i<size; ++i) {\n"
|
||||
" $csinput[i] /= 100;\n"
|
||||
" }") std::vector<double> &vpost
|
||||
"$csclassname.getCPtr($csinput)"
|
||||
|
||||
%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() {
|
||||
}
|
||||
virtual ~PrePost2() {
|
||||
}
|
||||
PrePost2(std::vector<double> & v, std::vector<double> &v2, std::vector<double> & vpre, std::vector<double> & vpost) {
|
||||
}
|
||||
virtual 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;
|
||||
}
|
||||
};
|
||||
%}
|
||||
|
||||
// Check csdirectorin pre and post attributes
|
||||
// ref param
|
||||
%typemap(csdirectorin,
|
||||
pre=" DoubleVector d$iminput = new DoubleVector($iminput, false);\n"
|
||||
" int count$iminput = d$iminput.Count;\n"
|
||||
" double[] v$iminput = new double[count$iminput];\n"
|
||||
" for (int i=0; i<count$iminput; ++i) {\n"
|
||||
" v$iminput[i] = d$iminput[i];\n"
|
||||
" }\n",
|
||||
post=" foreach (double d in v$iminput) {\n"
|
||||
" d$iminput.Add(d);\n"
|
||||
" }\n"
|
||||
) std::vector<double> &vpre
|
||||
"ref v$iminput"
|
||||
// post only in csdirectorin typemap
|
||||
%typemap(csdirectorin, post=" DoubleVector d$iminput = new DoubleVector($iminput, false);\n"
|
||||
" int size = d$iminput.Count;\n"
|
||||
" for (int i=0; i<size; ++i) {\n"
|
||||
" d$iminput[i] /= 100;\n"
|
||||
" }") std::vector<double> &vpost
|
||||
"new $csclassname($iminput, false)"
|
||||
|
||||
%feature("director") PrePost3;
|
||||
%inline %{
|
||||
struct PrePost3 {
|
||||
PrePost3() {
|
||||
}
|
||||
virtual ~PrePost3(){}
|
||||
virtual void method(std::vector<double> & vpre, std::vector<double> & vpost) {}
|
||||
virtual int methodint(std::vector<double> & vpre, std::vector<double> & vpost) { return 0; }
|
||||
};
|
||||
%}
|
||||
|
||||
|
||||
%template(DoubleVector) std::vector<double>;
|
||||
|
||||
// Check attributes in the typemaps
|
||||
%typemap(cstype, inattributes="[CustomInt]") int val "int"
|
||||
%typemap(csin, pre=" int tmp_$csinput = $csinput * 100;") int val "tmp_$csinput"
|
||||
%typemap(imtype, out="global::System.IntPtr/*overridden*/", outattributes="[CustomIntPtr]") CsinAttributes * "global::System.Runtime.InteropServices.HandleRef/*overridden*/"
|
||||
|
||||
%inline %{
|
||||
class CsinAttributes {
|
||||
int m_val;
|
||||
public:
|
||||
CsinAttributes(int val) : m_val(val) {}
|
||||
int getVal() { return m_val; }
|
||||
};
|
||||
%}
|
||||
|
||||
|
||||
|
||||
// test Date marshalling with pre post and terminate typemap attributes (Documented in CSharp.html)
|
||||
%typemap(cstype) const CDate& "System.DateTime"
|
||||
%typemap(csin,
|
||||
pre=" CDate temp$csinput = new CDate($csinput.Year, $csinput.Month, $csinput.Day);"
|
||||
) const CDate &
|
||||
"$csclassname.getCPtr(temp$csinput)"
|
||||
|
||||
%typemap(cstype) CDate& "out System.DateTime"
|
||||
%typemap(csin,
|
||||
pre=" CDate temp$csinput = new CDate();",
|
||||
post=" $csinput = new System.DateTime(temp$csinput.getYear(),"
|
||||
" temp$csinput.getMonth(), temp$csinput.getDay(), 0, 0, 0);",
|
||||
cshin="out $csinput"
|
||||
) CDate &
|
||||
"$csclassname.getCPtr(temp$csinput)"
|
||||
|
||||
|
||||
%inline %{
|
||||
class CDate {
|
||||
public:
|
||||
CDate();
|
||||
CDate(int year, int month, int day);
|
||||
int getYear();
|
||||
int getMonth();
|
||||
int getDay();
|
||||
private:
|
||||
int m_year;
|
||||
int m_month;
|
||||
int m_day;
|
||||
};
|
||||
struct Action {
|
||||
int doSomething(const CDate &dateIn, CDate &dateOut);
|
||||
Action(const CDate &dateIn, CDate& dateOut);
|
||||
};
|
||||
%}
|
||||
|
||||
%{
|
||||
Action::Action(const CDate &dateIn, CDate& dateOut) {dateOut = dateIn;}
|
||||
int Action::doSomething(const CDate &dateIn, CDate &dateOut) { dateOut = dateIn; return 0; }
|
||||
CDate::CDate() : m_year(0), m_month(0), m_day(0) {}
|
||||
CDate::CDate(int year, int month, int day) : m_year(year), m_month(month), m_day(day) {}
|
||||
int CDate::getYear() { return m_year; }
|
||||
int CDate::getMonth() { return m_month; }
|
||||
int CDate::getDay() { return m_day; }
|
||||
%}
|
||||
|
||||
%typemap(cstype, out="System.DateTime") CDate * "ref System.DateTime"
|
||||
|
||||
%typemap(csin,
|
||||
pre=" CDate temp$csinput = new CDate($csinput.Year, $csinput.Month, $csinput.Day);",
|
||||
post=" $csinput = new System.DateTime(temp$csinput.getYear(),"
|
||||
" temp$csinput.getMonth(), temp$csinput.getDay(), 0, 0, 0);",
|
||||
cshin="ref $csinput"
|
||||
) CDate *
|
||||
"$csclassname.getCPtr(temp$csinput)"
|
||||
|
||||
%inline %{
|
||||
void addYears(CDate *pDate, int years) {
|
||||
*pDate = CDate(pDate->getYear() + years, pDate->getMonth(), pDate->getDay());
|
||||
}
|
||||
%}
|
||||
|
||||
%typemap(csin,
|
||||
pre=" using (CDate temp$csinput = new CDate($csinput.Year, $csinput.Month, $csinput.Day)) {",
|
||||
post=" $csinput = new System.DateTime(temp$csinput.getYear(),"
|
||||
" temp$csinput.getMonth(), temp$csinput.getDay(), 0, 0, 0);",
|
||||
terminator=" } // terminate temp$csinput using block",
|
||||
cshin="ref $csinput"
|
||||
) CDate *
|
||||
"$csclassname.getCPtr(temp$csinput)"
|
||||
|
||||
%inline %{
|
||||
void subtractYears(CDate *pDate, int years) {
|
||||
*pDate = CDate(pDate->getYear() - years, pDate->getMonth(), pDate->getDay());
|
||||
}
|
||||
%}
|
||||
|
||||
%typemap(csvarin, excode=SWIGEXCODE2) CDate * %{
|
||||
/* csvarin typemap code */
|
||||
set {
|
||||
CDate temp$csinput = new CDate($csinput.Year, $csinput.Month, $csinput.Day);
|
||||
$imcall;$excode
|
||||
} %}
|
||||
|
||||
%typemap(csvarout, excode=SWIGEXCODE2) CDate * %{
|
||||
/* csvarout typemap code */
|
||||
get {
|
||||
global::System.IntPtr cPtr = $imcall;
|
||||
CDate tempDate = (cPtr == global::System.IntPtr.Zero) ? null : new CDate(cPtr, $owner);$excode
|
||||
return new System.DateTime(tempDate.getYear(), tempDate.getMonth(), tempDate.getDay(),
|
||||
0, 0, 0);
|
||||
} %}
|
||||
|
||||
%inline %{
|
||||
CDate ImportantDate = CDate(1999, 12, 31);
|
||||
struct Person {
|
||||
CDate Birthday;
|
||||
};
|
||||
%}
|
||||
|
||||
Reference in New Issue
Block a user