range: add size query

This commit is contained in:
Danny Robson 2015-02-20 20:49:41 +11:00
parent ab2996745e
commit f77cb9d1d8
2 changed files with 39 additions and 28 deletions

View File

@ -29,7 +29,7 @@
#include <cstdint> #include <cstdint>
//----------------------------------------------------------------------------- ///////////////////////////////////////////////////////////////////////////////
template <typename T> template <typename T>
util::range<T>::range (T _min, T _max): util::range<T>::range (T _min, T _max):
min (_min), min (_min),
@ -39,7 +39,16 @@ util::range<T>::range (T _min, T _max):
} }
//----------------------------------------------------------------------------- ///////////////////////////////////////////////////////////////////////////////
template <typename T>
T
util::range<T>::magnitude (void) const
{
return max - min;
}
///////////////////////////////////////////////////////////////////////////////
template <typename T> template <typename T>
bool bool
util::range<T>::contains (T val) const util::range<T>::contains (T val) const
@ -57,28 +66,6 @@ util::range<T>::contains (const range <T> &r) const
} }
//-----------------------------------------------------------------------------
template <typename T>
void
util::range<T>::sanity (void) const
{
CHECK (min <= max);
}
//-----------------------------------------------------------------------------
namespace util {
template <>
void
range<double>::sanity (void) const
{
if (std::isnan (min) || std::isnan (max))
return;
CHECK (min <= max);
}
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
template <typename T> template <typename T>
T T
@ -100,7 +87,7 @@ util::range<T>::expand (T val)
} }
//----------------------------------------------------------------------------- ///////////////////////////////////////////////////////////////////////////////
template <typename T> template <typename T>
util::range<T>& util::range<T>&
util::range<T>::operator*= (T val) util::range<T>::operator*= (T val)
@ -121,7 +108,7 @@ util::range<T>::operator* (T val) const
} }
//----------------------------------------------------------------------------- ///////////////////////////////////////////////////////////////////////////////
namespace util { namespace util {
template <> template <>
double double
@ -150,7 +137,7 @@ util::range<T>::random (void) const
} }
//----------------------------------------------------------------------------- ///////////////////////////////////////////////////////////////////////////////
namespace util { namespace util {
template <> template <>
bool bool
@ -180,7 +167,7 @@ util::range<T>::operator ==(const util::range<T> &rhs) const
} }
//----------------------------------------------------------------------------- ///////////////////////////////////////////////////////////////////////////////
template <typename T> template <typename T>
const util::range<T> const util::range<T>
util::range<T>::UNLIMITED (std::numeric_limits<T>::has_infinity ? -std::numeric_limits<T>::infinity () : util::range<T>::UNLIMITED (std::numeric_limits<T>::has_infinity ? -std::numeric_limits<T>::infinity () :
@ -201,6 +188,28 @@ const util::range<T>
util::range<T>::UNIT (0.0, 1.0); util::range<T>::UNIT (0.0, 1.0);
///////////////////////////////////////////////////////////////////////////////
template <typename T>
void
util::range<T>::sanity (void) const
{
CHECK (min <= max);
}
//-----------------------------------------------------------------------------
namespace util {
template <>
void
range<double>::sanity (void) const
{
if (std::isnan (min) || std::isnan (max))
return;
CHECK (min <= max);
}
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
namespace util { namespace util {
template struct range<double>; template struct range<double>;

View File

@ -36,6 +36,8 @@ namespace util {
range (T _min, T _max); range (T _min, T _max);
T magnitude (void) const;
/// Check whether value falls within this range (inclusive) /// Check whether value falls within this range (inclusive)
bool contains (T val) const; bool contains (T val) const;
/// Check whether a range falls completely within (inclusive) this range /// Check whether a range falls completely within (inclusive) this range