9 #include "ValueFederate.hpp"
32 std::vector<Input> ids;
33 std::function<void(
int,
Time)>
51 std::string_view units = std::string_view{}):
52 fed(valueFed), m_key(key), m_units(units)
55 vals.resize(count, defValue);
57 for (
auto ind = startIndex; ind < startIndex + count; ++ind) {
62 for (
auto&
id : ids) {
64 handleCallback(inp, tm);
76 template<
class FedPtr>
82 std::string_view units = std::string_view{}):
86 std::is_base_of<
ValueFederate, std::remove_reference_t<decltype(*valueFed)>>::value,
87 "first argument must be a pointer to a ValueFederate");
92 fed(vs.fed), m_key(std::move(vs.m_key)), m_units(std::move(vs.m_units)),
93 ids(std::move(vs.ids)), update_callback(std::move(vs.update_callback)),
94 vals(std::move(vs.vals))
97 for (
auto&
id : ids) {
99 handleCallback(inp, tm);
107 m_key = std::move(vs.m_key);
108 m_units = std::move(vs.m_units);
109 ids = std::move(vs.ids);
110 update_callback = std::move(vs.update_callback);
111 vals = std::move(vs.vals);
113 for (
auto&
id : ids) {
115 handleCallback(inp, tm);
122 const std::vector<X>&
getVals()
const {
return vals; }
133 update_callback = std::move(callback);
137 void handleCallback(
Input& inp,
Time time)
139 auto res = std::lower_bound(ids.begin(), ids.end(), inp);
140 int index =
static_cast<int>(res - ids.begin());
142 if (update_callback) {
143 update_callback(index, time);
156 std::vector<Input> ids;
157 std::function<void(
int,
Time)>
160 std::array<int, 4> indices{{0, 0, 0, 0}};
174 template<
class FedPtr>
176 std::string_view key,
182 std::string_view units = std::string_view()):
183 fed(std::addressof(*valueFed)), m_key(key), m_units(units)
186 std::is_base_of<
ValueFederate, std::remove_reference_t<decltype(*valueFed)>>::value,
187 "Second argument must be a pointer to a ValueFederate");
188 std::size_t arrayCount =
189 static_cast<std::size_t
>(count_x) *
static_cast<std::size_t
>(count_y);
190 ids.reserve(arrayCount);
191 vals.resize(arrayCount, defValue);
193 for (
auto ind_x = startIndex_x; ind_x < startIndex_x + count_x; ++ind_x) {
194 for (
auto ind_y = startIndex_y; ind_y < startIndex_y + count_y; ++ind_y) {
200 indices[0] = startIndex_x;
201 indices[1] = count_x;
202 indices[2] = startIndex_y;
203 indices[3] = count_y;
204 for (
auto&
id : ids) {
206 handleCallback(inp, tm);
215 m_key = std::move(vs.m_key);
216 m_units = std::move(vs.m_units);
217 ids = std::move(vs.ids);
218 update_callback = std::move(vs.update_callback);
219 vals = std::move(vs.vals);
221 for (
auto&
id : ids) {
223 handleCallback(inp, tm);
226 indices = vs.indices;
231 const std::vector<X>&
getVals()
const {
return vals; }
239 const X&
at(
int index_x,
int index_y)
const
241 return vals[(index_x - indices[0]) * indices[3] + (index_y - indices[2])];
250 update_callback = std::move(callback);
254 void handleCallback(
const Input& inp,
Time time)
256 auto res = std::lower_bound(ids.begin(), ids.end(), inp);
257 int index =
static_cast<int>(res - ids.begin());
258 ids[index].getValue(vals[index]);
259 if (update_callback) {
260 update_callback(index, time);
Definition: application_api/ValueFederate.hpp:28
Input & registerIndexedSubscription(std::string_view target, int index1, std::string_view units=std::string_view{})
Definition: application_api/ValueFederate.hpp:257
void setInputNotificationCallback(std::function< void(Input &, Time)> callback)
Definition: ValueFederate.cpp:694
Definition: Subscriptions.hpp:151
const std::vector< X > & getVals() const
Definition: Subscriptions.hpp:231
const X & operator[](int index) const
Definition: Subscriptions.hpp:235
VectorSubscription2d(FedPtr valueFed, std::string_view key, int startIndex_x, int count_x, int startIndex_y, int count_y, const X &defValue, std::string_view units=std::string_view())
Definition: Subscriptions.hpp:175
VectorSubscription2d & operator=(VectorSubscription2d &&vs) noexcept
Definition: Subscriptions.hpp:212
const X & at(int index_x, int index_y) const
Definition: Subscriptions.hpp:239
void setInputNotificationCallback(std::function< void(int, Time)> callback)
Definition: Subscriptions.hpp:248
Definition: Subscriptions.hpp:27
VectorSubscription & operator=(VectorSubscription &&vs) noexcept
Definition: Subscriptions.hpp:104
VectorSubscription(FedPtr valueFed, std::string_view key, int startIndex, int count, const X &defValue, std::string_view units=std::string_view{})
Definition: Subscriptions.hpp:77
VectorSubscription(ValueFederate *valueFed, std::string_view key, int startIndex, int count, const X &defValue, std::string_view units=std::string_view{})
Definition: Subscriptions.hpp:46
const X & operator[](int index) const
Definition: Subscriptions.hpp:125
void setInputNotificationCallback(std::function< void(int, Time)> callback)
Definition: Subscriptions.hpp:131
VectorSubscription(VectorSubscription &&vs) noexcept
Definition: Subscriptions.hpp:91
const std::vector< X > & getVals() const
Definition: Subscriptions.hpp:122
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
TimeRepresentation< count_time< 9 > > Time
Definition: helicsTime.hpp:27