helics  3.5.2
UnknownHandleManager.hpp
1 /*
2 Copyright (c) 2017-2024,
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 #pragma once
8 #include "CoreTypes.hpp"
9 #include "GlobalFederateId.hpp"
10 
11 #include <string>
12 #include <unordered_map>
13 #include <utility>
14 #include <vector>
15 
16 namespace helics {
21  public:
22  using TargetInfo = std::pair<GlobalHandle, uint16_t>;
23 
24  private:
25  std::unordered_multimap<std::string, TargetInfo>
26  unknown_publications;
27  std::unordered_multimap<std::string, TargetInfo>
28  unknown_endpoints;
29  std::unordered_multimap<std::string, TargetInfo> unknown_inputs;
30  std::unordered_multimap<std::string, TargetInfo>
31  unknown_filters;
32 
33  std::unordered_multimap<std::string, std::string>
34  unknown_links;
35  std::unordered_multimap<std::string, std::string>
36  unknown_endpoint_links;
37  std::unordered_multimap<std::string, std::string>
38  unknown_src_filters;
39  std::unordered_multimap<std::string, std::string>
40  unknown_dest_filters;
41 
42  std::unordered_multimap<std::string, TargetInfo>
43  reconnectable_publications;
44  std::unordered_multimap<std::string, TargetInfo>
45  reconnectable_endpoints;
46  std::unordered_multimap<std::string, TargetInfo>
47  reconnectable_inputs;
48  std::unordered_multimap<std::string, TargetInfo>
49  reconnectable_filters;
50  public:
52  UnknownHandleManager() = default;
54  void addUnknownPublication(std::string_view key, GlobalHandle target, uint16_t flags);
56  void addUnknownInput(std::string_view key, GlobalHandle target, uint16_t flags);
58  void addUnknownEndpoint(std::string_view key, GlobalHandle target, uint16_t flags);
60  void addUnknownFilter(std::string_view key, GlobalHandle target, uint16_t flags);
61 
63  void addReconnectablePublication(std::string_view key, GlobalHandle target, uint16_t flags);
65  void addReconnectableInput(std::string_view key, GlobalHandle target, uint16_t flags);
67  void addReconnectableEndpoint(std::string_view key, GlobalHandle target, uint16_t flags);
69  void addReconnectableFilter(std::string_view key, GlobalHandle target, uint16_t flags);
70 
72  void addDataLink(std::string_view source, std::string_view target);
74  void addEndpointLink(std::string_view source, std::string_view target);
75 
76  void addSourceFilterLink(std::string_view filter, std::string_view endpoint);
77  void addDestinationFilterLink(std::string_view filter, std::string_view endpoint);
79  std::vector<TargetInfo> checkForInputs(const std::string& newInput) const;
81  std::vector<TargetInfo> checkForPublications(const std::string& newPublication) const;
83  std::vector<TargetInfo> checkForEndpoints(const std::string& newEndpoint) const;
84 
86  std::vector<TargetInfo> checkForFilters(const std::string& newFilter) const;
87 
89  std::vector<TargetInfo> checkForReconnectionInputs(const std::string& newInput) const;
91  std::vector<TargetInfo>
92  checkForReconnectionPublications(const std::string& newPublication) const;
94  std::vector<TargetInfo> checkForReconnectionEndpoints(const std::string& newEndpoint) const;
95 
97  std::vector<TargetInfo> checkForReconnectionFilters(const std::string& newFilter) const;
98 
100  std::vector<std::string> checkForLinks(const std::string& newSource) const;
101 
103  std::vector<std::string> checkForEndpointLinks(const std::string& newSource) const;
104 
105  std::vector<std::string> checkForFilterSourceTargets(const std::string& newFilter) const;
106  std::vector<std::string> checkForFilterDestTargets(const std::string& newFilter) const;
108  void clearInput(const std::string& newInput);
110  void clearPublication(const std::string& newPublication);
112  void clearEndpoint(const std::string& newEndpoint);
113 
115  void clearFilter(const std::string& newFilter);
119  void clearUnknownsIf(
120  const std::function<bool(const std::string& name, InterfaceType, TargetInfo)>& cfunc);
122  bool hasUnknowns() const;
123 
125  bool hasNonOptionalUnknowns() const;
126 
128  bool hasRequiredUnknowns() const;
134  const std::function<void(const std::string& name, InterfaceType, TargetInfo)>& cfunc) const;
135 
141  const std::function<void(const std::string& name, InterfaceType, TargetInfo)>& cfunc) const;
142 
147  void processUnknowns(
148  const std::function<void(const std::string& name, InterfaceType, TargetInfo)>& cfunc) const;
149 
154  void processUnknownLinks(const std::function<void(const std::string& origin,
156  const std::string& target,
157  InterfaceType)>& cfunc) const;
158 };
159 
160 } // namespace helics
Definition: GlobalFederateId.hpp:75
Definition: GlobalFederateId.hpp:147
Definition: UnknownHandleManager.hpp:20
bool hasRequiredUnknowns() const
Definition: UnknownHandleManager.cpp:218
void clearFilter(const std::string &newFilter)
Definition: UnknownHandleManager.cpp:342
void clearFederateUnknowns(GlobalFederateId id)
Definition: UnknownHandleManager.cpp:363
void clearInput(const std::string &newInput)
Definition: UnknownHandleManager.cpp:323
std::vector< TargetInfo > checkForReconnectionInputs(const std::string &newInput) const
Definition: UnknownHandleManager.cpp:172
std::vector< TargetInfo > checkForFilters(const std::string &newFilter) const
Definition: UnknownHandleManager.cpp:154
void addUnknownInput(std::string_view key, GlobalHandle target, uint16_t flags)
Definition: UnknownHandleManager.cpp:22
void addReconnectablePublication(std::string_view key, GlobalHandle target, uint16_t flags)
Definition: UnknownHandleManager.cpp:44
void clearUnknownsIf(const std::function< bool(const std::string &name, InterfaceType, TargetInfo)> &cfunc)
Definition: UnknownHandleManager.cpp:372
void addUnknownEndpoint(std::string_view key, GlobalHandle target, uint16_t flags)
Definition: UnknownHandleManager.cpp:30
void processUnknownLinks(const std::function< void(const std::string &origin, InterfaceType, const std::string &target, InterfaceType)> &cfunc) const
Definition: UnknownHandleManager.cpp:247
std::vector< TargetInfo > checkForReconnectionFilters(const std::string &newFilter) const
Definition: UnknownHandleManager.cpp:189
std::vector< TargetInfo > checkForInputs(const std::string &newInput) const
Definition: UnknownHandleManager.cpp:126
std::vector< TargetInfo > checkForEndpoints(const std::string &newEndpoint) const
Definition: UnknownHandleManager.cpp:148
void processUnknowns(const std::function< void(const std::string &name, InterfaceType, TargetInfo)> &cfunc) const
Definition: UnknownHandleManager.cpp:230
void processNonOptionalUnknowns(const std::function< void(const std::string &name, InterfaceType, TargetInfo)> &cfunc) const
Definition: UnknownHandleManager.cpp:266
void clearPublication(const std::string &newPublication)
Definition: UnknownHandleManager.cpp:329
std::vector< TargetInfo > checkForPublications(const std::string &newPublication) const
Definition: UnknownHandleManager.cpp:131
std::vector< TargetInfo > checkForReconnectionPublications(const std::string &newPublication) const
Definition: UnknownHandleManager.cpp:177
void clearEndpoint(const std::string &newEndpoint)
Definition: UnknownHandleManager.cpp:335
void addEndpointLink(std::string_view source, std::string_view target)
Definition: UnknownHandleManager.cpp:78
void processRequiredUnknowns(const std::function< void(const std::string &name, InterfaceType, TargetInfo)> &cfunc) const
Definition: UnknownHandleManager.cpp:296
void addReconnectableEndpoint(std::string_view key, GlobalHandle target, uint16_t flags)
Definition: UnknownHandleManager.cpp:59
void addReconnectableInput(std::string_view key, GlobalHandle target, uint16_t flags)
Definition: UnknownHandleManager.cpp:51
std::vector< TargetInfo > checkForReconnectionEndpoints(const std::string &newEndpoint) const
Definition: UnknownHandleManager.cpp:183
bool hasUnknowns() const
Definition: UnknownHandleManager.cpp:194
std::vector< std::string > checkForLinks(const std::string &newSource) const
Definition: UnknownHandleManager.cpp:136
void addDataLink(std::string_view source, std::string_view target)
Definition: UnknownHandleManager.cpp:73
void addUnknownPublication(std::string_view key, GlobalHandle target, uint16_t flags)
Definition: UnknownHandleManager.cpp:15
void addUnknownFilter(std::string_view key, GlobalHandle target, uint16_t flags)
Definition: UnknownHandleManager.cpp:37
std::vector< std::string > checkForEndpointLinks(const std::string &newSource) const
Definition: UnknownHandleManager.cpp:142
void addReconnectableFilter(std::string_view key, GlobalHandle target, uint16_t flags)
Definition: UnknownHandleManager.cpp:66
bool hasNonOptionalUnknowns() const
Definition: UnknownHandleManager.cpp:201
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
InterfaceType
Definition: CoreTypes.hpp:111