 |
helics
2.8.1
|
9 #include "../core/core-exceptions.hpp"
11 #include "ValueFederate.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;
41 std::shared_ptr<units::precise_unit>
44 Publication() =
default;
51 Publication(ValueFederate* valueFed,
53 const std::string& key,
54 const std::string& type,
55 const std::string& units);
62 Publication(ValueFederate* valueFed,
63 const std::string& key,
64 const std::string& type,
65 const std::string& units = std::string());
73 template<
class FedPtr>
75 const std::string& key,
76 const std::string& type = std::string(),
77 const std::string& units = std::string()):
78 Publication(std::addressof(*valueFed), key, type, units)
81 std::is_base_of<
ValueFederate, std::remove_reference_t<decltype(*valueFed)>>::value,
82 "first argument must be a pointer to a ValueFederate");
93 const std::string& key,
94 const std::string& type,
95 const std::string& units = std::string());
104 template<
class FedPtr>
107 const std::string& key,
108 const std::string& type,
109 const std::string& units = std::string()):
110 Publication(locality, std::addressof(*valueFed), key, type, units)
113 std::is_base_of<
ValueFederate, std::remove_reference_t<decltype(*valueFed)>>::value,
114 "first argument must be a pointer to a ValueFederate");
124 const std::string& key,
126 const std::string& units = std::string()):
136 template<
class FedPtr>
138 const std::string& key,
140 const std::string& units = std::string()):
153 const std::string& key,
155 const std::string& units = std::string()):
167 template<
class FedPtr>
170 const std::string& key,
172 const std::string& units = std::string()):
184 bool isValid()
const {
return handle.isValid(); }
186 bool operator!=(
const Publication& pub)
const {
return (handle != pub.handle); }
187 bool operator<(
const Publication& pub)
const {
return (handle < pub.handle); }
190 const std::string&
getKey()
const {
return fed->getInterfaceName(*
this); }
192 const std::string&
getName()
const {
return pubKey; }
194 const std::string&
getType()
const {
return fed->getExtractionType(*
this); }
196 const std::string&
getUnits()
const {
return pubUnits; }
198 const std::string&
getInfo()
const {
return fed->getInfo(handle); }
200 void setInfo(
const std::string& info) {
fed->setInfo(handle, info); }
206 fed->setInterfaceOption(handle, option, value);
210 int32_t
getOption(int32_t option)
const {
return fed->getInterfaceOption(handle, option); }
213 void addTarget(
const std::string& target) {
fed->addTarget(*
this, target); }
217 fed->removeTarget(*
this, targetToRemove);
227 void publish(
const std::string& val);
228 void publish(
const std::vector<double>& val);
229 void publish(
const std::vector<std::complex<double>>& val);
230 void publish(
const double* vals,
int size);
231 void publish(std::complex<double> val);
237 void publish(
const std::string& name,
double val);
238 void publish(
const char* name,
double val);
244 void publish(
double val,
const std::string& units);
245 void publish(
double val,
const units::precise_unit& units);
249 std::enable_if_t<(std::is_integral<X>::value && !std::is_same<remove_cv_ref<X>,
char>::value),
253 publishInt(
static_cast<int64_t
>(val));
259 (!std::is_convertible<X, std::string>::value) &&
260 (!std::is_same<X, defV>::value) && (!std::is_convertible<X, Time>::value)),
264 if ((pubType == data_type::helics_custom) || (pubType == data_type::helics_any)) {
273 changeDetectionEnabled =
true;
277 changeDetectionEnabled =
false;
292 void publishInt(int64_t val);
303 typename std::enable_if_t<helicsType<X>() != data_type::helics_custom, std::unique_ptr<Publication>>
305 const std::string& key,
306 const std::string& units = std::string())
308 return std::make_unique<Publication>(valueFed, helicsType<X>(), key, units);
318 template<
class X,
class FedPtr>
319 typename std::enable_if_t<helicsType<X>() != data_type::helics_custom, std::unique_ptr<Publication>>
321 const std::string& key,
322 const std::string& units = std::string())
324 return std::make_unique<Publication>(valueFed, helicsType<X>(), key, units);
335 typename std::enable_if_t<helicsType<X>() != data_type::helics_custom, std::unique_ptr<Publication>>
338 const std::string& key,
339 const std::string& units = std::string())
341 return std::make_unique<Publication>(locality, valueFed, key, helicsType<X>(), units);
352 template<
class X,
class FedPtr>
353 typename std::enable_if_t<helicsType<X>() != data_type::helics_custom, std::unique_ptr<Publication>>
356 const std::string& key,
357 const std::string& units = std::string())
359 return std::make_unique<Publication>(locality, valueFed, key, helicsType<X>(), units);
373 const std::string& key,
374 const std::string& units = std::string()):
383 template<
class FedPtr>
385 const std::string& key,
386 const std::string& units = std::string()):
398 const std::string& key,
399 const std::string& units = std::string()):
409 template<
class FedPtr>
412 const std::string& key,
413 const std::string& units = std::string()):
424 void publish(
const X& val,
const std::string& units)
448 const std::string& key,
450 const std::string& units = std::string()):
452 publishDelta(minChange), prev(X())
461 template<
class FedPtr>
463 const std::string& key,
465 const std::string& units = std::string()):
467 publishDelta(minChange), prev(X())
473 virtual void publish(
const X& val)
const override
475 if (std::abs(val - prev) >= publishDelta) {
490 template<
class... Us>
493 fed.getPublication(pubKey).publish(pargs...);
bool operator!=(const data_block &db1, const data_block &db2)
Definition: core-data.hpp:140
std::enable_if_t<((typeCategory< X >::value==nonConvertibleType) &&(!std::is_convertible< X, std::string >::value) &&(!std::is_same< X, defV >::value) &&(!std::is_convertible< X, Time >::value)), void > publish(const X &val)
Definition: Publications.hpp:262
PublicationOnChange(FedPtr &valueFed, const std::string &key, const X &minChange, const std::string &units=std::string())
Definition: Publications.hpp:462
const std::string & getName() const
Definition: Publications.hpp:192
Publication(FedPtr valueFed, const std::string &key, const std::string &type=std::string(), const std::string &units=std::string())
Definition: Publications.hpp:74
const std::string & getUnits() const
Definition: Publications.hpp:196
void setInfo(const std::string &info)
Definition: Publications.hpp:200
Definition: helicsTypes.hpp:111
PublicationT(interface_visibility locality, FedPtr &valueFed, const std::string &key, const std::string &units=std::string())
Definition: Publications.hpp:410
Definition: application_api/ValueFederate.hpp:25
PublicationT(ValueFederate *valueFed, const std::string &key, const std::string &units=std::string())
Definition: Publications.hpp:372
int32_t getOption(int32_t option) const
Definition: Publications.hpp:210
Publication(interface_visibility locality, FedPtr &valueFed, const std::string &key, const std::string &type, const std::string &units=std::string())
Definition: Publications.hpp:105
Definition: ValueConverter.hpp:26
constexpr const char * typeNameString()
Definition: helicsTypes.hpp:149
TimeRepresentation< count_time< 9 > > Time
Definition: helics-time.hpp:27
const std::string & getKey() const
Definition: Publications.hpp:190
void publishRaw(const Publication &pub, data_view block)
Definition: ValueFederate.cpp:401
Publication(interface_visibility locality, ValueFederate *valueFed, const std::string &key, data_type type, const std::string &units=std::string())
Definition: Publications.hpp:151
ValueFederate * fed
the federate construct to interact with
Definition: Publications.hpp:25
void removeTarget(const std::string &targetToRemove)
Definition: Publications.hpp:215
void publish(const X &val, const std::string &units)
Definition: Publications.hpp:424
const std::string & getType() const
Definition: Publications.hpp:194
Publication(ValueFederate *valueFed, const std::string &key, data_type type, const std::string &units=std::string())
Definition: Publications.hpp:123
Definition: Publications.hpp:364
Publication(FedPtr &valueFed, const std::string &key, data_type type, const std::string &units=std::string())
Definition: Publications.hpp:137
Definition: Publications.hpp:435
Definition: core-exceptions.hpp:57
Definition: core-exceptions.hpp:85
const std::string & typeNameStringRef(data_type type)
Definition: helicsTypes.cpp:27
bool changeDetected(const defV &prevValue, const std::string &val, double)
Definition: helicsPrimaryTypes.cpp:16
PublicationOnChange(ValueFederate *valueFed, const std::string &key, const X &minChange, const std::string &units=std::string())
Definition: Publications.hpp:447
void setMinimumChange(double deltaV) noexcept
Definition: Publications.hpp:270
std::conditional_t< helicsType< remove_cv_ref< X > >() !=data_type::helics_custom, std::integral_constant< int, primaryType >, std::conditional_t< isConvertableType< remove_cv_ref< X > >(), std::integral_constant< int, convertibleType >, std::integral_constant< int, nonConvertibleType > >> typeCategory
Definition: helicsTypes.hpp:545
bool isValid() const
Definition: Publications.hpp:184
interface_handle getHandle() const
Definition: Publications.hpp:179
data_type pubType
the type of publication
Definition: Publications.hpp:32
Publication & registerGlobalPublication(const std::string &key, const std::string &type, const std::string &units=std::string())
Definition: ValueFederate.cpp:107
Publication & getPublication(const std::string &key)
Definition: ValueFederate.cpp:583
Publication(interface_visibility locality, FedPtr &valueFed, const std::string &key, data_type type, const std::string &units=std::string())
Definition: Publications.hpp:168
@ fed
special logging command for message coming from a fed
Definition: loggingHelper.hpp:32
void close()
Definition: Publications.hpp:222
const std::string & getInfo() const
Definition: Publications.hpp:198
Definition: federate_id.hpp:65
mpark::variant< double, int64_t, std::string, std::complex< double >, std::vector< double >, std::vector< std::complex< double > >, NamedPoint > defV
Definition: HelicsPrimaryTypes.hpp:34
Definition: ValueFederateManager.hpp:66
PublicationT(interface_visibility locality, ValueFederate *valueFed, const std::string &key, const std::string &units=std::string())
Definition: Publications.hpp:396
bool changeDetectionEnabled
the change detection is enabled
Definition: Publications.hpp:33
Definition: Publications.hpp:23
naming a set of types that are interchangeable and recognizable inside the HELICS application API and...
interface_handle handle
the internal id of the publication
Definition: Publications.hpp:26
void publish(double val)
Definition: Publications.cpp:70
std::enable_if_t< helicsType< X >) !=data_type::helics_custom, std::unique_ptr< Publication > > make_publication(ValueFederate *valueFed, const std::string &key, const std::string &units=std::string())
Definition: Publications.hpp:304
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
data_type
Definition: helicsTypes.hpp:275
void addTarget(const std::string &target)
Definition: Publications.hpp:213
void enableChangeDetection(bool enabled=true) noexcept
Definition: Publications.hpp:284
data_type getTypeFromString(const std::string &typeName)
Definition: helicsTypes.cpp:187
data_block typeConvert(data_type type, double val)
Definition: helicsTypes.cpp:610
void publish(ValueFederate &fed, const std::string &pubKey, Us... pargs)
Definition: Publications.hpp:491
void publish(const X &val)
Definition: Publications.hpp:419
std::enable_if_t<(std::is_integral< X >::value &&!std::is_same< remove_cv_ref< X >, char >::value), void > publish(X val)
Definition: Publications.hpp:251
interface_visibility
Definition: helicsTypes.hpp:38
virtual void publish(const X &val) const override
Definition: Publications.hpp:473
void setOption(int32_t option, int32_t value=1)
Definition: Publications.hpp:204
Publication & registerPublication(const std::string &key, const std::string &type, const std::string &units=std::string())
Definition: ValueFederate.cpp:99
PublicationT(FedPtr &valueFed, const std::string &key, const std::string &units=std::string())
Definition: Publications.hpp:384