Jpp 19.3.0-rc.1
the software that should make you happy
Loading...
Searching...
No Matches
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
11namespace JLANG {}
12namespace JPP { using namespace JLANG; }
13
14namespace 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
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
JPredicate_t predicate_type
Type definition of predicate.
Definition JFind_if.hh:35
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
JFind_if(member_method function, const predicate_type &predicate)
Constructor.
Definition JFind_if.hh:87
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
JClass< data_type >::argument_type argument_type
Definition JFind_if.hh:76
Template definition of auxiliary class to select objects.
Definition JFind_if.hh:22
Auxiliary classes and methods for language specific functionality.
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
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
JArgument< T >::argument_type argument_type
Definition JClass.hh:82