LCOV - code coverage report
Current view: top level - include/Module - Module.hpp (source / functions) Hit Total Coverage
Test: streampu_clean.info Lines: 1 1 100.0 %
Date: 2025-01-23 20:18:05 Functions: 1 2 50.0 %

          Line data    Source code
       1             : /*!
       2             :  * \file
       3             :  * \brief Class module::Module.
       4             :  */
       5             : #ifndef MODULE_HPP_
       6             : #define MODULE_HPP_
       7             : 
       8             : #include <cstddef>
       9             : #include <functional>
      10             : #include <memory>
      11             : #include <string>
      12             : #include <type_traits>
      13             : #include <vector>
      14             : 
      15             : #include "Runtime/Socket/Socket.hpp"
      16             : #include "Runtime/Task/Task.hpp"
      17             : #include "Tools/Interface/Interface_clone.hpp"
      18             : #include "Tools/Interface/Interface_get_set_n_frames.hpp"
      19             : 
      20             : namespace spu
      21             : {
      22             : namespace module
      23             : {
      24             : class Stateful;
      25             : class Stateless;
      26             : /*!
      27             :  * \class Module
      28             :  *
      29             :  * \brief A Module is an abstract concept. Basically, all the objects used in a Simulation are a Module.
      30             :  */
      31             : class Module
      32             :   : public tools::Interface_clone
      33             :   , public tools::Interface_get_set_n_frames
      34             : {
      35             :     friend Stateful;
      36             :     friend Stateless;
      37             : 
      38             :   protected:
      39             :     size_t n_frames; /*!< Number of frames to process in this Module */
      40             :     size_t n_frames_per_wave;
      41             :     size_t n_waves;
      42             :     size_t n_frames_per_wave_rest;
      43             :     bool single_wave;
      44             :     std::string name;        /*!< Name of the Module. */
      45             :     std::string short_name;  /*!< Short name of the Module. */
      46             :     std::string custom_name; /*!< Custom name of the Module. */
      47             :     std::vector<std::shared_ptr<runtime::Task>> tasks_with_nullptr;
      48             : 
      49             :   public:
      50             :     std::vector<std::shared_ptr<runtime::Task>> tasks;
      51             : 
      52             :   protected:
      53             :     /*!
      54             :      * \brief Constructor.
      55             :      */
      56             :     explicit Module();
      57             : 
      58             :   public:
      59             :     /*!
      60             :      * \brief Destructor.
      61             :      */
      62        1509 :     virtual ~Module() = default;
      63             : 
      64             :     virtual Module* clone() const;
      65             : 
      66             :     /*!
      67             :      * \brief Get the number of frames.
      68             :      *
      69             :      * \return the number of frames to process in this Module.
      70             :      */
      71             :     inline size_t get_n_frames() const;
      72             : 
      73             :     virtual void set_n_frames(const size_t n_frames);
      74             : 
      75             :     inline size_t get_n_frames_per_wave() const;
      76             : 
      77             :     inline size_t get_n_waves() const;
      78             : 
      79             :     inline size_t get_n_frames_per_wave_rest() const;
      80             : 
      81             :     inline bool is_single_wave() const;
      82             : 
      83             :     const std::string& get_name() const;
      84             : 
      85             :     const std::string& get_short_name() const;
      86             : 
      87             :     void set_custom_name(const std::string& custom_name);
      88             : 
      89             :     const std::string& get_custom_name() const;
      90             : 
      91             :     void remove_custom_name();
      92             : 
      93             :     inline runtime::Task& operator[](const size_t id);
      94             :     inline const runtime::Task& operator[](const size_t id) const;
      95             :     inline runtime::Socket& operator[](const std::string& tsk_sck);
      96             :     inline runtime::Task& operator()(const std::string& tsk_name);
      97             : 
      98             :     void set_fast(const bool fast);
      99             : 
     100             :     void create_reset_task();
     101             : 
     102             :     bool is_stateless() const;
     103             :     bool is_stateful() const;
     104             :     bool is_clonable() const;
     105             : 
     106             :   private:
     107             :     void deep_copy(const Module& m);
     108             : 
     109             :     void set_name(const std::string& name);
     110             : 
     111             :     void set_short_name(const std::string& short_name);
     112             : 
     113             :     runtime::Task& create_task(const std::string& name, const int id = -1);
     114             :     runtime::Task& create_tsk(const std::string& name, const int id = -1);
     115             : 
     116             :     template<typename T>
     117             :     size_t create_socket_in(runtime::Task& task, const std::string& name, const size_t n_elmts);
     118             :     size_t create_socket_in(runtime::Task& task,
     119             :                             const std::string& name,
     120             :                             const size_t n_elmts,
     121             :                             const std::type_index& datatype);
     122             :     size_t create_socket_in(runtime::Task& task,
     123             :                             const std::string& name,
     124             :                             const size_t n_elmts,
     125             :                             const runtime::datatype_t datatype);
     126             : 
     127             :     template<typename T>
     128             :     size_t create_sck_in(runtime::Task& task, const std::string& name, const size_t n_elmts);
     129             :     size_t create_sck_in(runtime::Task& task,
     130             :                          const std::string& name,
     131             :                          const size_t n_elmts,
     132             :                          const std::type_index& datatype);
     133             :     size_t create_sck_in(runtime::Task& task,
     134             :                          const std::string& name,
     135             :                          const size_t n_elmts,
     136             :                          const runtime::datatype_t datatype);
     137             : 
     138             :     template<typename T>
     139             :     size_t create_socket_out(runtime::Task& task, const std::string& name, const size_t n_elmts);
     140             :     size_t create_socket_out(runtime::Task& task,
     141             :                              const std::string& name,
     142             :                              const size_t n_elmts,
     143             :                              const std::type_index& datatype);
     144             :     size_t create_socket_out(runtime::Task& task,
     145             :                              const std::string& name,
     146             :                              const size_t n_elmts,
     147             :                              const runtime::datatype_t datatype);
     148             : 
     149             :     template<typename T>
     150             :     size_t create_sck_out(runtime::Task& task, const std::string& name, const size_t n_elmts);
     151             :     size_t create_sck_out(runtime::Task& task,
     152             :                           const std::string& name,
     153             :                           const size_t n_elmts,
     154             :                           const std::type_index& datatype);
     155             :     size_t create_sck_out(runtime::Task& task,
     156             :                           const std::string& name,
     157             :                           const size_t n_elmts,
     158             :                           const runtime::datatype_t datatype);
     159             : 
     160             :     template<typename T>
     161             :     size_t create_socket_fwd(runtime::Task& task, const std::string& name, const size_t n_elmts);
     162             :     size_t create_socket_fwd(runtime::Task& task,
     163             :                              const std::string& name,
     164             :                              const size_t n_elmts,
     165             :                              const std::type_index& datatype);
     166             :     size_t create_socket_fwd(runtime::Task& task,
     167             :                              const std::string& name,
     168             :                              const size_t n_elmts,
     169             :                              const runtime::datatype_t datatype);
     170             : 
     171             :     template<typename T>
     172             :     size_t create_sck_fwd(runtime::Task& task, const std::string& name, const size_t n_elmts);
     173             :     size_t create_sck_fwd(runtime::Task& task,
     174             :                           const std::string& name,
     175             :                           const size_t n_elmts,
     176             :                           const std::type_index& datatype);
     177             :     size_t create_sck_fwd(runtime::Task& task,
     178             :                           const std::string& name,
     179             :                           const size_t n_elmts,
     180             :                           const runtime::datatype_t datatype);
     181             : 
     182             :     template<typename T>
     183             :     size_t create_2d_socket_in(runtime::Task& task, const std::string& name, const size_t n_rows, const size_t n_cols);
     184             :     size_t create_2d_socket_in(runtime::Task& task,
     185             :                                const std::string& name,
     186             :                                const size_t n_rows,
     187             :                                const size_t n_cols,
     188             :                                const std::type_index& datatype);
     189             :     size_t create_2d_socket_in(runtime::Task& task,
     190             :                                const std::string& name,
     191             :                                const size_t n_rows,
     192             :                                const size_t n_cols,
     193             :                                const runtime::datatype_t datatype);
     194             : 
     195             :     template<typename T>
     196             :     size_t create_2d_sck_in(runtime::Task& task, const std::string& name, const size_t n_rows, const size_t n_cols);
     197             :     size_t create_2d_sck_in(runtime::Task& task,
     198             :                             const std::string& name,
     199             :                             const size_t n_rows,
     200             :                             const size_t n_cols,
     201             :                             const std::type_index& datatype);
     202             :     size_t create_2d_sck_in(runtime::Task& task,
     203             :                             const std::string& name,
     204             :                             const size_t n_rows,
     205             :                             const size_t n_cols,
     206             :                             const runtime::datatype_t datatype);
     207             : 
     208             :     template<typename T>
     209             :     size_t create_2d_socket_out(runtime::Task& task, const std::string& name, const size_t n_rows, const size_t n_cols);
     210             :     size_t create_2d_socket_out(runtime::Task& task,
     211             :                                 const std::string& name,
     212             :                                 const size_t n_rows,
     213             :                                 const size_t n_cols,
     214             :                                 const std::type_index& datatype);
     215             :     size_t create_2d_socket_out(runtime::Task& task,
     216             :                                 const std::string& name,
     217             :                                 const size_t n_rows,
     218             :                                 const size_t n_cols,
     219             :                                 const runtime::datatype_t datatype);
     220             : 
     221             :     template<typename T>
     222             :     size_t create_2d_sck_out(runtime::Task& task, const std::string& name, const size_t n_rows, const size_t n_cols);
     223             :     size_t create_2d_sck_out(runtime::Task& task,
     224             :                              const std::string& name,
     225             :                              const size_t n_rows,
     226             :                              const size_t n_cols,
     227             :                              const std::type_index& datatype);
     228             :     size_t create_2d_sck_out(runtime::Task& task,
     229             :                              const std::string& name,
     230             :                              const size_t n_rows,
     231             :                              const size_t n_cols,
     232             :                              const runtime::datatype_t datatype);
     233             : 
     234             :     template<typename T>
     235             :     size_t create_2d_socket_fwd(runtime::Task& task, const std::string& name, const size_t n_rows, const size_t n_cols);
     236             :     size_t create_2d_socket_fwd(runtime::Task& task,
     237             :                                 const std::string& name,
     238             :                                 const size_t n_rows,
     239             :                                 const size_t n_cols,
     240             :                                 const std::type_index& datatype);
     241             :     size_t create_2d_socket_fwd(runtime::Task& task,
     242             :                                 const std::string& name,
     243             :                                 const size_t n_rows,
     244             :                                 const size_t n_cols,
     245             :                                 const runtime::datatype_t datatype);
     246             : 
     247             :     template<typename T>
     248             :     size_t create_2d_sck_fwd(runtime::Task& task, const std::string& name, const size_t n_rows, const size_t n_cols);
     249             :     size_t create_2d_sck_fwd(runtime::Task& task,
     250             :                              const std::string& name,
     251             :                              const size_t n_rows,
     252             :                              const size_t n_cols,
     253             :                              const std::type_index& datatype);
     254             :     size_t create_2d_sck_fwd(runtime::Task& task,
     255             :                              const std::string& name,
     256             :                              const size_t n_rows,
     257             :                              const size_t n_cols,
     258             :                              const runtime::datatype_t datatype);
     259             : 
     260             :     void create_codelet(runtime::Task& task,
     261             :                         std::function<int(Module& m, runtime::Task& t, const size_t frame_id)> codelet);
     262             :     void create_cdl(runtime::Task& task,
     263             :                     std::function<int(Module& m, runtime::Task& t, const size_t frame_id)> codelet);
     264             : 
     265             :     void register_timer(runtime::Task& task, const std::string& key);
     266             : 
     267             :     virtual void set_n_frames_per_wave(const size_t n_frames_per_wave);
     268             : 
     269             :     void set_single_wave(const bool enable_single_wave);
     270             : 
     271             :     void _set_n_frames_per_wave(const size_t n_frames_per_wave);
     272             :     void _set_n_frames(const size_t n_frames);
     273             : };
     274             : }
     275             : }
     276             : 
     277             : #ifndef DOXYGEN_SHOULD_SKIP_THIS
     278             : #include "Module/Module.hxx"
     279             : #endif
     280             : 
     281             : #endif /* MODULE_HPP_ */

Generated by: LCOV version 1.14