LCOV - code coverage report
Current view: top level - include/Module/Stateful/Sink - Sink.hxx (source / functions) Hit Total Coverage
Test: streampu_clean.info Lines: 21 37 56.8 %
Date: 2025-03-14 12:33:06 Functions: 3 70 4.3 %

          Line data    Source code
       1             : #include <sstream>
       2             : #include <string>
       3             : 
       4             : #include "Module/Stateful/Sink/Sink.hpp"
       5             : #include "Tools/Exception/exception.hpp"
       6             : 
       7             : namespace spu
       8             : {
       9             : namespace module
      10             : {
      11             : 
      12             : template<typename B>
      13             : runtime::Task&
      14             : Sink<B>::operator[](const snk::tsk t)
      15             : {
      16             :     return Module::operator[]((size_t)t);
      17             : }
      18             : 
      19             : template<typename B>
      20             : runtime::Socket&
      21             : Sink<B>::operator[](const snk::sck::send s)
      22             : {
      23             :     return Module::operator[]((size_t)snk::tsk::send)[(size_t)s];
      24             : }
      25             : 
      26             : template<typename B>
      27             : runtime::Socket&
      28             : Sink<B>::operator[](const snk::sck::send_count s)
      29             : {
      30             :     return Module::operator[]((size_t)snk::tsk::send_count)[(size_t)s];
      31             : }
      32             : 
      33             : template<typename B>
      34             : runtime::Socket&
      35             : Sink<B>::operator[](const std::string& tsk_sck)
      36             : {
      37             :     return Module::operator[](tsk_sck);
      38             : }
      39             : 
      40             : template<typename B>
      41          60 : Sink<B>::Sink(const int max_data_size)
      42             :   : Stateful()
      43          60 :   , max_data_size(max_data_size)
      44             : {
      45          60 :     const std::string name = "Sink";
      46          60 :     this->set_name(name);
      47          60 :     this->set_short_name(name);
      48             : 
      49          60 :     if (max_data_size <= 0)
      50             :     {
      51           0 :         std::stringstream message;
      52           0 :         message << "'max_data_size' has to be greater than 0 ('max_data_size' = " << max_data_size << ").";
      53           0 :         throw tools::invalid_argument(__FILE__, __LINE__, __func__, message.str());
      54           0 :     }
      55             : 
      56          60 :     auto& p1 = this->create_task("send");
      57          60 :     auto p1s_in_data = this->template create_socket_in<B>(p1, "in_data", max_data_size);
      58          60 :     this->create_codelet(p1,
      59           0 :                          [p1s_in_data](Module& m, runtime::Task& t, const size_t frame_id) -> int
      60             :                          {
      61           0 :                              auto& snk = static_cast<Sink<B>&>(m);
      62           0 :                              snk._send(t[p1s_in_data].template get_dataptr<const B>(), frame_id);
      63           0 :                              return runtime::status_t::SUCCESS;
      64             :                          });
      65             : 
      66          60 :     auto& p2 = this->create_task("send_count");
      67          60 :     auto p2s_in_data = this->template create_socket_in<B>(p2, "in_data", max_data_size);
      68          60 :     auto p2s_in_count = this->template create_socket_in<uint32_t>(p2, "in_count", 1);
      69          60 :     this->create_codelet(p2,
      70       23692 :                          [p2s_in_data, p2s_in_count](Module& m, runtime::Task& t, const size_t frame_id) -> int
      71             :                          {
      72       11846 :                              auto& snk = static_cast<Sink<B>&>(m);
      73       11846 :                              snk._send_count(t[p2s_in_data].template get_dataptr<const B>(),
      74       11846 :                                              t[p2s_in_count].template get_dataptr<const uint32_t>(),
      75             :                                              frame_id);
      76       11846 :                              return runtime::status_t::SUCCESS;
      77             :                          });
      78          60 : }
      79             : 
      80             : template<typename B>
      81             : Sink<B>*
      82          38 : Sink<B>::clone() const
      83             : {
      84          38 :     throw tools::unimplemented_error(__FILE__, __LINE__, __func__);
      85             : }
      86             : 
      87             : template<typename B>
      88             : template<class A>
      89             : void
      90             : Sink<B>::send(const std::vector<B, A>& in_data, const int frame_id, const bool managed_memory)
      91             : {
      92             :     (*this)[snk::sck::send::in_data].bind(in_data);
      93             :     (*this)[snk::tsk::send].exec(frame_id, managed_memory);
      94             : }
      95             : 
      96             : template<typename B>
      97             : void
      98             : Sink<B>::send(const B* in_data, const int frame_id, const bool managed_memory)
      99             : {
     100             :     (*this)[snk::sck::send::in_data].bind(in_data);
     101             :     (*this)[snk::tsk::send].exec(frame_id, managed_memory);
     102             : }
     103             : 
     104             : template<typename B>
     105             : template<class A>
     106             : void
     107             : Sink<B>::send_count(const std::vector<B, A>& in_data,
     108             :                     const std::vector<uint32_t>& in_count,
     109             :                     const int frame_id,
     110             :                     const bool managed_memory)
     111             : {
     112             :     (*this)[snk::sck::send_count::in_data].bind(in_data);
     113             :     (*this)[snk::sck::send_count::in_count].bind(in_count);
     114             :     (*this)[snk::tsk::send_count].exec(frame_id, managed_memory);
     115             : }
     116             : 
     117             : template<typename B>
     118             : void
     119             : Sink<B>::send_count(const B* in_data, uint32_t* in_count, const int frame_id, const bool managed_memory)
     120             : {
     121             :     (*this)[snk::sck::send_count::in_data].bind(in_data);
     122             :     (*this)[snk::sck::send_count::in_count].bind(in_count);
     123             :     (*this)[snk::tsk::send_count].exec(frame_id, managed_memory);
     124             : }
     125             : 
     126             : template<typename B>
     127             : void
     128           0 : Sink<B>::_send(const B* in_data, const size_t frame_id)
     129             : {
     130           0 :     const uint32_t in_count = (uint32_t)this->max_data_size;
     131           0 :     this->_send_count(in_data, &in_count, frame_id);
     132           0 : }
     133             : 
     134             : template<typename B>
     135             : void
     136           0 : Sink<B>::_send_count(const B* /*in_data*/, const uint32_t* /*in_count*/, const size_t /*frame_id*/)
     137             : {
     138           0 :     throw tools::unimplemented_error(__FILE__, __LINE__, __func__);
     139             : }
     140             : 
     141             : template<typename B>
     142             : void
     143           0 : Sink<B>::reset()
     144             : {
     145             :     // do nothing in the general case, this method has to be overrided
     146           0 : }
     147             : 
     148             : }
     149             : }

Generated by: LCOV version 1.14