Line data Source code
1 : /*! 2 : * \file 3 : * \brief Class module::Initializer. 4 : */ 5 : #ifndef INITIALIZER_HPP_ 6 : #define INITIALIZER_HPP_ 7 : 8 : #include <cstdint> 9 : 10 : #include "Module/Stateful/Stateful.hpp" 11 : 12 : namespace spu 13 : { 14 : namespace module 15 : { 16 : namespace ini 17 : { 18 : enum class tsk : size_t 19 : { 20 : initialize, 21 : SIZE 22 : }; 23 : 24 : namespace sck 25 : { 26 : enum class initialize : size_t 27 : { 28 : out, 29 : status 30 : }; 31 : } 32 : } 33 : 34 : template<typename T = int> 35 : class Initializer : public Stateful 36 : { 37 : public: 38 : inline runtime::Task& operator[](const ini::tsk t); 39 : inline runtime::Socket& operator[](const ini::sck::initialize s); 40 : inline runtime::Socket& operator[](const std::string& tsk_sck); 41 : 42 : protected: 43 : std::vector<std::vector<T>> init_data; 44 : size_t ns; 45 : 46 : public: 47 : Initializer(const size_t n_elmts, const size_t ns = 0); 48 146 : virtual ~Initializer() = default; 49 : virtual Initializer* clone() const; 50 : 51 : size_t get_ns() const; 52 : void set_ns(const size_t ns); 53 : 54 : const std::vector<std::vector<T>>& get_init_data() const; 55 : 56 : void set_init_data(const std::vector<T>& init_data); 57 : void set_init_data(const std::vector<std::vector<T>>& init_data); 58 : void set_init_data(const T val); 59 : void set_n_frames(const size_t n_frames); 60 : 61 : template<class A = std::allocator<T>> 62 : void initialize(std::vector<T, A>& out, const int frame_id = -1, const bool managed_memory = true); 63 : 64 : void initialize(T* out, const int frame_id = -1, const bool managed_memory = true); 65 : 66 : protected: 67 : virtual void _initialize(T* out, const size_t frame_id); 68 : }; 69 : } 70 : } 71 : 72 : #ifndef DOXYGEN_SHOULD_SKIP_THIS 73 : #include "Module/Stateful/Initializer/Initializer.hxx" 74 : #endif 75 : 76 : #endif /* INITIALIZER_HPP_ */