#ifndef __ACTIONS_INL_H__ #define __ACTIONS_INL_H__ #include #include "stg_locker.h" // Polymorphick action invocation template inline void ACTION::Invoke() { (activeClass.*actor)(data); } inline ACTIONS_LIST::ACTIONS_LIST() : mutex() { pthread_mutex_init(&mutex, NULL); }; // Delete all actions before deleting list inline ACTIONS_LIST::~ACTIONS_LIST() { { STG_LOCKER(&mutex, __FILE__, __LINE__); parent::iterator it(parent::begin()); while (it != parent::end()) { delete *it++; } } pthread_mutex_destroy(&mutex); }; inline ACTIONS_LIST::parent::iterator ACTIONS_LIST::begin() { STG_LOCKER lock(&mutex, __FILE__, __LINE__); return parent::begin(); }; inline ACTIONS_LIST::parent::iterator ACTIONS_LIST::end() { STG_LOCKER lock(&mutex, __FILE__, __LINE__); return parent::end(); }; inline ACTIONS_LIST::parent::const_iterator ACTIONS_LIST::begin() const { STG_LOCKER lock(&mutex, __FILE__, __LINE__); return parent::begin(); }; inline ACTIONS_LIST::parent::const_iterator ACTIONS_LIST::end() const { STG_LOCKER lock(&mutex, __FILE__, __LINE__); return parent::end(); }; inline bool ACTIONS_LIST::empty() const { STG_LOCKER lock(&mutex, __FILE__, __LINE__); return parent::empty(); }; inline size_t ACTIONS_LIST::size() const { STG_LOCKER lock(&mutex, __FILE__, __LINE__); return parent::size(); }; inline void ACTIONS_LIST::swap(ACTIONS_LIST & list) { STG_LOCKER lock(&mutex, __FILE__, __LINE__); parent::swap(list); }; template inline void ACTIONS_LIST::Enqueue(ACTIVE_CLASS & ac, typename ACTOR::TYPE a, DATA_TYPE d) { STG_LOCKER lock(&mutex, __FILE__, __LINE__); push_back(new ACTION(ac, a, d)); } inline void ACTIONS_LIST::InvokeAll() { STG_LOCKER lock(&mutex, __FILE__, __LINE__); std::for_each( parent::begin(), parent::end(), std::mem_fun(&BASE_ACTION::Invoke) ); }; #endif