#ifndef ANDROID_DVR_RANGE_H_ #define ANDROID_DVR_RANGE_H_ #include <private/dvr/eigen.h> namespace android { namespace dvr { // TODO(skiazyk): Replace all instances of this with Eigen::AlignedBox // Container of two points that define a 2D range. template <class T, int d> struct Range { // Construct an uninitialized Range. Range() {} Range(Eigen::Vector<T, d> p1, Eigen::Vector<T, d> p2) : p1(p1), p2(p2) {} static Range<T, d> FromSize(Eigen::Vector<T, d> p1, Eigen::Vector<T, d> size) { return Range<T, d>(p1, p1 + size); } bool operator==(const Range<T, d>& rhs) const { return p1 == rhs.p1 && p2 == rhs.p2; } Eigen::Vector<T, d> GetMinPoint() const { return p1; } Eigen::Vector<T, d> GetMaxPoint() const { return p2; } Eigen::Vector<T, d> GetSize() const { return p2 - p1; } Eigen::Vector<T, d> p1; Eigen::Vector<T, d> p2; }; typedef Range<int, 2> Range2i; typedef Range<float, 2> Range2f; } // namespace dvr } // namespace android #endif // ANDROID_DVR_RANGE_H_