21    boost::arithmetic<UnitInterval>,
 
   22    boost::arithmetic<UnitInterval, double>,
 
   23    boost::totally_ordered<UnitInterval>
 
   26    constexpr UnitInterval() : UnitInterval(0.0) {}
 
   27    constexpr explicit UnitInterval(
double v) : m_value(clamp(v)) {}
 
   28    UnitInterval(
const UnitInterval&) = 
default;
 
   29    UnitInterval& operator=(
const UnitInterval&) = 
default;
 
   32    UnitInterval& operator+=(
const UnitInterval&);
 
   33    UnitInterval& operator-=(
const UnitInterval&);
 
   34    UnitInterval& operator*=(
const UnitInterval&);
 
   35    UnitInterval& operator/=(
const UnitInterval&);
 
   37    UnitInterval& operator+=(
double);
 
   38    UnitInterval& operator-=(
double);
 
   39    UnitInterval& operator*=(
double);
 
   40    UnitInterval& operator/=(
double);
 
   43    bool operator<(
const UnitInterval& other) 
const;
 
   44    bool operator==(
const UnitInterval& other) 
const;
 
   46    double value()
 const { 
return m_value; }
 
   47    UnitInterval complement() 
const;
 
   50    constexpr static double clamp(
double v)
 
   52        return (v > 1.0 ? 1.0 : (v < 0.0 ? 0.0 : v));
 
   54    UnitInterval& clamp();