skullc-peripherals/Threads/Inc/threads_iactor.hpp

69 lines
1.2 KiB
C++

/*
* threads_iactor.hpp
*
* Created on: Nov 14, 2021
* Author: erki
*/
#ifndef SKULLC_THREADS_IACTOR_HPP_
#define SKULLC_THREADS_IACTOR_HPP_
#include <cstdint>
#include <freertos_os2.h>
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<typename T>
void dispatchEvent(const T& data)
{
dispatchEventImpl_(&data, sizeof(T));
}
template<typename T>
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_ */