#ifndef OPENPOSE_CORE_POINT_HPP #define OPENPOSE_CORE_POINT_HPP #include #include namespace op { template struct Point { T x; T y; Point(const T x = 0, const T y = 0); /** * Copy constructor. * It performs `fast copy`: For performance purpose, copying a Point or Point or cv::Mat just copies the * reference, it still shares the same internal data. * Modifying the copied element will modify the original one. * Use clone() for a slower but real copy, similarly to cv::Mat and Point. * @param point Point to be copied. */ Point(const Point& point); /** * Copy assignment. * Similar to Point(const Point& point). * @param point Point to be copied. * @return The resulting Point. */ Point& operator=(const Point& point); /** * Move constructor. * It destroys the original Point to be moved. * @param point Point to be moved. */ Point(Point&& point); /** * Move assignment. * Similar to Point(Point&& point). * @param point Point to be moved. * @return The resulting Point. */ Point& operator=(Point&& point); inline T area() const { return x * y; } /** * It returns a string with the whole Point data. Useful for debugging. * The format is: `[x, y]` * @return A string with the Point values in the above format. */ std::string toString() const; // ------------------------------ Comparison operators ------------------------------ // /** * Less comparison operator. * @param point Point to be compared. * @result Whether the instance satisfies the condition with respect to point. */ inline bool operator<(const Point& point) const { return area() < point.area(); } /** * Greater comparison operator. * @param point Point to be compared. * @result Whether the instance satisfies the condition with respect to point. */ inline bool operator>(const Point& point) const { return area() > point.area(); } /** * Less or equal comparison operator. * @param point Point to be compared. * @result Whether the instance satisfies the condition with respect to point. */ inline bool operator<=(const Point& point) const { return area() <= point.area(); } /** * Greater or equal comparison operator. * @param point Point to be compared. * @result Whether the instance satisfies the condition with respect to point. */ inline bool operator>=(const Point& point) const { return area() >= point.area(); } /** * Equal comparison operator. * @param point Point to be compared. * @result Whether the instance satisfies the condition with respect to point. */ inline bool operator==(const Point& point) const { return area() == point.area(); } /** * Not equal comparison operator. * @param point Point to be compared. * @result Whether the instance satisfies the condition with respect to point. */ inline bool operator!=(const Point& point) const { return area() != point.area(); } // ------------------------------ Basic Operators ------------------------------ // Point& operator+=(const Point& point); Point operator+(const Point& point) const; Point& operator+=(const T value); Point operator+(const T value) const; Point& operator-=(const Point& point); Point operator-(const Point& point) const; Point& operator-=(const T value); Point operator-(const T value) const; Point& operator*=(const T value); Point operator*(const T value) const; Point& operator/=(const T value); Point operator/(const T value) const; }; // Static methods OVERLOAD_C_OUT(Point) } #endif // OPENPOSE_CORE_POINT_HPP