Chris@16
|
1 /* Boost interval/compare/explicit.hpp template implementation file
|
Chris@16
|
2 *
|
Chris@16
|
3 * Copyright 2000 Jens Maurer
|
Chris@16
|
4 * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
|
Chris@16
|
5 *
|
Chris@16
|
6 * Distributed under the Boost Software License, Version 1.0.
|
Chris@16
|
7 * (See accompanying file LICENSE_1_0.txt or
|
Chris@16
|
8 * copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
9 */
|
Chris@16
|
10
|
Chris@16
|
11 #ifndef BOOST_NUMERIC_INTERVAL_COMPARE_EXPLICIT_HPP
|
Chris@16
|
12 #define BOOST_NUMERIC_INTERVAL_COMPARE_EXPLICIT_HPP
|
Chris@16
|
13
|
Chris@16
|
14 #include <boost/numeric/interval/detail/interval_prototype.hpp>
|
Chris@16
|
15
|
Chris@16
|
16 namespace boost {
|
Chris@16
|
17 namespace numeric {
|
Chris@16
|
18 namespace interval_lib {
|
Chris@16
|
19
|
Chris@16
|
20 /*
|
Chris@16
|
21 * Certainly... operations
|
Chris@16
|
22 */
|
Chris@16
|
23
|
Chris@16
|
24 template<class T, class Policies1, class Policies2> inline
|
Chris@16
|
25 bool cerlt(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
|
Chris@16
|
26 {
|
Chris@16
|
27 return x.upper() < y.lower();
|
Chris@16
|
28 }
|
Chris@16
|
29
|
Chris@16
|
30 template<class T, class Policies> inline
|
Chris@16
|
31 bool cerlt(const interval<T, Policies>& x, const T& y)
|
Chris@16
|
32 {
|
Chris@16
|
33 return x.upper() < y;
|
Chris@16
|
34 }
|
Chris@16
|
35
|
Chris@16
|
36 template<class T, class Policies> inline
|
Chris@16
|
37 bool cerlt(const T& x, const interval<T, Policies>& y)
|
Chris@16
|
38 {
|
Chris@16
|
39 return x < y.lower();
|
Chris@16
|
40 }
|
Chris@16
|
41
|
Chris@16
|
42 template<class T, class Policies1, class Policies2> inline
|
Chris@16
|
43 bool cerle(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
|
Chris@16
|
44 {
|
Chris@16
|
45 return x.upper() <= y.lower();
|
Chris@16
|
46 }
|
Chris@16
|
47
|
Chris@16
|
48 template<class T, class Policies> inline
|
Chris@16
|
49 bool cerle(const interval<T, Policies>& x, const T& y)
|
Chris@16
|
50 {
|
Chris@16
|
51 return x.upper() <= y;
|
Chris@16
|
52 }
|
Chris@16
|
53
|
Chris@16
|
54 template<class T, class Policies> inline
|
Chris@16
|
55 bool cerle(const T& x, const interval<T, Policies>& y)
|
Chris@16
|
56 {
|
Chris@16
|
57 return x <= y.lower();
|
Chris@16
|
58 }
|
Chris@16
|
59
|
Chris@16
|
60 template<class T, class Policies1, class Policies2> inline
|
Chris@16
|
61 bool cergt(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
|
Chris@16
|
62 {
|
Chris@16
|
63 return x.lower() > y.upper();
|
Chris@16
|
64 }
|
Chris@16
|
65
|
Chris@16
|
66 template<class T, class Policies> inline
|
Chris@16
|
67 bool cergt(const interval<T, Policies>& x, const T& y)
|
Chris@16
|
68 {
|
Chris@16
|
69 return x.lower() > y;
|
Chris@16
|
70 }
|
Chris@16
|
71
|
Chris@16
|
72 template<class T, class Policies> inline
|
Chris@16
|
73 bool cergt(const T& x, const interval<T, Policies>& y)
|
Chris@16
|
74 {
|
Chris@16
|
75 return x > y.upper();
|
Chris@16
|
76 }
|
Chris@16
|
77
|
Chris@16
|
78 template<class T, class Policies1, class Policies2> inline
|
Chris@16
|
79 bool cerge(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
|
Chris@16
|
80 {
|
Chris@16
|
81 return x.lower() >= y.upper();
|
Chris@16
|
82 }
|
Chris@16
|
83
|
Chris@16
|
84 template<class T, class Policies> inline
|
Chris@16
|
85 bool cerge(const interval<T, Policies>& x, const T& y)
|
Chris@16
|
86 {
|
Chris@16
|
87 return x.lower() >= y;
|
Chris@16
|
88 }
|
Chris@16
|
89
|
Chris@16
|
90 template<class T, class Policies> inline
|
Chris@16
|
91 bool cerge(const T& x, const interval<T, Policies>& y)
|
Chris@16
|
92 {
|
Chris@16
|
93 return x >= y.upper();
|
Chris@16
|
94 }
|
Chris@16
|
95
|
Chris@16
|
96 template<class T, class Policies1, class Policies2> inline
|
Chris@16
|
97 bool cereq(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
|
Chris@16
|
98 {
|
Chris@16
|
99 return x.lower() == y.upper() && y.lower() == x.upper();
|
Chris@16
|
100 }
|
Chris@16
|
101
|
Chris@16
|
102 template<class T, class Policies> inline
|
Chris@16
|
103 bool cereq(const interval<T, Policies>& x, const T& y)
|
Chris@16
|
104 {
|
Chris@16
|
105 return x.lower() == y && x.upper() == y;
|
Chris@16
|
106 }
|
Chris@16
|
107
|
Chris@16
|
108 template<class T, class Policies> inline
|
Chris@16
|
109 bool cereq(const T& x, const interval<T, Policies>& y)
|
Chris@16
|
110 {
|
Chris@16
|
111 return x == y.lower() && x == y.upper();
|
Chris@16
|
112 }
|
Chris@16
|
113
|
Chris@16
|
114 template<class T, class Policies1, class Policies2> inline
|
Chris@16
|
115 bool cerne(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
|
Chris@16
|
116 {
|
Chris@16
|
117 return x.upper() < y.lower() || y.upper() < x.lower();
|
Chris@16
|
118 }
|
Chris@16
|
119
|
Chris@16
|
120 template<class T, class Policies> inline
|
Chris@16
|
121 bool cerne(const interval<T, Policies>& x, const T& y)
|
Chris@16
|
122 {
|
Chris@16
|
123 return x.upper() < y || y < x.lower();
|
Chris@16
|
124 }
|
Chris@16
|
125
|
Chris@16
|
126 template<class T, class Policies> inline
|
Chris@16
|
127 bool cerne(const T& x, const interval<T, Policies>& y)
|
Chris@16
|
128 {
|
Chris@16
|
129 return x < y.lower() || y.upper() < x;
|
Chris@16
|
130 }
|
Chris@16
|
131
|
Chris@16
|
132 /*
|
Chris@16
|
133 * Possibly... comparisons
|
Chris@16
|
134 */
|
Chris@16
|
135
|
Chris@16
|
136 template<class T, class Policies1, class Policies2> inline
|
Chris@16
|
137 bool poslt(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
|
Chris@16
|
138 {
|
Chris@16
|
139 return x.lower() < y.upper();
|
Chris@16
|
140 }
|
Chris@16
|
141
|
Chris@16
|
142 template<class T, class Policies> inline
|
Chris@16
|
143 bool poslt(const interval<T, Policies>& x, const T& y)
|
Chris@16
|
144 {
|
Chris@16
|
145 return x.lower() < y;
|
Chris@16
|
146 }
|
Chris@16
|
147
|
Chris@16
|
148 template<class T, class Policies> inline
|
Chris@16
|
149 bool poslt(const T& x, const interval<T, Policies>& y)
|
Chris@16
|
150 {
|
Chris@16
|
151 return x < y.upper();
|
Chris@16
|
152 }
|
Chris@16
|
153
|
Chris@16
|
154 template<class T, class Policies1, class Policies2> inline
|
Chris@16
|
155 bool posle(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
|
Chris@16
|
156 {
|
Chris@16
|
157 return x.lower() <= y.upper();
|
Chris@16
|
158 }
|
Chris@16
|
159
|
Chris@16
|
160 template<class T, class Policies> inline
|
Chris@16
|
161 bool posle(const interval<T, Policies>& x, const T& y)
|
Chris@16
|
162 {
|
Chris@16
|
163 return x.lower() <= y;
|
Chris@16
|
164 }
|
Chris@16
|
165
|
Chris@16
|
166 template<class T, class Policies> inline
|
Chris@16
|
167 bool posle(const T& x, const interval<T, Policies>& y)
|
Chris@16
|
168 {
|
Chris@16
|
169 return x <= y.upper();
|
Chris@16
|
170 }
|
Chris@16
|
171
|
Chris@16
|
172 template<class T, class Policies1, class Policies2> inline
|
Chris@16
|
173 bool posgt(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
|
Chris@16
|
174 {
|
Chris@16
|
175 return x.upper() > y.lower();
|
Chris@16
|
176 }
|
Chris@16
|
177
|
Chris@16
|
178 template<class T, class Policies> inline
|
Chris@16
|
179 bool posgt(const interval<T, Policies>& x, const T& y)
|
Chris@16
|
180 {
|
Chris@16
|
181 return x.upper() > y;
|
Chris@16
|
182 }
|
Chris@16
|
183
|
Chris@16
|
184 template<class T, class Policies> inline
|
Chris@16
|
185 bool posgt(const T& x, const interval<T, Policies> & y)
|
Chris@16
|
186 {
|
Chris@16
|
187 return x > y.lower();
|
Chris@16
|
188 }
|
Chris@16
|
189
|
Chris@16
|
190 template<class T, class Policies1, class Policies2> inline
|
Chris@16
|
191 bool posge(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
|
Chris@16
|
192 {
|
Chris@16
|
193 return x.upper() >= y.lower();
|
Chris@16
|
194 }
|
Chris@16
|
195
|
Chris@16
|
196 template<class T, class Policies> inline
|
Chris@16
|
197 bool posge(const interval<T, Policies>& x, const T& y)
|
Chris@16
|
198 {
|
Chris@16
|
199 return x.upper() >= y;
|
Chris@16
|
200 }
|
Chris@16
|
201
|
Chris@16
|
202 template<class T, class Policies> inline
|
Chris@16
|
203 bool posge(const T& x, const interval<T, Policies>& y)
|
Chris@16
|
204 {
|
Chris@16
|
205 return x >= y.lower();
|
Chris@16
|
206 }
|
Chris@16
|
207
|
Chris@16
|
208 template<class T, class Policies1, class Policies2> inline
|
Chris@16
|
209 bool poseq(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
|
Chris@16
|
210 {
|
Chris@16
|
211 return x.upper() >= y.lower() && y.upper() >= x.lower();
|
Chris@16
|
212 }
|
Chris@16
|
213
|
Chris@16
|
214 template<class T, class Policies> inline
|
Chris@16
|
215 bool poseq(const interval<T, Policies>& x, const T& y)
|
Chris@16
|
216 {
|
Chris@16
|
217 return x.upper() >= y && y >= x.lower();
|
Chris@16
|
218 }
|
Chris@16
|
219
|
Chris@16
|
220 template<class T, class Policies> inline
|
Chris@16
|
221 bool poseq(const T& x, const interval<T, Policies>& y)
|
Chris@16
|
222 {
|
Chris@16
|
223 return x >= y.lower() && y.upper() >= x;
|
Chris@16
|
224 }
|
Chris@16
|
225
|
Chris@16
|
226 template<class T, class Policies1, class Policies2> inline
|
Chris@16
|
227 bool posne(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
|
Chris@16
|
228 {
|
Chris@16
|
229 return x.upper() != y.lower() || y.upper() != x.lower();
|
Chris@16
|
230 }
|
Chris@16
|
231
|
Chris@16
|
232 template<class T, class Policies> inline
|
Chris@16
|
233 bool posne(const interval<T, Policies>& x, const T& y)
|
Chris@16
|
234 {
|
Chris@16
|
235 return x.upper() != y || y != x.lower();
|
Chris@16
|
236 }
|
Chris@16
|
237
|
Chris@16
|
238 template<class T, class Policies> inline
|
Chris@16
|
239 bool posne(const T& x, const interval<T, Policies>& y)
|
Chris@16
|
240 {
|
Chris@16
|
241 return x != y.lower() || y.upper() != x;
|
Chris@16
|
242 }
|
Chris@16
|
243
|
Chris@16
|
244 } // namespace interval_lib
|
Chris@16
|
245 } // namespace numeric
|
Chris@16
|
246 } //namespace boost
|
Chris@16
|
247
|
Chris@16
|
248 #endif // BOOST_NUMERIC_INTERVAL_COMPARE_EXPLICIT_HPP
|