[5284]  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_ */

