[dali_2.3.26] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-physics / internal / physics-world-impl.h
index b1c9460..f14f546 100644 (file)
  */
 
 #include <dali/dali.h>
-#include <dali/devel-api/threading/mutex.h>
 #include <dali/devel-api/update/frame-callback-interface.h>
 #include <dali/devel-api/update/update-proxy.h>
 
 #include <dali-physics/public-api/physics-adaptor.h>
 
 #include <functional>
+#include <mutex>
 #include <queue>
 
 namespace Dali::Toolkit::Physics::Internal
@@ -89,6 +89,31 @@ public:
   float GetTimestep();
 
   /**
+   * Lock the mutex.
+   */
+  void Lock();
+
+  /**
+   * Unlock the mutex
+   */
+  void Unlock();
+
+  class ScopedLock
+  {
+  public:
+    ScopedLock(PhysicsWorld& world)
+    : mWorld(world)
+    {
+      mWorld.Lock();
+    }
+    ~ScopedLock()
+    {
+      mWorld.Unlock();
+    }
+    PhysicsWorld& mWorld;
+  };
+
+  /**
    * Queue a function for execution in the update thread, prior to the physics integration.
    * Enables syncronization of DALi properties and physics controlled properties.
    */
@@ -139,15 +164,13 @@ public:
   Physics::PhysicsAdaptor::DebugState GetDebugState();
 
 public:
-  Dali::Mutex& GetMutex(); // Only for use by adaptor in creating scoped accessor
-
   bool OnUpdate(Dali::UpdateProxy& updateProxy, float elapsedSeconds);
 
 protected:
   virtual void Integrate(float timestep) = 0;
 
 protected:
-  Dali::Mutex                           mMutex;
+  std::mutex                            mMutex;
   std::queue<std::function<void(void)>> commandQueue;
   Dali::UpdateProxy::NotifySyncPoint    mNotifySyncPoint{Dali::UpdateProxy::INVALID_SYNC};
   Dali::CallbackBase*                   mUpdateCallback{nullptr};