helics  3.3.0
UnknownHandleManager.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 #pragma once
8 #include "GlobalFederateId.hpp"
9 
10 #include <string>
11 #include <unordered_map>
12 #include <utility>
13 #include <vector>
14 
15 namespace helics {
20  public:
21  using targetInfo = std::pair<GlobalHandle, uint16_t>;
22 
23  private:
24  std::unordered_multimap<std::string, targetInfo>
25  unknown_publications;
26  std::unordered_multimap<std::string, targetInfo>
27  unknown_endpoints;
28  std::unordered_multimap<std::string, targetInfo>
29  unknown_inputs;
30  std::unordered_multimap<std::string, targetInfo>
31  unknown_filters;
32  std::unordered_multimap<std::string, std::string>
33  unknown_links;
34  std::unordered_multimap<std::string, std::string>
35  unknown_endpoint_links;
36  std::unordered_multimap<std::string, std::string>
37  unknown_src_filters;
38  std::unordered_multimap<std::string, std::string>
39  unknown_dest_filters;
40  public:
42  UnknownHandleManager() = default;
44  void addUnknownPublication(std::string_view key, GlobalHandle target, uint16_t flags);
46  void addUnknownInput(std::string_view key, GlobalHandle target, uint16_t flags);
48  void addUnknownEndpoint(std::string_view key, GlobalHandle target, uint16_t flags);
49 
51  void addUnknownFilter(std::string_view key, GlobalHandle target, uint16_t flags);
53  void addDataLink(std::string_view source, std::string_view target);
55  void addEndpointLink(std::string_view source, std::string_view target);
56 
57  void addSourceFilterLink(std::string_view filter, std::string_view endpoint);
58  void addDestinationFilterLink(std::string_view filter, std::string_view endpoint);
60  std::vector<targetInfo> checkForInputs(const std::string& newInput) const;
62  std::vector<targetInfo> checkForPublications(const std::string& newPublication) const;
64  std::vector<targetInfo> checkForEndpoints(const std::string& newEndpoint) const;
65 
67  std::vector<targetInfo> checkForFilters(const std::string& newFilter) const;
68 
70  std::vector<std::string> checkForLinks(const std::string& newSource) const;
71 
73  std::vector<std::string> checkForEndpointLinks(const std::string& newSource) const;
74 
75  std::vector<std::string> checkForFilterSourceTargets(const std::string& newFilter) const;
76  std::vector<std::string> checkForFilterDestTargets(const std::string& newFilter) const;
78  void clearInput(const std::string& newInput);
80  void clearPublication(const std::string& newPublication);
82  void clearEndpoint(const std::string& newEndpoint);
83 
85  void clearFilter(const std::string& newFilter);
89  bool hasUnknowns() const;
90 
92  bool hasNonOptionalUnknowns() const;
93 
95  bool hasRequiredUnknowns() const;
102  const std::function<void(const std::string& name, char type, GlobalHandle)>& cfunc) const;
103 
110  const std::function<void(const std::string& name, char type, GlobalHandle)>& cfunc) const;
111 
117  void processUnknowns(
118  const std::function<void(const std::string& name, char type, GlobalHandle)>& cfunc) const;
119 };
120 
121 } // namespace helics
helics::UnknownHandleManager::clearFederateUnknowns
void clearFederateUnknowns(GlobalFederateId id)
Definition: UnknownHandleManager.cpp:311
helics::UnknownHandleManager::addUnknownFilter
void addUnknownFilter(std::string_view key, GlobalHandle target, uint16_t flags)
Definition: UnknownHandleManager.cpp:35
helics::UnknownHandleManager::checkForEndpointLinks
std::vector< std::string > checkForEndpointLinks(const std::string &newSource) const
Definition: UnknownHandleManager.cpp:113
helics::optional_flag
@ optional_flag
flag indicating that a connection is optional and may not be matched
Definition: flagOperations.hpp:53
helics::UnknownHandleManager::clearPublication
void clearPublication(const std::string &newPublication)
Definition: UnknownHandleManager.cpp:291
helics::UnknownHandleManager::checkForLinks
std::vector< std::string > checkForLinks(const std::string &newSource) const
Definition: UnknownHandleManager.cpp:107
helics::UnknownHandleManager::addUnknownPublication
void addUnknownPublication(std::string_view key, GlobalHandle target, uint16_t flags)
Definition: UnknownHandleManager.cpp:13
helics::GlobalFederateId
Definition: GlobalFederateId.hpp:72
helics::UnknownHandleManager::hasUnknowns
bool hasUnknowns() const
Definition: UnknownHandleManager.cpp:144
helics::UnknownHandleManager::hasRequiredUnknowns
bool hasRequiredUnknowns() const
Definition: UnknownHandleManager.cpp:185
helics::UnknownHandleManager::checkForPublications
std::vector< targetInfo > checkForPublications(const std::string &newPublication) const
Definition: UnknownHandleManager.cpp:102
helics::UnknownHandleManager::clearInput
void clearInput(const std::string &newInput)
Definition: UnknownHandleManager.cpp:285
helics::UnknownHandleManager::clearEndpoint
void clearEndpoint(const std::string &newEndpoint)
Definition: UnknownHandleManager.cpp:297
helics::UnknownHandleManager::checkForFilters
std::vector< targetInfo > checkForFilters(const std::string &newFilter) const
Definition: UnknownHandleManager.cpp:127
helics::UnknownHandleManager::addEndpointLink
void addEndpointLink(std::string_view source, std::string_view target)
Definition: UnknownHandleManager.cpp:47
helics::UnknownHandleManager
Definition: UnknownHandleManager.hpp:19
helics::UnknownHandleManager::checkForEndpoints
std::vector< targetInfo > checkForEndpoints(const std::string &newEndpoint) const
Definition: UnknownHandleManager.cpp:120
helics::UnknownHandleManager::UnknownHandleManager
UnknownHandleManager()=default
helics::UnknownHandleManager::addDataLink
void addDataLink(std::string_view source, std::string_view target)
Definition: UnknownHandleManager.cpp:42
helics::make_flags
constexpr uint16_t make_flags(unsigned int flag)
Definition: flagOperations.hpp:170
helics::UnknownHandleManager::addUnknownInput
void addUnknownInput(std::string_view key, GlobalHandle target, uint16_t flags)
Definition: UnknownHandleManager.cpp:20
helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
helics::UnknownHandleManager::clearFilter
void clearFilter(const std::string &newFilter)
Definition: UnknownHandleManager.cpp:304
helics::UnknownHandleManager::processUnknowns
void processUnknowns(const std::function< void(const std::string &name, char type, GlobalHandle)> &cfunc) const
Definition: UnknownHandleManager.cpp:211
helics::UnknownHandleManager::processRequiredUnknowns
void processRequiredUnknowns(const std::function< void(const std::string &name, char type, GlobalHandle)> &cfunc) const
Definition: UnknownHandleManager.cpp:258
helics::UnknownHandleManager::checkForInputs
std::vector< targetInfo > checkForInputs(const std::string &newInput) const
Definition: UnknownHandleManager.cpp:96
helics::required_flag
@ required_flag
flag indicating that an action or match is required
Definition: flagOperations.hpp:45
helics::GlobalHandle
Definition: GlobalFederateId.hpp:144
helics::UnknownHandleManager::processNonOptionalUnknowns
void processNonOptionalUnknowns(const std::function< void(const std::string &name, char type, GlobalHandle)> &cfunc) const
Definition: UnknownHandleManager.cpp:228
flagOperations.hpp
helics::UnknownHandleManager::addUnknownEndpoint
void addUnknownEndpoint(std::string_view key, GlobalHandle target, uint16_t flags)
Definition: UnknownHandleManager.cpp:28
helics::UnknownHandleManager::hasNonOptionalUnknowns
bool hasNonOptionalUnknowns() const
Definition: UnknownHandleManager.cpp:151