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