blob: cc9dca55a86740c2649915b15de0f53c3e449f09 [file] [log] [blame]
%module(directors="1") director_abstract
%{
#include <string>
class Foo {
public:
virtual ~Foo() {}
virtual std::string ping() = 0;
virtual std::string pong() { return "Foo::pong();" + ping(); }
};
%}
%include <std_string.i>
%feature("director") Foo;
class Foo {
public:
virtual ~Foo() {}
virtual std::string ping() = 0;
virtual std::string pong() { return "Foo::pong();" + ping(); }
};
%feature("director");
%inline %{
class Example0
{
protected:
int xsize, ysize;
public:
Example0(int x, int y)
: xsize(x), ysize(y) { }
Example0() { }
public:
virtual ~Example0() {}
int GetXSize() const { return xsize; }
// pure virtual methods that must be overridden
virtual int Color(unsigned char r, unsigned char g, unsigned char b)
{
return 0;
}
static int get_color(Example0 *ptr, unsigned char r,
unsigned char g, unsigned char b) {
return ptr->Color(r, g, b);
}
};
class Example1
{
protected:
int xsize, ysize;
protected:
/* this shouldn't be emitted, unless 'dirprot' is used, since they
is already a public constructor */
Example1(int x, int y)
: xsize(x), ysize(y) { }
public:
Example1() { }
public:
virtual ~Example1() {}
int GetXSize() const { return xsize; }
// pure virtual methods that must be overridden
virtual int Color(unsigned char r, unsigned char g, unsigned char b) = 0;
static int get_color(Example1 *ptr, unsigned char r,
unsigned char g, unsigned char b) {
return ptr->Color(r, g, b);
}
};
class Example2
{
protected:
int xsize, ysize;
protected:
/* there is no default constructor, hence, all protected constructors
should be emitted */
Example2(int x)
{
}
Example2(int x, int y)
: xsize(x), ysize(y) { }
public:
virtual ~Example2() {}
int GetXSize() const { return xsize; }
// pure virtual methods that must be overridden
virtual int Color(unsigned char r, unsigned char g, unsigned char b) = 0;
static int get_color(Example2 *ptr, unsigned char r,
unsigned char g, unsigned char b) {
return ptr->Color(r, g, b);
}
};
class Example4
{
protected:
int xsize, ysize;
protected:
Example4()
{
}
/* this is not emitted, unless dirprot is used */
Example4(int x, int y)
: xsize(x), ysize(y) { }
public:
virtual ~Example4() {}
int GetXSize() const { return xsize; }
// pure virtual methods that must be overridden
virtual int Color(unsigned char r, unsigned char g, unsigned char b) = 0;
static int get_color(Example4 *ptr, unsigned char r,
unsigned char g, unsigned char b) {
return ptr->Color(r, g, b);
}
};
namespace ns
{
template <class T>
class Example3
{
protected:
/* the default constructor is always emitter, even when protected,
having another public constructor, and 'dirprot' is not used.
This is just for Java compatibility */
Example3()
{
}
/* this is no emitted, unless dirprot mode is used */
Example3(int x) { }
public:
Example3(int x, int y) { }
virtual ~Example3() {}
// pure virtual methods that must be overridden
virtual int Color(unsigned char r, unsigned char g, unsigned char b) = 0;
static int get_color(Example3 *ptr, unsigned char r,
unsigned char g, unsigned char b) {
return ptr->Color(r, g, b);
}
};
}
%}
%template(Example3_i) ns::Example3<int>;
%inline %{
struct A{
virtual ~A() {}
friend int g(A* obj);
protected:
A(const A&){}
virtual int f() = 0;
};
int g(A* obj) {return 1;}
%}