mirror of https://github.com/swig/swig
69 lines
1.5 KiB
OpenEdge ABL
69 lines
1.5 KiB
OpenEdge ABL
/* File : equality.i */
|
|
/*
|
|
Specific test for operator== overload. Partially overlaps with
|
|
operator_overload.i
|
|
*/
|
|
|
|
%module equality
|
|
|
|
%warnfilter(SWIGWARN_LANG_IDENTIFIER) operator==;
|
|
|
|
%inline %{
|
|
|
|
/* Point has no equality operator */
|
|
typedef struct Point
|
|
{
|
|
double x;
|
|
double y;
|
|
} Point;
|
|
|
|
static const Point s_zeroPoint = { 0.0, 0.0 };
|
|
/* stack version */
|
|
Point MakePoint(double x, double y)
|
|
{ Point new_point = {x, y}; return new_point; }
|
|
|
|
const Point* GetZeroPointPtr() { return &s_zeroPoint; }
|
|
Point GetZeroPointCopy() { return s_zeroPoint; }
|
|
|
|
/* EqualOpDefined has correct equality operator */
|
|
class EqualOpDefined {
|
|
public:
|
|
EqualOpDefined():
|
|
x(5) {}
|
|
EqualOpDefined(int val):
|
|
x(val) {}
|
|
|
|
int x;
|
|
};
|
|
|
|
/* EqualOpWrong has logically incorrect equality operator */
|
|
class EqualOpWrong {
|
|
public:
|
|
inline static const EqualOpWrong* GetStaticObject();
|
|
};
|
|
|
|
static EqualOpWrong s_wrongEqOp;
|
|
|
|
const EqualOpWrong* EqualOpWrong::GetStaticObject()
|
|
{ return &s_wrongEqOp; }
|
|
|
|
|
|
inline bool operator==( const EqualOpDefined& first, const EqualOpDefined& second )
|
|
{ return first.x == second.x; }
|
|
|
|
inline bool operator==( const EqualOpWrong& first, const EqualOpWrong& second )
|
|
{ return false; }
|
|
|
|
%}
|
|
|
|
/*
|
|
in order to wrap this correctly we need to extend the class
|
|
to make the friends & non members part of the class
|
|
*/
|
|
%extend EqualOpDefined {
|
|
bool operator==(const EqualOpDefined& b){return (*$self) == b;}
|
|
}
|
|
%extend EqualOpWrong {
|
|
bool operator==(const EqualOpWrong& b){return (*$self) == b;}
|
|
}
|