 |
helics
3.0.1
|
9 #include "../common/GuardedTypes.hpp"
10 #include "ActionMessage.hpp"
11 #include "BasicHandleInfo.hpp"
15 #include "gmlc/containers/BlockingQueue.hpp"
29 class SubscriptionInfo;
30 class PublicationInfo;
34 class CoreFederateInfo;
36 class TimeCoordinator;
39 constexpr
Time startupTime = Time::minVal();
40 constexpr
Time initialTime{-1000000.0};
55 const std::string name;
56 std::unique_ptr<TimeCoordinator>
63 std::atomic<FederateStates> state{HELICS_CREATED};
64 bool only_transmit_on_change{
false};
68 bool source_only{
false};
69 bool ignore_time_mismatch_warnings{
71 bool strict_input_type_checking{
73 bool ignore_unit_mismatch{
false};
74 bool slow_responding{
false};
76 InterfaceInfo interfaceInformation;
82 bool wait_for_current_time{
false};
84 bool mProfilerActive{
false};
87 bool mLocalProfileCapture{
false};
89 CommonCore* parent_{
nullptr};
90 std::string errorString;
92 decltype(std::chrono::steady_clock::now()) start_clock_time;
96 std::int32_t realTimeTimerIndex{-1};
97 std::int32_t grantTimeoutTimeIndex{-1};
102 std::atomic<bool> requestingMode{
false};
105 bool iterating{
false};
106 bool timeGranted_mode{
false};
107 bool terminate_on_error{
false};
112 std::uint32_t mGrantCount{0};
114 std::shared_ptr<MessageTimer> mTimer;
116 gmlc::containers::BlockingQueue<ActionMessage> queue;
118 gmlc::containers::BlockingQueue<std::pair<std::string, std::string>> commandQueue;
120 std::atomic<uint16_t> interfaceFlags{0};
122 std::map<GlobalFederateId, std::deque<ActionMessage>> delayQueues;
123 std::vector<InterfaceHandle> events;
124 std::vector<InterfaceHandle> eventMessages;
125 std::vector<GlobalFederateId> delayedFederates;
126 Time time_granted{startupTime};
127 Time allowed_send_time{startupTime};
128 mutable std::atomic_flag processing = ATOMIC_FLAG_INIT;
131 std::function<void(
int, std::string_view, std::string_view)> loggerFunction;
133 std::function<std::string(std::string_view)> queryCallback;
135 std::vector<std::pair<std::string, std::string>> tags;
137 Time nextValueTime()
const;
139 Time nextMessageTime()
const;
145 bool messageShouldBeDelayed(
const ActionMessage& cmd)
const;
147 void addFederateToDelay(GlobalFederateId
id);
149 void generateConfig(Json::Value& base)
const;
185 uint32_t* inputIndex);
205 void setProperty(
int intProperty,
int propertyVal);
227 while (processing.test_and_set()) {
234 if (!processing.test_and_set()) {
238 for (
int ii = 0; ii < 10000; ++ii) {
239 if (!processing.test_and_set()) {
243 while (processing.test_and_set()) {
244 std::this_thread::yield();
251 bool try_lock()
const {
return !processing.test_and_set(); }
253 void unlock()
const { processing.clear(); }
258 void setTag(
const std::string& tag,
const std::string& value);
260 const std::string&
getTag(
const std::string& tag)
const;
262 const std::pair<std::string, std::string>&
getTagByIndex(
size_t index)
const
298 void fillEventVectorUpTo(
Time currentTime);
302 void fillEventVectorInclusive(
Time currentTime);
306 void fillEventVectorNextIteration(
Time currentTime);
312 int checkInterfaces();
314 std::
string processQueryActual(std::string_view query) const;
318 void generateProfilingMessage(
bool enterHelicsCode);
320 void generateProfilingMarker();
329 const std::vector<InterfaceHandle>&
getEvents()
const;
370 std::vector<std::pair<GlobalHandle, std::string_view>>
395 void logMessage(
int level, std::string_view logMessageSource, std::string_view message)
const;
401 void setLogger(std::function<
void(
int, std::string_view, std::string_view)> logFunction)
403 loggerFunction = std::move(logFunction);
410 queryCallback = std::move(queryCallbackFunction);
417 std::string
processQuery(
const std::string& query,
bool force_ordering =
false)
const;
432 const std::string& key,
433 const std::string& type,
434 const std::string& units);
441 std::pair<std::string, std::string>
getCommand();
constexpr Time timeZero
Definition: helicsTime.hpp:31
@ HELICS_LOG_LEVEL_PROFILING
Definition: helics_enums.h:183
std::unique_ptr< Message > receive(InterfaceHandle id)
Definition: FederateState.cpp:220
const std::vector< InterfaceHandle > & getEvents() const
Definition: FederateState.cpp:798
const std::vector< std::shared_ptr< const SmallBuffer > > & getAllValues(InterfaceHandle handle)
Definition: FederateState.cpp:263
constexpr Time initializationTime
Definition: helicsTime.hpp:38
IterationResult genericUnspecifiedQueueProcess()
Definition: FederateState.cpp:768
FederateStates getState() const
Definition: FederateState.cpp:167
Time nextAllowedSendTime() const
Definition: FederateState.hpp:326
std::atomic< GlobalFederateId > global_id
global id code, default to invalid
Definition: FederateState.hpp:60
bool returnableResult(MessageProcessingResult result)
Definition: CoreTypes.hpp:75
const std::string & getTag(const std::string &tag) const
Definition: FederateState.cpp:2124
std::vector< std::pair< GlobalHandle, std::string_view > > getMessageDestinations(InterfaceHandle handle)
Definition: FederateState.cpp:571
InterfaceInfo & interfaces()
Definition: FederateState.hpp:161
const std::string & lastErrorString() const
Definition: FederateState.hpp:337
Definition: InterfaceInfo.hpp:26
std::unique_ptr< Message > receiveAny(InterfaceHandle &id)
Definition: FederateState.cpp:229
int publicationCount() const
Definition: FederateState.cpp:1723
IterationResult enterExecutingMode(IterationRequest iterate, bool sendRequest=false)
Definition: FederateState.cpp:477
Definition: EndpointInfo.hpp:32
InterfaceType
Definition: CoreTypes.hpp:96
int32_t getCurrentIteration() const
Definition: FederateState.cpp:172
const GlobalHandle id
identifier for the handle
Definition: EndpointInfo.hpp:40
base helics enumerations for C++ API's, a namespace wrapper for the definitions defined in helics_enu...
Time getTimeProperty(int timeProperty) const
Definition: FederateState.cpp:1644
@ HELICS_LOG_LEVEL_WARNING
Definition: helics_enums.h:185
const std::pair< std::string, std::string > & getTagByIndex(size_t index) const
Definition: FederateState.hpp:262
Definition: CommonCore.hpp:73
bool getOptionFlag(int optionFlag) const
Definition: FederateState.cpp:1660
Definition: LocalFederateId.hpp:65
TimeRepresentation< count_time< 9 > > Time
Definition: helicsTime.hpp:27
void reset()
Definition: FederateState.cpp:149
constexpr auto FORCE_ITERATION
simplified alias to force an iteration
Definition: CoreTypes.hpp:112
void lock()
Definition: FederateState.hpp:248
void sendCommand(ActionMessage &command)
Definition: FederateState.cpp:1862
Definition: GlobalFederateId.hpp:68
Definition: ActionMessage.hpp:30
std::atomic< bool > init_transmitted
the initialization request has been transmitted
Definition: FederateState.hpp:79
IterationResult waitSetup()
Definition: FederateState.cpp:417
@ HELICS_UNKNOWN
unknown state
Definition: CoreTypes.hpp:29
constexpr GlobalBrokerId parent_broker_id
Definition: GlobalFederateId.hpp:60
LocalFederateId local_id
id code for the local federate descriptor
Definition: FederateState.hpp:59
void reInit()
Definition: FederateState.cpp:160
int getIntegerProperty(int intProperty) const
Definition: FederateState.cpp:1711
int lastErrorCode() const noexcept
Definition: FederateState.hpp:339
@ iteration_requested_flag
indicator that an iteration has been requested
Definition: flagOperations.hpp:16
bool try_lock() const
Definition: FederateState.hpp:251
uint16_t counter
26 counter for filter tracking or message counter
Definition: ActionMessage.hpp:41
std::string_view to_string() const
Definition: SmallBuffer.hpp:222
int inputCount() const
Definition: FederateState.cpp:1733
bool checkActionFlag(uint16_t flags, FlagIndex flag)
Definition: flagOperations.hpp:85
void sleeplock() const
Definition: FederateState.hpp:232
InterfaceHandle handle
the interface handle component
Definition: GlobalFederateId.hpp:131
void setOptionFlag(int optionFlag, bool value)
Definition: FederateState.cpp:1549
constexpr auto ITERATE_IF_NEEDED
Definition: CoreTypes.hpp:114
const std::string & getIdentifier() const
Definition: FederateState.hpp:157
void createInterface(InterfaceType htype, InterfaceHandle handle, const std::string &key, const std::string &type, const std::string &units)
Definition: FederateState.cpp:297
void setLogger(std::function< void(int, std::string_view, std::string_view)> logFunction)
Definition: FederateState.hpp:401
Time grantedTime() const
Definition: FederateState.hpp:324
const char * commandErrorString(int errorCode)
Definition: ActionMessage.cpp:823
opt< ActionMessage > processPostTerminationAction(const ActionMessage &action)
Definition: FederateState.cpp:392
std::unique_ptr< Message > getMessage(Time maxTime)
Definition: EndpointInfo.cpp:82
void setProperty(int timeProperty, Time propertyVal)
Definition: FederateState.cpp:1474
std::pair< std::string, std::string > waitCommand()
Definition: FederateState.cpp:1918
Time grantedTime
the time of the granted step
Definition: helicsTime.hpp:48
IterationRequest
Definition: CoreTypes.hpp:89
void setExtraData(int32_t data)
Definition: ActionMessage.hpp:157
uint64_t getQueueSize() const
Definition: FederateState.cpp:211
void setQueryCallback(std::function< std::string(std::string_view)> queryCallbackFunction)
Definition: FederateState.hpp:408
@ indicator_flag
flag used for setting values
Definition: flagOperations.hpp:21
std::vector< GlobalFederateId > getDependencies() const
Definition: FederateState.cpp:1738
void unlock() const
Definition: FederateState.hpp:253
void setProperties(const ActionMessage &cmd)
Definition: FederateState.cpp:1367
IterationResult
Definition: CoreTypes.hpp:80
uint16_t getInterfaceFlags() const
Definition: FederateState.hpp:215
void setActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:77
void spinlock() const
Definition: FederateState.hpp:225
SmallBuffer payload
buffer to contain the data payload
Definition: ActionMessage.hpp:48
GlobalFederateId dest_id
20 fed_id for a targeted message
Definition: ActionMessage.hpp:39
int endpointCount() const
Definition: FederateState.cpp:1728
@ HELICS_EXECUTING
the federation has entered execution state and it now advancing in time
Definition: CoreTypes.hpp:25
std::string prettyPrintString(const ActionMessage &command)
Definition: ActionMessage.cpp:841
Definition: TimeCoordinator.hpp:55
auto tagCount() const
Definition: FederateState.hpp:267
void setGlobalId(GlobalFederateId newglobalId)
Definition: InterfaceInfo.hpp:64
@ PROFILING
profiling log level
Definition: loggingHelper.hpp:23
FederateState(const std::string &fedName, const CoreFederateInfo &fedInfo)
Definition: FederateState.cpp:102
std::pair< std::string, std::string > getCommand()
Definition: FederateState.cpp:1903
void finalize()
Definition: FederateState.cpp:782
@ error_flag
flag indicating an error condition associated with the command
Definition: flagOperations.hpp:20
@ HELICS_TERMINATING
the federate is in the process of shutting down
Definition: CoreTypes.hpp:26
Definition: FederateState.hpp:42
Time actionTime
40 the time an action took place or will take place //32
Definition: ActionMessage.hpp:44
std::atomic< bool > init_requested
Definition: FederateState.hpp:100
void forceProcessMessage(ActionMessage &action)
Definition: FederateState.cpp:407
int loggingLevel() const
Definition: FederateState.hpp:255
std::string processQuery(const std::string &query, bool force_ordering=false) const
Definition: FederateState.cpp:2087
void setDestination(GlobalHandle hand)
Definition: ActionMessage.hpp:99
IterationResult enterInitializingMode()
Definition: FederateState.cpp:445
@ destination_target
indicator that the target is a destination target
Definition: flagOperations.hpp:17
void routeMessage(const ActionMessage &msg)
Definition: FederateState.cpp:268
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
@ required_flag
flag indicating that an action or match is required
Definition: flagOperations.hpp:18
Definition: CoreFederateInfo.hpp:16
Definition: helicsTime.hpp:47
@ optional_flag
flag indicating that a connection is optional and may not be matched
Definition: flagOperations.hpp:24
@ HELICS_LOG_LEVEL_SUMMARY
Definition: helics_enums.h:187
@ HELICS_SEQUENCING_MODE_FAST
Definition: helics_enums.h:365
FederateStates
Definition: CoreTypes.hpp:21
const InterfaceInfo & interfaces() const
Definition: FederateState.hpp:163
std::unique_ptr< Message > createMessageFromCommand(const ActionMessage &cmd)
Definition: ActionMessage.cpp:632
Definition: LocalFederateId.hpp:22
void addAction(const ActionMessage &action)
Definition: FederateState.cpp:283
X getValue(ValueFederate &fed, const std::string &key)
Definition: Subscriptions.hpp:30
void setParent(CommonCore *coreObject)
Definition: FederateState.hpp:194
bool CheckSetValue(const char *dataToCheck, uint64_t len)
Definition: PublicationInfo.cpp:14
iteration_time requestTime(Time nextTime, IterationRequest iterate, bool sendRequest=false)
Definition: FederateState.cpp:580
void logMessage(int level, std::string_view logMessageSource, std::string_view message) const
Definition: FederateState.cpp:1815
action_message_def::action_t action() const noexcept
Definition: ActionMessage.hpp:88
const std::shared_ptr< const SmallBuffer > & getValue(InterfaceHandle handle, uint32_t *inputIndex)
Definition: FederateState.cpp:256
void closeInterface(InterfaceHandle handle, InterfaceType type)
Definition: FederateState.cpp:350
std::vector< GlobalHandle > getSubscribers(InterfaceHandle handle)
Definition: FederateState.cpp:560
void setInterfaceProperty(const ActionMessage &cmd)
Definition: FederateState.cpp:1408
std::vector< GlobalFederateId > getDependents() const
Definition: FederateState.cpp:1743
@ HELICS_ERROR
the federation has encountered an error
Definition: CoreTypes.hpp:27
MessageProcessingResult
Definition: CoreTypes.hpp:64
@ HELICS_INITIALIZING
Definition: CoreTypes.hpp:23
@ HELICS_FINISHED
the federation has finished its execution
Definition: CoreTypes.hpp:28
int32_t availableMessages() const
Definition: EndpointInfo.cpp:127
void setTag(const std::string &tag, const std::string &value)
Definition: FederateState.cpp:2108
void setSource(GlobalHandle hand)
Definition: ActionMessage.hpp:93
constexpr uint16_t make_flags(unsigned int flag)
Definition: flagOperations.hpp:117
bool checkAndSetValue(InterfaceHandle pub_id, const char *data, uint64_t len)
Definition: FederateState.cpp:177
const std::string & fedStateString(FederateStates state)
Definition: FederateState.cpp:1833
int32_t getHandleOption(InterfaceHandle handle, char iType, int32_t option) const
Definition: FederateState.cpp:1695
GlobalFederateId source_id
12 – for federate_id or route_id
Definition: ActionMessage.hpp:37
void setCoreObject(CommonCore *parent)
Definition: FederateState.cpp:1808
void setIterationFlags(ActionMessage &command, IterationRequest iterate)
Definition: ActionMessage.cpp:930
std::string generateJsonErrorResponse(JsonErrorCodes code, const std::string &message)
Definition: JsonGeneration.hpp:36