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& set(double floor_val, double ceil_val);
48 Interval& set(double floor_val, OPERATOR floor_op, double ceil_val, OPERATOR ceil_op);
49 Interval& operator <(double value);
50 Interval& operator <=(double value);
51 Interval& operator >(double value);
52 Interval& operator >=(double value);
53 Interval& operator <(TYPES value);
54 Interval& operator <=(TYPES value);
55 Interval& operator >(TYPES value);
56 Interval& operator >=(TYPES value);
57 int int_floor() const;
58 int int_floor(int minval) const;
60 int int_ceil(int maxval) const;
61 bool includes(double val) const;
65 friend class Interval_acc;
66 friend Interval_acc operator <(double val, Interval &rng);
67 friend Interval_acc operator <=(double val, Interval &rng);
68 friend Interval_acc operator >(double val, Interval &rng);
69 friend Interval_acc operator >=(double val, Interval &rng);
70 friend Interval_acc operator <(TYPES val, Interval &rng);
71 friend Interval_acc operator <=(TYPES val, Interval &rng);
72 friend Interval_acc operator >(TYPES val, Interval &rng);
73 friend Interval_acc operator >=(TYPES val, Interval &rng);
77 class Interval_acc : public Interval {
81 Interval_acc(Interval &rng);
83 Interval& operator <(double value);
84 Interval& operator <=(double value);
85 Interval& operator >(double value);
86 Interval& operator >=(double value);
87 Interval& operator <(TYPES value);
88 Interval& operator <=(TYPES value);
89 Interval& operator >(TYPES value);
90 Interval& operator >=(TYPES value);
93 Interval_acc operator <(double val, Interval &rng);
94 Interval_acc operator <=(double val, Interval &rng);
95 Interval_acc operator >(double val, Interval &rng);
96 Interval_acc operator >=(double val, Interval &rng);
97 Interval_acc operator <(Interval::TYPES val, Interval &rng);
98 Interval_acc operator <=(Interval::TYPES val, Interval &rng);
99 Interval_acc operator >(Interval::TYPES val, Interval &rng);
100 Interval_acc operator >=(Interval::TYPES val, Interval &rng);
103 } /* <- namespace Psycholops */