/* ------------------------------------------------------------
 * Overloaded operator support
 * ------------------------------------------------------------ */

#ifdef __cplusplus

// operators supported in Octave, and the methods they are routed to

// __brace__      a{args}
// __brace_asgn__ a{args} = rhs
// __paren__      a(args)
// __paren_asgn__ a(args) = rhs
// __str__        generates string rep

// __not__        !a
// __uplus__      +a
// __uminus__     -a
// __transpose__  a.'
// __hermitian__  a'
// __incr__       a++
// __decr__       a--
// __add__        a + b
// __sub__        a - b
// __mul__        a * b
// __div__        a / b
// __pow__        a ^ b
// __ldiv__       a \ b
// __lshift__     a << b
// __rshift__     a >> b
// __lt__         a < b
// __le__         a <= b
// __eq__         a == b
// __ge__         a >= b
// __gt__         a > b
// __ne__         a != b
// __el_mul__     a .* b
// __el_div__     a ./ b
// __el_pow__     a .^ b
// __el_ldiv__    a .\ b
// __el_and__     a & b
// __el_or__      a | b

// operators supported in C++, and the methods that route to them

%rename(__add__)       *::operator+;
%rename(__add__)       *::operator+();
%rename(__add__)       *::operator+() const;
%rename(__sub__)       *::operator-;
%rename(__uminus__)    *::operator-();
%rename(__uminus__)    *::operator-() const;
%rename(__mul__)       *::operator*;
%rename(__div__)       *::operator/;
%rename(__mod__)       *::operator%;
%rename(__lshift__)    *::operator<<;
%rename(__rshift__)    *::operator>>;
%rename(__el_and__)    *::operator&&;
%rename(__el_or__)     *::operator||;
%rename(__xor__)       *::operator^;
%rename(__invert__)    *::operator~;
%rename(__lt__)        *::operator<;
%rename(__le__)        *::operator<=;
%rename(__gt__)        *::operator>;
%rename(__ge__)        *::operator>=;
%rename(__eq__)        *::operator==;
%rename(__ne__)        *::operator!=;
%rename(__not__)       *::operator!;
%rename(__incr__)      *::operator++;
%rename(__decr__)      *::operator--;
%rename(__paren__)     *::operator();
%rename(__brace__)     *::operator[];

// Ignored inplace operators
%ignoreoperator(PLUSEQ)     operator+=;
%ignoreoperator(MINUSEQ)    operator-=;
%ignoreoperator(MULEQ)      operator*=;
%ignoreoperator(DIVEQ)      operator/=;
%ignoreoperator(MODEQ)      operator%=;
%ignoreoperator(LSHIFTEQ)   operator<<=;
%ignoreoperator(RSHIFTEQ)   operator>>=;
%ignoreoperator(ANDEQ)      operator&=;
%ignoreoperator(OREQ)       operator|=;
%ignoreoperator(XOREQ)      operator^=;

// Ignored operators
%ignoreoperator(EQ)         operator=;
%ignoreoperator(ARROWSTAR)  operator->*;

#endif /* __cplusplus */
