21#ifndef __XN_THREAD_SAFE_QUEUE_H__
22#define __XN_THREAD_SAFE_QUEUE_H__
92 mutable XN_CRITICAL_SECTION_HANDLE m_hLock;
100#define XN_DECLARE_THREAD_SAFE_QUEUE_WITH_TRANSLATOR_DECL(decl, Type, ClassName, Translator) \
101 class decl ClassName : public XnThreadSafeQueue \
108 while (Size() != 0) \
111 XnStatus Push(Type const& value) \
113 XnValue val = Translator::CreateValueCopy(value); \
114 XnStatus nRetVal = XnThreadSafeQueue::Push(val); \
115 if (nRetVal != XN_STATUS_OK) \
117 Translator::FreeValue(val); \
120 return XN_STATUS_OK; \
122 XnStatus Pop(Type& value) \
125 XnStatus nRetVal = XnThreadSafeQueue::Pop(val); \
126 if (nRetVal != XN_STATUS_OK) return (nRetVal); \
127 value = Translator::GetFromValue(val); \
128 Translator::FreeValue(val); \
129 return XN_STATUS_OK; \
138#define XN_DECLARE_THREAD_SAFE_QUEUE_WITH_TRANSLATOR(Type, ClassName, Translator) \
139 XN_DECLARE_THREAD_SAFE_QUEUE_WITH_TRANSLATOR_DECL(, Type, ClassName, Translator)
145#define XN_DECLARE_THREAD_SAFE_QUEUE_DECL(decl, Type, ClassName) \
146 XN_DECLARE_DEFAULT_VALUE_TRANSLATOR_DECL(decl, Type, XN_DEFAULT_TRANSLATOR_NAME(ClassName)) \
147 XN_DECLARE_THREAD_SAFE_QUEUE_WITH_TRANSLATOR_DECL(decl, Type, ClassName, XN_DEFAULT_TRANSLATOR_NAME(ClassName))
152#define XN_DECLARE_THREAD_SAFE_QUEUE(Type, ClassName) \
153 XN_DECLARE_THREAD_SAFE_QUEUE_DECL(, Type, ClassName)
void * XnValue
Definition XnDataTypes.h:35
#define XN_IS_STATUS_OK(x)
Definition XnMacros.h:59
XN_C_API XnStatus XN_C_DECL xnOSCloseCriticalSection(XN_CRITICAL_SECTION_HANDLE *pCriticalSectionHandle)
XN_C_API XnStatus XN_C_DECL xnOSEnterCriticalSection(XN_CRITICAL_SECTION_HANDLE *pCriticalSectionHandle)
XN_C_API XnStatus XN_C_DECL xnOSLeaveCriticalSection(XN_CRITICAL_SECTION_HANDLE *pCriticalSectionHandle)
XN_C_API XnStatus XN_C_DECL xnOSCreateCriticalSection(XN_CRITICAL_SECTION_HANDLE *pCriticalSectionHandle)
XnUInt32 XnStatus
Definition XnStatus.h:33
#define XN_STATUS_OK
Definition XnStatus.h:36
virtual XnStatus Pop(XnValue &value)
Definition XnQueue.h:78
XnQueue()
Definition XnQueue.h:41
virtual XnUInt32 Size() const
Definition XnQueue.h:120
virtual XnStatus Push(XnValue const &value)
Definition XnQueue.h:62
XnStatus Pop(XnValue &value)
Definition XnThreadSafeQueue.h:69
XnThreadSafeQueue()
Definition XnThreadSafeQueue.h:39
~XnThreadSafeQueue()
Definition XnThreadSafeQueue.h:41
XnUInt32 Size() const
Definition XnThreadSafeQueue.h:82
XnStatus Init()
Definition XnThreadSafeQueue.h:46
XnStatus Push(XnValue const &value)
Definition XnThreadSafeQueue.h:56