Line data Source code
1 : /*! 2 : * \file 3 : * \brief Class module::Source. 4 : */ 5 : #ifndef SOURCE_HPP_ 6 : #define SOURCE_HPP_ 7 : 8 : #include <cstdint> 9 : #include <memory> 10 : #include <vector> 11 : 12 : #include "Module/Stateful/Stateful.hpp" 13 : #include "Runtime/Socket/Socket.hpp" 14 : #include "Runtime/Task/Task.hpp" 15 : #include "Tools/Interface/Interface_is_done.hpp" 16 : #include "Tools/Interface/Interface_reset.hpp" 17 : #include "Tools/Interface/Interface_set_seed.hpp" 18 : 19 : namespace spu 20 : { 21 : namespace module 22 : { 23 : namespace src 24 : { 25 : enum class tsk : size_t 26 : { 27 : generate, 28 : SIZE 29 : }; 30 : 31 : namespace sck 32 : { 33 : enum class generate : size_t 34 : { 35 : out_data, 36 : out_count, 37 : status 38 : }; 39 : } 40 : } 41 : 42 : template<typename B = int> 43 : class Source 44 : : public Stateful 45 : , public tools::Interface_set_seed 46 : , public tools::Interface_is_done 47 : , public tools::Interface_reset 48 : { 49 : public: 50 : inline runtime::Task& operator[](const src::tsk t); 51 : inline runtime::Socket& operator[](const src::sck::generate s); 52 : inline runtime::Socket& operator[](const std::string& tsk_sck); 53 : 54 : protected: 55 : const int max_data_size; 56 : 57 : public: 58 : Source(const int max_data_size); 59 : 60 18 : virtual ~Source() = default; 61 : 62 : virtual Source<B>* clone() const; 63 : 64 : virtual int get_max_data_size() const; 65 : 66 : template<class A = std::allocator<B>> 67 : void generate(std::vector<B, A>& out_data, const int frame_id = -1, const bool managed_memory = true); 68 : 69 : void generate(B* out_data, const int frame_id = -1, const bool managed_memory = true); 70 : 71 : template<class A = std::allocator<B>> 72 : void generate(std::vector<B, A>& out_data, 73 : std::vector<uint32_t>& out_count, 74 : const int frame_id = -1, 75 : const bool managed_memory = true); 76 : 77 : void generate(B* out_data, uint32_t* out_count, const int frame_id = -1, const bool managed_memory = true); 78 : 79 : virtual void set_seed(const int seed); 80 : 81 : virtual bool is_done() const; 82 : 83 : virtual void reset(); 84 : 85 : protected: 86 : virtual void _generate(B* out_data, const size_t frame_id); 87 : virtual void _generate(B* out_data, uint32_t* out_count, const size_t frame_id); 88 : }; 89 : } 90 : } 91 : 92 : #ifndef DOXYGEN_SHOULD_SKIP_THIS 93 : #include "Module/Stateful/Source/Source.hxx" 94 : #endif 95 : 96 : #endif /* SOURCE_HPP_ */