helics 3.7.0
Loading...
Searching...
No Matches
Publication.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#ifndef HELICS_CPP98_PUBLICATION_HPP_
8#define HELICS_CPP98_PUBLICATION_HPP_
9#pragma once
10
11#include "DataBuffer.hpp"
12#include "helics/helics.h"
13#include "helicsExceptions.hpp"
14
15#include <string>
16#include <vector>
17
18namespace helicscpp {
21 public:
23 explicit Publication(HelicsPublication hpub) HELICS_NOTHROW: pub(hpub) {}
25 Publication() HELICS_NOTHROW: pub(HELICS_NULL_POINTER) {}
27 Publication(const Publication& publication): pub(publication.pub) {}
29 Publication& operator=(const Publication& publication)
30 {
31 pub = publication.pub;
32 return *this;
33 }
34 // there is no need for move operators since copying the underlying object is fine, it is a
35 // non-owning pointer
37 operator HelicsPublication() const { return pub; }
39 HELICS_NODISCARD HelicsPublication baseObject() const { return pub; }
40
42 HELICS_NODISCARD bool isValid() const { return (helicsPublicationIsValid(pub) == HELICS_TRUE); }
43
47 void publish(const char* data, int len)
48 {
49 // returns helics_status
50 helicsPublicationPublishBytes(pub, data, len, HELICS_IGNORE_ERROR);
51 }
53 void publish(const char* str) { helicsPublicationPublishString(pub, str, HELICS_IGNORE_ERROR); }
55 void publish(const std::string& str)
56 {
57 helicsPublicationPublishString(pub, str.c_str(), HELICS_IGNORE_ERROR);
58 }
59
61 void publish(int64_t val)
62 {
63 // returns helics_status
64 helicsPublicationPublishInteger(pub, val, HELICS_IGNORE_ERROR);
65 }
67 void publish(double val) { helicsPublicationPublishDouble(pub, val, HELICS_IGNORE_ERROR); }
68
70 void publish(std::complex<double> cmplx)
71 {
72 helicsPublicationPublishComplex(pub, cmplx.real(), cmplx.imag(), HELICS_IGNORE_ERROR);
73 }
75 void publish(const std::vector<double>& data)
76 {
78 data.data(),
79 static_cast<int>(data.size()),
80 HELICS_IGNORE_ERROR);
81 }
83 void publish(const double* data, int length)
84 {
85 helicsPublicationPublishVector(pub, data, length, HELICS_IGNORE_ERROR);
86 }
87
88#if defined(__GNUC__)
89# pragma GCC diagnostic push
90# pragma GCC diagnostic ignored "-Wstrict-aliasing"
91 // std::complex is explicitly allowed to alias like this in the standard
92#endif
94 void publish(const std::vector<std::complex<double> >& data)
95 {
97 reinterpret_cast<const double*>(data.data()),
98 static_cast<int>(data.size()),
99 HELICS_IGNORE_ERROR);
100 }
101#if defined(__GNUC__)
102# pragma GCC diagnostic pop
103#endif
104
107 void publishComplex(const double* data, int length)
108 {
109 helicsPublicationPublishComplexVector(pub, data, length, HELICS_IGNORE_ERROR);
110 }
112 void publish(const std::string& name, double val)
113 {
114 helicsPublicationPublishNamedPoint(pub, name.c_str(), val, HELICS_IGNORE_ERROR);
115 }
117 void publish(bool val)
118 {
119 helicsPublicationPublishBoolean(pub, val ? HELICS_TRUE : HELICS_FALSE, HELICS_IGNORE_ERROR);
120 }
127 HELICS_NODISCARD const char* getName() const { return helicsPublicationGetName(pub); }
129 HELICS_NODISCARD const char* getUnits() const { return helicsPublicationGetUnits(pub); }
131 HELICS_NODISCARD const char* getType() const { return helicsPublicationGetType(pub); }
133 HELICS_NODISCARD const char* getInfo() const { return helicsPublicationGetInfo(pub); }
134
136 void setInfo(const std::string& info)
137 {
138 helicsPublicationSetInfo(pub, info.c_str(), HELICS_IGNORE_ERROR);
139 }
141 HELICS_NODISCARD const char* getTag(const std::string& tagname) const
142 {
143 return helicsPublicationGetTag(pub, tagname.c_str());
144 }
146 void setTag(const std::string& tagname, const std::string& tagvalue)
147 {
148 helicsPublicationSetTag(pub, tagname.c_str(), tagvalue.c_str(), HELICS_IGNORE_ERROR);
149 }
150 void setOption(int32_t option, int32_t value = 1)
151 {
152 helicsPublicationSetOption(pub, option, value, HELICS_IGNORE_ERROR);
153 }
154 HELICS_NODISCARD int32_t getOption(int32_t option)
155 {
156 return helicsPublicationGetOption(pub, option);
157 }
158
159 private:
161};
162
163} // namespace helicscpp
164#endif
void * HelicsPublication
Definition api-data.h:31
const HelicsBool HELICS_FALSE
Definition api-data.h:123
const HelicsBool HELICS_TRUE
Definition api-data.h:122
Definition DataBuffer.hpp:18
HELICS_NODISCARD HelicsDataBuffer getHelicsDataBuffer()
Definition DataBuffer.hpp:165
Definition Publication.hpp:20
void publish(const char *str)
Definition Publication.hpp:53
HELICS_NODISCARD const char * getName() const
Definition Publication.hpp:127
HELICS_NODISCARD const char * getUnits() const
Definition Publication.hpp:129
void setInfo(const std::string &info)
Definition Publication.hpp:136
void setTag(const std::string &tagname, const std::string &tagvalue)
Definition Publication.hpp:146
Publication() HELICS_NOTHROW
Definition Publication.hpp:25
void publish(std::complex< double > cmplx)
Definition Publication.hpp:70
HELICS_NODISCARD bool isValid() const
Definition Publication.hpp:42
HELICS_NODISCARD const char * getInfo() const
Definition Publication.hpp:133
void publish(const char *data, int len)
Definition Publication.hpp:47
void publishComplex(const double *data, int length)
Definition Publication.hpp:107
Publication(const Publication &publication)
Definition Publication.hpp:27
void publish(int64_t val)
Definition Publication.hpp:61
void publish(const double *data, int length)
Definition Publication.hpp:83
void publish(bool val)
Definition Publication.hpp:117
void publish(double val)
Definition Publication.hpp:67
HELICS_NODISCARD const char * getType() const
Definition Publication.hpp:131
void publish(DataBuffer &buffer)
Definition Publication.hpp:122
HELICS_NODISCARD const char * getTag(const std::string &tagname) const
Definition Publication.hpp:141
HELICS_NODISCARD HelicsPublication baseObject() const
Definition Publication.hpp:39
Publication & operator=(const Publication &publication)
Definition Publication.hpp:29
void publish(const std::string &str)
Definition Publication.hpp:55
void publish(const std::string &name, double val)
Definition Publication.hpp:112
void publish(const std::vector< double > &data)
Definition Publication.hpp:75
void publish(const std::vector< std::complex< double > > &data)
Definition Publication.hpp:94
Publication(HelicsPublication hpub) HELICS_NOTHROW
Definition Publication.hpp:23
Definition helicsExceptions.hpp:38
void helicsPublicationSetInfo(HelicsPublication pub, const char *info, HelicsError *err)
Definition ValueFederateExport.cpp:1462
const char * helicsPublicationGetType(HelicsPublication pub)
Definition ValueFederateExport.cpp:1287
const char * helicsPublicationGetInfo(HelicsPublication pub)
Definition ValueFederateExport.cpp:1445
void helicsPublicationSetOption(HelicsPublication pub, int option, int val, HelicsError *err)
Definition ValueFederateExport.cpp:1592
int helicsPublicationGetOption(HelicsPublication pub, int option)
Definition ValueFederateExport.cpp:1576
const char * helicsPublicationGetTag(HelicsPublication pub, const char *tagname)
Definition ValueFederateExport.cpp:1511
const char * helicsPublicationGetName(HelicsPublication pub)
Definition ValueFederateExport.cpp:1346
void helicsPublicationSetTag(HelicsPublication pub, const char *tagname, const char *tagvalue, HelicsError *err)
Definition ValueFederateExport.cpp:1528
const char * helicsPublicationGetUnits(HelicsPublication pub)
Definition ValueFederateExport.cpp:1402
void helicsPublicationPublishNamedPoint(HelicsPublication pub, const char *field, double val, HelicsError *err)
Definition ValueFederateExport.cpp:671
void helicsPublicationPublishString(HelicsPublication pub, const char *val, HelicsError *err)
Definition ValueFederateExport.cpp:536
void helicsPublicationPublishVector(HelicsPublication pub, const double *vectorInput, int vectorLength, HelicsError *err)
Definition ValueFederateExport.cpp:635
void helicsPublicationPublishDouble(HelicsPublication pub, double val, HelicsError *err)
Definition ValueFederateExport.cpp:578
void helicsPublicationPublishComplex(HelicsPublication pub, double real, double imag, HelicsError *err)
Definition ValueFederateExport.cpp:621
void helicsPublicationPublishBoolean(HelicsPublication pub, HelicsBool val, HelicsError *err)
Definition ValueFederateExport.cpp:564
HelicsBool helicsPublicationIsValid(HelicsPublication pub)
Definition ValueFederateExport.cpp:721
void helicsPublicationPublishDataBuffer(HelicsPublication pub, HelicsDataBuffer buffer, HelicsError *err)
Definition ValueFederateExport.cpp:689
void helicsPublicationPublishInteger(HelicsPublication pub, int64_t val, HelicsError *err)
Definition ValueFederateExport.cpp:550
void helicsPublicationPublishComplexVector(HelicsPublication pub, const double *vectorInput, int vectorLength, HelicsError *err)
Definition ValueFederateExport.cpp:653
void helicsPublicationPublishBytes(HelicsPublication pub, const void *data, int inputDataLength, HelicsError *err)
Definition ValueFederateExport.cpp:522
Definition cpp98/Broker.hpp:18