$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Victor A. Wagner Jr. (vawjr_at_[hidden])
Date: 2004-05-15 08:10:37
what is >> expected to do if the number input it "out of range"?
can we, for example, write  cin >> month; (see below for definition of month)?
should this be using numeric_limits<T>::epsilon() (instead of DBL_EPSILON) 
and would that even work for numbers larger than 2.0?
At Friday 2004-05-14 14:08, you wrote:
>There has been some discussion previously on this list for a ranged type. My
>personal desire was to have new double types in the ranges [0.0, 1.0) and
>[0.0, 1.0] among other things. There are several other uses that I can
>imagine. Feel free to rip this apart or do whatever you want.
>
>#include <float.h>
>#include <assert.h>
>
>namespace boost
>{
>   // a simple range class
>   template<class policy>
>   class range {
>     public:
>       typedef range<policy> self;
>       typedef typename policy::value value;
>       range() : m(min()) { }
>       range(const self& x) : m(x) { }
>       range(const value& x) { m = rangeAssert(x); }
>       static const value min() { return policy::min(); }
>       static const value max() { return policy::max(); }
>       operator value() { return m; }
>       self& operator=(const self& x) { m = x; return *this; }
>       self& operator=(const value& x) { m = rangeAssert(x); return *this; }
>       const value& rangeAssert(const value& x) const { assert(x <= max());
>assert(x >= min()); return x; };
>     private:
>       value m;
>   };
>
>   // some range policies
>   struct RangePolicyZeroToOne {
>     typedef double value;
>     static const value min() { return 0.0; };
>     static const value max() { return 1.0; };
>   };
>
>   struct RangePolicyZeroToBelowOne {
>     typedef double value;
>     static const value min() { return 0.0; };
>     static const value max() { return 1.0 - DBL_EPSILON; };
>   };
>
>   struct RangePolicyPercent {
>     typedef double value;
>     static const value min() { return 0.0; };
>     static const value max() { return 100.0; };
>   };
>
>   struct RangePolicyDegrees {
>     typedef double value;
>     static const value min() { return 0.0; };
>     static const value max() { return 360.0 - DBL_EPSILON; };
>   };
>
>   struct RangePolicyRadians {
>     typedef double value;
>     static const value min() { return 0.0; };
>     static const value max() { return (2 * PI) - DBL_EPSILON; };
>   };
>
>   template <typename T, T min_T, T max_T>
>   struct StaticRange {
>     typedef T value;
>     static const value min() { return min_T; };
>     static const value max() { return max_T; };
>   }
>
>   // some sample types made with ranges
>   typedef range<RangePolicyZeroToOne> Probability;
>   typedef range<RangePolicyZeroToBelowOne> Distribution;
>   typedef range<RangePolicyPercent> Percent;
>   typedef range<RangePolicyDegrees> Degrees;
>   typedef range<RangePolicyRadians> Radians;
>   typedef range<RangePolicyStatic<int, 0, 11> > Month;
>   typedef range<RangePolicyStatic<int, 0, 364> > DayOfTheYear;
>   typedef range<RangePolicyStatic<int, 0, 6> > DayOfTheWeek;
>   typedef range<RangePolicyStatic<char, 'a', 'z'> > LowerCaseLetter;
>   typedef range<RangePolicyStatic<char, 'A', 'Z'> > UpperCaseLetter;
>   typedef range<RangePolicyStatic<char, '0', '9'> > NumberChar;
>};
>
>by Christopher Diggins
>licensed under the Boost software license
>
>http://www.cdiggins.com
>http://www.heron-language.com
>
>_______________________________________________
>Unsubscribe & other changes: http://listarchives.boost.org/mailman/listinfo.cgi/boost
Victor A. Wagner Jr.      http://rudbek.com
The five most dangerous words in the English language:
               "There oughta be a law"