| 1 | // comparable_v.hpp, created on 30.06.2009 by Sebastian Mies
 | 
|---|
| 2 | 
 | 
|---|
| 3 | #ifndef COMPARABLE_V_HPP_
 | 
|---|
| 4 | #define COMPARABLE_V_HPP_
 | 
|---|
| 5 | 
 | 
|---|
| 6 | #include "vfacade.hpp"
 | 
|---|
| 7 | 
 | 
|---|
| 8 | /**
 | 
|---|
| 9 |  * TODO: Doc
 | 
|---|
| 10 |  *
 | 
|---|
| 11 |  * @author Sebastian Mies <mies@tm.uka.de>
 | 
|---|
| 12 |  */
 | 
|---|
| 13 | class comparable_v {
 | 
|---|
| 14 | public:
 | 
|---|
| 15 |         //--- comparable_v --------------------------------------------------------
 | 
|---|
| 16 | 
 | 
|---|
| 17 |         /// implements comparison operators
 | 
|---|
| 18 |         virtual int compare_to(const comparable_v& rhs) const = 0;
 | 
|---|
| 19 | 
 | 
|---|
| 20 |         /// convenience method for comparison
 | 
|---|
| 21 |         inline int compare_to(const comparable_v* rhs) const {
 | 
|---|
| 22 |                 return compare_to(*rhs);
 | 
|---|
| 23 |         }
 | 
|---|
| 24 | 
 | 
|---|
| 25 |         /// convenience method for comparison
 | 
|---|
| 26 |         inline bool operator==(const comparable_v& rhs) const {
 | 
|---|
| 27 |                 return compare_to(rhs) == 0;
 | 
|---|
| 28 |         }
 | 
|---|
| 29 | 
 | 
|---|
| 30 |         /// convenience method for comparison
 | 
|---|
| 31 |         inline bool operator!=(const comparable_v& rhs) const {
 | 
|---|
| 32 |                 return compare_to(rhs) != 0;
 | 
|---|
| 33 |         }
 | 
|---|
| 34 | 
 | 
|---|
| 35 |         /// convenience method for comparison
 | 
|---|
| 36 |         inline bool operator<(const comparable_v& rhs) const {
 | 
|---|
| 37 |                 return compare_to(rhs) < 0;
 | 
|---|
| 38 |         }
 | 
|---|
| 39 | 
 | 
|---|
| 40 |         /// convenience method for comparison
 | 
|---|
| 41 |         inline bool operator<=(const comparable_v& rhs) const {
 | 
|---|
| 42 |                 return compare_to(rhs) <= 0;
 | 
|---|
| 43 |         }
 | 
|---|
| 44 | 
 | 
|---|
| 45 |         /// convenience method for comparison
 | 
|---|
| 46 |         inline bool operator>(const comparable_v& rhs) const {
 | 
|---|
| 47 |                 return compare_to(rhs) > 0;
 | 
|---|
| 48 |         }
 | 
|---|
| 49 | 
 | 
|---|
| 50 |         /// convenience method for comparison
 | 
|---|
| 51 |         inline bool operator>=(const comparable_v& rhs) const {
 | 
|---|
| 52 |                 return compare_to(rhs) >= 0;
 | 
|---|
| 53 |         }
 | 
|---|
| 54 | };
 | 
|---|
| 55 | 
 | 
|---|
| 56 | typedef vfacade<comparable_v> comparable_vf;
 | 
|---|
| 57 | 
 | 
|---|
| 58 | template<class NonVirtual, class AdaptorType>
 | 
|---|
| 59 | class vobject_hull<NonVirtual, comparable_v, AdaptorType> : public comparable_v {
 | 
|---|
| 60 | private:
 | 
|---|
| 61 |         typename AdaptorType::template adaptor_type<NonVirtual> obj;
 | 
|---|
| 62 | 
 | 
|---|
| 63 | public:
 | 
|---|
| 64 |         template<typename T>
 | 
|---|
| 65 |         explicit vobject_hull(T& obj) :
 | 
|---|
| 66 |                 obj(obj) {
 | 
|---|
| 67 |         }
 | 
|---|
| 68 | 
 | 
|---|
| 69 |         explicit vobject_hull() :
 | 
|---|
| 70 |                 obj() {
 | 
|---|
| 71 |         }
 | 
|---|
| 72 | 
 | 
|---|
| 73 |         //--- comparable_v --------------------------------------------------------
 | 
|---|
| 74 | 
 | 
|---|
| 75 |         /// implements comparison operators
 | 
|---|
| 76 |         virtual int compare_to(const comparable_v& rhs) const {
 | 
|---|
| 77 |                 return obj->compare_to(rhs);
 | 
|---|
| 78 |         }
 | 
|---|
| 79 | };
 | 
|---|
| 80 | 
 | 
|---|
| 81 | 
 | 
|---|
| 82 | 
 | 
|---|
| 83 | #endif /* COMPARABLE_V_HPP_ */
 | 
|---|