 |
helics
3.0.1
|
9 #include "../core/core-exceptions.hpp"
10 #include "Federate.hpp"
28 int referenceIndex{-1};
29 void* dataReference{
nullptr};
33 bool changeDetectionEnabled{
false};
34 bool disableAssign{
false};
36 size_t customTypeHash{
38 mutable defV prevValue;
40 std::shared_ptr<units::precise_unit>
43 Publication() =
default;
50 Publication(ValueFederate* valueFed,
52 const std::string& key,
53 const std::string& type,
54 const std::string& units);
61 Publication(ValueFederate* valueFed,
62 const std::string& key,
63 const std::string& type,
64 const std::string& units = std::string());
72 template<
class FedPtr>
74 const std::string& key,
75 const std::string& type = std::string(),
76 const std::string& units = std::string()):
77 Publication(std::addressof(*valueFed), key, type, units)
80 std::is_base_of<
ValueFederate, std::remove_reference_t<decltype(*valueFed)>>::value,
81 "first argument must be a pointer to a ValueFederate");
92 const std::string& key,
93 const std::string& type,
94 const std::string& units = std::string());
103 template<
class FedPtr>
106 const std::string& key,
107 const std::string& type,
108 const std::string& units = std::string()):
109 Publication(locality, std::addressof(*valueFed), key, type, units)
112 std::is_base_of<
ValueFederate, std::remove_reference_t<decltype(*valueFed)>>::value,
113 "first argument must be a pointer to a ValueFederate");
123 const std::string& key,
125 const std::string& units = std::string()):
135 template<
class FedPtr>
137 const std::string& key,
139 const std::string& units = std::string()):
152 const std::string& key,
154 const std::string& units = std::string()):
166 template<
class FedPtr>
169 const std::string& key,
171 const std::string& units = std::string()):
177 const std::string&
getType()
const {
return getExtractionType(); }
179 const std::string&
getUnits()
const {
return pubUnits; }
181 void addTarget(std::string_view target) { addDestinationTarget(target); }
189 void publish(
const std::vector<std::string>& val);
190 void publish(
const std::vector<double>& val);
191 void publish(
const double* vals,
int size);
192 void publish(
const std::vector<std::complex<double>>& val);
194 void publishComplex(
const double* vals,
int size);
195 void publish(std::complex<double> val);
200 void publish(
const NamedPoint& np);
201 void publish(std::string_view field,
double val);
207 void publish(
double val,
const std::string& units);
208 void publish(
double val,
const units::precise_unit& units);
212 std::enable_if_t<(std::is_constructible_v<std::string_view, X>),
void>
publish(
const X& val)
219 std::enable_if_t<(std::is_same_v<defV, remove_cv_ref<X>>),
void>
publish(
const X& val)
226 std::enable_if_t<(std::is_integral_v<X> && !std::is_same_v<remove_cv_ref<X>,
char>),
void>
229 publishInt(
static_cast<int64_t
>(val));
237 changeDetectionEnabled =
true;
241 changeDetectionEnabled =
false;
258 void publishInt(int64_t val);
259 void publishString(std::string_view val);
260 void publishDefV(
const defV& val);
std::variant< double, int64_t, std::string, std::complex< double >, std::vector< double >, std::vector< std::complex< double > >, NamedPoint > defV
Definition: HelicsPrimaryTypes.hpp:34
Publication(FedPtr valueFed, const std::string &key, const std::string &type=std::string(), const std::string &units=std::string())
Definition: Publications.hpp:73
const std::string & getUnits() const
Definition: Publications.hpp:179
Publication(InterfaceVisibility locality, FedPtr &valueFed, const std::string &key, DataType type, const std::string &units=std::string())
Definition: Publications.hpp:167
InterfaceVisibility
Definition: helicsTypes.hpp:39
Publication & getPublication(const std::string &name)
Definition: ValueFederate.cpp:576
DataType pubType
the type of publication
Definition: Publications.hpp:32
Definition: application_api/ValueFederate.hpp:25
void publishComplex(const double *vals, int size)
Definition: Publications.cpp:232
static X interpret(const data_view &block)
Definition: ValueConverter.hpp:132
Publication(FedPtr &valueFed, const std::string &key, DataType type, const std::string &units=std::string())
Definition: Publications.hpp:136
Definition: LocalFederateId.hpp:65
TimeRepresentation< count_time< 9 > > Time
Definition: helicsTime.hpp:27
std::enable_if_t<(std::is_integral_v< X > &&!std::is_same_v< remove_cv_ref< X >, char >), void > publish(X val)
Definition: Publications.hpp:227
DataType getTypeFromString(std::string_view typeName)
Definition: helicsTypes.cpp:219
Publication & registerPublication(const std::string &name, const std::string &type, const std::string &units=std::string())
Definition: ValueFederate.cpp:99
ValueFederate * fed
the federate construct to interact with
Definition: Publications.hpp:26
const std::string & getType() const
Definition: Publications.hpp:177
std::enable_if_t<(std::is_constructible_v< std::string_view, X >), void > publish(const X &val)
Definition: Publications.hpp:212
DataType
Definition: helicsTypes.hpp:272
Definition: application_api/Federate.hpp:627
Definition: core-exceptions.hpp:56
Definition: core-exceptions.hpp:84
bool changeDetected(const defV &prevValue, const std::string &val, double)
Definition: helicsPrimaryTypes.cpp:16
void setMinimumChange(double deltaV) noexcept
Definition: Publications.hpp:234
bool isValid() const
Definition: application_api/Federate.hpp:646
std::enable_if_t<(std::is_same_v< defV, remove_cv_ref< X >>), void > publish(const X &val)
Definition: Publications.hpp:219
Publication(ValueFederate *valueFed, const std::string &key, DataType type, const std::string &units=std::string())
Definition: Publications.hpp:122
void publishBytes(const Publication &pub, data_view block)
Definition: ValueFederate.cpp:404
virtual const std::string & getDisplayName() const override
Definition: Publications.hpp:250
Definition: ValueFederateManager.hpp:66
bool changeDetectionEnabled
the change detection is enabled
Definition: Publications.hpp:33
Definition: Publications.hpp:24
Publication(InterfaceVisibility locality, FedPtr &valueFed, const std::string &key, const std::string &type, const std::string &units=std::string())
Definition: Publications.hpp:104
naming a set of types that are interchangeable and recognizable inside the HELICS application API and...
SmallBuffer typeConvert(DataType type, double val)
Definition: helicsTypes.cpp:712
void publish(ValueFederate &fed, const std::string &pubName, Us... pargs)
Definition: application_api/ValueFederate.hpp:544
void publish(double val)
Definition: Publications.cpp:71
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
void enableChangeDetection(bool enabled=true) noexcept
Definition: Publications.hpp:248
const std::string & typeNameStringRef(DataType type)
Definition: helicsTypes.cpp:46
Publication(InterfaceVisibility locality, ValueFederate *valueFed, const std::string &key, DataType type, const std::string &units=std::string())
Definition: Publications.hpp:150
Publication & registerGlobalPublication(const std::string &name, const std::string &type, const std::string &units=std::string())
Definition: ValueFederate.cpp:107