more thorough %rename tests including conversion operator %rename
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@9836 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
d53ef0a8c4
commit
ec8d13b467
11 changed files with 660 additions and 1 deletions
108
Examples/test-suite/rename4.i
Normal file
108
Examples/test-suite/rename4.i
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
// Test %rename directive with the 'using' keyword and within the class definition
|
||||
%module rename4
|
||||
|
||||
%{
|
||||
#include "rename.h"
|
||||
%}
|
||||
|
||||
namespace Space {
|
||||
struct Klass {
|
||||
Klass(int i) {}
|
||||
Klass() {}
|
||||
};
|
||||
}
|
||||
|
||||
namespace AnotherSpace {
|
||||
class Another {};
|
||||
}
|
||||
|
||||
namespace Space {
|
||||
%rename(opAnother1) XYZ::operator Another() const;
|
||||
%rename(opAnother2) XYZ<int>::operator Another() const;
|
||||
%rename(opAnother3) XYZ<Space::Klass>::operator Another() const;
|
||||
%rename(opAnother4) XYZ<Space::Enu>::operator Another() const;
|
||||
}
|
||||
|
||||
// Test %rename - no namespace, but specific templated type in the parameter, is used over the generic type T
|
||||
%rename(tMethod2) templateT(int i);
|
||||
%rename(tMethodNotXYZ2) templateNotXYZ(NotXYZ<int>);
|
||||
%rename(tMethodXYZ2) templateXYZ(XYZ<int>);
|
||||
%rename(opT2) operator int();
|
||||
%rename(opNotXYZ2) operator NotXYZ<int>() const;
|
||||
%rename(opXYZ2) operator XYZ<int>() const;
|
||||
|
||||
%rename(tMethod3) templateT(Space::Klass i);
|
||||
%rename(tMethodNotXYZ3) templateNotXYZ(NotXYZ<Space::Klass>);
|
||||
%rename(tMethodXYZ3) templateXYZ(XYZ<Space::Klass>);
|
||||
%rename(opT3) operator Space::Klass();
|
||||
%rename(opNotXYZ3) operator NotXYZ<Space::Klass>() const;
|
||||
%rename(opXYZ3) operator XYZ<Space::Klass>() const;
|
||||
|
||||
%rename(tMethod4) templateT(Space::Enu i);
|
||||
%rename(tMethodNotXYZ4) templateNotXYZ(NotXYZ<Space::Enu>);
|
||||
%rename(tMethodXYZ4) templateXYZ(XYZ<Space::Enu>);
|
||||
%rename(opT4) operator Space::Enu();
|
||||
%rename(opNotXYZ4) operator NotXYZ<Space::Enu>() const;
|
||||
%rename(opXYZ4) operator XYZ<Space::Enu>() const;
|
||||
|
||||
namespace Space {
|
||||
using namespace AnotherSpace;
|
||||
enum Enu { En1, En2, En3 };
|
||||
template<typename T> struct NotXYZ {};
|
||||
template<typename T> class XYZ {
|
||||
|
||||
// Test %rename within the class
|
||||
%rename(opIntPtrA) operator NotXYZ<int>*() const;
|
||||
%rename(opIntPtrB) operator XYZ<int>*() const;
|
||||
|
||||
%rename(tMethod1) templateT(T i);
|
||||
%rename(tMethodNotXYZ1) templateNotXYZ(NotXYZ<T>);
|
||||
%rename(tMethodXYZ1) templateXYZ(XYZ<T>);
|
||||
%rename(opT1) operator T();
|
||||
%rename(opNotXYZ1) operator NotXYZ<T>() const;
|
||||
%rename(opXYZ1) operator XYZ<T>() const;
|
||||
|
||||
NotXYZ<int> *m_int;
|
||||
T m_t;
|
||||
NotXYZ<T> m_notxyz;
|
||||
public:
|
||||
operator NotXYZ<int>*() const { return m_int; }
|
||||
operator XYZ<int>*() const { return 0; }
|
||||
operator Another() const { Another an; return an; }
|
||||
void templateT(T i) {}
|
||||
void templateNotXYZ(NotXYZ<T> i) {}
|
||||
void templateXYZ(XYZ<T> i) {}
|
||||
operator T() { return m_t; }
|
||||
operator NotXYZ<T>() const { return m_notxyz; }
|
||||
operator XYZ<T>() const { XYZ<T> xyz; return xyz; }
|
||||
};
|
||||
}
|
||||
|
||||
namespace Space {
|
||||
// non-templated class using itself in method and operator
|
||||
class ABC {
|
||||
public:
|
||||
|
||||
%rename(methodABC) method(ABC a) const;
|
||||
%rename(opABC) operator ABC() const;
|
||||
%rename(methodKlass) method(Klass k) const;
|
||||
%rename(opKlass) operator Klass() const;
|
||||
|
||||
void method(ABC a) const {}
|
||||
void method(Klass k) const {}
|
||||
operator ABC() const { ABC a; return a; }
|
||||
operator Klass() const { Klass k; return k; }
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
%template(XYZInt) Space::XYZ<int>;
|
||||
%template(XYZDouble) Space::XYZ<double>;
|
||||
%template(XYZKlass) Space::XYZ<Space::Klass>;
|
||||
%template(XYZEnu) Space::XYZ<Space::Enu>;
|
||||
|
||||
%template(NotXYZInt) Space::NotXYZ<int>;
|
||||
%template(NotXYZDouble) Space::NotXYZ<double>;
|
||||
%template(NotXYZKlass) Space::NotXYZ<Space::Klass>;
|
||||
%template(NotXYZEnu) Space::NotXYZ<Space::Enu>;
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue