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