NRP Core  1.4.1
input_time.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 INPUT_TIME_H
23 #define INPUT_TIME_H
24 
26 
29 
35 class InputTimeBaseNode : public InputNode<ulong> {
36 public:
37 
38  InputTimeBaseNode(const std::string &id) :
39  InputNode(id)
40  {}
41 
42 protected:
43 
45  void updateTimeInfo(ulong newTime)
46  {
47  _time = newTime;
48  _hasNew = true;
49  }
50 
51  void configure() override
52  {}
53 
54  bool updatePortData(const std::string& id) override
55  {
56  if(!_hasNew)
57  return false;
58 
59  if(!_portMap.at(id).size())
60  _portMap.at(id).addMsg(&_time);
61 
62  _hasNew = false;
63  return true;
64  }
65 
66 private:
67 
69  ulong _time;
71  bool _hasNew = false;
72 };
73 
78 
79 public:
80 
81  InputClockNode(const std::string &id) :
83  {}
84 
87  { this->updateTimeInfo(std::chrono::duration_cast<std::chrono::milliseconds>(newTime).count()); }
88 
89 };
90 
91 
92 class InputClockEdge : public SimpleInputEdge<ulong, InputClockNode> {
93 
94 public:
95 
96  InputClockEdge(const std::string& keyword) :
97  SimpleInputEdge<ulong, InputClockNode>(keyword, "clock_node", "clock", InputNodePolicies::LAST, InputNodePolicies::KEEP_CACHE)
98  {}
99 
100 protected:
101 
103  { return new InputClockNode(this->_id); }
104 };
105 
110 
111 public:
112 
113  InputIterationNode(const std::string &id) :
115  {}
116 
118  void updateIteration(ulong newIteration)
119  { this->updateTimeInfo(newIteration); }
120 
121 };
122 
123 
124 class InputIterationEdge : public SimpleInputEdge<ulong, InputIterationNode> {
125 
126 public:
127 
128  InputIterationEdge(const std::string& keyword) :
129  SimpleInputEdge<ulong, InputIterationNode>(keyword, "iteration_node", "iteration", InputNodePolicies::LAST, InputNodePolicies::KEEP_CACHE)
130  {}
131 
132 protected:
133 
135  { return new InputIterationNode(this->_id); }
136 };
137 
138 
139 #endif //INPUT_TIME_H
InputIterationEdge::makeNewNode
InputIterationNode * makeNewNode()
Definition: input_time.h:134
input_node.h
InputClockNode
Specialization of InputTimeBaseNode which stores and sends system clock in milliseconds.
Definition: input_time.h:77
InputNodePolicies::KEEP_CACHE
@ KEEP_CACHE
Definition: computational_node_policies.h:29
InputNode
Implementation of an input node in the computation graph.
Definition: input_node.h:129
InputNode< ulong >::_portMap
std::map< std::string, DataPortHandle< ulong > > _portMap
Map containing data to handle topics. Data is guaranteed to be unchanged between 'compute' calls
Definition: input_node.h:219
InputIterationEdge
Definition: input_time.h:124
InputTimeBaseNode::InputTimeBaseNode
InputTimeBaseNode(const std::string &id)
Definition: input_time.h:38
InputTimeBaseNode
Time base input node which sends the system time related information into the graph as an unsigned lo...
Definition: input_time.h:35
InputIterationNode::InputIterationNode
InputIterationNode(const std::string &id)
Definition: input_time.h:113
InputTimeBaseNode::configure
void configure() override
Configures the node making it ready to execute 'compute'.
Definition: input_time.h:51
InputClockNode::updateClock
void updateClock(SimulationTime newTime)
Sets Node clock in milliseconds.
Definition: input_time.h:86
ComputationalNode::id
const std::string & id() const
Returns the node 'id'.
Definition: computational_node.h:57
InputTimeBaseNode::updateTimeInfo
void updateTimeInfo(ulong newTime)
Updates node time info, which is sent to connected nodes.
Definition: input_time.h:45
InputIterationEdge::InputIterationEdge
InputIterationEdge(const std::string &keyword)
Definition: input_time.h:128
InputClockEdge::InputClockEdge
InputClockEdge(const std::string &keyword)
Definition: input_time.h:96
InputTimeBaseNode::updatePortData
bool updatePortData(const std::string &id) override
Updates pointers stored in _portMap for port 'id'.
Definition: input_time.h:54
InputEdge::_id
std::string _id
Definition: input_edge.h:151
InputIterationNode::updateIteration
void updateIteration(ulong newIteration)
Sets Node iteration number.
Definition: input_time.h:118
time_utils.h
InputIterationNode
Specialization of InputTimeBaseNode which stores and sends system iteration number.
Definition: input_time.h:109
input_edge.h
InputNodePolicies::LAST
@ LAST
Definition: computational_node_policies.h:34
InputClockNode::InputClockNode
InputClockNode(const std::string &id)
Definition: input_time.h:81
InputEdge
Helper template class used to implement Python input edge decorators.
Definition: input_edge.h:38
InputClockEdge::makeNewNode
InputClockNode * makeNewNode()
Definition: input_time.h:102
SimulationTime
std::chrono::nanoseconds SimulationTime
Definition: time_utils.h:31
InputClockEdge
Definition: input_time.h:92
InputNodePolicies
Definition: computational_node_policies.h:25