Jpp
 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 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>
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>
186  const JComparator_t& comparator)
187  {
188  return JComparator<JResult_t (T::*)() const, JComparator_t>(function, comparator);
189  }
190 }
191 
192 #endif
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:143
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 objets.
Definition: JComparator.hh:112
JArgument< T >::argument_type argument_type
Definition: JClass.hh:82
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 objet to value.
Definition: JComparator.hh:125