aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/include/Lock.h
diff options
context:
space:
mode:
Diffstat (limited to 'APEX_1.4/include/Lock.h')
-rw-r--r--APEX_1.4/include/Lock.h121
1 files changed, 121 insertions, 0 deletions
diff --git a/APEX_1.4/include/Lock.h b/APEX_1.4/include/Lock.h
new file mode 100644
index 00000000..260f6721
--- /dev/null
+++ b/APEX_1.4/include/Lock.h
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2008-2015, NVIDIA CORPORATION. All rights reserved.
+ *
+ * NVIDIA CORPORATION and its licensors retain all intellectual property
+ * and proprietary rights in and to this software, related documentation
+ * and any modifications thereto. Any use, reproduction, disclosure or
+ * distribution of this software and related documentation without an express
+ * license agreement from NVIDIA CORPORATION is strictly prohibited.
+ */
+
+// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
+// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
+
+
+#ifndef LOCK_H
+#define LOCK_H
+
+/*!
+\file
+\brief classes PxSceneReadLock, PxSceneWriteLock
+*/
+
+#include "ApexInterface.h"
+
+namespace nvidia
+{
+namespace apex
+{
+
+/**
+\brief RAII wrapper for the Scene read lock.
+
+Use this class as follows to lock the scene for reading by the current thread
+for the duration of the enclosing scope:
+
+ ReadLock lock(sceneRef);
+
+\see Scene::apexacquireReadLock(), Scene::apexUnacquireReadLock(), SceneDesc::useRWLock
+*/
+class ReadLock
+{
+ ReadLock(const ReadLock&);
+ ReadLock& operator=(const ReadLock&);
+
+public:
+
+ /**
+ \brief Constructor
+ \param lockable The object to lock for reading
+ \param file Optional string for debugging purposes
+ \param line Optional line number for debugging purposes
+ */
+ ReadLock(const ApexInterface& lockable, const char* file=NULL, uint32_t line=0)
+ : mLockable(lockable)
+ {
+ mLockable.acquireReadLock(file, line);
+ }
+
+ ~ReadLock()
+ {
+ mLockable.releaseReadLock();
+ }
+
+private:
+
+ const ApexInterface& mLockable;
+};
+
+/**
+\brief RAII wrapper for the Scene write lock.
+
+Use this class as follows to lock the scene for writing by the current thread
+for the duration of the enclosing scope:
+
+ WriteLock lock(sceneRef);
+
+\see Scene::apexacquireWriteLock(), Scene::apexUnacquireWriteLock(), SceneDesc::useRWLock
+*/
+class WriteLock
+{
+ WriteLock(const WriteLock&);
+ WriteLock& operator=(const WriteLock&);
+
+public:
+
+ /**
+ \brief Constructor
+ \param lockable The object to lock for writing
+ \param file Optional string for debugging purposes
+ \param line Optional line number for debugging purposes
+ */
+ WriteLock(const ApexInterface& lockable, const char* file=NULL, uint32_t line=0)
+ : mLockable(lockable)
+ {
+ mLockable.acquireWriteLock(file, line);
+ }
+
+ ~WriteLock()
+ {
+ mLockable.releaseWriteLock();
+ }
+
+private:
+ const ApexInterface& mLockable;
+};
+
+
+} // namespace apex
+} // namespace nvidia
+
+/**
+\brief Lock an object for writing by the current thread for the duration of the enclosing scope.
+*/
+#define WRITE_LOCK(LOCKABLE) nvidia::apex::WriteLock __WriteLock(LOCKABLE, __FILE__, __LINE__);
+/**
+\brief Lock an object for reading by the current thread for the duration of the enclosing scope.
+*/
+#define READ_LOCK(LOCKABLE) nvidia::apex::ReadLock __ReadLock(LOCKABLE, __FILE__, __LINE__);
+
+/** @} */
+#endif