File size: 4,578 Bytes
f5bb0c0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
#ifndef OPENPOSE_CORE_POINT_HPP
#define OPENPOSE_CORE_POINT_HPP
#include <string>
#include <openpose/core/macros.hpp>
namespace op
{
template<typename T>
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<T> or Point<T> 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<T>.
* @param point Point to be copied.
*/
Point<T>(const Point<T>& point);
/**
* Copy assignment.
* Similar to Point<T>(const Point<T>& point).
* @param point Point to be copied.
* @return The resulting Point.
*/
Point<T>& operator=(const Point<T>& point);
/**
* Move constructor.
* It destroys the original Point to be moved.
* @param point Point to be moved.
*/
Point<T>(Point<T>&& point);
/**
* Move assignment.
* Similar to Point<T>(Point<T>&& point).
* @param point Point to be moved.
* @return The resulting Point.
*/
Point<T>& operator=(Point<T>&& point);
inline T area() const
{
return x * y;
}
/**
* It returns a string with the whole Point<T> data. Useful for debugging.
* The format is: `[x, y]`
* @return A string with the Point<T> values in the above format.
*/
std::string toString() const;
// ------------------------------ Comparison operators ------------------------------ //
/**
* Less comparison operator.
* @param point Point<T> to be compared.
* @result Whether the instance satisfies the condition with respect to point.
*/
inline bool operator<(const Point<T>& point) const
{
return area() < point.area();
}
/**
* Greater comparison operator.
* @param point Point<T> to be compared.
* @result Whether the instance satisfies the condition with respect to point.
*/
inline bool operator>(const Point<T>& point) const
{
return area() > point.area();
}
/**
* Less or equal comparison operator.
* @param point Point<T> to be compared.
* @result Whether the instance satisfies the condition with respect to point.
*/
inline bool operator<=(const Point<T>& point) const
{
return area() <= point.area();
}
/**
* Greater or equal comparison operator.
* @param point Point<T> to be compared.
* @result Whether the instance satisfies the condition with respect to point.
*/
inline bool operator>=(const Point<T>& point) const
{
return area() >= point.area();
}
/**
* Equal comparison operator.
* @param point Point<T> to be compared.
* @result Whether the instance satisfies the condition with respect to point.
*/
inline bool operator==(const Point<T>& point) const
{
return area() == point.area();
}
/**
* Not equal comparison operator.
* @param point Point<T> to be compared.
* @result Whether the instance satisfies the condition with respect to point.
*/
inline bool operator!=(const Point<T>& point) const
{
return area() != point.area();
}
// ------------------------------ Basic Operators ------------------------------ //
Point<T>& operator+=(const Point<T>& point);
Point<T> operator+(const Point<T>& point) const;
Point<T>& operator+=(const T value);
Point<T> operator+(const T value) const;
Point<T>& operator-=(const Point<T>& point);
Point<T> operator-(const Point<T>& point) const;
Point<T>& operator-=(const T value);
Point<T> operator-(const T value) const;
Point<T>& operator*=(const T value);
Point<T> operator*(const T value) const;
Point<T>& operator/=(const T value);
Point<T> operator/(const T value) const;
};
// Static methods
OVERLOAD_C_OUT(Point)
}
#endif // OPENPOSE_CORE_POINT_HPP
|