summaryrefslogtreecommitdiffstats
path: root/tests/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOSCpp.h
diff options
context:
space:
mode:
Diffstat (limited to 'tests/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOSCpp.h')
-rw-r--r--tests/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOSCpp.h163
1 files changed, 163 insertions, 0 deletions
diff --git a/tests/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOSCpp.h b/tests/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOSCpp.h
new file mode 100644
index 00000000..4058feb7
--- /dev/null
+++ b/tests/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOSCpp.h
@@ -0,0 +1,163 @@
+/****************************************************************************
+* *
+* OpenNI 1.x Alpha *
+* Copyright (C) 2011 PrimeSense Ltd. *
+* *
+* This file is part of OpenNI. *
+* *
+* OpenNI is free software: you can redistribute it and/or modify *
+* it under the terms of the GNU Lesser General Public License as published *
+* by the Free Software Foundation, either version 3 of the License, or *
+* (at your option) any later version. *
+* *
+* OpenNI is distributed in the hope that it will be useful, *
+* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+* GNU Lesser General Public License for more details. *
+* *
+* You should have received a copy of the GNU Lesser General Public License *
+* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
+* *
+****************************************************************************/
+#ifndef __XN_OS_CPP_H__
+#define __XN_OS_CPP_H__
+
+//---------------------------------------------------------------------------
+// Includes
+//---------------------------------------------------------------------------
+#include <XnOS.h>
+
+//---------------------------------------------------------------------------
+// Types
+//---------------------------------------------------------------------------
+class XnAutoCSLocker
+{
+public:
+ inline XnAutoCSLocker(const XnAutoCSLocker& other) : m_hCS(other.m_hCS), m_bLocked(FALSE)
+ {
+ Lock();
+ }
+
+ inline XnAutoCSLocker& operator=(const XnAutoCSLocker& other)
+ {
+ Unlock();
+ m_hCS = other.m_hCS;
+ Lock();
+ return *this;
+ }
+
+ inline XnAutoCSLocker(XN_CRITICAL_SECTION_HANDLE hCS) : m_hCS(hCS), m_bLocked(FALSE)
+ {
+ Lock();
+ }
+
+ inline ~XnAutoCSLocker()
+ {
+ Unlock();
+ }
+
+ inline void Lock()
+ {
+ if (!m_bLocked)
+ {
+ xnOSEnterCriticalSection(&m_hCS);
+ m_bLocked = TRUE;
+ }
+ }
+
+ inline void Unlock()
+ {
+ if (m_bLocked)
+ {
+ xnOSLeaveCriticalSection(&m_hCS);
+ m_bLocked = FALSE;
+ }
+ }
+
+private:
+ XN_CRITICAL_SECTION_HANDLE m_hCS;
+ XnBool m_bLocked;
+};
+
+class XnAutoMutexLocker
+{
+public:
+ inline XnAutoMutexLocker(XN_MUTEX_HANDLE hMutex, XnUInt32 nMilliseconds) : m_hMutex(hMutex)
+ {
+ m_nStatus = xnOSLockMutex(m_hMutex, nMilliseconds);
+ }
+
+ XnStatus GetStatus() const
+ {
+ return m_nStatus;
+ }
+
+ inline ~XnAutoMutexLocker()
+ {
+ if (m_nStatus == XN_STATUS_OK)
+ {
+ //Only unlock if we managed to lock in the first place
+ xnOSUnLockMutex(m_hMutex);
+ }
+ }
+
+private:
+ XN_MUTEX_HANDLE m_hMutex;
+ XnStatus m_nStatus;
+};
+
+class XnOSEvent
+{
+public:
+ XnOSEvent() : m_hEvent(NULL) {}
+
+ ~XnOSEvent()
+ {
+ Close();
+ }
+
+ operator XN_EVENT_HANDLE() const
+ {
+ return m_hEvent;
+ }
+
+ XnStatus Create(XnBool bManualReset)
+ {
+ return xnOSCreateEvent(&m_hEvent, bManualReset);
+ }
+
+ XnStatus Create(const XnChar* strName, XnBool bManualReset, XnBool bAllowOtherUsers = FALSE)
+ {
+ return xnOSCreateNamedEventEx(&m_hEvent, strName, bManualReset, bAllowOtherUsers);
+ }
+
+ XnStatus Open(const XnChar* strName, XnBool bEnableOtherUsers = FALSE)
+ {
+ return xnOSOpenNamedEventEx(&m_hEvent, strName, bEnableOtherUsers);
+ }
+
+ XnStatus Close()
+ {
+ return (m_hEvent != NULL) ? xnOSCloseEvent(&m_hEvent) : XN_STATUS_OK;
+ }
+
+ XnStatus Set()
+ {
+ return xnOSSetEvent(m_hEvent);
+ }
+
+ XnStatus Reset()
+ {
+ return xnOSResetEvent(m_hEvent);
+ }
+
+ XnStatus Wait(XnUInt32 nMilliseconds)
+ {
+ return xnOSWaitEvent(m_hEvent, nMilliseconds);
+ }
+
+private:
+ XN_EVENT_HANDLE m_hEvent;
+};
+
+#endif // __XN_OS_CPP_H__