helics  3.0.1
UnknownHandleManager.hpp
1 /*
2 Copyright (c) 2017-2021,
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(const std::string& key, GlobalHandle target, uint16_t flags);
46  void addUnknownInput(const std::string& key, GlobalHandle target, uint16_t flags);
48  void addUnknownEndpoint(const std::string& key, GlobalHandle target, uint16_t flags);
49 
51  void addUnknownFilter(const std::string& key, GlobalHandle target, uint16_t flags);
53  void addDataLink(const std::string& source, const std::string& target);
55  void addEndpointLink(const std::string& source, const std::string& target);
56 
57  void addSourceFilterLink(const std::string& filter, const std::string& endpoint);
58  void addDestinationFilterLink(const std::string& filter, const std::string& 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 };
112 
113 } // namespace helics
helics::UnknownHandleManager::clearFederateUnknowns
void clearFederateUnknowns(GlobalFederateId id)
Definition: UnknownHandleManager.cpp:295
helics::UnknownHandleManager::checkForEndpointLinks
std::vector< std::string > checkForEndpointLinks(const std::string &newSource) const
Definition: UnknownHandleManager.cpp:114
helics::UnknownHandleManager::clearPublication
void clearPublication(const std::string &newPublication)
Definition: UnknownHandleManager.cpp:275
helics::UnknownHandleManager::checkForLinks
std::vector< std::string > checkForLinks(const std::string &newSource) const
Definition: UnknownHandleManager.cpp:108
helics::GlobalFederateId
Definition: GlobalFederateId.hpp:68
helics::UnknownHandleManager::hasUnknowns
bool hasUnknowns() const
Definition: UnknownHandleManager.cpp:145
helics::UnknownHandleManager::addUnknownInput
void addUnknownInput(const std::string &key, GlobalHandle target, uint16_t flags)
Definition: UnknownHandleManager.cpp:20
helics::UnknownHandleManager::hasRequiredUnknowns
bool hasRequiredUnknowns() const
Definition: UnknownHandleManager.cpp:186
helics::UnknownHandleManager::checkForPublications
std::vector< targetInfo > checkForPublications(const std::string &newPublication) const
Definition: UnknownHandleManager.cpp:103
helics::UnknownHandleManager::clearInput
void clearInput(const std::string &newInput)
Definition: UnknownHandleManager.cpp:269
helics::UnknownHandleManager::clearEndpoint
void clearEndpoint(const std::string &newEndpoint)
Definition: UnknownHandleManager.cpp:281
helics::UnknownHandleManager::checkForFilters
std::vector< targetInfo > checkForFilters(const std::string &newFilter) const
Definition: UnknownHandleManager.cpp:128
helics::UnknownHandleManager::addUnknownEndpoint
void addUnknownEndpoint(const std::string &key, GlobalHandle target, uint16_t flags)
Definition: UnknownHandleManager.cpp:28
helics::UnknownHandleManager::addDataLink
void addDataLink(const std::string &source, const std::string &target)
Definition: UnknownHandleManager.cpp:42
helics::UnknownHandleManager
Definition: UnknownHandleManager.hpp:19
helics::UnknownHandleManager::checkForEndpoints
std::vector< targetInfo > checkForEndpoints(const std::string &newEndpoint) const
Definition: UnknownHandleManager.cpp:121
helics::UnknownHandleManager::UnknownHandleManager
UnknownHandleManager()=default
helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
required_flag
@ required_flag
flag indicating that an action or match is required
Definition: flagOperations.hpp:18
helics::UnknownHandleManager::addUnknownPublication
void addUnknownPublication(const std::string &key, GlobalHandle target, uint16_t flags)
Definition: UnknownHandleManager.cpp:13
optional_flag
@ optional_flag
flag indicating that a connection is optional and may not be matched
Definition: flagOperations.hpp:24
helics::UnknownHandleManager::clearFilter
void clearFilter(const std::string &newFilter)
Definition: UnknownHandleManager.cpp:288
helics::UnknownHandleManager::processRequiredUnknowns
void processRequiredUnknowns(const std::function< void(const std::string &name, char type, GlobalHandle)> &cfunc) const
Definition: UnknownHandleManager.cpp:242
helics::UnknownHandleManager::checkForInputs
std::vector< targetInfo > checkForInputs(const std::string &newInput) const
Definition: UnknownHandleManager.cpp:97
helics::UnknownHandleManager::addUnknownFilter
void addUnknownFilter(const std::string &key, GlobalHandle target, uint16_t flags)
Definition: UnknownHandleManager.cpp:35
helics::GlobalHandle
Definition: GlobalFederateId.hpp:128
helics::UnknownHandleManager::processNonOptionalUnknowns
void processNonOptionalUnknowns(const std::function< void(const std::string &name, char type, GlobalHandle)> &cfunc) const
Definition: UnknownHandleManager.cpp:212
flagOperations.hpp
helics::UnknownHandleManager::addEndpointLink
void addEndpointLink(const std::string &source, const std::string &target)
Definition: UnknownHandleManager.cpp:47
make_flags
constexpr uint16_t make_flags(unsigned int flag)
Definition: flagOperations.hpp:117
helics::UnknownHandleManager::hasNonOptionalUnknowns
bool hasNonOptionalUnknowns() const
Definition: UnknownHandleManager.cpp:152