 |
helics
2.8.1
|
9 #include "../common/GuardedTypes.hpp"
10 #include "ActionMessage.hpp"
11 #include "BasicHandleInfo.hpp"
12 #include "InterfaceInfo.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<federate_state> 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};
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;
91 decltype(std::chrono::steady_clock::now())
95 int32_t realTimeTimerIndex{-1};
100 std::atomic<bool> requestingMode{
false};
103 bool iterating{
false};
104 bool timeGranted_mode{
false};
105 bool terminate_on_error{
false};
112 std::shared_ptr<MessageTimer>
114 gmlc::containers::BlockingQueue<ActionMessage>
116 std::atomic<uint16_t> interfaceFlags{
118 std::map<global_federate_id, std::deque<ActionMessage>>
120 std::vector<interface_handle> events;
121 std::vector<interface_handle> eventMessages;
122 std::vector<global_federate_id> delayedFederates;
123 Time time_granted{startupTime};
124 Time allowed_send_time{startupTime};
125 mutable std::atomic_flag processing = ATOMIC_FLAG_INIT;
128 std::function<void(
int,
const std::string&,
const std::string&)>
130 std::function<std::string(
const std::string&)>
133 Time nextValueTime()
const;
135 Time nextMessageTime()
const;
141 bool messageShouldBeDelayed(
const ActionMessage& cmd)
const;
143 void addFederateToDelay(global_federate_id
id);
145 void generateConfig(Json::Value& base)
const;
181 uint32_t* inputIndex);
201 void setProperty(
int intProperty,
int propertyVal);
223 while (processing.test_and_set()) {
230 if (!processing.test_and_set()) {
234 for (
int ii = 0; ii < 10000; ++ii) {
235 if (!processing.test_and_set()) {
239 while (processing.test_and_set()) {
240 std::this_thread::yield();
247 bool try_lock()
const {
return !processing.test_and_set(); }
249 void unlock()
const { processing.clear(); }
282 void fillEventVectorUpTo(
Time currentTime);
286 void fillEventVectorInclusive(
Time currentTime);
290 void fillEventVectorNextIteration(
Time currentTime);
296 int checkInterfaces();
298 std::
string processQueryActual(const std::
string& query) const;
302 void generateProfilingMessage(
bool enterHelicsCode);
304 void generateProfilingMarker();
313 const std::vector<interface_handle>&
getEvents()
const;
370 const std::string& logMessageSource,
371 const std::string& message)
const;
377 void setLogger(std::function<
void(
int,
const std::string&,
const std::string&)> logFunction)
379 loggerFunction = std::move(logFunction);
384 void setQueryCallback(std::function<std::string(
const std::string&)> queryCallbackFunction)
386 queryCallback = std::move(queryCallbackFunction);
393 std::string
processQuery(
const std::string& query,
bool force_ordering =
false)
const;
408 const std::string& key,
409 const std::string& type,
410 const std::string& units);
constexpr Time timeZero
Definition: helics-time.hpp:31
const global_handle id
identifier for the handle
Definition: EndpointInfo.hpp:27
std::string generateJsonString(const Json::Value &block)
Definition: JsonProcessingFunctions.cpp:97
std::vector< global_handle > getSubscribers(interface_handle handle)
Definition: FederateState.cpp:536
@ data
print timing+data transmissions
Definition: loggingHelper.hpp:30
void setLogger(std::function< void(int, const std::string &, const std::string &)> logFunction)
Definition: FederateState.hpp:377
global_federate_id source_id
12 – for federate_id or route_id
Definition: ActionMessage.hpp:36
constexpr Time initializationTime
Definition: helics-time.hpp:38
@ HELICS_INITIALIZING
Definition: core-types.hpp:24
Time nextAllowedSendTime() const
Definition: FederateState.hpp:310
void setSource(global_handle hand)
Definition: ActionMessage.hpp:94
InterfaceInfo & interfaces()
Definition: FederateState.hpp:157
const std::string & lastErrorString() const
Definition: FederateState.hpp:321
Definition: InterfaceInfo.hpp:25
iteration_request
Definition: core-types.hpp:90
int publicationCount() const
Definition: FederateState.cpp:1540
Definition: federate_id.hpp:22
Definition: EndpointInfo.hpp:19
iteration_result
Definition: core-types.hpp:81
int32_t getCurrentIteration() const
Definition: FederateState.cpp:170
std::unique_ptr< Message > receive(interface_handle id)
Definition: FederateState.cpp:218
base helics enumerations for C++ API's, a namespace wrapper for the definitions defined in helics_enu...
Definition: global_federate_id.hpp:68
Time getTimeProperty(int timeProperty) const
Definition: FederateState.cpp:1463
Definition: CommonCore.hpp:73
void setIterationFlags(ActionMessage &command, iteration_request iterate)
Definition: ActionMessage.cpp:950
bool getOptionFlag(int optionFlag) const
Definition: FederateState.cpp:1477
federate_state getState() const
Definition: FederateState.cpp:165
constexpr global_broker_id parent_broker_id
Definition: global_federate_id.hpp:60
std::vector< global_federate_id > getDependencies() const
Definition: FederateState.cpp:1555
TimeRepresentation< count_time< 9 > > Time
Definition: helics-time.hpp:27
const std::shared_ptr< const data_block > & getValue(interface_handle handle, uint32_t *inputIndex)
Definition: FederateState.cpp:254
void reset()
Definition: FederateState.cpp:147
federate_state
Definition: core-types.hpp:22
void lock()
Definition: FederateState.hpp:244
@ interfaces
print connections +interface level connection information
Definition: loggingHelper.hpp:27
Definition: ActionMessage.hpp:29
std::vector< global_federate_id > getDependents() const
Definition: FederateState.cpp:1560
std::atomic< bool > init_transmitted
the initialization request has been transmitted
Definition: FederateState.hpp:79
iteration_result enterExecutingMode(iteration_request iterate, bool sendRequest=false)
Definition: FederateState.cpp:460
void reInit()
Definition: FederateState.cpp:158
int getIntegerProperty(int intProperty) const
Definition: FederateState.cpp:1528
int lastErrorCode() const noexcept
Definition: FederateState.hpp:323
bool returnableResult(message_processing_result result)
Definition: core-types.hpp:75
@ helics_log_level_warning
Definition: helics_enums.h:169
@ iteration_requested_flag
indicator that an iteration has been requested
Definition: flagOperations.hpp:16
bool try_lock() const
Definition: FederateState.hpp:247
int inputCount() const
Definition: FederateState.cpp:1550
bool checkActionFlag(uint16_t flags, FlagIndex flag)
Definition: flagOperations.hpp:75
message_processing_result
Definition: core-types.hpp:65
iteration_result enterInitializingMode()
Definition: FederateState.cpp:428
void sleeplock() const
Definition: FederateState.hpp:228
void setOptionFlag(int optionFlag, bool value)
Definition: FederateState.cpp:1368
int32_t getHandleOption(interface_handle handle, char iType, int32_t option) const
Definition: FederateState.cpp:1512
const std::string & getIdentifier() const
Definition: FederateState.hpp:153
const std::vector< std::shared_ptr< const data_block > > & getAllValues(interface_handle handle)
Definition: FederateState.cpp:261
interface_handle handle
the interface handle component
Definition: global_federate_id.hpp:131
Time grantedTime() const
Definition: FederateState.hpp:308
const char * commandErrorString(int errorCode)
Definition: ActionMessage.cpp:837
void createInterface(handle_type htype, interface_handle handle, const std::string &key, const std::string &type, const std::string &units)
Definition: FederateState.cpp:300
std::unique_ptr< Message > getMessage(Time maxTime)
Definition: EndpointInfo.cpp:80
void setProperty(int timeProperty, Time propertyVal)
Definition: FederateState.cpp:1324
Time grantedTime
the time of the granted step
Definition: helics-time.hpp:48
uint64_t getQueueSize() const
Definition: FederateState.cpp:209
@ indicator_flag
flag used for setting values
Definition: flagOperations.hpp:21
void unlock() const
Definition: FederateState.hpp:249
std::atomic< global_federate_id > global_id
global id code, default to invalid
Definition: FederateState.hpp:60
bool checkAndSetValue(interface_handle pub_id, const char *data, uint64_t len)
Definition: FederateState.cpp:175
void setProperties(const ActionMessage &cmd)
Definition: FederateState.cpp:1217
@ HELICS_ERROR
the federation has encountered an error
Definition: core-types.hpp:28
uint16_t getInterfaceFlags() const
Definition: FederateState.hpp:211
const std::string & fedStateString(federate_state state)
Definition: FederateState.cpp:1645
void setActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:67
void spinlock() const
Definition: FederateState.hpp:221
Definition: federate_id.hpp:65
std::unique_ptr< Message > receiveAny(interface_handle &id)
Definition: FederateState.cpp:227
handle_type
Definition: BasicHandleInfo.hpp:16
int endpointCount() const
Definition: FederateState.cpp:1545
@ HELICS_TERMINATING
the federate is in the process of shutting down
Definition: core-types.hpp:27
const std::vector< interface_handle > & getEvents() const
Definition: FederateState.cpp:750
std::string prettyPrintString(const ActionMessage &command)
Definition: ActionMessage.cpp:861
Definition: TimeCoordinator.hpp:55
FederateState(const std::string &fedName, const CoreFederateInfo &fedInfo)
Definition: FederateState.cpp:100
void finalize()
Definition: FederateState.cpp:734
@ HELICS_EXECUTING
the federation has entered execution state and it now advancing in time
Definition: core-types.hpp:26
@ error_flag
flag indicating an error condition associated with the command
Definition: flagOperations.hpp:20
Definition: FederateState.hpp:42
void closeInterface(interface_handle handle, handle_type type)
Definition: FederateState.cpp:353
Time actionTime
40 the time an action took place or will take place //32
Definition: ActionMessage.hpp:43
std::atomic< bool > init_requested
this federate has requested entry to initialization
Definition: FederateState.hpp:97
int loggingLevel() const
Definition: FederateState.hpp:251
void setQueryCallback(std::function< std::string(const std::string &)> queryCallbackFunction)
Definition: FederateState.hpp:384
std::string processQuery(const std::string &query, bool force_ordering=false) const
Definition: FederateState.cpp:1805
log_level
Definition: loggingHelper.hpp:20
void routeMessage(const ActionMessage &msg)
Definition: FederateState.cpp:266
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
@ error
only print errors
Definition: loggingHelper.hpp:22
@ required_flag
flag indicating that an action or match is required
Definition: flagOperations.hpp:18
Definition: CoreFederateInfo.hpp:16
Definition: helics-time.hpp:47
@ optional_flag
flag indicating that a connection is optional and may not be matched
Definition: flagOperations.hpp:24
const InterfaceInfo & interfaces() const
Definition: FederateState.hpp:159
void logMessage(int level, const std::string &logMessageSource, const std::string &message) const
Definition: FederateState.cpp:1632
std::unique_ptr< Message > createMessageFromCommand(const ActionMessage &cmd)
Definition: ActionMessage.cpp:628
void addAction(const ActionMessage &action)
Definition: FederateState.cpp:281
X getValue(ValueFederate &fed, const std::string &key)
Definition: Subscriptions.hpp:67
void setDestination(global_handle hand)
Definition: ActionMessage.hpp:100
iteration_result genericUnspecifiedQueueProcess()
Definition: FederateState.cpp:720
void setParent(CommonCore *coreObject)
Definition: FederateState.hpp:190
bool CheckSetValue(const char *dataToCheck, uint64_t len)
Definition: PublicationInfo.cpp:11
opt< ActionMessage > processPostTerminationAction(const ActionMessage &action)
Definition: FederateState.cpp:395
global_federate_id dest_id
20 fed_id for a targeted message
Definition: ActionMessage.hpp:38
@ HELICS_FINISHED
the federation has finished its execution
Definition: core-types.hpp:29
action_message_def::action_t action() const noexcept
Definition: ActionMessage.hpp:89
iteration_result waitSetup()
Definition: FederateState.cpp:400
void setInterfaceProperty(const ActionMessage &cmd)
Definition: FederateState.cpp:1258
int32_t availableMessages() const
Definition: EndpointInfo.cpp:125
@ HELICS_UNKNOWN
unknown state
Definition: core-types.hpp:30
iteration_time requestTime(Time nextTime, iteration_request iterate, bool sendRequest=false)
Definition: FederateState.cpp:547
@ iterating
indicator that the iterations need to continue
constexpr uint16_t make_flags(unsigned int flag)
Definition: flagOperations.hpp:96
local_federate_id local_id
id code for the local federate descriptor
Definition: FederateState.hpp:59
void setCoreObject(CommonCore *parent)
Definition: FederateState.cpp:1625
void setGlobalId(global_federate_id newglobalId)
Definition: InterfaceInfo.hpp:63