/* ----------------------------------------------------------------------------- GSFramework Copyright 2001-2013 Emmanuel Julien. All Rights Reserved. ----------------------------------------------------------------------------- */ #ifndef __NRANGE__ #define __NRANGE__ #include "math/nrange.h" namespace GS { /*! @short Range. @author Emmanuel Julien (ejulien@gsworks.fr) */ template struct Range { T start, end; T valueRange() const { return end - start; } bool inRange(const T &v) const { return (start < end) ? ((v >= start) && (v < end)) : ((v >= end) && (v < start)); } void sort() { if (start > end) { T t = start; start = end; end = t; } } static Range Intersection(const Range &a, const Range &b) { if ((a.end < b.start) || (a.start > b.end)) return Range (); return Range(a.start > b.start ? a.start : b.start, a.end < b.end ? a.end : b.end); } static Range Union(const Range &a, const Range &b) { return Range(a.start < b.start ? a.start : b.start, a.end > b.end ? a.end : b.end); } void Set(const T &s, const T &e) { start = s; end = e; } template Range convert() const { return Range (N(start), N(end)); } Range(const T &s, const T &e) : start(s), end(e) {} Range() : start(0), end(0) {} }; } // GS #endif // __NRANGE__