5 #include "Rivet/Rivet.hh"
6 #include "Rivet/Projection.hh"
34 Cmp(
const T& t1,
const T& t2)
35 : _value(UNDEFINED), _objects(&t1, &t2) { }
40 : _value(x), _objects(0, 0) { }
63 operator int()
const {
72 if (_value == EQUIVALENT) _value = c;
79 void _compare()
const {
80 if (_value == UNDEFINED) {
82 if ( l(*_objects.first, *_objects.second) ) _value = ORDERED;
83 else if ( l(*_objects.second, *_objects.first) ) _value = UNORDERED;
84 else _value = EQUIVALENT;
92 pair<const T*, const T*> _objects;
119 : _value(UNDEFINED), _objects(&p1, &p2)
123 template <
typename U>
125 : _value(x), _objects(0, 0)
132 template <
typename U>
149 operator int()
const {
155 template <
typename U>
158 if (_value == EQUIVALENT) _value = c;
165 void _compare()
const {
166 if (_value == UNDEFINED) {
167 const std::type_info& id1 =
typeid(*_objects.first);
168 const std::type_info& id2 =
typeid(*_objects.second);
169 if (id1.before(id2)) _value = ORDERED;
170 else if (id2.before(id1)) _value = UNORDERED;
172 int c = _objects.first->compare(*_objects.second);
173 if (c < 0) _value = ORDERED;
174 else if (c > 0) _value = UNORDERED;
175 else _value = EQUIVALENT;
186 pair<const Projection*, const Projection*> _objects;
213 Cmp(
const double p1,
const double p2)
214 : _value(UNDEFINED), _numA(p1), _numB(p2)
218 template <
typename U>
220 : _value(x), _numA(0.0), _numB(0.0)
227 template <
typename U>
243 operator int()
const {
249 template <
typename U>
252 if (_value == EQUIVALENT) _value = c;
259 void _compare()
const {
260 if (_value == UNDEFINED) {
262 else if (_numA < _numB) _value = ORDERED;
263 else _value = UNORDERED;
284 template <
typename T>