NRP Core  1.4.1
datapack_handle.h
Go to the documentation of this file.
1 /* * NRP Core - Backend infrastructure to synchronize simulations
2  *
3  * Copyright 2020-2023 NRP Team
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * This project has received funding from the European Union’s Horizon 2020
18  * Framework Programme for Research and Innovation under the Specific Grant
19  * Agreement No. 945539 (Human Brain Project SGA3).
20  */
21 
22 #ifndef DATAPACK_HANDLE_H
23 #define DATAPACK_HANDLE_H
24 
30 
35 
36 public:
37 
38  using engine_interfaces_t = std::vector<EngineClientInterfaceSharedPtr>;
39 
40  DataPackProcessor() = delete;
41  DataPackProcessor(SimulationDataManager * simulationDataManager):
42  _simulationDataManager(simulationDataManager)
43  {}
44 
45  virtual ~DataPackProcessor() = default;
46 
53  virtual void init(const jsonSharedPtr &simConfig, const engine_interfaces_t &engines) = 0;
54 
60  virtual void updateDataPacksFromEngines(const std::vector<EngineClientInterfaceSharedPtr> &engines) = 0;
61 
67  virtual void compute(const std::vector<EngineClientInterfaceSharedPtr> &engines) = 0;
68 
74  virtual void sendDataPacksToEngines(const std::vector<EngineClientInterfaceSharedPtr> &engines) = 0;
75 
81  virtual void postEngineInit(const std::vector<EngineClientInterfaceSharedPtr> &/*engines*/)
82  {}
83 
89  virtual void preEngineReset(const std::vector<EngineClientInterfaceSharedPtr> &/*engines*/)
90  {}
91 
97  virtual void postEngineReset(const std::vector<EngineClientInterfaceSharedPtr> &/*engines*/)
98  {}
99 
106  void datapackCycle(const std::vector<EngineClientInterfaceSharedPtr> &engines)
107  {
109  NRP_LOG_TIME("after_get_datapacks");
110  compute(engines);
111  NRP_LOG_TIME("after_run_tfs");
112  sendDataPacksToEngines(engines);
113  NRP_LOG_TIME("after_send_datapacks");
115  }
116 
117  void setSimulationTime(SimulationTime simulationTime)
118  {
119  this->_simulationTime = simulationTime;
120  }
121 
122  void setSimulationIteration(unsigned long simulationIteration)
123  {
124  this->_simulationIteration = simulationIteration;
125  }
126 
127 protected:
128 
130  SimulationTime _simulationTime = SimulationTime::zero();
131  unsigned long _simulationIteration = 0L;
132 };
133 
134 #endif // DATAPACK_HANDLE_H
SimulationDataManager::startNewIteration
void startNewIteration()
Performs bookkeeping at start of the simulation iteration.
Definition: simulation_data_manager.cpp:172
DataPackProcessor::init
virtual void init(const jsonSharedPtr &simConfig, const engine_interfaces_t &engines)=0
Initializes the handler.
DataPackProcessor::postEngineInit
virtual void postEngineInit(const std::vector< EngineClientInterfaceSharedPtr > &)
Performs post-engine-initialization DataPack operations.
Definition: datapack_handle.h:81
DataPackProcessor::updateDataPacksFromEngines
virtual void updateDataPacksFromEngines(const std::vector< EngineClientInterfaceSharedPtr > &engines)=0
Request datapacks from engines.
DataPackProcessor::DataPackProcessor
DataPackProcessor(SimulationDataManager *simulationDataManager)
Definition: datapack_handle.h:41
simulation_data_manager.h
engine_client_interface.h
DataPackProcessor::DataPackProcessor
DataPackProcessor()=delete
NRP_LOG_TIME
#define NRP_LOG_TIME(filename)
Definition: time_utils.h:165
DataPackProcessor::_simulationDataManager
SimulationDataManager * _simulationDataManager
Definition: datapack_handle.h:129
jsonSharedPtr
std::shared_ptr< nlohmann::json > jsonSharedPtr
Definition: json_schema_utils.h:35
DataPackProcessor
Helper class for FTILoop encapsulating the datapack operations between Engines in a simulation loop.
Definition: datapack_handle.h:34
function_manager.h
DataPackProcessor::preEngineReset
virtual void preEngineReset(const std::vector< EngineClientInterfaceSharedPtr > &)
Performs pre-engine-reset DataPack operations.
Definition: datapack_handle.h:89
DataPackProcessor::_simulationIteration
unsigned long _simulationIteration
Definition: datapack_handle.h:131
SimulationDataManager
Manages all simulation data.
Definition: simulation_data_manager.h:53
json_schema_utils.h
time_utils.h
DataPackProcessor::setSimulationTime
void setSimulationTime(SimulationTime simulationTime)
Definition: datapack_handle.h:117
DataPackProcessor::sendDataPacksToEngines
virtual void sendDataPacksToEngines(const std::vector< EngineClientInterfaceSharedPtr > &engines)=0
Send datapacks to engines.
DataPackProcessor::~DataPackProcessor
virtual ~DataPackProcessor()=default
DataPackProcessor::setSimulationIteration
void setSimulationIteration(unsigned long simulationIteration)
Definition: datapack_handle.h:122
DataPackProcessor::postEngineReset
virtual void postEngineReset(const std::vector< EngineClientInterfaceSharedPtr > &)
Performs post-engine-reset DataPack operations.
Definition: datapack_handle.h:97
DataPackProcessor::datapackCycle
void datapackCycle(const std::vector< EngineClientInterfaceSharedPtr > &engines)
Execute sequentially the update, compute and send operations.
Definition: datapack_handle.h:106
DataPackProcessor::compute
virtual void compute(const std::vector< EngineClientInterfaceSharedPtr > &engines)=0
Perform computations on datapacks.
SimulationTime
std::chrono::nanoseconds SimulationTime
Definition: time_utils.h:31
DataPackProcessor::_simulationTime
SimulationTime _simulationTime
Definition: datapack_handle.h:130
DataPackProcessor::engine_interfaces_t
std::vector< EngineClientInterfaceSharedPtr > engine_interfaces_t
Definition: datapack_handle.h:38