helics 3.7.0
Loading...
Searching...
No Matches
ValueFederateManager.hpp
1/*
2Copyright (c) 2017-2026,
3Battelle Memorial Institute; Lawrence Livermore National Security, LLC; Alliance for Energy
4Innovation LLC. See the top-level NOTICE for additional details. All rights reserved.
5SPDX-License-Identifier: BSD-3-Clause
6*/
7#pragma once
8
9#include "../common/GuardedTypes.hpp"
10#include "../core/LocalFederateId.hpp"
11#include "Inputs.hpp"
12#include "ValueFederate.hpp"
13#include "data_view.hpp"
14#include "gmlc/containers/DualStringMappedVector.hpp"
15#include "helicsTypes.hpp"
16
17#include <deque>
18#include <map>
19#include <memory>
20#include <string>
21#include <vector>
22
23namespace helics {
25class Core;
26class ValueFederate;
27
30 std::string name;
31 std::string type;
32 std::string units;
35 int size{-1};
36 bool forward{true};
37 publication_info(std::string_view n_name, std::string_view n_type, std::string_view n_units):
38 name(n_name), type(n_type), units(n_units)
39 {
40 }
41};
43struct InputData {
49 int sourceIndex{0};
50 std::string name;
51 std::string type;
52 std::string units;
53 std::string pubtype;
54
55 std::function<void(Input&, Time)> callback;
56 bool hasUpdate = false;
57 InputData(std::string_view n_name, std::string_view n_type, std::string_view n_units):
58 name(n_name), type(n_type), units(n_units)
59 {
60 }
61};
62
65 public:
67 ValueFederate* vfed,
69 bool singleThreaded);
71
73 registerPublication(std::string_view key, std::string_view type, std::string_view units);
77 Input& registerInput(std::string_view key, std::string_view type, std::string_view units);
78
85 void addAlias(const Input& inp, std::string_view shortcutName);
86
93 void addAlias(const Publication& pub, std::string_view shortcutName);
98 void addTarget(const Publication& pub, std::string_view target);
103 void addTarget(const Input& inp, std::string_view target);
104
109 void removeTarget(const Publication& pub, std::string_view target);
114 void removeTarget(const Input& inp, std::string_view target);
115
121 void setDefaultValue(const Input& inp, const data_view& block);
122
127 data_view getValue(const Input& inp);
128
130 void publish(const Publication& pub, const data_view& block);
131
133 static bool hasUpdate(const Input& inp);
135 static Time getLastUpdateTime(const Input& inp);
136
141 void updateTime(Time newTime, Time oldTime);
147 std::string localQuery(std::string_view queryStr) const;
152 std::vector<int> queryUpdates();
153
155 const std::string& getTarget(const Input& inp) const;
156
160 Input& getInput(std::string_view key);
161 const Input& getInput(std::string_view key) const;
163 Input& getInput(int index);
164 const Input& getInput(int index) const;
165
169 const Input& getInputByTarget(std::string_view key) const;
170 Input& getInputByTarget(std::string_view key);
171
175 Publication& getPublication(std::string_view key);
176 const Publication& getPublication(std::string_view key) const;
177
178 Publication& getPublication(int index);
179 const Publication& getPublication(int index) const;
180
185 void setInputNotificationCallback(std::function<void(Input&, Time)> callback);
190 static void setInputNotificationCallback(const Input& inp,
191 std::function<void(Input&, Time)> callback);
192
194 void disconnect();
195
197 int getPublicationCount() const;
199 int getInputCount() const;
202 void clearUpdates();
206 static void clearUpdate(const Input& inp);
207 bool getUpdateFromCore(Input& inp);
208
209 public:
211 private:
212 LocalFederateId fedID;
213 shared_guarded_m_opt<gmlc::containers::DualStringMappedVector<Input, InterfaceHandle>> inputs;
214 shared_guarded_m_opt<gmlc::containers::DualStringMappedVector<Publication, InterfaceHandle>>
215 publications;
216 Time CurrentTime{-1.0};
217 Core* coreObject{nullptr};
219 ValueFederate* fed{nullptr};
221 atomic_guarded<std::function<void(Input&, Time)>> allCallback;
223 shared_guarded_opt<std::deque<InputData>> inputData;
225 shared_guarded_opt<std::multimap<std::string, InterfaceHandle>> targetIDs;
227 shared_guarded_opt<std::multimap<InterfaceHandle, std::string>> inputTargets;
228
229 private:
230 void getUpdateFromCore(InterfaceHandle handle);
231};
232
233} // namespace helics
Definition core/Core.hpp:41
Definition Inputs.hpp:38
Definition LocalFederateId.hpp:65
Definition LocalFederateId.hpp:22
Definition Publications.hpp:25
Definition ValueFederateManager.hpp:64
std::vector< int > queryUpdates()
Definition ValueFederateManager.cpp:401
void addTarget(const Publication &pub, std::string_view target)
Definition ValueFederateManager.cpp:142
void publish(const Publication &pub, const data_view &block)
Definition ValueFederateManager.cpp:233
void updateTime(Time newTime, Time oldTime)
Definition ValueFederateManager.cpp:270
const Input & getInputByTarget(std::string_view key) const
Definition ValueFederateManager.cpp:468
data_view getValue(const Input &inp)
Definition ValueFederateManager.cpp:216
void setDefaultValue(const Input &inp, const data_view &block)
Definition ValueFederateManager.cpp:188
void disconnect()
Definition ValueFederateManager.cpp:35
static Time getLastUpdateTime(const Input &inp)
Definition ValueFederateManager.cpp:247
Input & getInput(std::string_view key)
Definition ValueFederateManager.cpp:440
void setInputNotificationCallback(std::function< void(Input &, Time)> callback)
Definition ValueFederateManager.cpp:561
void clearUpdates()
Definition ValueFederateManager.cpp:548
Publication & getPublication(std::string_view key)
Definition ValueFederateManager.cpp:509
void startupToInitializeStateTransition()
Definition ValueFederateManager.cpp:312
void removeTarget(const Publication &pub, std::string_view target)
Definition ValueFederateManager.cpp:168
std::string localQuery(std::string_view queryStr) const
Definition ValueFederateManager.cpp:324
bool useJsonSerialization
all outgoing data should be serialized as JSON
Definition ValueFederateManager.hpp:210
static bool hasUpdate(const Input &inp)
Definition ValueFederateManager.cpp:238
static void clearUpdate(const Input &inp)
Definition ValueFederateManager.cpp:553
int getInputCount() const
Definition ValueFederateManager.cpp:543
int getPublicationCount() const
Definition ValueFederateManager.cpp:538
void initializeToExecuteStateTransition(iteration_time result)
Definition ValueFederateManager.cpp:319
const std::string & getTarget(const Input &inp) const
Definition ValueFederateManager.cpp:417
void addAlias(const Input &inp, std::string_view shortcutName)
Definition ValueFederateManager.cpp:119
Input & registerInput(std::string_view key, std::string_view type, std::string_view units)
Definition ValueFederateManager.cpp:89
Definition application_api/ValueFederate.hpp:28
Definition data_view.hpp:22
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition AsyncFedCallInfo.hpp:14
TimeRepresentation< count_time< 9 > > Time
Definition helicsTime.hpp:27
Definition ValueFederateManager.hpp:43
bool hasUpdate
indicator that there was an update
Definition ValueFederateManager.hpp:56
Time lastUpdate
the time the subscription was last updated
Definition ValueFederateManager.hpp:47
std::function< void(Input &, Time)> callback
callback to trigger on update
Definition ValueFederateManager.hpp:55
std::string units
input units
Definition ValueFederateManager.hpp:52
std::string type
input type
Definition ValueFederateManager.hpp:51
Time lastQuery
the time the query was made
Definition ValueFederateManager.hpp:48
InterfaceHandle coreID
Handle from the core.
Definition ValueFederateManager.hpp:44
std::string name
input name
Definition ValueFederateManager.hpp:50
std::string pubtype
the listed type of the corresponding publication
Definition ValueFederateManager.hpp:53
data_view lastData
the last published data from a target
Definition ValueFederateManager.hpp:46
InputId id
the id used as the identifier
Definition ValueFederateManager.hpp:45
int sourceIndex
the index of the data source for multi-source inputs
Definition ValueFederateManager.hpp:49
Definition helicsTime.hpp:46
Definition ValueFederateManager.hpp:29
std::string type
publication type
Definition ValueFederateManager.hpp:31
std::string name
publication name
Definition ValueFederateManager.hpp:30
PublicationId id
the id used as the identifier
Definition ValueFederateManager.hpp:34
int size
required size of a publication
Definition ValueFederateManager.hpp:35
InterfaceHandle coreID
Handle from the core.
Definition ValueFederateManager.hpp:33
std::string units
publication units
Definition ValueFederateManager.hpp:32