summaryrefslogtreecommitdiff
path: root/Examples/test-suite/director_protected.i
blob: fee45b4a65f498cf439db8275039f023a06d1a2a (plain)
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
140
141
142
143
144
145
146
147
148
%module(directors="1",dirprot="1") director_protected
%{
#include <string>
#include <iostream>
%}

%include "std_string.i"

%feature("director") Foo;
%feature("director") Bar;

%newobject *::create();

#ifdef SWIGPHP
// TODO: Currently we do not track the dynamic type of returned objects
// in PHP, so we need the factory helper.
%include factory.i
%factory(Foo *Bar::create, Bar);
#endif

%rename(a) Bar::hello;
%rename(s) Foo::p;
%rename(q) Foo::r;

%inline {
class Foo {
public:
  virtual ~Foo() {}
  virtual std::string pong() {
    return "Foo::pong();" + ping();
  }

  int p(){ return 1;}
  int r(){ return 1;}
    
  
protected:
  
  typedef int q(); 
  static int s(); 
  
  Foo() {}  

  virtual std::string ping() = 0;

  virtual std::string pang() 
  {
    return "Foo::pang();"; 
  }

  void hellom() {}

  virtual std::string used() {
    return pang() + pong();
  }
};

class Bar : public Foo 
{
public:
  Foo* create() 
  {
    return new Bar();
  }

  std::string pong() {
    return "Bar::pong();" + Foo::pong();
  }

  int hello;

  using Foo::used;
  
protected:
  std::string ping() { 
    return "Bar::ping();"; 
  };

  enum Hello {hola, chao};

  static int a;
  static const int b;
  
  int hi;
  void him() {}

private:
  int c;

};
 

class PrivateFoo : private Foo 
{
};

}


%director A;
%director B;

%inline %{
  class A {
  public:
    A() {};
    virtual ~A() {};
  protected:
    virtual void draw() {};
  };

  class B : public A {
  public:
    B() {};
    virtual ~B() {};
  protected:
    void draw() {};
    void draw(int arg1) {};
  };

%}


%cleardirector;

%inline %{
  class AA {
  public:
    AA() {};
    virtual ~AA() {};
  protected:
    virtual void draw() {};
    virtual void plot() {};
  };

  class BB : public AA {
  public:
    BB() {};
    virtual ~BB() {};
  protected:
    void draw() {};
    void draw(int arg1) {};

    void plot(int arg1) {};
    void plot() {};
  };
%}