helics  3.3.0
Publication.hpp
1 /*
2 Copyright (c) 2017-2022,
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 #ifndef HELICS_CPP98_PUBLICATION_HPP_
8 #define HELICS_CPP98_PUBLICATION_HPP_
9 #pragma once
10 
11 #include "helics/helics.h"
12 #include "helicsExceptions.hpp"
13 
14 #include <string>
15 #include <vector>
16 
17 namespace helicscpp {
19 class Publication {
20  public:
22  explicit Publication(HelicsPublication hpub) HELICS_NOTHROW: pub(hpub) {}
24  Publication() HELICS_NOTHROW: pub(HELICS_NULL_POINTER) {}
26  Publication(const Publication& publication): pub(publication.pub) {}
28  Publication& operator=(const Publication& publication)
29  {
30  pub = publication.pub;
31  return *this;
32  }
33  // there is no need for move operators since copying the underlying object is fine, it is a
34  // non-owning pointer
36  operator HelicsPublication() const { return pub; }
38  HelicsPublication baseObject() const { return pub; }
39 
41  bool isValid() const { return (helicsPublicationIsValid(pub) == HELICS_TRUE); }
42 
46  void publish(const char* data, int len)
47  {
48  // returns helics_status
49  helicsPublicationPublishBytes(pub, data, len, HELICS_IGNORE_ERROR);
50  }
52  void publish(const char* str) { helicsPublicationPublishString(pub, str, HELICS_IGNORE_ERROR); }
54  void publish(const std::string& str)
55  {
56  helicsPublicationPublishString(pub, str.c_str(), HELICS_IGNORE_ERROR);
57  }
58 
60  void publish(int64_t val)
61  {
62  // returns helics_status
63  helicsPublicationPublishInteger(pub, val, HELICS_IGNORE_ERROR);
64  }
66  void publish(double val) { helicsPublicationPublishDouble(pub, val, HELICS_IGNORE_ERROR); }
67 
69  void publish(std::complex<double> cmplx)
70  {
71  helicsPublicationPublishComplex(pub, cmplx.real(), cmplx.imag(), HELICS_IGNORE_ERROR);
72  }
74  void publish(const std::vector<double>& data)
75  {
77  data.data(),
78  static_cast<int>(data.size()),
79  HELICS_IGNORE_ERROR);
80  }
82  void publish(const double* data, int length)
83  {
84  helicsPublicationPublishVector(pub, data, length, HELICS_IGNORE_ERROR);
85  }
86 
87 #if defined(__GNUC__)
88 # pragma GCC diagnostic push
89 # pragma GCC diagnostic ignored "-Wstrict-aliasing"
90  // std::complex is explicitly allowed to alias like this in the standard
91 #endif
92 
93  void publish(const std::vector<std::complex<double> >& data)
94  {
96  reinterpret_cast<const double*>(data.data()),
97  static_cast<int>(data.size()),
98  HELICS_IGNORE_ERROR);
99  }
100 #if defined(__GNUC__)
101 # pragma GCC diagnostic pop
102 #endif
103 
106  void publishComplex(const double* data, int length)
107  {
108  helicsPublicationPublishComplexVector(pub, data, length, HELICS_IGNORE_ERROR);
109  }
111  void publish(const std::string& name, double val)
112  {
113  helicsPublicationPublishNamedPoint(pub, name.c_str(), val, HELICS_IGNORE_ERROR);
114  }
116  void publish(bool val)
117  {
118  helicsPublicationPublishBoolean(pub, val ? HELICS_TRUE : HELICS_FALSE, HELICS_IGNORE_ERROR);
119  }
121  const char* getName() const
122  {
123  return helicsPublicationGetName(pub);
124  }
126  const char* getUnits() const
127  {
128  return helicsPublicationGetUnits(pub);
129  }
131  const char* getType() const
132  {
133  return helicsPublicationGetType(pub);
134  }
136  const char* getInfo() const
137  {
138  return helicsPublicationGetInfo(pub);
139  }
140 
142  void setInfo(const std::string& info)
143  {
144  helicsPublicationSetInfo(pub, info.c_str(), HELICS_IGNORE_ERROR);
145  }
147  const char* getTag(const std::string& tagname) const
148  {
149  return helicsPublicationGetTag(pub, tagname.c_str());
150  }
152  void setTag(const std::string& tagname, const std::string& tagvalue)
153  {
154  helicsPublicationSetTag(pub, tagname.c_str(), tagvalue.c_str(), HELICS_IGNORE_ERROR);
155  }
156  void setOption(int32_t option, int32_t value = 1)
157  {
158  helicsPublicationSetOption(pub, option, value, HELICS_IGNORE_ERROR);
159  }
160  int32_t getOption(int32_t option)
161  {
162  return helicsPublicationGetOption(pub, option);
163  }
164 
165  private:
166  HelicsPublication pub;
167 };
168 
169 } // namespace helicscpp
170 #endif
helicscpp::Publication::publish
void publish(const std::vector< double > &data)
Definition: Publication.hpp:74
helicscpp::Publication::Publication
Publication() HELICS_NOTHROW
Definition: Publication.hpp:24
helicsPublicationGetName
const char * helicsPublicationGetName(HelicsPublication pub)
Definition: ValueFederateExport.cpp:1269
helicscpp::Publication::operator=
Publication & operator=(const Publication &publication)
Definition: Publication.hpp:28
helicscpp::Publication::setTag
void setTag(const std::string &tagname, const std::string &tagvalue)
Definition: Publication.hpp:152
HELICS_FALSE
const HelicsBool HELICS_FALSE
Definition: api-data.h:115
helicscpp::Publication::publish
void publish(std::complex< double > cmplx)
Definition: Publication.hpp:69
HELICS_TRUE
const HelicsBool HELICS_TRUE
Definition: api-data.h:114
helicsPublicationPublishString
void helicsPublicationPublishString(HelicsPublication pub, const char *val, HelicsError *err)
Definition: ValueFederateExport.cpp:496
helicscpp::Publication::publish
void publish(const std::string &str)
Definition: Publication.hpp:54
helicscpp::Publication::publish
void publish(bool val)
Definition: Publication.hpp:116
helicsPublicationIsValid
HelicsBool helicsPublicationIsValid(HelicsPublication pub)
Definition: ValueFederateExport.cpp:660
helicscpp::Publication::setInfo
void setInfo(const std::string &info)
Definition: Publication.hpp:142
helicsPublicationPublishComplex
void helicsPublicationPublishComplex(HelicsPublication pub, double real, double imag, HelicsError *err)
Definition: ValueFederateExport.cpp:581
helicscpp::Publication::isValid
bool isValid() const
Definition: Publication.hpp:41
helicscpp::Publication::getInfo
const char * getInfo() const
Definition: Publication.hpp:136
helicscpp::Publication::Publication
Publication(const Publication &publication)
Definition: Publication.hpp:26
helicscpp::Publication::publish
void publish(double val)
Definition: Publication.hpp:66
helicsPublicationGetInfo
const char * helicsPublicationGetInfo(HelicsPublication pub)
Definition: ValueFederateExport.cpp:1368
helicscpp::Publication::baseObject
HelicsPublication baseObject() const
Definition: Publication.hpp:38
helicscpp::Publication::getName
const char * getName() const
Definition: Publication.hpp:121
helicsPublicationPublishInteger
void helicsPublicationPublishInteger(HelicsPublication pub, int64_t val, HelicsError *err)
Definition: ValueFederateExport.cpp:510
helicsPublicationGetType
const char * helicsPublicationGetType(HelicsPublication pub)
Definition: ValueFederateExport.cpp:1215
helicscpp::Publication::publish
void publish(const std::vector< std::complex< double > > &data)
Definition: Publication.hpp:93
helicsPublicationPublishComplexVector
void helicsPublicationPublishComplexVector(HelicsPublication pub, const double *vectorInput, int vectorLength, HelicsError *err)
Definition: ValueFederateExport.cpp:613
helicsPublicationGetUnits
const char * helicsPublicationGetUnits(HelicsPublication pub)
Definition: ValueFederateExport.cpp:1325
helicsPublicationPublishNamedPoint
void helicsPublicationPublishNamedPoint(HelicsPublication pub, const char *field, double val, HelicsError *err)
Definition: ValueFederateExport.cpp:631
helicscpp::Publication::publishComplex
void publishComplex(const double *data, int length)
Definition: Publication.hpp:106
helicsPublicationGetTag
const char * helicsPublicationGetTag(HelicsPublication pub, const char *tagname)
Definition: ValueFederateExport.cpp:1434
helicscpp::Publication::publish
void publish(const std::string &name, double val)
Definition: Publication.hpp:111
helicsPublicationSetTag
void helicsPublicationSetTag(HelicsPublication pub, const char *tagname, const char *tagvalue, HelicsError *err)
Definition: ValueFederateExport.cpp:1451
helicscpp::Publication::publish
void publish(int64_t val)
Definition: Publication.hpp:60
helicsPublicationPublishDouble
void helicsPublicationPublishDouble(HelicsPublication pub, double val, HelicsError *err)
Definition: ValueFederateExport.cpp:538
helicscpp::Publication::publish
void publish(const char *str)
Definition: Publication.hpp:52
helicsPublicationGetOption
int helicsPublicationGetOption(HelicsPublication pub, int option)
Definition: ValueFederateExport.cpp:1499
HelicsPublication
void * HelicsPublication
Definition: api-data.h:31
helicscpp::Publication::publish
void publish(const char *data, int len)
Definition: Publication.hpp:46
helicsPublicationSetInfo
void helicsPublicationSetInfo(HelicsPublication pub, const char *info, HelicsError *err)
Definition: ValueFederateExport.cpp:1385
helicsPublicationSetOption
void helicsPublicationSetOption(HelicsPublication pub, int option, int val, HelicsError *err)
Definition: ValueFederateExport.cpp:1515
helicsPublicationPublishVector
void helicsPublicationPublishVector(HelicsPublication pub, const double *vectorInput, int vectorLength, HelicsError *err)
Definition: ValueFederateExport.cpp:595
helicsPublicationPublishBytes
void helicsPublicationPublishBytes(HelicsPublication pub, const void *data, int inputDataLength, HelicsError *err)
Definition: ValueFederateExport.cpp:482
helicscpp::Publication::getType
const char * getType() const
Definition: Publication.hpp:131
helicscpp::Publication::Publication
Publication(HelicsPublication hpub) HELICS_NOTHROW
Definition: Publication.hpp:22
helicscpp::Publication::publish
void publish(const double *data, int length)
Definition: Publication.hpp:82
helicscpp::Publication
Definition: Publication.hpp:19
helicscpp::Publication::getTag
const char * getTag(const std::string &tagname) const
Definition: Publication.hpp:147
helicscpp
Definition: cpp98/Broker.hpp:18
helicsPublicationPublishBoolean
void helicsPublicationPublishBoolean(HelicsPublication pub, HelicsBool val, HelicsError *err)
Definition: ValueFederateExport.cpp:524
helicscpp::Publication::getUnits
const char * getUnits() const
Definition: Publication.hpp:126