swig/Examples/test-suite/allprotected.i
William S Fulton 06462acdf9 Fix C# CA1063 warning by implementing the recommended Dispose methods.
Previously just the Dispose() method was generated.
Now the Dispose() and Dispose(bool disposing) methods are generated.
Changes are required if custom "csfinalize", "csdestruct" or "csdestruct_derived"
typemaps are being used. Details in #421 on Github. SWIG will error out if one of
the "csfinalize, "csdestruct" or "csdestruct_derived" typemaps are found. Example
error message:

  foo.h:60: Error: A deprecated csfinalize typemap was found for Foo, please remove
  it and replace all csdestruct, csdestruct_derived and csfinalize typemaps by the
  csdispose, csdispose_derived, csdisposing and csdisposing_derived typemaps.

Closes #421
2019-04-08 19:20:45 +01:00

87 lines
2.8 KiB
OpenEdge ABL

// Tests for the allprotected option
%module(directors="1", allprotected="1") allprotected
%{
#include <string>
%}
%include "std_string.i"
#ifdef SWIGSCILAB
%rename(ProcBase) ProtectedBase;
%rename(PubBase) PublicBase;
#endif
%feature("director") PublicBase;
%feature("director") ProtectedBase;
// protected types not supported (ProtectedEnum, IntegerType). Make sure they can be ignored.
%ignore ProtectedBase::protectedenum;
%ignore ProtectedBase::typedefs;
%inline %{
class Klass {
std::string name;
public:
Klass(const std::string& n) : name(n) {}
std::string getName() { return name; }
};
class PublicBase {
std::string str;
public:
enum AnEnum { EnumVal1, EnumVal2 };
public:
PublicBase(const char* s): str(s), instanceMemberVariable(0), anEnum(EnumVal1), stringMember(0) {}
virtual ~PublicBase() { }
virtual std::string virtualMethod() const { return "PublicBase"; }
Klass instanceMethod(Klass k) const { return k; }
Klass *instanceOverloaded(Klass *k) const { return k; }
Klass *instanceOverloaded(Klass *k, std::string name) const { return new Klass(name); }
static Klass staticMethod(Klass k) { return k; }
static Klass *staticOverloaded(Klass *k) { return k; }
static Klass *staticOverloaded(Klass *k, std::string name) { return new Klass(name); }
int instanceMemberVariable;
static int staticMemberVariable;
static const int staticConstMemberVariable = 20;
AnEnum anEnum;
char *stringMember;
};
int PublicBase::staticMemberVariable = 10;
class ProtectedBase {
std::string str;
public:
enum AnEnum { EnumVal1, EnumVal2 };
std::string getName() { return str; }
protected:
ProtectedBase(const char* s): str(s), instanceMemberVariable(0), anEnum(EnumVal1), stringMember(0), protectedenum(ProtEnumVal1) {}
virtual ~ProtectedBase() { }
virtual std::string virtualMethod() const { return "ProtectedBase"; }
Klass instanceMethod(Klass k) const { return k; }
Klass *instanceOverloaded(Klass *k) const { return k; }
Klass *instanceOverloaded(Klass *k, std::string name) const { return new Klass(name); }
static Klass staticMethod(Klass k) { return k; }
static Klass *staticOverloaded(Klass *k) { return k; }
static Klass *staticOverloaded(Klass *k, std::string name) { return new Klass(name); }
int instanceMemberVariable;
static int staticMemberVariable;
static const int staticConstMemberVariable = 20;
AnEnum anEnum;
char *stringMember;
// unsupported: types defined with protected access and thus methods/variables which use them
enum ProtectedEnum { ProtEnumVal1, ProtEnumVal2 };
typedef int IntegerType;
ProtectedEnum protectedenum;
IntegerType typedefs(IntegerType it) { return it; }
};
int ProtectedBase::staticMemberVariable = 10;
class ProtectedDerived : public ProtectedBase {
public:
ProtectedDerived(const char *s) : ProtectedBase(s) {}
};
%}