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 
39 namespace 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 
62  virtual ~CNodeCallback()
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
virtual void Destroy()
destroys the object
Definition: NodeCallback.h:181
virtual void Destroy()
destroys the object
Definition: NodeCallback.h:111
INode * GetNode()
returns the node the callback is registered to
Definition: NodeCallback.h:72
Function_NodeCallback(INode *pNode, const Function &function, ECallbackType CallbackType)
Constructor.
Definition: NodeCallback.h:98
Definition of interface INode and types NodeList_t and CallbackHandleType:
GENICAM_INTERFACE INode
Interface common to all nodes.
Definition: ICategory.h:49
virtual void operator()(ECallbackType CallbackType) const
execute operation: call the function
Definition: NodeCallback.h:104
callback is fired on leaving the tree inside the lock-guarded area
Definition: NodeCallback.h:46
callback body instance for INode pointers
Definition: NodeCallback.h:53
virtual void operator()(ECallbackType CallbackType) const =0
fires the callback if the type is right
Member_NodeCallback(INode *pNode, Client &client, Member member, ECallbackType CallbackType)
Constructor.
Definition: NodeCallback.h:167
CNodeCallback * make_NodeCallback(INode *pNode, Client &client, Member member, ECallbackType CallbackType)
make a new callback object for member functions
Definition: NodeCallback.h:204
enum GENAPI_NAMESPACE::_ECallbackType ECallbackType
the type of callback
virtual ~CNodeCallback()
virtual destructor
Definition: NodeCallback.h:62
virtual IBoolean & operator=(bool Value)
Set node value.
Definition: IBoolean.h:62
GENAPI_DECL void Deregister(GENAPI_NAMESPACE::CallbackHandleType pCallbackInfo)
Unregistering callback by handle.
Container for a member function pointer.
Definition: NodeCallback.h:160
intptr_t CallbackHandleType
the callback handle for nodes
Definition: INode.h:56
ECallbackType m_CallbackType
the type of the callback
Definition: NodeCallback.h:82
_ECallbackType
the type of callback
Definition: NodeCallback.h:43
virtual void Destroy()=0
destroys the object
INode * m_pNode
the node were the callback is installed
Definition: NodeCallback.h:79
intptr_t Register(INode *pNode, Client &c, Member m, ECallbackType CallbackType=cbPostInsideLock)
Register a C++-member function a callback.
Definition: NodeCallback.h:216
virtual void operator()(ECallbackType CallbackType) const
execute operation
Definition: NodeCallback.h:174
Container for a function pointer.
Definition: NodeCallback.h:94
Definition: ChunkAdapter.h:37