GenApi 3.5.1
NodeCallback.h
Go to the documentation of this file.
1//-----------------------------------------------------------------------------
2// (c) 2006 by Basler Vision Technologies
3// Author: Hartmut Nebelung
4//
5// License: This file is published under the license of the EMVA GenICam Standard Group.
6// A text file describing the legal terms is included in your installation as 'GenICam_license.pdf'.
7// If for some reason you are missing this file please contact the EMVA or visit the website
8// (http://www.genicam.org) for a full copy.
9//
10// THIS SOFTWARE IS PROVIDED BY THE EMVA GENICAM STANDARD GROUP "AS IS"
11// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
12// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
13// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE EMVA GENICAM STANDARD GROUP
14// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
15// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
16// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
17// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
18// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
19// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
20// POSSIBILITY OF SUCH DAMAGE.
21//
22//-----------------------------------------------------------------------------
35#ifndef GENAPI_NODECALLBACK_H
36#define GENAPI_NODECALLBACK_H
37#include <GenApi/INode.h>
38
39namespace GENAPI_NAMESPACE
40{
41
43 typedef enum _ECallbackType
44 {
45 cbPostInsideLock = 1,
47 } ECallbackType;
48
54 {
55 public:
56 CNodeCallback( INode *pNode, ECallbackType CallbackType ) :
57 m_pNode(pNode),
58 m_CallbackType( CallbackType )
59 {}
60
63 {};
64
66 virtual void operator()( ECallbackType CallbackType ) const = 0;
67
69 virtual void Destroy() = 0;
70
73 {
74 return m_pNode;
75 }
76
77 protected:
80
83 };
84
85 /***************************************************************************/
86 // C Functions as callbacks
87 /***************************************************************************/
88
93 template <class Function>
95 {
96 public:
98 Function_NodeCallback( INode *pNode, const Function& function, ECallbackType CallbackType ) :
99 CNodeCallback( pNode, CallbackType ),
100 m_pFunction( function )
101 {}
102
104 virtual void operator()( ECallbackType CallbackType ) const
105 {
106 if (m_pFunction && m_CallbackType == CallbackType)
107 m_pFunction( m_pNode );
108 }
109
111 virtual void Destroy()
112 {
113 delete this;
114 }
115
116 private:
118 const Function m_pFunction;
119
122 };
123
124 /*-----------------------------------------------------------------------------*/
125
130 template <class Function>
131 CNodeCallback *make_NodeCallback( INode *pNode, Function function, ECallbackType CallbackType )
132 {
133 return static_cast<CNodeCallback*>( new Function_NodeCallback<Function>(pNode, function, CallbackType) );
134 }
135
136 /*-----------------------------------------------------------------------------*/
137
138
143 template<class Function>
144 intptr_t Register( INode* pNode, Function f, ECallbackType CallbackType = cbPostInsideLock )
145 {
146 CNodeCallback *pCallback(make_NodeCallback(pNode, f, CallbackType));
147 return pNode->RegisterCallback(pCallback);
148 }
149
150
151 /***************************************************************************/
152 // C++ Member functions as callbacks
153 /***************************************************************************/
154
159 template <class Client, class Member>
161 {
162 public:
164 typedef void (Client::*PMEMBERFUNC)(INode*);
165
167 Member_NodeCallback( INode *pNode, Client& client, Member member, ECallbackType CallbackType ) :
168 CNodeCallback( pNode, CallbackType ),
169 m_Client(client),
170 m_pMemberFunc(member)
171 {}
172
174 virtual void operator()( ECallbackType CallbackType ) const
175 {
176 if (m_pMemberFunc && m_CallbackType == CallbackType)
177 (m_Client.*m_pMemberFunc)( m_pNode );
178 }
179
181 virtual void Destroy()
182 {
183 delete this;
184 }
185
186 private:
188 Client& m_Client;
189
191 PMEMBERFUNC m_pMemberFunc;
192
195 };
196
197 /*-----------------------------------------------------------------------------*/
198
203 template <class Client, class Member>
204 CNodeCallback *make_NodeCallback( INode *pNode, Client& client, Member member, ECallbackType CallbackType )
205 {
206 return static_cast<CNodeCallback*>( new Member_NodeCallback<Client,Member>(pNode, client, member, CallbackType) );
207 }
208
209 /*-----------------------------------------------------------------------------*/
210
215 template<class Client, class Member>
216 intptr_t Register( INode* pNode, Client &c, Member m, ECallbackType CallbackType = cbPostInsideLock )
217 {
218 CNodeCallback *pCallback(make_NodeCallback(pNode, c, m, CallbackType));
219 return pNode->RegisterCallback(pCallback);
220 }
221
222
224 // definition in Node.cpp
225 GENAPI_DECL void Deregister (GENAPI_NAMESPACE::CallbackHandleType pCallbackInfo );
226
227}
228
229#endif // GENAPI_NODECALLBACK_H
Definition of interface INode and types NodeList_t and CallbackHandleType:
enum GENAPI_NAMESPACE::_ECallbackType ECallbackType
the type of callback
_ECallbackType
the type of callback
Definition NodeCallback.h:44
@ cbPostOutsideLock
‍callback is fired on leaving the tree inside the lock-guarded area
Definition NodeCallback.h:46
GENAPI_DECL void Deregister(GENAPI_NAMESPACE::CallbackHandleType pCallbackInfo)
Unregistering callback by handle.
callback body instance for INode pointers
Definition NodeCallback.h:54
INode * GetNode()
returns the node the callback is registered to
Definition NodeCallback.h:72
virtual ~CNodeCallback()
virtual destructor
Definition NodeCallback.h:62
virtual void Destroy()=0
destroys the object
virtual void operator()(ECallbackType CallbackType) const =0
fires the callback if the type is right
ECallbackType m_CallbackType
the type of the callback
Definition NodeCallback.h:82
INode * m_pNode
the node were the callback is installed
Definition NodeCallback.h:79
Container for a function pointer.
Definition NodeCallback.h:95
virtual void operator()(ECallbackType CallbackType) const
execute operation: call the function
Definition NodeCallback.h:104
Function_NodeCallback(INode *pNode, const Function &function, ECallbackType CallbackType)
Constructor.
Definition NodeCallback.h:98
virtual void Destroy()
destroys the object
Definition NodeCallback.h:111
Container for a member function pointer.
Definition NodeCallback.h:161
virtual void operator()(ECallbackType CallbackType) const
execute operation
Definition NodeCallback.h:174
Member_NodeCallback(INode *pNode, Client &client, Member member, ECallbackType CallbackType)
Constructor.
Definition NodeCallback.h:167
void(Client::* PMEMBERFUNC)(INode *)
Member function type.
Definition NodeCallback.h:164
virtual void Destroy()
destroys the object
Definition NodeCallback.h:181
CNodeCallback * make_NodeCallback(INode *pNode, Function function, ECallbackType CallbackType)
make a new callback object for C functions
Definition NodeCallback.h:131
GENICAM_INTERFACE INode
Interface common to all nodes.
Definition ICategory.h:49
intptr_t Register(INode *pNode, Function f, ECallbackType CallbackType=cbPostInsideLock)
Register a C-function as a callback.
Definition NodeCallback.h:144