 |
helics
3.3.0
|
9 #include "basic_CoreTypes.hpp"
11 #include "json/forwards.h"
22 exec_requested_require_iteration = 1,
23 exec_requested_iterative = 2,
26 time_requested_require_iteration = 6,
27 time_requested_iterative = 7,
32 enum class ConnectionType : std::uint8_t {
44 PROCESSED_AND_CHECK = 2
48 enum class GrantDelayMode : std::uint8_t { NONE = 0, INTERRUPTED = 1, WAITING = 2 };
52 return waiting ? GrantDelayMode::WAITING :
53 (interrupted ? GrantDelayMode::INTERRUPTED : GrantDelayMode::NONE);
65 TimeState mTimeState{TimeState::initialized};
78 TimeData(
const TimeData&) =
default;
79 TimeData& operator=(
const TimeData&) =
default;
80 TimeData(TimeData&&) =
default;
81 TimeData& operator=(TimeData&&) =
default;
82 explicit TimeData(
Time start,
83 TimeState startState = TimeState::initialized,
84 std::uint8_t resLevel = 0U):
98 ConnectionType connection{ConnectionType::independent};
116 template<
class... Args>
118 TimeData(start, std::forward<Args>(args)...)
126 std::vector<DependencyInfo> dependencies;
151 auto size()
const {
return dependencies.size(); }
153 auto begin() {
return dependencies.begin(); }
155 auto end() {
return dependencies.end(); }
157 auto begin()
const {
return dependencies.cbegin(); }
159 auto end()
const {
return dependencies.cend(); }
161 auto cbegin()
const {
return dependencies.cbegin(); }
163 auto cend()
const {
return dependencies.cend(); }
166 bool empty()
const {
return dependencies.empty(); }
183 Time desiredGrantTime,
202 void setDependencyVector(
const std::vector<DependencyInfo>& deps) { dependencies = deps; }
207 bool hasDelayedDependency()
const {
return mDelayedDependency.
isValid(); }
208 GlobalFederateId delayedDependency()
const {
return mDelayedDependency; }
211 inline bool checkSequenceCounter(
const DependencyInfo& dep,
Time tmin, std::int32_t sq)
213 return (!dep.dependency || !dep.dependent || dep.timingVersion <= 0 || dep.next > tmin ||
214 dep.next >=
cBigTime || dep.responseSequenceCounter == sq);
217 const DependencyInfo& getExecEntryMinFederate(
const TimeDependencies& dependencies,
218 GlobalFederateId
self,
219 ConnectionType ignoreType = ConnectionType::none,
220 GlobalFederateId ignore = GlobalFederateId{});
221 static constexpr GlobalFederateId NoIgnoredFederates{};
223 TimeData generateMinTimeUpstream(
const TimeDependencies& dependencies,
225 GlobalFederateId
self,
226 GlobalFederateId ignore,
227 std::int32_t responseCode);
229 TimeData generateMinTimeDownstream(
const TimeDependencies& dependencies,
231 GlobalFederateId
self,
232 GlobalFederateId ignore,
233 std::int32_t responseCode);
235 TimeData generateMinTimeTotal(
const TimeDependencies& dependencies,
237 GlobalFederateId
self,
238 GlobalFederateId ignore,
239 std::int32_t responseCode);
241 void generateJsonOutputTimeData(Json::Value& output,
243 bool includeAggregates =
true);
245 void addTimeState(Json::Value& output,
const TimeState state);
247 void generateJsonOutputDependency(Json::Value& output,
const DependencyInfo& dep);
constexpr Time timeZero
Definition: helicsTime.hpp:31
@ destination_target
indicator that the target is a destination target
Definition: flagOperations.hpp:43
constexpr bool isBroker() const
Definition: GlobalFederateId.hpp:107
bool isDependent(GlobalFederateId ofed) const
Definition: TimeDependencies.cpp:317
constexpr Time initializationTime
Definition: helicsTime.hpp:40
void resetIteratingTimeRequests(Time requestTime)
Definition: TimeDependencies.cpp:638
DependencyProcessingResult
Definition: TimeDependencies.hpp:41
bool cyclic
Definition: TimeDependencies.hpp:97
bool verifySequenceCounter(Time tmin, std::int32_t sq)
Definition: TimeDependencies.cpp:596
std::int32_t responseSequenceCounter
Definition: TimeDependencies.hpp:74
TimeState
Definition: TimeDependencies.hpp:20
void removeDependent(GlobalFederateId id)
Definition: TimeDependencies.cpp:409
auto end() const
Definition: TimeDependencies.hpp:159
std::int32_t grantedIteration
the iteration of the dependency when the local iteration was granted
Definition: TimeDependencies.hpp:76
void removeInterdependence(GlobalFederateId id)
Definition: TimeDependencies.cpp:422
bool checkAllPastExec(bool iterating) const
Definition: TimeDependencies.cpp:443
Definition: TimeDependencies.hpp:124
GlobalFederateId getMinDependency() const
Definition: TimeDependencies.cpp:609
void removeDependency(GlobalFederateId id)
Definition: TimeDependencies.cpp:371
void resetDependentEvents(Time grantTime)
Definition: TimeDependencies.cpp:651
Definition: TimeDependencies.hpp:57
bool dependent
indicator the dependency is a dependent object
Definition: TimeDependencies.hpp:100
bool interrupted
indicator that the federates next event is a timing interruption
Definition: TimeDependencies.hpp:67
TimeRepresentation< count_time< 9 > > Time
Definition: helicsTime.hpp:27
bool triggered
indicator that the dependency has been triggered in some way
Definition: TimeDependencies.hpp:104
constexpr Time cBigTime
Definition: helicsTime.hpp:37
bool hasData
indicator that data was sent in the current interval
Definition: TimeDependencies.hpp:66
Time Te
the next currently scheduled event
Definition: TimeDependencies.hpp:60
Definition: GlobalFederateId.hpp:72
Definition: ActionMessage.hpp:30
bool delayedTiming
indicator that the dependency is using delayed timing
Definition: TimeDependencies.hpp:68
bool isDependency(GlobalFederateId ofed) const
Definition: TimeDependencies.cpp:308
void resetIteratingExecRequests()
Definition: TimeDependencies.cpp:624
auto begin() const
Definition: TimeDependencies.hpp:157
bool nonGranting
indicator that the dependency is a non granting time coordinator
Definition: TimeDependencies.hpp:103
auto size() const
Definition: TimeDependencies.hpp:151
GlobalFederateId minFedActual
the actual forwarded minimum federate object
Definition: TimeDependencies.hpp:64
bool forwarding
indicator that the dependency is a forwarding time coordinator
Definition: TimeDependencies.hpp:102
std::uint8_t restrictionLevel
timing restriction level
Definition: TimeDependencies.hpp:70
std::int8_t timingVersion
version indicator
Definition: TimeDependencies.hpp:69
constexpr Time negEpsilon
Definition: helicsTime.hpp:35
std::int32_t sequenceCounter
the sequence Counter of the request
Definition: TimeDependencies.hpp:73
Time next
next possible message or value
Definition: TimeDependencies.hpp:59
Time TeAlt
the second min event
Definition: TimeDependencies.hpp:62
int activeDependencyCount() const
Definition: TimeDependencies.cpp:602
@ delayed_timing_flag
flag to indicate the request is from federate with delayed timing
Definition: flagOperations.hpp:30
const DependencyInfo * getDependencyInfo(GlobalFederateId id) const
Definition: TimeDependencies.cpp:326
auto begin()
Definition: TimeDependencies.hpp:153
bool addDependency(GlobalFederateId id)
Definition: TimeDependencies.cpp:346
Definition: TimeDependencies.hpp:93
DependencyProcessingResult updateTime(const ActionMessage &m)
Definition: TimeDependencies.cpp:432
@ non_granting_flag
flag to indicate the request is from a non-granting federate
Definition: flagOperations.hpp:25
constexpr bool isValid() const
Definition: GlobalFederateId.hpp:109
std::int32_t timeoutCount
counter for timeout checking
Definition: TimeDependencies.hpp:72
bool addDependent(GlobalFederateId id)
Definition: TimeDependencies.cpp:384
@ interrupted_flag
flag to mark an interrupted event
Definition: flagOperations.hpp:28
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
bool hasActiveTimeDependencies() const
Definition: TimeDependencies.cpp:589
bool update(const TimeData &update)
Definition: TimeDependencies.cpp:168
auto cend() const
Definition: TimeDependencies.hpp:163
GlobalFederateId fedID
identifier for the dependency
Definition: TimeDependencies.hpp:95
auto cbegin() const
Definition: TimeDependencies.hpp:161
@ iteration_requested_flag
Definition: flagOperations.hpp:23
bool checkActionFlag(uint16_t flags, FlagIndex flag)
Definition: flagOperations.hpp:138
Time minDe
min dependency event time
Definition: TimeDependencies.hpp:61
bool dependency
indicator that the dependency is an actual dependency
Definition: TimeDependencies.hpp:101
@ required_flag
flag indicating that an action or match is required
Definition: flagOperations.hpp:45
auto end()
Definition: TimeDependencies.hpp:155
bool updateRequested
indicator that an update request is in process
Definition: TimeDependencies.hpp:105
TimeDependencies()=default
bool empty() const
Definition: TimeDependencies.hpp:166
GlobalFederateId minFed
identifier for the min dependency
Definition: TimeDependencies.hpp:63
bool checkIfReadyForExecEntry(bool iterating, bool waiting) const
Definition: TimeDependencies.cpp:454
bool checkIfReadyForTimeGrant(bool iterating, Time desiredGrantTime, GrantDelayMode delayMode) const
Definition: TimeDependencies.cpp:494
GrantDelayMode
Definition: TimeDependencies.hpp:48
DependencyInfo(GlobalFederateId id)
Definition: TimeDependencies.hpp:114
GlobalFederateId source_id
12 – for federate_id or route_id
Definition: ActionMessage.hpp:37
std::pair< int, std::string > checkForIssues(bool waiting) const
Definition: TimeDependencies.cpp:661