mirror of https://github.com/swig/swig
95 lines
1.8 KiB
OpenEdge ABL
95 lines
1.8 KiB
OpenEdge ABL
// A class with a private assignment operator.
|
|
// This is rare, but sometimes used with singletons and
|
|
// objects that have complicated state.
|
|
|
|
%module private_assign
|
|
%{
|
|
#include <stdlib.h>
|
|
%}
|
|
|
|
%inline %{
|
|
class Foo {
|
|
private:
|
|
Foo &operator=(const Foo &f) {
|
|
return *this;
|
|
}
|
|
public:
|
|
Foo() { }
|
|
Foo(const Foo &f) { } // copy ctor can still be public, however.
|
|
void bar() { }
|
|
};
|
|
|
|
Foo blah() {
|
|
return Foo();
|
|
}
|
|
|
|
class Bar : protected Foo
|
|
{
|
|
};
|
|
|
|
%}
|
|
|
|
#pragma SWIG nowarn=SWIGWARN_IGNORE_OPERATOR_NEW // operator new
|
|
|
|
%inline %{
|
|
class TROOT {
|
|
protected:
|
|
void *operator new(size_t l) { return malloc(sizeof(TROOT)); }
|
|
|
|
int prot_meth()
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
public:
|
|
TROOT()
|
|
{
|
|
}
|
|
|
|
TROOT(const char *name, const char *title, void *initfunc = 0)
|
|
{
|
|
}
|
|
};
|
|
|
|
class A : protected TROOT
|
|
{
|
|
};
|
|
%}
|
|
|
|
%inline %{
|
|
Foo foo_global;
|
|
Foo foo_global_array[1];
|
|
Foo foo_global_array_2d[2][2];
|
|
|
|
struct FooBar : Foo
|
|
{
|
|
};
|
|
|
|
FooBar bar;
|
|
FooBar bar_array[1];
|
|
FooBar bar_array_2d[2][2];
|
|
%}
|
|
|
|
// https://sourceforge.net/p/swig/bugs/1006/
|
|
%rename(Assign) TwoIsAssignableCopyable::operator=;
|
|
%inline %{
|
|
struct nocopy {
|
|
nocopy() {}
|
|
private:
|
|
nocopy(const nocopy&);
|
|
nocopy& operator=(const nocopy&);
|
|
};
|
|
|
|
struct One: public nocopy {};
|
|
struct TwoNotAssignableCopyable: public One {};
|
|
struct TwoIsAssignableCopyable: public One {
|
|
TwoIsAssignableCopyable() {}
|
|
TwoIsAssignableCopyable(const TwoIsAssignableCopyable&) {}
|
|
TwoIsAssignableCopyable& operator=(const TwoIsAssignableCopyable&) { return *this; }
|
|
};
|
|
struct Three {
|
|
TwoNotAssignableCopyable TwoNot; // getter only should be generated
|
|
TwoIsAssignableCopyable TwoIs; // setter and getter should be generated
|
|
};
|
|
%}
|