115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/* -----------------------------------------------------------------------------
215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * doperators.swg
315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot *
415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * Mapping of C++ operator overloading methods to D.
515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * ----------------------------------------------------------------------------- */
615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#if (SWIG_D_VERSION == 1)
815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%pragma(d) imdmodulecode=%{
1015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robottemplate SwigOperatorDefinitions() {
1115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  public override int opEquals(Object o) {
1215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    if (auto rhs = cast(typeof(this))o) {
1315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot      if (swigCPtr == rhs.swigCPtr) return 1;
1415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot      static if (is(typeof(swigOpEquals(rhs)))) {
1515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        return swigOpEquals(rhs) ? 1 : 0;
1615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot      } else {
1715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        return 0;
1815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot      }
1915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    }
2015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    return super.opEquals(o);
2115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  }
2215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%}
2315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// opEquals is emitted in pure C mode as well to define two proxy classes
2415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// pointing to the same struct as equal.
2515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
2615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#ifdef __cplusplus
2715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opPos) *::operator+();
2815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opPos) *::operator+() const;
2915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opNeg) *::operator-();
3015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opNeg) *::operator-() const;
3115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opCom) *::operator~();
3215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opCom) *::operator~() const;
3315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
3415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opAdd) *::operator+;
3515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opAddAssign) *::operator+=;
3615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opSub) *::operator-;
3715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opSubAssign) *::operator-=;
3815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opMul) *::operator*;
3915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opMulAssign) *::operator*=;
4015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opDiv) *::operator/;
4115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opDivAssign) *::operator/=;
4215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opMod) *::operator%;
4315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opModAssign) *::operator%=;
4415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opAnd) *::operator&;
4515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opAndAssign) *::operator&=;
4615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opOr) *::operator|;
4715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opOrAssign) *::operator|=;
4815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opXor) *::operator^;
4915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opXorAssign) *::operator^=;
5015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opShl) *::operator<<;
5115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opShlAssign) *::operator<<=;
5215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opShr) *::operator>>;
5315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opShrAssign) *::operator>>=;
5415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
5515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opIndex) *::operator[](unsigned) const;
5615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// opIndexAssign is not currently generated, it needs more extensive support
5715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// mechanisms.
5815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
5915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opCall) *::operator();
6015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
6115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// !a is not overrideable in D1.
6215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%ignoreoperator(LNOT) operator!;
6315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
6415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// opCmp is used in D.
6515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpEquals) *::operator==;
6615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpLt) *::operator<;
6715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpLtEquals) *::operator<=;
6815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpGt) *::operator>;
6915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpGtEquals) *::operator>=;
7015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
7115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// a != b is rewritten as !a.opEquals(b) in D.
7215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%ignoreoperator(NOTEQUAL) operator!=;
7315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
7415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// The logic operators are not overrideable in D.
7515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%ignoreoperator(LAND) operator&&;
7615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%ignoreoperator(LOR) operator||;
7715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
7815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// ++/--a is rewritten as a +/-= 1 in D1,so ignore the prefix operators.
7915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%ignoreoperator(PLUSPLUS) *::operator++();
8015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%ignoreoperator(MINUSMINUS) *::operator--();
8115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpInc) *::operator++(int);
8215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpDec) *::operator--(int);
8315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
8415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// The C++ assignment operator does not translate well to D where the proxy
8515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// classes have reference semantics.
8615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%ignoreoperator(EQ) operator=;
8715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
8815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%pragma(d) imdmodulecode=%{
8915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  public override int opCmp(Object o) {
9015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    static if (is(typeof(swigOpLt(typeof(this).init) &&
9115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        swigOpEquals(typeof(this).init)))) {
9215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot      if (auto rhs = cast(typeof(this))o) {
9315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        if (swigOpLt(rhs)) {
9415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot          return -1;
9515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        } else if (swigOpEquals(rhs)) {
9615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot          return 0;
9715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        } else {
9815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot          return 1;
9915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        }
10015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot      }
10115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    }
10215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    return super.opCmp(o);
10315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  }
10415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
10515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  public typeof(this) opPostInc(T = int)(T unused = 0) {
10615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    static assert(
10715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot      is(typeof(swigOpInc(int.init))),
10815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot      "opPostInc called on " ~ typeof(this).stringof ~ ", but no postfix " ~
10915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        "increment operator exists in the corresponding C++ class."
11015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    );
11115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    return swigOpInc(int.init);
11215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  }
11315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
11415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  public typeof(this) opPostDec(T = int)(T unused = 0) {
11515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    static assert(
11615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot      is(typeof(swigOpDec(int.init))),
11715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot      "opPostInc called on " ~ typeof(this).stringof ~ ", but no postfix " ~
11815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        "decrement operator exists in the corresponding C++ class."
11915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    );
12015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    return swigOpDec(int.init);
12115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  }
12215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%}
12315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#endif
12415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
12515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%pragma(d) imdmodulecode=%{
12615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot}
12715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%}
12815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
12915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#else
13015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%pragma(d) imdmodulecode=%{
13115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robotmixin template SwigOperatorDefinitions() {
13215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  public override bool opEquals(Object o) {
13315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    if (auto rhs = cast(typeof(this))o) {
13415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot      if (swigCPtr == rhs.swigCPtr) return true;
13515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot      static if (is(typeof(swigOpEquals(rhs)))) {
13615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        return swigOpEquals(rhs);
13715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot      } else {
13815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        return false;
13915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot      }
14015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    }
14115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    return super.opEquals(o);
14215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  }
14315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%}
14415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// opEquals is emitted in pure C mode as well to define two proxy classes
14515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// pointing to the same struct as equal.
14615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
14715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#ifdef __cplusplus
14815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpPos) *::operator+();
14915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpPos) *::operator+() const;
15015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpNeg) *::operator-();
15115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpNeg) *::operator-() const;
15215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpCom) *::operator~();
15315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpCom) *::operator~() const;
15415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpInc) *::operator++();
15515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpDec) *::operator--();
15615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%ignoreoperator(PLUSPLUS) *::operator++(int);
15715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%ignoreoperator(MINUSMINUS) *::operator--(int);
15815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// The postfix increment/decrement operators are ignored because they are
15915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// rewritten to (auto t = e, ++e, t) in D2. The unary * operator (used for
16015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// pointer dereferencing in C/C++) isn't mapped to opUnary("*") by default,
16115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// despite this would be possible in D2 – the difference in member access
16215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// semantics would only lead to confusion in most cases.
16315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
16415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpAdd) *::operator+;
16515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpSub) *::operator-;
16615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpMul) *::operator*;
16715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpDiv) *::operator/;
16815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpMod) *::operator%;
16915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpAnd) *::operator&;
17015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpOr) *::operator|;
17115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpXor) *::operator^;
17215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpShl) *::operator<<;
17315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpShr) *::operator>>;
17415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
17515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpAddAssign) *::operator+=;
17615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpSubAssign) *::operator-=;
17715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpMulAssign) *::operator*=;
17815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpDivAssign) *::operator/=;
17915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpModAssign) *::operator%=;
18015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpAndAssign) *::operator&=;
18115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpOrAssign) *::operator|=;
18215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpXorAssign) *::operator^=;
18315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpShlAssign) *::operator<<=;
18415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpShrAssign) *::operator>>=;
18515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
18615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opIndex) *::operator[];
18715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// opIndexAssign is not currently generated, it needs more extensive support
18815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// mechanisms.
18915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
19015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(opCall) *::operator();
19115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
19215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpEquals) *::operator==;
19315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpLt) *::operator<;
19415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpLtEquals) *::operator<=;
19515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpGt) *::operator>;
19615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%rename(swigOpGtEquals) *::operator>=;
19715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
19815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// a != b is rewritten as !a.opEquals(b) in D.
19915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%ignoreoperator(NOTEQUAL) operator!=;
20015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
20115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// The logic operators are not overrideable in D.
20215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%ignoreoperator(LAND) operator&&;
20315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%ignoreoperator(LOR) operator||;
20415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
20515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// The C++ assignment operator does not translate well to D where the proxy
20615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot// classes have reference semantics.
20715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%ignoreoperator(EQ) operator=;
20815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
20915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%pragma(d) imdmodulecode=%{
21015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  public override int opCmp(Object o) {
21115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    static if (__traits(compiles, swigOpLt(typeof(this).init) &&
21215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        swigOpEquals(typeof(this).init))) {
21315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot      if (auto rhs = cast(typeof(this))o) {
21415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        if (swigOpLt(rhs)) {
21515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot          return -1;
21615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        } else if (swigOpEquals(rhs)) {
21715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot          return 0;
21815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        } else {
21915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot          return 1;
22015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        }
22115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot      }
22215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    }
22315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    return super.opCmp(o);
22415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  }
22515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
22615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  private template swigOpBinary(string operator, string name) {
22715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    enum swigOpBinary = `public void opOpAssign(string op, T)(T rhs) if (op == "` ~ operator ~
22815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot      `" && __traits(compiles, swigOp` ~ name ~ `Assign(rhs))) { swigOp` ~ name ~ `Assign(rhs);}` ~
22915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot      `public auto opBinary(string op, T)(T rhs) if (op == "` ~ operator ~
23015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot      `" && __traits(compiles, swigOp` ~ name ~ `(rhs))) { return swigOp` ~ name ~ `(rhs);}`;
23115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  }
23215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  mixin(swigOpBinary!("+", "Add"));
23315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  mixin(swigOpBinary!("-", "Sub"));
23415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  mixin(swigOpBinary!("*", "Mul"));
23515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  mixin(swigOpBinary!("/", "Div"));
23615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  mixin(swigOpBinary!("%", "Mod"));
23715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  mixin(swigOpBinary!("&", "And"));
23815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  mixin(swigOpBinary!("|", "Or"));
23915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  mixin(swigOpBinary!("^", "Xor"));
24015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  mixin(swigOpBinary!("<<", "Shl"));
24115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  mixin(swigOpBinary!(">>", "Shr"));
24215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
24315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  private template swigOpUnary(string operator, string name) {
24415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    enum swigOpUnary = `public auto opUnary(string op)() if (op == "` ~ operator ~
24515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot      `" && __traits(compiles, swigOp` ~ name ~ `())) { return swigOp` ~ name ~ `();}`;
24615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  }
24715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  mixin(swigOpUnary!("+", "Pos"));
24815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  mixin(swigOpUnary!("-", "Neg"));
24915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  mixin(swigOpUnary!("~", "Com"));
25015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  mixin(swigOpUnary!("++", "Inc"));
25115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  mixin(swigOpUnary!("--", "Dec"));
25215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%}
25315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#endif
25415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
25515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%pragma(d) imdmodulecode=%{
25615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot}
25715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot%}
25815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
25915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#endif
260