1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
%module(directors="1") special_variables
%include <std_string.i>
// will fail to compile if $symname is not expanded
%typemap(argout) int i {
$symname(99);
}
%{
#define KKK_testmethod testmethod
#define KKK_teststaticmethod KKK::teststaticmethod
%}
%inline %{
void testmethod(int i) {}
struct KKK {
void testmethod(int i) {}
static void teststaticmethod(int i) {}
};
%}
%{
std::string ExceptionVars(double i, double j) {
return "a1";
}
%}
%rename(ExceptionVars) Space::exceptionvars;
%exception Space::exceptionvars %{
$action
result = $symname(1.0,2.0); // Should expand to ExceptionVars
result = $name(3.0,4.0); // Should expand to Space::exceptionvars
// above will not compile if the variables are not expanded properly
result = "$action $name $symname $overname $wrapname $parentclassname $parentclasssymname";
%}
%inline %{
namespace Space {
std::string exceptionvars(double i, double j) {
return "b2";
}
}
%}
%exception Space::overloadedmethod %{
$action
result = Space::$symname(1.0);
result = $name();
result = $name(2.0);
// above will not compile if the variables are not expanded properly
result = "$action $name $symname $overname $wrapname $parentclassname $parentclasssymname";
// $decl
%}
%inline %{
namespace Space {
std::string overloadedmethod(double j) {
return "c3";
}
std::string overloadedmethod() {
return "d4";
}
}
std::string declaration;
%}
%exception {
$action
declaration = "$fulldecl $decl";
}
%inline %{
namespace SpaceNamespace {
struct ABC {
ABC(int a, double b) {}
ABC() {}
static short * staticmethod(int x, bool b) { return 0; }
short * instancemethod(int x, bool b = false) { return 0; }
short * constmethod(int x) const { return 0; }
};
template<typename T> struct Template {
std::string tmethod(T t) { return ""; }
};
void globtemplate(Template<ABC> t) {}
}
%}
%template(TemplateABC) SpaceNamespace::Template<SpaceNamespace::ABC>;
/////////////////////////////////// directors /////////////////////////////////
%{
void DirectorTest_director_testmethod(int i) {}
void DirectorTest_director_testmethodSwigExplicitDirectorTest(int i) {}
%}
%typemap(directorargout) int i {
$symname(99);
}
%feature("director") DirectorTest;
%inline %{
void director_testmethod(int i) {}
struct DirectorTest {
virtual void director_testmethod(int i) {}
virtual ~DirectorTest() {}
};
%}
/////////////////////////////////// parentclasssymname parentclassname /////////////////////////////////
%exception instance_def {
$action
$parentclasssymname_aaa();
$parentclassname_bbb();
// above will not compile if the variables are not expanded properly
}
%exception static_def {
$action
$parentclasssymname_aaa();
$parentclassname_bbb();
// above will not compile if the variables are not expanded properly
}
%{
void DEFNewName_aaa() {}
namespace SpaceNamespace {
void DEF_bbb() {}
}
%}
%rename(DEFNewName) DEF;
%inline %{
namespace SpaceNamespace {
struct DEF : ABC {
void instance_def() {}
static void static_def() {}
};
}
%}
|