21 #ifndef __XN_EVENT_H__ 22 #define __XN_EVENT_H__ 74 nRetVal = m_ToBeAdded.AddLast(pCallback);
104 if (!RemoveCallback(m_ToBeAdded, pObject))
107 nRetVal = m_ToBeRemoved.AddLast(pObject);
119 for (XnCallbackPtrList::ConstIterator it = m_Handlers.begin(); it != m_Handlers.end(); ++it)
126 m_ToBeRemoved.Clear();
135 for (XnCallbackPtrList::ConstIterator it = m_ToBeAdded.begin(); it != m_ToBeAdded.end(); ++it)
137 m_Handlers.AddLast(*it);
142 for (XnCallbackPtrList::ConstIterator it = m_ToBeRemoved.begin(); it != m_ToBeRemoved.end(); ++it)
145 RemoveCallback(m_Handlers, pCallback);
147 m_ToBeRemoved.Clear();
152 #if (XN_PLATFORM == XN_PLATFORM_WIN32) 153 #pragma warning (push) 154 #pragma warning (disable: 4127) 159 #if (XN_PLATFORM == XN_PLATFORM_WIN32) 160 #pragma warning (pop) 169 XnBool RemoveCallback(XnCallbackPtrList& list,
XnCallback* pCallback)
171 XnCallbackPtrList::Iterator handlerIt = list.Find(pCallback);
172 if (handlerIt != list.end())
174 list.Remove(handlerIt);
183 #define _XN_RAISE_WITH_RET_CODE(args) \ 185 XnStatus nRetVal = pFunc(args pCallback->pCookie); \ 186 if (nRetVal != XN_STATUS_OK) \ 188 XnEvent::ApplyListChanges(); \ 193 #define _XN_RAISE_NO_RET_CODE(args) \ 194 pFunc(args pCallback->pCookie); 200 #define _XN_DECLARE_EVENT_CLASS(_class, _interface, _retVal, _raise, _signature, _raise_sign) \ 201 XN_PRAGMA_START_DISABLED_WARNING_SECTION(XN_HIDES_PARENT_METHOD_WARNING_ID) \ 202 class _interface : protected XnEvent \ 205 typedef _retVal (XN_CALLBACK_TYPE* HandlerPtr)(_signature); \ 206 virtual XnStatus Register(HandlerPtr pFunc, void* pCookie, XnCallbackHandle* pHandle = NULL) = 0; \ 207 virtual XnStatus Unregister(XnCallbackHandle handle) = 0; \ 209 class _class : public _interface \ 212 XnStatus Register(HandlerPtr pFunc, void* pCookie, XnCallbackHandle* pHandle = NULL) \ 214 return XnEvent::Register((XnEvent::HandlerPtr)pFunc, pCookie, pHandle); \ 216 XnStatus Unregister(XnCallbackHandle handle) \ 218 return XnEvent::Unregister(handle); \ 220 XnStatus Raise(_raise_sign) \ 222 XnAutoCSLocker lock(m_hLock); \ 223 XnEvent::ApplyListChanges(); \ 224 XnEvent::XnCallbackPtrList::Iterator it = XnEvent::m_Handlers.begin(); \ 225 for (; it != XnEvent::m_Handlers.end(); ++it) \ 227 XnCallback* pCallback = *it; \ 228 HandlerPtr pFunc = (HandlerPtr)pCallback->pFuncPtr; \ 231 XnEvent::ApplyListChanges(); \ 232 return (XN_STATUS_OK); \ 234 XnStatus Clear() { return XnEvent::Clear(); } \ 236 XN_PRAGMA_STOP_DISABLED_WARNING_SECTION 239 #define _XN_SIGNATURE_0ARG() 240 #define _XN_FULL_SIGNATURE_0ARG() void* pCookie 241 #define _XN_ARGS_0ARG() 243 #define _XN_SIGNATURE_1ARG(_type1, _name1) _type1 _name1 244 #define _XN_FULL_SIGNATURE_1ARG(_type1, _name1) _type1 _name1, void* pCookie 245 #define _XN_ARGS_1ARG(_name1) _name1, 247 #define _XN_SIGNATURE_2ARG(_type1, _name1, _type2, _name2) _type1 _name1, _type2 _name2 248 #define _XN_FULL_SIGNATURE_2ARG(_type1, _name1, _type2, _name2) _type1 _name1, _type2 _name2, void* pCookie 249 #define _XN_ARGS_2ARG(_name1, _name2) _name1, _name2, 251 #define _XN_SIGNATURE_3ARG(_type1, _name1, _type2, _name2, _type3, _name3) _type1 _name1, _type2 _name2, _type3 _name3 252 #define _XN_FULL_SIGNATURE_3ARG(_type1, _name1, _type2, _name2, _type3, _name3) _type1 _name1, _type2 _name2, _type3 _name3, void* pCookie 253 #define _XN_ARGS_3ARG(_name1, _name2, _name3) _name1, _name2, _name3, 255 #define _XN_SIGNATURE_4ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4) _type1 _name1, _type2 _name2, _type3 _name3, _type4 _name4 256 #define _XN_FULL_SIGNATURE_4ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4) _type1 _name1, _type2 _name2, _type3 _name3, _type4 _name4, void* pCookie 257 #define _XN_ARGS_4ARG(_name1, _name2, _name3, _name4) _name1, _name2, _name3, _name4, 259 #define _XN_SIGNATURE_5ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4, _type5, _name5) _type1 _name1, _type2 _name2, _type3 _name3, _type4 _name4, _type5 _name5 260 #define _XN_FULL_SIGNATURE_5ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4, _type5, _name5) _type1 _name1, _type2 _name2, _type3 _name3, _type4 _name4, _type5 _name5, void* pCookie 261 #define _XN_ARGS_5ARG(_name1, _name2, _name3, _name4, _name5) _name1, _name2, _name3, _name4, _name5, 264 #define XN_DECLARE_EVENT_0ARG(_class, _interface) \ 265 _XN_DECLARE_EVENT_CLASS(_class, _interface, void, _XN_RAISE_NO_RET_CODE(_XN_ARGS_0ARG()), _XN_FULL_SIGNATURE_0ARG(), _XN_SIGNATURE_0ARG()) 267 #define XN_DECLARE_EVENT_0ARG_RETVAL(_class, _interface) \ 268 _XN_DECLARE_EVENT_CLASS(_class, _interface, XnStatus, _XN_RAISE_WITH_RET_CODE(_XN_ARGS_0ARG()), _XN_FULL_SIGNATURE_0ARG(), _XN_SIGNATURE_0ARG()) 270 #define XN_DECLARE_EVENT_1ARG(_class, _interface, _type1, _name1) \ 271 _XN_DECLARE_EVENT_CLASS(_class, _interface, void, _XN_RAISE_NO_RET_CODE(_XN_ARGS_1ARG(_name1)), _XN_FULL_SIGNATURE_1ARG(_type1, _name1), _XN_SIGNATURE_1ARG(_type1, _name1)) 273 #define XN_DECLARE_EVENT_1ARG_RETVAL(_class, _interface, _type1, _name1) \ 274 _XN_DECLARE_EVENT_CLASS(_class, _interface, XnStatus, _XN_RAISE_WITH_RET_CODE(_XN_ARGS_1ARG(_name1)), _XN_FULL_SIGNATURE_1ARG(_type1, _name1), _XN_SIGNATURE_1ARG(_type1, _name1)) 276 #define XN_DECLARE_EVENT_2ARG(_class, _interface, _type1, _name1, _type2, _name2) \ 277 _XN_DECLARE_EVENT_CLASS(_class, _interface, void, _XN_RAISE_NO_RET_CODE(_XN_ARGS_2ARG(_name1, _name2)), _XN_FULL_SIGNATURE_2ARG(_type1, _name1, _type2, _name2), _XN_SIGNATURE_2ARG(_type1, _name1, _type2, _name2)) 279 #define XN_DECLARE_EVENT_2ARG_RETVAL(_class, _interface, _type1, _name1, _type2, _name2) \ 280 _XN_DECLARE_EVENT_CLASS(_class, _interface, XnStatus, _XN_RAISE_WITH_RET_CODE(_XN_ARGS_2ARG(_name1, _name2)), _XN_FULL_SIGNATURE_2ARG(_type1, _name1, _type2, _name2), _XN_SIGNATURE_2ARG(_type1, _name1, _type2, _name2)) 282 #define XN_DECLARE_EVENT_3ARG(_class, _interface, _type1, _name1, _type2, _name2, _type3, _name3) \ 283 _XN_DECLARE_EVENT_CLASS(_class, _interface, void, _XN_RAISE_NO_RET_CODE(_XN_ARGS_3ARG(_name1, _name2, _name3)), _XN_FULL_SIGNATURE_3ARG(_type1, _name1, _type2, _name2, _type3, _name3), _XN_SIGNATURE_3ARG(_type1, _name1, _type2, _name2, _type3, _name3)) 285 #define XN_DECLARE_EVENT_3ARG_RETVAL(_class, _interface, _type1, _name1, _type2, _name2, _type3, _name3) \ 286 _XN_DECLARE_EVENT_CLASS(_class, _interface, XnStatus, _XN_RAISE_WITH_RET_CODE(_XN_ARGS_3ARG(_name1, _name2, _name3)), _XN_FULL_SIGNATURE_3ARG(_type1, _name1, _type2, _name2, _type3, _name3), _XN_SIGNATURE_3ARG(_type1, _name1, _type2, _name2, _type3, _name3)) 288 #define XN_DECLARE_EVENT_4ARG(_class, _interface, _type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4) \ 289 _XN_DECLARE_EVENT_CLASS(_class, _interface, void, _XN_RAISE_NO_RET_CODE(_XN_ARGS_4ARG(_name1, _name2, _name3, _name4)), _XN_FULL_SIGNATURE_4ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4), _XN_SIGNATURE_4ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4)) 291 #define XN_DECLARE_EVENT_4ARG_RETVAL(_class, _interface, _type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4) \ 292 _XN_DECLARE_EVENT_CLASS(_class, _interface, XnStatus, _XN_RAISE_WITH_RET_CODE(_XN_ARGS_4ARG(_name1, _name2, _name3, _name4)), _XN_FULL_SIGNATURE_4ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4), _XN_SIGNATURE_4ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4)) 294 #define XN_DECLARE_EVENT_5ARG(_class, _interface, _type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4, _type5, _name5) \ 295 _XN_DECLARE_EVENT_CLASS(_class, _interface, void, _XN_RAISE_NO_RET_CODE(_XN_ARGS_5ARG(_name1, _name2, _name3, _name4, _name5)), _XN_FULL_SIGNATURE_5ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4, _type5, _name5), _XN_SIGNATURE_5ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4, _type5, _name5)) 297 #define XN_DECLARE_EVENT_5ARG_RETVAL(_class, _interface, _type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4, _type5, _name5) \ 298 _XN_DECLARE_EVENT_CLASS(_class, _interface, XnStatus, _XN_RAISE_WITH_RET_CODE(_XN_ARGS_5ARG(_name1, _name2, _name3, _name4, _name5)), _XN_FULL_SIGNATURE_5ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4, _type5, _name5), _XN_SIGNATURE_5ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4, _type5, _name5)) 300 #endif //__XN_EVENT_H__
#define XN_IS_STATUS_OK(x)
Definition: XnMacros.h:59
Definition: XnCallback.h:30
#define XN_STATUS_OK
Definition: XnStatus.h:36
virtual ~XnEvent()
Definition: XnEvent.h:55
XN_CRITICAL_SECTION_HANDLE m_hLock
Definition: XnEvent.h:163
XnStatus ApplyListChanges()
Definition: XnEvent.h:132
virtual ~XnEventInterface()
Definition: XnEvent.h:39
#define XN_DECLARE_LIST(Type, ClassName)
Definition: XnList.h:744
XnStatus(* HandlerPtr)(void *pCookie)
Definition: XnEvent.h:41
XnCallbackPtrList m_ToBeRemoved
Definition: XnEvent.h:166
#define XN_VALIDATE_NEW(ptr, type,...)
Definition: XnOS.h:171
XnUInt32 XnStatus
Definition: XnStatus.h:33
XnCallbackPtrList m_Handlers
Definition: XnEvent.h:164
XnStatus Clear()
Definition: XnEvent.h:115
XnStatus Unregister(XnCallbackHandle handle)
Definition: XnEvent.h:92
XnEventInterface()
Definition: XnEvent.h:38
XnCallbackPtrList m_ToBeAdded
Definition: XnEvent.h:165
void * XnCallbackHandle
Definition: XnTypes.h:270
XnStatus Register(HandlerPtr pFunc, void *pCookie, XnCallbackHandle *pHandle)
Definition: XnEvent.h:61
XN_C_API XnStatus XN_C_DECL xnOSCloseCriticalSection(XN_CRITICAL_SECTION_HANDLE *pCriticalSectionHandle)
#define XN_VALIDATE_INPUT_PTR(x)
Definition: XnOS.h:126
virtual XnStatus Register(HandlerPtr pFunc, void *pCookie, XnCallbackHandle *pHandle=NULL)=0
#define XN_DELETE(p)
Definition: XnOS.h:339
XN_C_API XnStatus XN_C_DECL xnOSCreateCriticalSection(XN_CRITICAL_SECTION_HANDLE *pCriticalSectionHandle)
virtual XnStatus Unregister(XnCallbackHandle handle)=0
XnEvent()
Definition: XnEvent.h:50