helics 3.7.0
Loading...
Searching...
No Matches
Endpoints.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#pragma once
8
9#include "Federate.hpp"
10#include "data_view.hpp"
11
12#include <memory>
13#include <string>
14#include <type_traits>
15#include <utility>
16
17namespace helics {
18class MessageFederate;
19
21class HELICS_CXX_EXPORT Endpoint: public Interface {
22 private:
23 MessageFederate* fed{nullptr};
24 int referenceIndex{-1};
25 void* dataReference{nullptr};
26 bool disableAssign{false};
27 bool receiveOnly{false};
28 std::string defDest;
29 public:
31 Endpoint() = default;
32
33 // constructor used by messageFederateManager
34 Endpoint(MessageFederate* mFed, std::string_view name, InterfaceHandle hid);
35
37 std::string_view name,
38 std::string_view type = std::string_view{});
39
40 template<class FedPtr>
41 Endpoint(FedPtr& mFed, std::string_view name, std::string_view type = std::string_view{}):
42 Endpoint(std::addressof(*mFed), name, type)
43 {
44 static_assert(
45 std::is_base_of<MessageFederate, std::remove_reference_t<decltype(*mFed)>>::value,
46 "first argument must be a pointer to a MessageFederate");
47 }
54 Endpoint(InterfaceVisibility locality,
55 MessageFederate* mFed,
56 std::string_view name,
57 std::string_view type = std::string_view{});
64 template<class FedPtr>
66 FedPtr& mFed,
67 std::string_view name,
68 std::string_view type = std::string_view{}):
69 Endpoint(locality, std::addressof(*mFed), name, type)
70 {
71 static_assert(
72 std::is_base_of<MessageFederate, std::remove_reference_t<decltype(*mFed)>>::value,
73 "second argument must be a pointer to a MessageFederate");
74 }
75 const std::string& getType() const { return getExtractionType(); }
80 void send(const char* data, size_t data_size) const;
81
83 void subscribe(std::string_view key);
84
90 void sendTo(const char* data, size_t data_size, std::string_view dest) const;
96 void sendAt(const char* data, size_t data_size, Time sendTime) const;
97
104 void sendTo(const data_view& data, std::string_view dest) const
105 {
106 sendTo(data.data(), data.size(), dest);
107 }
115 void sendToAt(const data_view& data, std::string_view dest, Time sendTime) const
116 {
117 sendToAt(data.data(), data.size(), dest, sendTime);
118 }
125 void sendToAt(const char* data, size_t data_size, std::string_view dest, Time sendTime) const;
126
131 void send(const void* data, size_t data_size) const;
132
138 void send(const data_view& data) const { send(data.data(), data.size()); }
145 void sendAt(const data_view& data, Time sendTime) const
146 {
147 sendAt(data.data(), data.size(), sendTime);
148 }
150 void send(std::unique_ptr<Message> mess) const;
151
156 void send(const Message& mess) const { send(std::make_unique<Message>(mess)); }
157
159 std::unique_ptr<Message> getMessage() const;
161 bool hasMessage() const;
163 std::uint64_t pendingMessageCount() const;
170 void setCallback(const std::function<void(const Endpoint&, Time)>& callback);
171
173 void addSourceFilter(std::string_view filterName);
175 void addDestinationFilter(std::string_view filterName);
177 void setDefaultDestination(std::string_view target);
178 void addSourceEndpoint(std::string_view endpointName);
179 void addDestinationEndpoint(std::string_view endpointName);
180
182 const std::string& getDefaultDestination() const;
183 virtual const std::string& getDisplayName() const override { return getName(); }
184
185 private:
186 friend class MessageFederateManager;
187};
188} // namespace helics
Definition Endpoints.hpp:21
void send(const data_view &data) const
Definition Endpoints.hpp:138
void sendTo(const data_view &data, std::string_view dest) const
Definition Endpoints.hpp:104
Endpoint()=default
void sendAt(const data_view &data, Time sendTime) const
Definition Endpoints.hpp:145
Endpoint(InterfaceVisibility locality, FedPtr &mFed, std::string_view name, std::string_view type=std::string_view{})
Definition Endpoints.hpp:65
void sendToAt(const data_view &data, std::string_view dest, Time sendTime) const
Definition Endpoints.hpp:115
void send(const Message &mess) const
Definition Endpoints.hpp:156
virtual const std::string & getDisplayName() const override
Definition Endpoints.hpp:183
Definition LocalFederateId.hpp:65
Definition application_api/Federate.hpp:880
Definition MessageFederateManager.hpp:34
Definition application_api/MessageFederate.hpp:24
Definition core-data.hpp:29
Definition data_view.hpp:22
size_t size() const noexcept
Definition data_view.hpp:114
const char * data() const noexcept
Definition data_view.hpp:107
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition AsyncFedCallInfo.hpp:14
InterfaceVisibility
Definition helicsTypes.hpp:40
TimeRepresentation< count_time< 9 > > Time
Definition helicsTime.hpp:27
STL namespace.