2 * psychlops_math_range.h
3 * Psychlops Standard Library (Universal)
5 * Last Modified 2005/07/04 by Kenchi HOSOKAWA
6 * (C) 2005 Kenchi HOSOKAWA, Kazushi MARUYA, Takao SATO
9 #ifndef HEADER_PSYCHLOPS_MATH_RANGE
10 #define HEADER_PSYCHLOPS_MATH_RANGE
14 #include "../ApplicationInterfaces/psychlops_code.h"
20 typedef Interval Range;
24 enum TYPES { NaN, NORMAL, INF, NINF };
25 enum OPERATOR { CLOSE, OPEN };
32 INTERVAL_() : type(INF), op(CLOSE), value(0.0) {}
33 INTERVAL_(TYPES val) : type(val), op(CLOSE), value(0.0) {}
34 INTERVAL_(double val) : type(NORMAL), op(CLOSE), value(val) {}
35 INTERVAL_(double val, OPERATOR op) : type(NORMAL), op(op), value(val) {}
36 INTERVAL_& set(TYPES mm, OPERATOR cop) { type=mm; op=cop; value=0.0; return *this; }
37 INTERVAL_& set(double value_, OPERATOR cop) { type=NORMAL; op=cop; value=value_; return *this; }
38 operator double() { if(type==NORMAL){return value;} else {throw type;return 0.0;} }
44 Interval(double floor_val, double ceil_val);
45 Interval(double floor_val, OPERATOR floor_op, double ceil_val, OPERATOR ceil_op);
47 Interval& operator <(double value);
48 Interval& operator <=(double value);
49 Interval& operator >(double value);
50 Interval& operator >=(double value);
51 Interval& operator <(TYPES value);
52 Interval& operator <=(TYPES value);
53 Interval& operator >(TYPES value);
54 Interval& operator >=(TYPES value);
55 int int_floor() const;
56 int int_floor(int minval) const;
58 int int_ceil(int maxval) const;
59 bool includes(double val) const;
63 friend class Interval_acc;
64 friend Interval_acc operator <(double val, Interval &rng);
65 friend Interval_acc operator <=(double val, Interval &rng);
66 friend Interval_acc operator >(double val, Interval &rng);
67 friend Interval_acc operator >=(double val, Interval &rng);
68 friend Interval_acc operator <(TYPES val, Interval &rng);
69 friend Interval_acc operator <=(TYPES val, Interval &rng);
70 friend Interval_acc operator >(TYPES val, Interval &rng);
71 friend Interval_acc operator >=(TYPES val, Interval &rng);
75 class Interval_acc : public Interval {
79 Interval_acc(Interval &rng);
81 Interval& operator <(double value);
82 Interval& operator <=(double value);
83 Interval& operator >(double value);
84 Interval& operator >=(double value);
85 Interval& operator <(TYPES value);
86 Interval& operator <=(TYPES value);
87 Interval& operator >(TYPES value);
88 Interval& operator >=(TYPES value);
91 Interval_acc operator <(double val, Interval &rng);
92 Interval_acc operator <=(double val, Interval &rng);
93 Interval_acc operator >(double val, Interval &rng);
94 Interval_acc operator >=(double val, Interval &rng);
95 Interval_acc operator <(Interval::TYPES val, Interval &rng);
96 Interval_acc operator <=(Interval::TYPES val, Interval &rng);
97 Interval_acc operator >(Interval::TYPES val, Interval &rng);
98 Interval_acc operator >=(Interval::TYPES val, Interval &rng);
101 } /* <- namespace Psycholops */