Specialization of Cmp for checking the ordering of two {Projection}s. More...
#include <Cmp.hh>
Public Member Functions | |
operator CmpState () const | |
Automatically convert to an enum. | |
operator int () const | |
Automatically convert to an integer. | |
template<typename U > | |
const Cmp< Projection > & | operator|| (const Cmp< U > &c) const |
If this state is equivalent, set this state to the state of c. | |
Standard constructors and destructors. | |
Cmp (const Projection &p1, const Projection &p2) | |
The default constructor. | |
template<typename U > | |
Cmp (const Cmp< U > &x) | |
The copy constructor. | |
~Cmp () | |
The destructor is not virtual since this is not intended to be a base class. | |
template<typename U > | |
const Cmp< Projection > & | operator= (const Cmp< U > &x) |
The assignment operator. | |
Private Member Functions | |
void | _compare () const |
Perform the actual comparison if necessary. | |
Private Attributes | |
CmpState | _value |
The state of this object. | |
pair< const Projection *, const Projection * > | _objects |
The objects to be compared. |
Specialization of Cmp for checking the ordering of two {Projection}s.
Specialization of the Cmp helper class to be used when checking the ordering of two Projection objects. When implicitly converted to an integer the value will be negative if the two objects used in the constructor are ordered and positive if they are not. Zero will be returned if they are equal. This specialization uses directly the virtual compare() function in the Projection class.
The main usage of the Cmp class is if several variables should be checked for ordering in which case several Cmp objects can be combined as follows: cmp(a1, a2) || cmp(b1, b2) || cmp(c1, c2)
where cmp is a global function for easy creation of Cmp objects.
Definition at line 107 of file Cmp.hh.
Cmp | ( | const Projection & | p1, | |
const Projection & | p2 | |||
) | [inline] |
~Cmp | ( | ) | [inline] |
void _compare | ( | ) | const [inline, private] |
Perform the actual comparison if necessary.
Definition at line 160 of file Cmp.hh.
References Cmp< T >::_objects, Cmp< T >::_value, Rivet::EQUIVALENT, Rivet::ORDERED, Rivet::UNDEFINED, and Rivet::UNORDERED.
00161 : 00162 00163 /// Perform the actual comparison if necessary. 00164 void _compare() const { 00165 if (_value == UNDEFINED) { 00166 const std::type_info& id1 = typeid(*_objects.first); 00167 const std::type_info& id2 = typeid(*_objects.second); 00168 if (id1.before(id2)) _value = ORDERED; 00169 else if (id2.before(id1)) _value = UNORDERED; 00170 else { 00171 int c = _objects.first->compare(*_objects.second); 00172 if (c < 0) _value = ORDERED; 00173 else if (c > 0) _value = UNORDERED; else _value = EQUIVALENT;
operator CmpState | ( | ) | const [inline] |
Automatically convert to an enum.
Definition at line 137 of file Cmp.hh.
References Cmp< T >::_compare(), and Cmp< T >::_value.
00138 : 00139 00140 /// Automatically convert to an enum. operator CmpState() const {
operator int | ( | ) | const [inline] |
Automatically convert to an integer.
Definition at line 144 of file Cmp.hh.
References Cmp< T >::_compare(), and Cmp< T >::_value.
const Cmp<Projection>& operator= | ( | const Cmp< U > & | x | ) | [inline] |
const Cmp<Projection>& operator|| | ( | const Cmp< U > & | c | ) | const [inline] |
If this state is equivalent, set this state to the state of c.
Definition at line 151 of file Cmp.hh.
References Cmp< T >::_compare(), Cmp< T >::_value, and Rivet::EQUIVALENT.
00154 { 00155 _compare();
pair<const Projection*, const Projection*> _objects [private] |