Jpp  16.0.1
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 objects.
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 object 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  * Template specialisation of JComparator for comparison between return values of member methods.
138  */
139  template<class T, class JComparator_t>
140  class JComparator<const T& (T::*)() const, JComparator_t> {
141  public:
142 
143  typedef const T& (T::*member_method)() const; //!< Type definition of member method
144  typedef JComparator_t comparator_type; //!< Type definition of comparator
145 
146 
147  /**
148  * Constructor.
149  *
150  * \param function pointer to member method
151  * \param comparator comparator method
152  */
153  JComparator(member_method function,
154  const comparator_type& comparator = comparator_type()) :
155  function (function),
156  comparator(comparator)
157  {}
158 
159 
160  /**
161  * Compare objects.
162  *
163  * \param first first object
164  * \param second second object
165  * \return result of comparison of return values
166  */
167  bool operator()(const T& first, const T& second) const
168  {
169  return comparator((first.*function)(), (second.*function)());
170  }
171 
172  protected:
173  member_method function;
174  comparator_type comparator;
175  };
176 
177 
178  /**
179  * Helper method to create comparator between values of data member.
180  *
181  * \param member pointer to data member
182  * \return comparator between objects
183  */
184  template<class T, class JResult_t>
186  {
188  }
189 
190 
191  /**
192  * Helper method to create comparator between values of data member.
193  *
194  * \param member pointer to data member
195  * \param comparator comparator between values of data members
196  * \return comparator between objects
197  */
198  template<class T, class JResult_t, class JComparator_t>
200  const JComparator_t& comparator)
201  {
202  return JComparator<JResult_t T::*, JComparator_t>(member, comparator);
203  }
204 
205 
206  /**
207  * Helper method to create comparator between return values of member method.
208  *
209  * \param function pointer to member method
210  * \return comparator between objects
211  */
212  template<class T, class JResult_t>
214  {
216  }
217 
218 
219  /**
220  * Helper method to create comparator between return values of member method.
221  *
222  * \param function pointer to member method
223  * \param comparator comparator between return values
224  * \return comparator between objects
225  */
226  template<class T, class JResult_t, class JComparator_t>
228  const JComparator_t& comparator)
229  {
230  return JComparator<JResult_t (T::*)() const, JComparator_t>(function, comparator);
231  }
232 }
233 
234 #endif
bool operator()(const T &first, const T &second) const
Compare objects.
Definition: JComparator.hh:167
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member.
Definition: JComparator.hh:185
JComparator_t comparator_type
Type definition of comparator.
Definition: JComparator.hh:144
Template specialisation of JComparator for comparison between values of data members.
Definition: JComparator.hh:30
then echo The file $DIR KM3NeT_00000001_00000000 root already please rename or remove it first
JResult_t T::* data_member
Type definition of data member.
Definition: JComparator.hh:33
bool operator()(const T &first, const T &second) const
Compare objects.
Definition: JComparator.hh:112
JArgument< T >::argument_type argument_type
Definition: JClass.hh:82
JComparator(member_method function, const comparator_type &comparator=comparator_type())
Constructor.
Definition: JComparator.hh:153
bool operator()(const T &first, typename JClass< JResult_t >::argument_type second) const
Compare objet to value.
Definition: JComparator.hh:70
JComparator(data_member member, const comparator_type &comparator=comparator_type())
Constructor.
Definition: JComparator.hh:43
Template specialisation of JComparator for comparison between return values of member methods...
Definition: JComparator.hh:85
bool operator()(const T &first, const T &second) const
Compare objets.
Definition: JComparator.hh:57
do set_variable OUTPUT_DIRECTORY $WORKDIR T
Template definition of auxiliary class to compare objects.
Definition: JComparator.hh:23
JComparator_t comparator_type
Type definition of comparator.
Definition: JComparator.hh:34
JComparator_t comparator_type
Type definition of comparator.
Definition: JComparator.hh:89
JComparator(member_method function, const comparator_type &comparator=comparator_type())
Constructor.
Definition: JComparator.hh:98
bool operator()(const T &first, typename JClass< JResult_t >::argument_type second) const
Compare object to value.
Definition: JComparator.hh:125
const T &(T::* member_method)() const
Type definition of member method.
Definition: JComparator.hh:143