helics  3.5.2
ValueFederateManager.hpp
1 /*
2 Copyright (c) 2017-2024,
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 
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 
23 namespace helics {
25 class Core;
26 class 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 };
43 struct InputData {
48  Time lastQuery{0.0};
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:
66  ValueFederateManager(Core* coreOb,
67  ValueFederate* vfed,
68  LocalFederateId id,
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:
210  bool useJsonSerialization{false};
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:397
void addTarget(const Publication &pub, std::string_view target)
Definition: ValueFederateManager.cpp:138
void publish(const Publication &pub, const data_view &block)
Definition: ValueFederateManager.cpp:229
void updateTime(Time newTime, Time oldTime)
Definition: ValueFederateManager.cpp:266
const Input & getInputByTarget(std::string_view key) const
Definition: ValueFederateManager.cpp:464
data_view getValue(const Input &inp)
Definition: ValueFederateManager.cpp:212
void setDefaultValue(const Input &inp, const data_view &block)
Definition: ValueFederateManager.cpp:184
void disconnect()
Definition: ValueFederateManager.cpp:31
static Time getLastUpdateTime(const Input &inp)
Definition: ValueFederateManager.cpp:243
Input & getInput(std::string_view key)
Definition: ValueFederateManager.cpp:436
void setInputNotificationCallback(std::function< void(Input &, Time)> callback)
Definition: ValueFederateManager.cpp:557
void clearUpdates()
Definition: ValueFederateManager.cpp:544
Publication & getPublication(std::string_view key)
Definition: ValueFederateManager.cpp:505
void startupToInitializeStateTransition()
Definition: ValueFederateManager.cpp:308
void removeTarget(const Publication &pub, std::string_view target)
Definition: ValueFederateManager.cpp:164
std::string localQuery(std::string_view queryStr) const
Definition: ValueFederateManager.cpp:320
bool useJsonSerialization
all outgoing data should be serialized as JSON
Definition: ValueFederateManager.hpp:210
static bool hasUpdate(const Input &inp)
Definition: ValueFederateManager.cpp:234
static void clearUpdate(const Input &inp)
Definition: ValueFederateManager.cpp:549
int getInputCount() const
Definition: ValueFederateManager.cpp:539
int getPublicationCount() const
Definition: ValueFederateManager.cpp:534
void initializeToExecuteStateTransition(iteration_time result)
Definition: ValueFederateManager.cpp:315
const std::string & getTarget(const Input &inp) const
Definition: ValueFederateManager.cpp:413
void addAlias(const Input &inp, std::string_view shortcutName)
Definition: ValueFederateManager.cpp:115
Input & registerInput(std::string_view key, std::string_view type, std::string_view units)
Definition: ValueFederateManager.cpp:85
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:43
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