X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fgeometry%2Foperators.h;h=295daa1a6b4fc2471eb2c88007b3ff3eb9e39af7;hb=8a6225176cd0946363ac2d8219d54a13009de675;hp=7a8e7eab1b47b31f8b4a0defc1e9bc2f8a73a08a;hpb=a2cf146565731e09f2e4d3159c19229abc33b143;p=l2e.git diff --git a/src/geometry/operators.h b/src/geometry/operators.h index 7a8e7ea..295daa1 100644 --- a/src/geometry/operators.h +++ b/src/geometry/operators.h @@ -11,6 +11,8 @@ #include "Point.h" #include "Vector.h" +#include + namespace geometry { template @@ -22,6 +24,15 @@ inline Point operator +(const Point &lhs, const Vector &rhs) { return Point(lhs.X() + rhs.X(), lhs.Y() + rhs.Y()); } +template +inline Vector &operator +=(Vector &lhs, const Vector &rhs) { + return lhs = lhs + rhs; +} +template +inline Point &operator +=(Point &lhs, const Vector &rhs) { + return lhs = lhs + rhs; +} + template inline Vector operator -(const Vector &lhs, const Vector &rhs) { return Vector(lhs.X() - rhs.X(), lhs.Y() - rhs.Y()); @@ -31,11 +42,31 @@ inline Point operator -(const Point &lhs, const Vector &rhs) { return Point(lhs.X() - rhs.X(), lhs.Y() - rhs.Y()); } +template +inline Vector &operator -=(Vector &lhs, const Vector &rhs) { + return lhs = lhs - rhs; +} +template +inline Point &operator -=(Point &lhs, const Vector &rhs) { + return lhs = lhs - rhs; +} + template inline Vector operator -(const Vector &v) { return Vector(-v.X(), -v.Y()); } +template +inline std::ostream &operator <<(std::ostream &out, const Point &p) { + out << '(' << p.X() << ", " << p.Y() << ')'; + return out; +} +template +inline std::ostream &operator <<(std::ostream &out, const Vector &v) { + out << '<' << v.X() << ", " << v.Y() << '>'; + return out; +} + } #endif /* GEOMETRY_OPERATORS_H_ */