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 109 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 162 of file Cmp.hh.
References Cmp< T >::_objects, Cmp< T >::_value, Rivet::EQUIVALENT, Rivet::ORDERED, Rivet::UNDEFINED, and Rivet::UNORDERED.
00163 : 00164 00165 /// Perform the actual comparison if necessary. 00166 void _compare() const { 00167 if (_value == UNDEFINED) { 00168 const std::type_info& id1 = typeid(*_objects.first); 00169 const std::type_info& id2 = typeid(*_objects.second); 00170 if (id1.before(id2)) _value = ORDERED; 00171 else if (id2.before(id1)) _value = UNORDERED; 00172 else { 00173 int c = _objects.first->compare(*_objects.second); 00174 if (c < 0) _value = ORDERED; 00175 else if (c > 0) _value = UNORDERED; else _value = EQUIVALENT;
operator CmpState | ( | ) | const [inline] |
Automatically convert to an enum.
Definition at line 139 of file Cmp.hh.
References Cmp< T >::_compare(), and Cmp< T >::_value.
00140 : 00141 00142 /// Automatically convert to an enum. operator CmpState() const {
operator int | ( | ) | const [inline] |
Automatically convert to an integer.
Definition at line 146 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 153 of file Cmp.hh.
References Cmp< T >::_compare(), Cmp< T >::_value, and Rivet::EQUIVALENT.
00156 { 00157 _compare();
pair<const Projection*, const Projection*> _objects [private] |