helics  3.5.2
BaseTimeCoordinator.hpp
1 /*
2 Copyright (c) 2017-2024,
3 Battelle Memorial Institute; Lawrence Livermore National Security, LLC; Alliance for Sustainable
4 Energy, LLC. See the top-level NOTICE for additional details. All rights reserved.
5 SPDX-License-Identifier: BSD-3-Clause
6 */
7 #pragma once
8 
9 #include "ActionMessage.hpp"
10 #include "CoreFederateInfo.hpp"
11 #include "TimeDependencies.hpp"
12 
13 #include "json/forwards.h"
14 #include <atomic>
15 #include <functional>
16 #include <string>
17 #include <utility>
18 #include <vector>
19 
20 namespace helics {
21 
26  protected:
29  std::function<void(const ActionMessage&)> sendMessageFunction;
31 
33  std::int32_t sequenceCounter{0};
34  bool noParent{true};
35  bool federatesOnly{false};
36  bool checkingExec{false};
37  bool executionMode{false};
42  bool nonGranting{false};
43  bool delayedTiming{false};
44  bool disconnected{false};
45 
46  public:
47  static constexpr std::int32_t TIME_COORDINATOR_VERSION{1};
48  BaseTimeCoordinator();
49  explicit BaseTimeCoordinator(std::function<void(const ActionMessage&)> userSendMessageFunction);
50  virtual ~BaseTimeCoordinator() = default;
52  void setMessageSender(std::function<void(const ActionMessage&)> userSendMessageFunction);
53 
54  void setRestrictivePolicy(bool policy) { restrictive_time_policy = policy; }
56  std::vector<GlobalFederateId> getDependencies() const;
58  std::vector<GlobalFederateId> getDependents() const;
60  Time getLastGrant(GlobalFederateId fedId) const;
62  void setSourceId(GlobalFederateId sourceId) { mSourceId = sourceId; }
63  GlobalFederateId sourceId() const { return mSourceId; }
67  virtual bool updateTimeFactors() = 0;
68 
74  bool isDependency(GlobalFederateId ofed) const;
76  bool empty() const { return dependencies.empty(); }
77 
78  protected:
81  GlobalFederateId fed,
82  std::int32_t responseCode) const;
84  void sendTimingInfo();
85 
86  public:
91 
97  virtual bool addDependency(GlobalFederateId fedID);
101  virtual bool addDependent(GlobalFederateId fedID);
104  virtual void removeDependency(GlobalFederateId fedID);
107  virtual void removeDependent(GlobalFederateId fedID);
110  virtual void resetDependency(GlobalFederateId fedID);
111 
112  void setAsChild(GlobalFederateId fedID);
113  void setAsParent(GlobalFederateId fedID);
114  void setVersion(GlobalFederateId fedID, std::int8_t version);
115  GlobalFederateId getParent() const;
116 
118  void disconnect();
122 
127 
129  virtual std::string printTimeStatus() const = 0;
131  virtual void generateDebuggingTimeInfo(Json::Value& base) const;
132 
134  bool hasActiveTimeDependencies() const;
135 
137  int dependencyCount() const;
140 
143  Json::Value grantTimeoutCheck(const ActionMessage& cmd);
145  virtual Time getNextTime() const = 0;
146 };
147 } // namespace helics
Definition: ActionMessage.hpp:30
Definition: BaseTimeCoordinator.hpp:25
const DependencyInfo * getDependencyInfo(GlobalFederateId ofed) const
Definition: BaseTimeCoordinator.cpp:237
bool executionMode
Definition: BaseTimeCoordinator.hpp:37
virtual void enteringExecMode(IterationRequest mode=IterationRequest::NO_ITERATIONS)
Definition: BaseTimeCoordinator.cpp:44
bool noParent
indicator that the coordinator does not have parents
Definition: BaseTimeCoordinator.hpp:34
virtual bool addDependency(GlobalFederateId fedID)
Definition: BaseTimeCoordinator.cpp:162
virtual void resetDependency(GlobalFederateId fedID)
Definition: BaseTimeCoordinator.cpp:232
virtual bool addDependent(GlobalFederateId fedID)
Definition: BaseTimeCoordinator.cpp:176
bool hasActiveTimeDependencies() const
Definition: BaseTimeCoordinator.cpp:270
void sendTimingInfo()
Definition: BaseTimeCoordinator.cpp:285
virtual MessageProcessingResult checkExecEntry(GlobalFederateId triggerFed=GlobalFederateId{})=0
void processDependencyUpdateMessage(const ActionMessage &cmd)
Definition: BaseTimeCoordinator.cpp:412
bool isDependency(GlobalFederateId ofed) const
Definition: BaseTimeCoordinator.cpp:157
TimeDependencies dependencies
Definition: BaseTimeCoordinator.hpp:27
virtual void generateDebuggingTimeInfo(Json::Value &base) const
Definition: BaseTimeCoordinator.cpp:124
Time getLastGrant(GlobalFederateId fedId) const
Definition: BaseTimeCoordinator.cpp:264
void disconnect()
Definition: BaseTimeCoordinator.cpp:79
bool empty() const
Definition: BaseTimeCoordinator.hpp:76
std::function< void(const ActionMessage &)> sendMessageFunction
callback used to send the messages
Definition: BaseTimeCoordinator.hpp:29
ActionMessage generateTimeRequest(const TimeData &dep, GlobalFederateId fed, std::int32_t responseCode) const
Definition: BaseTimeCoordinator.cpp:305
std::vector< GlobalFederateId > getDependents() const
Definition: BaseTimeCoordinator.cpp:253
bool restrictive_time_policy
flag indicating that a restrictive time policy should be used
Definition: BaseTimeCoordinator.hpp:39
GlobalFederateId mSourceId
the identifier for inserting into the source id field of any generated messages;
Definition: BaseTimeCoordinator.hpp:32
void setSourceId(GlobalFederateId sourceId)
Definition: BaseTimeCoordinator.hpp:62
GlobalFederateId getMinDependency() const
Definition: BaseTimeCoordinator.cpp:280
virtual TimeProcessingResult processTimeMessage(const ActionMessage &cmd)
Definition: BaseTimeCoordinator.cpp:384
virtual bool updateTimeFactors()=0
virtual void removeDependent(GlobalFederateId fedID)
Definition: BaseTimeCoordinator.cpp:227
std::int32_t sequenceCounter
storage for sequence counter
Definition: BaseTimeCoordinator.hpp:33
bool federatesOnly
indicator that the forwarder only operates with federates
Definition: BaseTimeCoordinator.hpp:35
virtual std::string printTimeStatus() const =0
virtual Time getNextTime() const =0
void setMessageSender(std::function< void(const ActionMessage &)> userSendMessageFunction)
Definition: BaseTimeCoordinator.cpp:35
std::vector< GlobalFederateId > getDependencies() const
Definition: BaseTimeCoordinator.cpp:242
virtual void removeDependency(GlobalFederateId fedID)
Definition: BaseTimeCoordinator.cpp:222
int dependencyCount() const
Definition: BaseTimeCoordinator.cpp:275
bool nonGranting
Definition: BaseTimeCoordinator.hpp:42
Json::Value grantTimeoutCheck(const ActionMessage &cmd)
Definition: BaseTimeCoordinator.cpp:142
Definition: TimeDependencies.hpp:98
Definition: GlobalFederateId.hpp:75
Definition: TimeDependencies.hpp:62
Definition: TimeDependencies.hpp:129
bool empty() const
Definition: TimeDependencies.hpp:173
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
MessageProcessingResult
Definition: CoreTypes.hpp:74
IterationRequest
Definition: CoreTypes.hpp:102
@ NO_ITERATIONS
indicator that the iterations have completed
TimeProcessingResult
Definition: TimeDependencies.hpp:42
TimeRepresentation< count_time< 9 > > Time
Definition: helicsTime.hpp:27