diff options
Diffstat (limited to 'tests/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOSCpp.h')
-rw-r--r-- | tests/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOSCpp.h | 163 |
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__ |