9 #include "../core/core-data.hpp"
10 #include "Federate.hpp"
12 #include "Publications.hpp"
14 #include "data_view.hpp"
19 #include <string_view>
24 class ValueFederateManager;
45 const std::shared_ptr<Core>& core,
66 ValueFederate(std::string_view fedName,
const std::string& configString);
97 Publication& registerPublication(std::string_view name,
98 std::string_view type,
99 std::string_view units = std::string_view{});
108 std::string_view units = std::string_view{})
120 Publication& registerGlobalPublication(std::string_view name,
121 std::string_view type,
122 std::string_view units = std::string_view{});
131 std::string_view units = std::string_view{})
147 std::string_view units = std::string_view{})
149 return registerGlobalPublication<X>(std::string(name) +
'_' + std::to_string(index1),
165 std::string_view units = std::string_view{})
167 return registerGlobalPublication<X>(std::string(name) +
'_' + std::to_string(index1) +
'_' +
168 std::to_string(index2),
178 Input& registerInput(std::string_view name,
179 std::string_view type,
180 std::string_view units = std::string_view{});
189 Input& registerGlobalInput(std::string_view name,
190 std::string_view type,
191 std::string_view units = std::string_view{});
217 std::string_view units = std::string_view())
219 return registerGlobalInput<X>(std::string(name) +
'_' + std::to_string(index1), units);
235 std::string_view units = std::string_view())
237 return registerGlobalInput<X>(std::string(name) +
'_' + std::to_string(index1) +
'_' +
238 std::to_string(index2),
246 Input& registerSubscription(std::string_view target,
247 std::string_view units = std::string_view{});
257 std::string_view units = std::string_view{})
259 return registerSubscription(std::string(target) +
'_' + std::to_string(index1), units);
272 std::string_view units = std::string_view{})
274 return registerSubscription(std::string(target) +
'_' + std::to_string(index1) +
'_' +
275 std::to_string(index2),
286 void addAlias(
const Input& inp, std::string_view shortcutName);
294 void addAlias(
const Publication& pub, std::string_view shortcutName);
296 virtual void setFlagOption(
int flag,
bool flagValue =
true)
override;
304 void setDefaultValue(
const Input& inp, data_view block);
312 virtual void registerInterfaces(
const std::string& configString)
override;
320 void registerValueInterfaces(
const std::string& configString);
324 void registerValueInterfacesJson(
const std::string& jsonString);
326 void registerValueInterfacesToml(
const std::string& tomlString);
334 data_view getBytes(
const Input& inp);
341 bool forceCoreUpdate(Input& inp);
348 void publishBytes(
const Publication& pub, data_view block);
358 publishBytes(pub,
data_view{data, data_size});
364 void registerFromPublicationJSON(
const std::string& jsonString);
369 void publishJSON(
const std::string& jsonString);
375 void addTarget(
const Publication& pub, std::string_view target);
380 void addTarget(
const Input& inp, std::string_view target);
385 void removeTarget(
const Publication& pub, std::string_view target);
390 void removeTarget(
const Input& inp, std::string_view target);
399 template<
class iType>
402 addTarget(iObject, std::string(target) +
'_' + std::to_string(index1));
412 template<
class iType>
413 void addIndexedTarget(
const iType& iObject, std::string_view target,
int index1,
int index2)
416 std::string(target) +
'_' + std::to_string(index1) +
'_' +
417 std::to_string(index2));
422 bool isUpdated(
const Input& inp)
const;
424 Time getLastUpdateTime(
const Input& inp)
const;
426 virtual void disconnect()
override;
432 void clearUpdate(
const Input& inp);
435 virtual void updateTime(
Time newTime,
Time oldTime)
override;
436 virtual void startupToInitializeStateTransition()
override;
437 virtual void initializeToExecuteStateTransition(
IterationResult result)
override;
438 virtual std::string localQuery(std::string_view queryStr)
const override;
444 std::vector<int> queryUpdates();
448 const std::string& getTarget(
const Input& inp)
const;
452 const Input& getInput(std::string_view name)
const;
456 Input& getInput(std::string_view name);
460 const Input& getInput(
int index)
const;
464 Input& getInput(
int index);
468 const Input& getInput(std::string_view name,
int index1)
const;
472 const Input& getInput(std::string_view name,
int index1,
int index2)
const;
477 const Input& getSubscription(std::string_view target)
const;
483 Input& getSubscription(std::string_view target);
489 Publication& getPublication(std::string_view name);
494 const Publication& getPublication(std::string_view name)
const;
503 const Publication& getPublication(
int index)
const;
509 const Publication& getPublication(std::string_view name,
int index1)
const;
515 const Publication& getPublication(std::string_view name,
int index1,
int index2)
const;
521 void setInputNotificationCallback(std::function<
void(
Input&,
Time)> callback);
526 void setInputNotificationCallback(
Input& inp, std::function<
void(
Input&,
Time)> callback);
529 int getPublicationCount()
const;
531 int getInputCount()
const;
535 std::unique_ptr<ValueFederateManager> vfManager;
546 template<
class... Us>