1 #ifndef ANDROID_DVR_RANGE_H_
2 #define ANDROID_DVR_RANGE_H_
3 
4 #include <private/dvr/eigen.h>
5 
6 namespace android {
7 namespace dvr {
8 
9 // TODO(skiazyk): Replace all instances of this with Eigen::AlignedBox
10 
11 // Container of two points that define a 2D range.
12 template <class T, int d>
13 struct Range {
14   // Construct an uninitialized Range.
RangeRange15   Range() {}
RangeRange16   Range(Eigen::Vector<T, d> p1, Eigen::Vector<T, d> p2) : p1(p1), p2(p2) {}
17 
FromSizeRange18   static Range<T, d> FromSize(Eigen::Vector<T, d> p1,
19                               Eigen::Vector<T, d> size) {
20     return Range<T, d>(p1, p1 + size);
21   }
22 
23   bool operator==(const Range<T, d>& rhs) const {
24     return p1 == rhs.p1 && p2 == rhs.p2;
25   }
26 
GetMinPointRange27   Eigen::Vector<T, d> GetMinPoint() const { return p1; }
28 
GetMaxPointRange29   Eigen::Vector<T, d> GetMaxPoint() const { return p2; }
30 
GetSizeRange31   Eigen::Vector<T, d> GetSize() const { return p2 - p1; }
32 
33   Eigen::Vector<T, d> p1;
34   Eigen::Vector<T, d> p2;
35 };
36 
37 typedef Range<int, 2> Range2i;
38 typedef Range<float, 2> Range2f;
39 
40 }  // namespace dvr
41 }  // namespace android
42 
43 #endif  // ANDROID_DVR_RANGE_H_
44