helics  2.8.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 "global_federate_id.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<global_handle, 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_src_filters;
36  std::unordered_multimap<std::string, std::string>
37  unknown_dest_filters;
38  public:
40  UnknownHandleManager() = default;
42  void addUnknownPublication(const std::string& key, global_handle target, uint16_t flags);
44  void addUnknownInput(const std::string& key, global_handle target, uint16_t flags);
46  void addUnknownEndpoint(const std::string& key, global_handle target, uint16_t flags);
47 
49  void addUnknownFilter(const std::string& key, global_handle target, uint16_t flags);
51  void addDataLink(const std::string& source, const std::string& target);
52  void addSourceFilterLink(const std::string& filter, const std::string& endpoint);
53  void addDestinationFilterLink(const std::string& filter, const std::string& endpoint);
55  std::vector<targetInfo> checkForInputs(const std::string& newInput) const;
57  std::vector<targetInfo> checkForPublications(const std::string& newPublication) const;
59  std::vector<targetInfo> checkForEndpoints(const std::string& newEndpoint) const;
60 
62  std::vector<targetInfo> checkForFilters(const std::string& newFilter) const;
63 
65  std::vector<std::string> checkForLinks(const std::string& newSource) const;
66 
67  std::vector<std::string> checkForFilterSourceTargets(const std::string& newFilter) const;
68  std::vector<std::string> checkForFilterDestTargets(const std::string& newFilter) const;
70  void clearInput(const std::string& newInput);
72  void clearPublication(const std::string& newPublication);
74  void clearEndpoint(const std::string& newEndpoint);
75 
77  void clearFilter(const std::string& newFilter);
81  bool hasUnknowns() const;
82 
84  bool hasNonOptionalUnknowns() const;
85 
87  bool hasRequiredUnknowns() const;
94  std::function<void(const std::string& name, char type, global_handle)> cfunc) const;
95 
102  std::function<void(const std::string& name, char type, global_handle)> cfunc) const;
103 };
104 
105 } // namespace helics
helics::UnknownHandleManager::addUnknownFilter
void addUnknownFilter(const std::string &key, global_handle target, uint16_t flags)
Definition: UnknownHandleManager.cpp:35
helics::UnknownHandleManager::clearPublication
void clearPublication(const std::string &newPublication)
Definition: UnknownHandleManager.cpp:263
helics::global_federate_id
Definition: global_federate_id.hpp:68
helics::UnknownHandleManager::checkForLinks
std::vector< std::string > checkForLinks(const std::string &newSource) const
Definition: UnknownHandleManager.cpp:103
helics::UnknownHandleManager::processNonOptionalUnknowns
void processNonOptionalUnknowns(std::function< void(const std::string &name, char type, global_handle)> cfunc) const
Definition: UnknownHandleManager.cpp:200
helics::UnknownHandleManager::hasUnknowns
bool hasUnknowns() const
Definition: UnknownHandleManager.cpp:134
helics::UnknownHandleManager::processRequiredUnknowns
void processRequiredUnknowns(std::function< void(const std::string &name, char type, global_handle)> cfunc) const
Definition: UnknownHandleManager.cpp:230
helics::UnknownHandleManager::addUnknownPublication
void addUnknownPublication(const std::string &key, global_handle target, uint16_t flags)
Definition: UnknownHandleManager.cpp:13
helics::UnknownHandleManager::hasRequiredUnknowns
bool hasRequiredUnknowns() const
Definition: UnknownHandleManager.cpp:174
helics::UnknownHandleManager::checkForPublications
std::vector< targetInfo > checkForPublications(const std::string &newPublication) const
Definition: UnknownHandleManager.cpp:98
helics::UnknownHandleManager::clearInput
void clearInput(const std::string &newInput)
Definition: UnknownHandleManager.cpp:257
helics::UnknownHandleManager::addUnknownEndpoint
void addUnknownEndpoint(const std::string &key, global_handle target, uint16_t flags)
Definition: UnknownHandleManager.cpp:28
helics::UnknownHandleManager::clearEndpoint
void clearEndpoint(const std::string &newEndpoint)
Definition: UnknownHandleManager.cpp:269
helics::global_handle
Definition: global_federate_id.hpp:128
helics::UnknownHandleManager::checkForFilters
std::vector< targetInfo > checkForFilters(const std::string &newFilter) const
Definition: UnknownHandleManager.cpp:117
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:110
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
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:275
helics::UnknownHandleManager::addUnknownInput
void addUnknownInput(const std::string &key, global_handle target, uint16_t flags)
Definition: UnknownHandleManager.cpp:20
helics::UnknownHandleManager::checkForInputs
std::vector< targetInfo > checkForInputs(const std::string &newInput) const
Definition: UnknownHandleManager.cpp:92
helics::UnknownHandleManager::clearFederateUnknowns
void clearFederateUnknowns(global_federate_id id)
Definition: UnknownHandleManager.cpp:282
flagOperations.hpp
make_flags
constexpr uint16_t make_flags(unsigned int flag)
Definition: flagOperations.hpp:96
helics::UnknownHandleManager::hasNonOptionalUnknowns
bool hasNonOptionalUnknowns() const
Definition: UnknownHandleManager.cpp:141