Home | History | Annotate | Download | only in dvr
      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.
     15   Range() {}
     16   Range(Eigen::Vector<T, d> p1, Eigen::Vector<T, d> p2) : p1(p1), p2(p2) {}
     17 
     18   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 
     27   Eigen::Vector<T, d> GetMinPoint() const { return p1; }
     28 
     29   Eigen::Vector<T, d> GetMaxPoint() const { return p2; }
     30 
     31   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