]> 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 b5b3f8a5a20090977ed3f3f2cd43bb8aad5929f4..7a0bac35158ecee058712a490628753ae0ed0c48 100644 (file)
@@ -15,75 +15,66 @@ 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 lock(&mutex);
-
-    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);
+{
+std::lock_guard lock(m_mutex);
 return parent::begin();
 }
 
 inline
 ACTIONS_LIST::parent::iterator ACTIONS_LIST::end()
-{ 
-STG_LOCKER lock(&mutex);
+{
+std::lock_guard lock(m_mutex);
 return parent::end();
 }
 
 inline
 ACTIONS_LIST::parent::const_iterator ACTIONS_LIST::begin() const
-{ 
-STG_LOCKER lock(&mutex);
+{
+std::lock_guard lock(m_mutex);
 return parent::begin();
 }
 
 inline
 ACTIONS_LIST::parent::const_iterator ACTIONS_LIST::end() const
-{ 
-STG_LOCKER lock(&mutex);
+{
+std::lock_guard lock(m_mutex);
 return parent::end();
 }
 
 inline
 bool ACTIONS_LIST::empty() const
 {
-STG_LOCKER lock(&mutex);
+std::lock_guard lock(m_mutex);
 return parent::empty();
 }
 
 inline
 size_t ACTIONS_LIST::size() const
 {
-STG_LOCKER lock(&mutex);
+std::lock_guard lock(m_mutex);
 return parent::size();
 }
 
 inline
 void ACTIONS_LIST::swap(ACTIONS_LIST & list)
 {
-STG_LOCKER lock(&mutex);
+std::lock_guard lock(m_mutex);
 parent::swap(list);
 }
 
@@ -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);
+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);
+std::lock_guard lock(m_mutex);
 std::for_each(
         parent::begin(),
         parent::end(),
-        std::mem_fun(&BASE_ACTION::Invoke)
-);
+        [](auto action){ action->Invoke(); });
 }
 
 #endif