]> git.stg.codes - stg.git/blobdiff - projects/stargazer/actions.inl.h
Use std::jthread and C++17.
[stg.git] / projects / stargazer / actions.inl.h
index c29a63cda1a3a5ea564326434d930b5d2981a331..7a0bac35158ecee058712a490628753ae0ed0c48 100644 (file)
@@ -3,7 +3,7 @@
 
 #include <algorithm>
 
-#include "stg_locker.h"
+#include "stg/locker.h"
 
 // Polymorphick action invocation
 template <class ACTIVE_CLASS, typename DATA_TYPE>
@@ -15,77 +15,68 @@ void ACTION<ACTIVE_CLASS, DATA_TYPE>::Invoke()
 
 inline
 ACTIONS_LIST::ACTIONS_LIST()
-    : mutex()
 {
-pthread_mutex_init(&mutex, NULL);
-};
+}
 
 // Delete all actions before deleting list
 inline
 ACTIONS_LIST::~ACTIONS_LIST()
 {
+std::lock_guard lock(m_mutex);
 
-    {
-    STG_LOCKER(&mutex, __FILE__, __LINE__);
-
-    parent::iterator it(parent::begin());
-    while (it != parent::end()) 
-        {
-        delete *it++;
-        }
-    }
-
-pthread_mutex_destroy(&mutex);
-};
+parent::iterator it(parent::begin());
+while (it != parent::end())
+    delete *it++;
+}
 
 inline
 ACTIONS_LIST::parent::iterator ACTIONS_LIST::begin()
-{ 
-STG_LOCKER lock(&mutex, __FILE__, __LINE__);
+{
+std::lock_guard lock(m_mutex);
 return parent::begin();
-};
+}
 
 inline
 ACTIONS_LIST::parent::iterator ACTIONS_LIST::end()
-{ 
-STG_LOCKER lock(&mutex, __FILE__, __LINE__);
+{
+std::lock_guard lock(m_mutex);
 return parent::end();
-};
+}
 
 inline
 ACTIONS_LIST::parent::const_iterator ACTIONS_LIST::begin() const
-{ 
-STG_LOCKER lock(&mutex, __FILE__, __LINE__);
+{
+std::lock_guard lock(m_mutex);
 return parent::begin();
-};
+}
 
 inline
 ACTIONS_LIST::parent::const_iterator ACTIONS_LIST::end() const
-{ 
-STG_LOCKER lock(&mutex, __FILE__, __LINE__);
+{
+std::lock_guard lock(m_mutex);
 return parent::end();
-};
+}
 
 inline
 bool ACTIONS_LIST::empty() const
 {
-STG_LOCKER lock(&mutex, __FILE__, __LINE__);
+std::lock_guard lock(m_mutex);
 return parent::empty();
-};
+}
 
 inline
 size_t ACTIONS_LIST::size() const
 {
-STG_LOCKER lock(&mutex, __FILE__, __LINE__);
+std::lock_guard lock(m_mutex);
 return parent::size();
-};
+}
 
 inline
 void ACTIONS_LIST::swap(ACTIONS_LIST & list)
 {
-STG_LOCKER lock(&mutex, __FILE__, __LINE__);
+std::lock_guard lock(m_mutex);
 parent::swap(list);
-};
+}
 
 template <class ACTIVE_CLASS, typename DATA_TYPE>
 inline
@@ -93,19 +84,18 @@ void ACTIONS_LIST::Enqueue(ACTIVE_CLASS & ac,
                            typename ACTOR<ACTIVE_CLASS, DATA_TYPE>::TYPE a,
                            DATA_TYPE d)
 {
-STG_LOCKER lock(&mutex, __FILE__, __LINE__);
+std::lock_guard lock(m_mutex);
 push_back(new ACTION<ACTIVE_CLASS, DATA_TYPE>(ac, a, d));
 }
 
 inline
 void ACTIONS_LIST::InvokeAll()
 {
-STG_LOCKER lock(&mutex, __FILE__, __LINE__);
+std::lock_guard lock(m_mutex);
 std::for_each(
         parent::begin(),
         parent::end(),
-        std::mem_fun(&BASE_ACTION::Invoke)
-);
-};
+        [](auto action){ action->Invoke(); });
+}
 
 #endif