Jpp
JComparator.hh
Go to the documentation of this file.
1 #ifndef __JLANG__JCOMPARATOR__
2 #define __JLANG__JCOMPARATOR__
3 
4 #include "JLang/JClass.hh"
5 #include "JLang/JComparison.hh"
6 
7 
8 /**
9  * \author mdejong
10  */
11 
12 namespace JLANG {}
13 namespace JPP { using namespace JLANG; }
14 
15 namespace JLANG {
16 
17  /**
18  * Template definition of auxiliary class to compare objects.
19  * The first template argument refers to the data member or member method and
20  * the second template argument to the comparator of the corresponding values.
21  */
22  template<class JTypename_t, class JComparator_t = JComparison::lt>
23  class JComparator;
24 
25 
26  /**
27  * Template specialisation of JComparator for comparison between values of data members.
28  */
29  template<class T, class JResult_t, class JComparator_t>
30  class JComparator<JResult_t T::*, JComparator_t> {
31  public:
32 
33  typedef JResult_t T::*data_member; //!< Type definition of data member
34  typedef JComparator_t comparator_type; //!< Type definition of comparator
35 
36 
37  /**
38  * Constructor.
39  *
40  * \param member pointer to data member
41  * \param comparator comparator method
42  */
44  const comparator_type& comparator = comparator_type()) :
45  __member (member),
46  __comparator(comparator)
47  {}
48 
49 
50  /**
51  * Compare objets.
52  *
53  * \param first first object
54  * \param second second object
55  * \return result of comparison of return values
56  */
57  bool operator()(const T& first, const T& second) const
58  {
59  return __comparator(first.*__member, second.*__member);
60  }
61 
62 
63  /**
64  * Compare objet to value.
65  *
66  * \param first first object
67  * \param second second value
68  * \return result of comparison of return values
69  */
70  bool operator()(const T& first, typename JClass<JResult_t>::argument_type second) const
71  {
72  return __comparator(first.*__member, second);
73  }
74 
75  protected:
78  };
79 
80 
81  /**
82  * Template specialisation of JComparator for comparison between return values of member methods.
83  */
84  template<class T, class JResult_t, class JComparator_t>
85  class JComparator<JResult_t (T::*)() const, JComparator_t> {
86  public:
87 
88  typedef JResult_t (T::*member_method)() const; //!< Type definition of member method
89  typedef JComparator_t comparator_type; //!< Type definition of comparator
90 
91 
92  /**
93  * Constructor.
94  *
95  * \param function pointer to member method
96  * \param comparator comparator method
97  */
98  JComparator(member_method function,
99  const comparator_type& comparator = comparator_type()) :
100  __function (function),
101  __comparator(comparator)
102  {}
103 
104 
105  /**
106  * Compare objets.
107  *
108  * \param first first object
109  * \param second second object
110  * \return result of comparison of return values
111  */
112  bool operator()(const T& first, const T& second) const
113  {
114  return __comparator((first.*__function)(), (second.*__function)());
115  }
116 
117 
118  /**
119  * Compare objet to value.
120  *
121  * \param first first object
122  * \param second second value
123  * \return result of comparison of return values
124  */
125  bool operator()(const T& first, typename JClass<JResult_t>::argument_type second) const
126  {
127  return __comparator((first.*__function)(), second);
128  }
129 
130  protected:
131  member_method __function;
133  };
134 
135 
136  /**
137  * Helper method to create comparator between values of data member.
138  *
139  * \param member pointer to data member
140  * \return comparator between objects
141  */
142  template<class T, class JResult_t>
144  {
146  }
147 
148 
149  /**
150  * Helper method to create comparator between values of data member.
151  *
152  * \param member pointer to data member
153  * \param comparator comparator between values of data members
154  * \return comparator between objects
155  */
156  template<class T, class JResult_t, class JComparator_t>
158  const JComparator_t& comparator)
159  {
160  return JComparator<JResult_t T::*, JComparator_t>(member, comparator);
161  }
162 
163 
164  /**
165  * Helper method to create comparator between return values of member method.
166  *
167  * \param function pointer to member method
168  * \return comparator between objects
169  */
170  template<class T, class JResult_t>
171  JComparator<JResult_t (T::*)() const, JComparison::lt> make_comparator(JResult_t (T::*function)() const)
172  {
174  }
175 
176 
177  /**
178  * Helper method to create comparator between return values of member method.
179  *
180  * \param function pointer to member method
181  * \param comparator comparator between return values
182  * \return comparator between objects
183  */
184  template<class T, class JResult_t, class JComparator_t>
185  JComparator<JResult_t (T::*)() const, JComparator_t> make_comparator(JResult_t (T::*function)() const,
186  const JComparator_t& comparator)
187  {
188  return JComparator<JResult_t (T::*)() const, JComparator_t>(function, comparator);
189  }
190 }
191 
192 #endif
JLANG::JComparator< JResult_t T::*, JComparator_t >::operator()
bool operator()(const T &first, const T &second) const
Compare objets.
Definition: JComparator.hh:57
JLANG::JComparator< JResult_t(T::*)() const, JComparator_t >::__comparator
comparator_type __comparator
Definition: JComparator.hh:132
JLANG::JComparator< JResult_t T::*, JComparator_t >::__member
data_member __member
Definition: JComparator.hh:76
JLANG::JComparator< JResult_t T::*, JComparator_t >::data_member
JResult_t T::* data_member
Type definition of data member.
Definition: JComparator.hh:33
JComparison.hh
JLANG::JClass::argument_type
JArgument< T >::argument_type argument_type
Definition: JClass.hh:82
JLANG::JComparator< JResult_t T::*, JComparator_t >
Template specialisation of JComparator for comparison between values of data members.
Definition: JComparator.hh:30
JLANG::JComparison::lt
Less than.
Definition: JComparison.hh:57
JLANG::JComparator< JResult_t(T::*)() const, JComparator_t >::operator()
bool operator()(const T &first, typename JClass< JResult_t >::argument_type second) const
Compare objet to value.
Definition: JComparator.hh:125
JLANG::JComparator< JResult_t T::*, JComparator_t >::comparator_type
JComparator_t comparator_type
Type definition of comparator.
Definition: JComparator.hh:34
JPP
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Definition: JAAnetToolkit.hh:37
JLANG::JComparator< JResult_t(T::*)() const, JComparator_t >::comparator_type
JComparator_t comparator_type
Type definition of comparator.
Definition: JComparator.hh:89
JLANG::JComparator< JResult_t T::*, JComparator_t >::JComparator
JComparator(data_member member, const comparator_type &comparator=comparator_type())
Constructor.
Definition: JComparator.hh:43
JLANG::JComparator
Template definition of auxiliary class to compare objects.
Definition: JComparator.hh:23
JLANG::JComparator< JResult_t(T::*)() const, JComparator_t >::JComparator
JComparator(member_method function, const comparator_type &comparator=comparator_type())
Constructor.
Definition: JComparator.hh:98
JLANG::JComparator< JResult_t(T::*)() const, JComparator_t >
Template specialisation of JComparator for comparison between return values of member methods.
Definition: JComparator.hh:85
JLANG::make_comparator
JComparator< JResult_t(T::*)() const, JComparator_t > make_comparator(JResult_t(T::*function)() const, const JComparator_t &comparator)
Helper method to create comparator between return values of member method.
Definition: JComparator.hh:185
JClass.hh
JLANG::JComparator< JResult_t T::*, JComparator_t >::__comparator
comparator_type __comparator
Definition: JComparator.hh:77
JLANG::JComparator< JResult_t(T::*)() const, JComparator_t >::__function
member_method __function
Definition: JComparator.hh:131
JLANG::JComparator< JResult_t T::*, JComparator_t >::operator()
bool operator()(const T &first, typename JClass< JResult_t >::argument_type second) const
Compare objet to value.
Definition: JComparator.hh:70
JLANG
Auxiliary classes and methods for language specific functionality.
Definition: JAbstractClass.hh:10
JLANG::JComparator< JResult_t(T::*)() const, JComparator_t >::operator()
bool operator()(const T &first, const T &second) const
Compare objets.
Definition: JComparator.hh:112