/* * threads_iactor.hpp * * Created on: Nov 14, 2021 * Author: erki */ #ifndef SKULLC_THREADS_IACTOR_HPP_ #define SKULLC_THREADS_IACTOR_HPP_ #include #include namespace Threads { class ActorThread; class IActor { public: IActor(const std::size_t signal_size) : signal_size_(signal_size) {} virtual ~IActor() {} virtual void init() = 0; virtual void dispatchSignal(const char* data) = 0; void moveToThread(ActorThread* thread); std::size_t actorIndex() const { return actor_index_; } std::size_t signalSize() const { return signal_size_; } protected: template void dispatchEvent(const T& data) { dispatchEventImpl_(&data, sizeof(T)); } template BaseType_t dispatchEventFromIsr(const T& data) { return dispatchEventFromIsrImpl_(&data, sizeof(T)); } private: ActorThread* parent_thread_ = nullptr; std::size_t actor_index_ = 0; std::size_t signal_size_; void dispatchEventImpl_(const void* data, const std::size_t data_size); BaseType_t dispatchEventFromIsrImpl_(const void* data, const std::size_t data_size); }; }// namespace Threads #endif /* SKULLC_THREADS_IACTOR_HPP_ */