comparator.h

Go to the documentation of this file.
00001 // -*- Mode: C++; tab-width: 2; -*-
00002 // vi: set ts=2:
00003 //
00004 // $Id: comparator.h,v 1.13 2003/08/26 08:04:07 oliver Exp $
00005 //
00006 
00007 #ifndef BALL_CONCEPT_COMPARATOR_H
00008 #define BALL_CONCEPT_COMPARATOR_H
00009 
00010 #ifndef BALL_COMMON_H
00011 # include <BALL/common.h>
00012 #endif
00013 
00014 namespace BALL 
00015 {
00016 
00022   template <typename T>
00023   class Comparator
00024   {
00025     public:
00026 
00030   
00033     Comparator()
00034       ;
00035 
00038     virtual ~Comparator()
00039       ;
00040       
00042 
00045 
00048     virtual bool isEqual(const T& a, const T& b) const
00049       ;
00050 
00053     bool isNotEqual(const T& a, const T& b) const
00054       ;
00055 
00058     virtual bool isLess(const T& a, const T& b) const
00059       ;
00060 
00063     bool isLessOrEqual(const T& a, const T& b) const
00064       ;
00065 
00068     bool isGreaterOrEqual(const T& a, const T& b) const
00069       ;
00070 
00073     bool isGreater(const T& a, const T& b) const
00074       ;
00075 
00081     int operator () (const T& a, const T& b) const
00082       ;
00083       
00085   };
00086 
00087   template <typename T>
00088   inline Comparator<T>::Comparator()
00089     
00090   {
00091   }
00092 
00093   template <typename T>
00094   inline Comparator<T>::~Comparator()
00095     
00096   {
00097   }
00098 
00099   template <class T>
00100   inline bool Comparator<T>::isEqual(const T& a, const T& b) const
00101     
00102   {
00103     return (a == b);
00104   }
00105 
00106   template <class T>
00107   inline bool Comparator<T>::isNotEqual(const T& a, const T& b) const
00108     
00109   {
00110     return !isEqual(a, b);
00111   }
00112 
00113   template <class T>
00114   inline bool Comparator<T>::isLess(const T& a, const T& b) const
00115     
00116   {
00117     return (a < b);
00118   }
00119 
00120   template <class T>
00121   inline bool Comparator<T>::isLessOrEqual(const T& a, const T& b) const
00122     
00123   {
00124     return !isLess(b, a);
00125   }
00126 
00127   template <class T>
00128   inline bool Comparator<T>::isGreaterOrEqual(const T& a, const T& b) const
00129     
00130   {
00131     return !isLess(a, b);
00132   }
00133 
00134   template <class T>
00135   inline bool Comparator<T>::isGreater(const T& a, const T& b) const
00136     
00137   {
00138     return isLess(b, a);
00139   }
00140 
00141   template <class T>
00142   inline int Comparator<T>::operator () (const T& a,const T& b) const
00143     
00144   {
00145     if (isEqual(a, b) == true)
00146     { 
00147       return 0;
00148     } 
00149 
00150     if (isLess(a, b) == true)
00151     { 
00152       return -1;
00153     } 
00154     else 
00155     { 
00156       return 1;
00157     }
00158   }
00159 
00160 } // namespace BALL
00161 
00162 #endif // BALL_CONCEPT_COMPARATOR_H