helics  3.3.0
FederateInfo.hpp
1 /*
2 Copyright (c) 2017-2022,
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 #include "../core/CoreFederateInfo.hpp"
9 #include "../core/CoreTypes.hpp"
10 #include "helics_cxx_export.h"
11 
12 #include <memory>
13 #include <string>
14 #include <vector>
15 
16 namespace CLI {
17 class App;
18 }
19 
20 namespace helics {
21 class helicsCLI11App;
24 class HELICS_CXX_EXPORT FederateInfo: public CoreFederateInfo {
25  public:
26  int uniqueKey{0};
27  char separator{'/'};
28  bool autobroker{
29  false};
30 
32  bool debugging{false};
33  bool observer{false};
35  int brokerPort{-1};
36 
37  bool forceNewCore{false};
38 
39  bool useJsonSerialization{false};
41  bool encrypted{false};
44  std::string profilerFileName;
45  std::string encryptionConfig;
46  std::string defName;
47  std::string coreName;
48  std::string coreInitString;
49  std::string brokerInitString;
50  std::string broker;
51  std::string key;
52  std::string localport;
53  std::string fileInUse;
55 
56  FederateInfo();
59  explicit FederateInfo(CoreType cType);
64  explicit FederateInfo(const std::string& args);
70  FederateInfo(int argc, char* argv[]);
76  explicit FederateInfo(std::vector<std::string>& args);
81  std::vector<std::string> loadInfoFromArgs(const std::string& args);
87  std::vector<std::string> loadInfoFromArgs(int argc, char* argv[]);
92  void loadInfoFromArgs(std::vector<std::string>& args);
96  void loadInfoFromArgsIgnoreOutput(const std::string& args);
101  void loadInfoFromArgsIgnoreOutput(int argc, char* argv[]);
102 
106  void loadInfoFromToml(const std::string& toml, bool runArgParser = true);
107 
111  void loadInfoFromJson(const std::string& json, bool runArgParser = true);
112 
114  Time checkTimeProperty(int propId, Time defVal) const;
115  bool checkFlagProperty(int propId, bool defVal) const;
116  int checkIntProperty(int propId, int defVal) const;
117 
119  void injectParser(CLI::App* app);
120 
121  private:
122  std::unique_ptr<helicsCLI11App> makeCLIApp();
124  void config_additional(helicsCLI11App* app);
125 };
126 
129 HELICS_CXX_EXPORT FederateInfo loadFederateInfo(const std::string& configString);
130 
132 HELICS_CXX_EXPORT std::string generateFullCoreInitString(const FederateInfo& fi);
133 
139 HELICS_CXX_EXPORT int getPropertyIndex(std::string val);
140 
146 HELICS_CXX_EXPORT int getFlagIndex(std::string val);
147 
153 HELICS_CXX_EXPORT int getOptionIndex(std::string val);
154 
159 HELICS_CXX_EXPORT int getOptionValue(std::string val);
160 
161 } // namespace helics
helics::FederateInfo::localport
std::string localport
Definition: FederateInfo.hpp:52
HELICS_HANDLE_OPTION_CLEAR_PRIORITY_LIST
@ HELICS_HANDLE_OPTION_CLEAR_PRIORITY_LIST
Definition: helics_enums.h:350
helics::FederateInfo::encryptionConfig
std::string encryptionConfig
encryption configuration string or file
Definition: FederateInfo.hpp:45
HELICS_HANDLE_OPTION_ONLY_TRANSMIT_ON_CHANGE
@ HELICS_HANDLE_OPTION_ONLY_TRANSMIT_ON_CHANGE
Definition: helics_enums.h:340
HELICS_FLAG_INTERRUPTIBLE
@ HELICS_FLAG_INTERRUPTIBLE
Definition: helics_enums.h:105
helics::FederateInfo::profilerFileName
std::string profilerFileName
Definition: FederateInfo.hpp:44
HELICS_MULTI_INPUT_MIN_OPERATION
@ HELICS_MULTI_INPUT_MIN_OPERATION
Definition: helics_enums.h:314
helics::coreTypeFromString
CoreType coreTypeFromString(std::string_view type) noexcept
Definition: typeOperations.cpp:17
helics::loadFederateInfo
FederateInfo loadFederateInfo(const std::string &configString)
Definition: FederateInfo.cpp:711
helics::FederateInfo::loadInfoFromToml
void loadInfoFromToml(const std::string &toml, bool runArgParser=true)
Definition: FederateInfo.cpp:809
HELICS_FLAG_DEBUGGING
@ HELICS_FLAG_DEBUGGING
Definition: helics_enums.h:167
HELICS_FLAG_FORWARD_COMPUTE
@ HELICS_FLAG_FORWARD_COMPUTE
Definition: helics_enums.h:126
helics::FederateInfo::loadInfoFromArgs
std::vector< std::string > loadInfoFromArgs(const std::string &args)
Definition: FederateInfo.cpp:643
helics::CoreType
CoreType
Definition: CoreTypes.hpp:36
HELICS_HANDLE_OPTION_ONLY_UPDATE_ON_CHANGE
@ HELICS_HANDLE_OPTION_ONLY_UPDATE_ON_CHANGE
Definition: helics_enums.h:342
helics::InvalidIdentifier
Definition: core-exceptions.hpp:39
helics::FederateInfo::debugging
bool debugging
Definition: FederateInfo.hpp:32
HELICS_LOG_LEVEL_NO_PRINT
@ HELICS_LOG_LEVEL_NO_PRINT
Definition: helics_enums.h:186
HELICS_HANDLE_OPTION_IGNORE_INTERRUPTS
@ HELICS_HANDLE_OPTION_IGNORE_INTERRUPTS
Definition: helics_enums.h:344
HELICS_LOG_LEVEL_CONNECTIONS
@ HELICS_LOG_LEVEL_CONNECTIONS
Definition: helics_enums.h:197
helics::FederateInfo::loadInfoFromArgsIgnoreOutput
void loadInfoFromArgsIgnoreOutput(const std::string &args)
Definition: FederateInfo.cpp:665
helics::FederateInfo::forceNewCore
bool forceNewCore
indicator that the federate should not use an existing core
Definition: FederateInfo.hpp:37
HELICS_HANDLE_OPTION_STRICT_TYPE_CHECKING
@ HELICS_HANDLE_OPTION_STRICT_TYPE_CHECKING
Definition: helics_enums.h:335
HELICS_MULTI_INPUT_NO_OP
@ HELICS_MULTI_INPUT_NO_OP
Definition: helics_enums.h:298
HELICS_MULTI_INPUT_VECTORIZE_OPERATION
@ HELICS_MULTI_INPUT_VECTORIZE_OPERATION
Definition: helics_enums.h:300
HELICS_LOG_LEVEL_WARNING
@ HELICS_LOG_LEVEL_WARNING
Definition: helics_enums.h:192
HELICS_MULTI_INPUT_AVERAGE_OPERATION
@ HELICS_MULTI_INPUT_AVERAGE_OPERATION
Definition: helics_enums.h:316
HELICS_FLAG_STRICT_CONFIG_CHECKING
@ HELICS_FLAG_STRICT_CONFIG_CHECKING
Definition: helics_enums.h:135
helics::Time
TimeRepresentation< count_time< 9 > > Time
Definition: helicsTime.hpp:27
HELICS_FLAG_LOCAL_PROFILING_CAPTURE
@ HELICS_FLAG_LOCAL_PROFILING_CAPTURE
Definition: helics_enums.h:143
HELICS_FLAG_WAIT_FOR_CURRENT_TIME_UPDATE
@ HELICS_FLAG_WAIT_FOR_CURRENT_TIME_UPDATE
Definition: helics_enums.h:116
HELICS_FLAG_SOURCE_ONLY
@ HELICS_FLAG_SOURCE_ONLY
Definition: helics_enums.h:107
HELICS_HANDLE_OPTION_INPUT_PRIORITY_LOCATION
@ HELICS_HANDLE_OPTION_INPUT_PRIORITY_LOCATION
Definition: helics_enums.h:348
HELICS_FLAG_PROFILING
@ HELICS_FLAG_PROFILING
Definition: helics_enums.h:175
HELICS_MULTI_INPUT_AND_OPERATION
@ HELICS_MULTI_INPUT_AND_OPERATION
Definition: helics_enums.h:302
HELICS_PROPERTY_INT_LOG_BUFFER
@ HELICS_PROPERTY_INT_LOG_BUFFER
Definition: helics_enums.h:289
helics::CoreType::DEFAULT
@ DEFAULT
ZMQ if available or UDP.
helics::FederateInfo::brokerPort
int brokerPort
broker port information
Definition: FederateInfo.hpp:35
HELICS_HANDLE_OPTION_CONNECTION_OPTIONAL
@ HELICS_HANDLE_OPTION_CONNECTION_OPTIONAL
Definition: helics_enums.h:326
helics::helicsCLI11App
Definition: helicsCLI11.hpp:42
HELICS_FLAG_REALTIME
@ HELICS_FLAG_REALTIME
Definition: helics_enums.h:128
HELICS_FLAG_DELAY_INIT_ENTRY
@ HELICS_FLAG_DELAY_INIT_ENTRY
Definition: helics_enums.h:150
HELICS_PROPERTY_INT_CONSOLE_LOG_LEVEL
@ HELICS_PROPERTY_INT_CONSOLE_LOG_LEVEL
Definition: helics_enums.h:287
helics::FederateInfo::key
std::string key
key for the broker
Definition: FederateInfo.hpp:51
HELICS_FLAG_OBSERVER
@ HELICS_FLAG_OBSERVER
Definition: helics_enums.h:101
HELICS_FLAG_ROLLBACK
@ HELICS_FLAG_ROLLBACK
Definition: helics_enums.h:123
helics::getOptionIndex
int getOptionIndex(std::string val)
Definition: FederateInfo.cpp:408
HELICS_FLAG_IGNORE_TIME_MISMATCH_WARNINGS
@ HELICS_FLAG_IGNORE_TIME_MISMATCH_WARNINGS
Definition: helics_enums.h:132
helics::FederateInfo::coreType
CoreType coreType
the type of the core
Definition: FederateInfo.hpp:34
helics::getOptionValue
int getOptionValue(std::string val)
Definition: FederateInfo.cpp:427
HELICS_LOG_LEVEL_DEBUG
@ HELICS_LOG_LEVEL_DEBUG
Definition: helics_enums.h:205
helics::InvalidParameter
Definition: core-exceptions.hpp:48
helics::FederateInfo::autobroker
bool autobroker
specify that the core should generate a broker if not found otherwise
Definition: FederateInfo.hpp:28
helics::FederateInfo::encrypted
bool encrypted
Definition: FederateInfo.hpp:41
HELICS_PROPERTY_INT_LOG_LEVEL
@ HELICS_PROPERTY_INT_LOG_LEVEL
Definition: helics_enums.h:281
helics::CoreType::UNRECOGNIZED
@ UNRECOGNIZED
unknown
helics::FederateInfo::coreInitString
std::string coreInitString
an initialization string for the core API object
Definition: FederateInfo.hpp:48
HELICS_MULTI_INPUT_DIFF_OPERATION
@ HELICS_MULTI_INPUT_DIFF_OPERATION
Definition: helics_enums.h:310
HELICS_PROPERTY_INT_MAX_ITERATIONS
@ HELICS_PROPERTY_INT_MAX_ITERATIONS
Definition: helics_enums.h:278
helics::FederateInfo::checkTimeProperty
Time checkTimeProperty(int propId, Time defVal) const
Definition: FederateInfo.cpp:733
helics::FederateInfo
Definition: FederateInfo.hpp:24
HELICS_HANDLE_OPTION_MULTI_INPUT_HANDLING_METHOD
@ HELICS_HANDLE_OPTION_MULTI_INPUT_HANDLING_METHOD
Definition: helics_enums.h:346
HELICS_MULTI_INPUT_OR_OPERATION
@ HELICS_MULTI_INPUT_OR_OPERATION
Definition: helics_enums.h:305
helics::CoreFederateInfo::setProperty
void setProperty(int propId, double propVal)
Definition: CoreFederateInfo.hpp:24
HELICS_PROPERTY_TIME_PERIOD
@ HELICS_PROPERTY_TIME_PERIOD
Definition: helics_enums.h:258
helics::FederateInfo::brokerInitString
std::string brokerInitString
an initialization string for the broker if auto generated
Definition: FederateInfo.hpp:49
helics::FederateInfo::useJsonSerialization
bool useJsonSerialization
Definition: FederateInfo.hpp:39
helics::getFlagIndex
int getFlagIndex(std::string val)
Definition: FederateInfo.cpp:389
helics::CoreFederateInfo::intProps
std::vector< std::pair< int, int > > intProps
container for the integer properties
Definition: CoreFederateInfo.hpp:19
HELICS_PROPERTY_TIME_RT_TOLERANCE
@ HELICS_PROPERTY_TIME_RT_TOLERANCE
Definition: helics_enums.h:269
helics::FederateInfo::FederateInfo
FederateInfo()
Definition: FederateInfo.cpp:39
HELICS_HANDLE_OPTION_CONNECTION_REQUIRED
@ HELICS_HANDLE_OPTION_CONNECTION_REQUIRED
Definition: helics_enums.h:323
HELICS_PROPERTY_TIME_DELTA
@ HELICS_PROPERTY_TIME_DELTA
Definition: helics_enums.h:256
HELICS_FLAG_FORCE_LOGGING_FLUSH
@ HELICS_FLAG_FORCE_LOGGING_FLUSH
Definition: helics_enums.h:171
HELICS_FLAG_TERMINATE_ON_ERROR
@ HELICS_FLAG_TERMINATE_ON_ERROR
Definition: helics_enums.h:169
HELICS_LOG_LEVEL_DATA
@ HELICS_LOG_LEVEL_DATA
Definition: helics_enums.h:203
HELICS_MULTI_INPUT_MAX_OPERATION
@ HELICS_MULTI_INPUT_MAX_OPERATION
Definition: helics_enums.h:312
HELICS_FLAG_ONLY_UPDATE_ON_CHANGE
@ HELICS_FLAG_ONLY_UPDATE_ON_CHANGE
Definition: helics_enums.h:113
helics::FederateInfo::fileInUse
std::string fileInUse
string containing a configuration file that was used
Definition: FederateInfo.hpp:54
helics::CoreFederateInfo::timeProps
std::vector< std::pair< int, Time > > timeProps
container for the timeProperties
Definition: CoreFederateInfo.hpp:18
HELICS_MULTI_INPUT_SUM_OPERATION
@ HELICS_MULTI_INPUT_SUM_OPERATION
Definition: helics_enums.h:307
HELICS_FLAG_USE_JSON_SERIALIZATION
@ HELICS_FLAG_USE_JSON_SERIALIZATION
Definition: helics_enums.h:137
HELICS_FLAG_EVENT_TRIGGERED
@ HELICS_FLAG_EVENT_TRIGGERED
Definition: helics_enums.h:140
HELICS_HANDLE_OPTION_MULTIPLE_CONNECTIONS_ALLOWED
@ HELICS_HANDLE_OPTION_MULTIPLE_CONNECTIONS_ALLOWED
Definition: helics_enums.h:330
helics::FederateInfo::injectParser
void injectParser(CLI::App *app)
Definition: FederateInfo.cpp:449
helics::FederateInfo::broker
std::string broker
connection information for the broker
Definition: FederateInfo.hpp:50
HELICS_HANDLE_OPTION_CONNECTIONS
@ HELICS_HANDLE_OPTION_CONNECTIONS
Definition: helics_enums.h:353
helics::FederateInfo::coreName
std::string coreName
the name of the core
Definition: FederateInfo.hpp:47
helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
helics::getPropertyIndex
int getPropertyIndex(std::string val)
Definition: FederateInfo.cpp:366
helics::FederateInfo::separator
char separator
separator for global name of localFederates
Definition: FederateInfo.hpp:27
helics::CoreFederateInfo
Definition: CoreFederateInfo.hpp:16
HELICS_LOG_LEVEL_SUMMARY
@ HELICS_LOG_LEVEL_SUMMARY
Definition: helics_enums.h:194
HELICS_PROPERTY_TIME_RT_LAG
@ HELICS_PROPERTY_TIME_RT_LAG
Definition: helics_enums.h:263
HELICS_FLAG_SINGLE_THREAD_FEDERATE
@ HELICS_FLAG_SINGLE_THREAD_FEDERATE
Definition: helics_enums.h:130
HELICS_HANDLE_OPTION_IGNORE_UNIT_MISMATCH
@ HELICS_HANDLE_OPTION_IGNORE_UNIT_MISMATCH
Definition: helics_enums.h:337
HELICS_FLAG_ENABLE_INIT_ENTRY
@ HELICS_FLAG_ENABLE_INIT_ENTRY
Definition: helics_enums.h:152
HELICS_HANDLE_OPTION_BUFFER_DATA
@ HELICS_HANDLE_OPTION_BUFFER_DATA
Definition: helics_enums.h:333
helics::FederateInfo::loadInfoFromJson
void loadInfoFromJson(const std::string &json, bool runArgParser=true)
Definition: FederateInfo.cpp:763
HELICS_LOG_LEVEL_ERROR
@ HELICS_LOG_LEVEL_ERROR
Definition: helics_enums.h:188
helics::generateFullCoreInitString
std::string generateFullCoreInitString(const FederateInfo &fi)
Definition: FederateInfo.cpp:859
HELICS_FLAG_RESTRICTIVE_TIME_POLICY
@ HELICS_FLAG_RESTRICTIVE_TIME_POLICY
Definition: helics_enums.h:121
helics::CoreFederateInfo::setFlagOption
void setFlagOption(int flagId, bool propVal=true)
Definition: CoreFederateInfo.hpp:28
HELICS_HANDLE_OPTION_SINGLE_CONNECTION_ONLY
@ HELICS_HANDLE_OPTION_SINGLE_CONNECTION_ONLY
Definition: helics_enums.h:328
HELICS_PROPERTY_TIME_RT_LEAD
@ HELICS_PROPERTY_TIME_RT_LEAD
Definition: helics_enums.h:266
HELICS_PROPERTY_TIME_OUTPUT_DELAY
@ HELICS_PROPERTY_TIME_OUTPUT_DELAY
Definition: helics_enums.h:273
HELICS_PROPERTY_TIME_INPUT_DELAY
@ HELICS_PROPERTY_TIME_INPUT_DELAY
Definition: helics_enums.h:271
HELICS_FLAG_UNINTERRUPTIBLE
@ HELICS_FLAG_UNINTERRUPTIBLE
Definition: helics_enums.h:103
helics::CoreFederateInfo::flagProps
std::vector< std::pair< int, bool > > flagProps
container for the binary flag options
Definition: CoreFederateInfo.hpp:20
HELICS_PROPERTY_INT_FILE_LOG_LEVEL
@ HELICS_PROPERTY_INT_FILE_LOG_LEVEL
Definition: helics_enums.h:284
HELICS_FLAG_ONLY_TRANSMIT_ON_CHANGE
@ HELICS_FLAG_ONLY_TRANSMIT_ON_CHANGE
Definition: helics_enums.h:110
HELICS_LOG_LEVEL_TRACE
@ HELICS_LOG_LEVEL_TRACE
Definition: helics_enums.h:207
HELICS_LOG_LEVEL_TIMING
@ HELICS_LOG_LEVEL_TIMING
Definition: helics_enums.h:201
HELICS_FLAG_PROFILING_MARKER
@ HELICS_FLAG_PROFILING_MARKER
Definition: helics_enums.h:177
HELICS_LOG_LEVEL_INTERFACES
@ HELICS_LOG_LEVEL_INTERFACES
Definition: helics_enums.h:199
helics::addJsonConfig
HelicsConfigJSON * addJsonConfig(CLI::App *app)
Add the HELICS JSON configuration processor to the app.
Definition: helicsCLI11JsonConfig.cpp:96
helics::to_string
std::string to_string(CoreType type)
Definition: typeOperations.cpp:12
HELICS_PROPERTY_TIME_GRANT_TIMEOUT
@ HELICS_PROPERTY_TIME_GRANT_TIMEOUT
Definition: helics_enums.h:276
HELICS_PROPERTY_TIME_OFFSET
@ HELICS_PROPERTY_TIME_OFFSET
Definition: helics_enums.h:260
HELICS_FLAG_DUMPLOG
@ HELICS_FLAG_DUMPLOG
Definition: helics_enums.h:173
HELICS_HANDLE_OPTION_TIME_RESTRICTED
@ HELICS_HANDLE_OPTION_TIME_RESTRICTED
Definition: helics_enums.h:355
helics::FederateInfo::defName
std::string defName
a default name to use for a federate
Definition: FederateInfo.hpp:46
HELICS_FLAG_SLOW_RESPONDING
@ HELICS_FLAG_SLOW_RESPONDING
Definition: helics_enums.h:163