Operators on Point and Extent

The Point and Extent classes support many mathematical operators, but the set of available operators (and their expected behavior) isn’t quite as obvious as one might think. The table below lists all supported operators, with notes below on special cases. For the rationale behind these operations, see RFC-41.

LHS

RHS

Operator

Result

Notes

PointD

PointD

+, +=

Not supported

[1]

PointD

PointD

-

ExtentD

PointD

PointD

-=

Not supported

[2]

PointD

PointI

-

ExtentD

PointD

PointI

-=

Not supported

[2]

PointD

ExtentD

+, +=, -, -=

PointD

PointD

ExtentI

+, +=, -, -=

PointD

PointI

PointD

+, +=

Not supported

[1]

PointI

PointI

+, +=

Not supported

[1]

PointI

ExtentD

+

PointD

PointI

ExtentD

+=

Not supported

[2]

PointI

ExtentI

+, +=

PointI

PointI

PointD

-

ExtentD

PointI

PointD

-=

Not supported

[2]

PointI

PointI

-

ExtentI

PointI

PointI

-=

Not supported

[2]

PointI

ExtentD

-

PointD

PointI

ExtentD

-=

Not supported

[2]

PointI

ExtentI

-, -=

PointI

ExtentD

PointD

+

PointD

ExtentD

PointD

+=

Not supported

[2]

ExtentD

PointD

-, -=

Not supported

[1]

ExtentD

PointI

+

PointD

ExtentD

PointI

+=

Not supported

[2]

ExtentD

PointI

-, -=

Not supported

[1]

ExtentD

ExtentD

+, +=, -, -=

ExtentD

ExtentD

ExtentI

+, +=, -, -=

ExtentD

ExtentI

PointD

+

PointD

ExtentI

PointD

+=

Not supported

[2]

ExtentI

PointD

-, -=

Not supported

[1]

ExtentI

PointI

+

PointI

ExtentI

PointI

+=

Not supported

[2]

ExtentI

PointI

-, -=

Not supported

[1]

ExtentI

ExtentD

+, -

ExtentD

ExtentI

ExtentD

+=, -=

Not supported

[2]

ExtentI

ExtentI

+, -, +=, -=

ExtentI

ExtentD

double

*, *=, /, /=

ExtentD

ExtentD

double

//, //=

Not supported

[4]

ExtentD

int

*, *=, /, /=

ExtentD

[3]

ExtentD

int

//, //=

Not supported

[4]

ExtentI

double

*

ExtentD

ExtentI

double

*=

Not supported

[2]

ExtentI

double

/

ExtentD

ExtentI

double

/=

Not supported

[2]

ExtentI

double

//, //=

Not supported

[4]

ExtentI

int

*, *=

ExtentI

ExtentI

int

/

ExtentD

ExtentI

int

/=

Not supported (Python), ExtentI (C++)

[2]

ExtentI

int

//, //=

ExtentI

[5]

double

ExtentD

*

ExtentD

double

ExtentI

*

ExtentD

int

ExtentD

*

ExtentD

[3]

int

ExtentI

*

ExtentI