Jpp  15.0.0-rc.2
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JFind_if.hh
Go to the documentation of this file.
1 #ifndef __JLANG__JFIND_IF__
2 #define __JLANG__JFIND_IF__
3 
4 #include "JLang/JClass.hh"
5 
6 
7 /**
8  * \author mdejong
9  */
10 
11 namespace JLANG {}
12 namespace JPP { using namespace JLANG; }
13 
14 namespace JLANG {
15 
16  /**
17  * Template definition of auxiliary class to select objects.
18  * The first template argument refers to the data member or member method and
19  * the second template argument to the predicate of the corresponding values.
20  */
21  template<class JTypename_t, class JPredicate_t>
22  class JFind_if;
23 
24 
25  /**
26  * Template specialisation of JFind_if for selection of objects via data member.
27  */
28  template<class T, class JResult_t, class JPredicate_t>
29  class JFind_if<JResult_t T::*, JPredicate_t> {
30  public:
31 
32  typedef JResult_t data_type;
34  typedef JResult_t T::*data_member; //!< Type definition of data member
35  typedef JPredicate_t predicate_type; //!< Type definition of predicate
36 
37 
38  /**
39  * Constructor.
40  *
41  * \param member pointer to data member
42  * \param predicate predicate method
43  */
45  const predicate_type& predicate) :
46  member (member),
47  predicate(predicate)
48  {}
49 
50 
51  /**
52  * Select objets.
53  *
54  * \param object object
55  * \return true if selected; else false
56  */
57  bool operator()(const T& object) const
58  {
59  return predicate(object.*member);
60  }
61 
62  protected:
65  };
66 
67 
68  /**
69  * Template specialisation of JFind_if for selection of objects via member method.
70  */
71  template<class T, class JResult_t, class JPredicate_t>
72  class JFind_if<JResult_t (T::*)() const, JPredicate_t> {
73  public:
74 
75  typedef JResult_t data_type;
77  typedef JResult_t (T::*member_method)() const; //!< Type definition of member method
78  typedef JPredicate_t predicate_type; //!< Type definition of predicate
79 
80 
81  /**
82  * Constructor.
83  *
84  * \param function pointer to member method
85  * \param predicate predicate method
86  */
87  JFind_if(member_method function,
88  const predicate_type& predicate) :
89  function (function),
90  predicate(predicate)
91  {}
92 
93 
94  /**
95  * Select objets.
96  *
97  * \param object object
98  * \return true if selected; else false
99  */
100  bool operator()(const T& object) const
101  {
102  return predicate((object.*function)());
103  }
104 
105  protected:
106  member_method function;
108  };
109 
110 
111  /**
112  * Helper method to create find_if for data member.
113  *
114  * \param member pointer to data member
115  * \param predicate predicate
116  * \return find_if
117  */
118  template<class T, class JResult_t, class JPredicate_t>
119  JFind_if<JResult_t T::*, JPredicate_t> make_find_if(JResult_t T::*member, const JPredicate_t& predicate)
120  {
121  return JFind_if<JResult_t T::*, JPredicate_t>(member, predicate);
122  }
123 
124 
125  /**
126  * Helper method to create find_if for return values of member method.
127  *
128  * \param function pointer to member method
129  * \param predicate predicate
130  * \return find_if
131  */
132  template<class T, class JResult_t, class JPredicate_t>
133  JFind_if<JResult_t (T::*)() const, JPredicate_t> make_find_if(JResult_t (T::*function)() const, const JPredicate_t& predicate)
134  {
135  return JFind_if<JResult_t (T::*)() const, JPredicate_t>(function, predicate);
136  }
137 }
138 
139 #endif
JFind_if(member_method function, const predicate_type &predicate)
Constructor.
Definition: JFind_if.hh:87
JClass< data_type >::argument_type argument_type
Definition: JFind_if.hh:33
bool operator()(const T &object) const
Select objets.
Definition: JFind_if.hh:57
Template specialisation of JFind_if for selection of objects via data member.
Definition: JFind_if.hh:29
JArgument< T >::argument_type argument_type
Definition: JClass.hh:82
do set_variable OUTPUT_DIRECTORY $WORKDIR T
bool operator()(const T &object) const
Select objets.
Definition: JFind_if.hh:100
JPredicate_t predicate_type
Type definition of predicate.
Definition: JFind_if.hh:78
Template definition of auxiliary class to select objects.
Definition: JFind_if.hh:22
JFind_if< JResult_t T::*, JPredicate_t > make_find_if(JResult_t T::*member, const JPredicate_t &predicate)
Helper method to create find_if for data member.
Definition: JFind_if.hh:119
JFind_if(data_member member, const predicate_type &predicate)
Constructor.
Definition: JFind_if.hh:44
JResult_t T::* data_member
Type definition of data member.
Definition: JFind_if.hh:34
Template specialisation of JFind_if for selection of objects via member method.
Definition: JFind_if.hh:72
JClass< data_type >::argument_type argument_type
Definition: JFind_if.hh:76
JPredicate_t predicate_type
Type definition of predicate.
Definition: JFind_if.hh:35