helics  2.8.1
HandleManager.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 "BasicHandleInfo.hpp"
9 #include "Core.hpp"
10 #include "helics-time.hpp"
11 
12 #include <deque>
13 #include <string>
14 #include <unordered_map>
15 #include <utility>
16 namespace helics {
21  private:
29  std::deque<BasicHandleInfo> handles;
30  std::unordered_map<std::string, interface_handle>
31  publications;
32  std::unordered_map<std::string, interface_handle> endpoints;
33  std::unordered_map<std::string, interface_handle> inputs;
34  std::unordered_map<std::string, interface_handle> filters;
35  std::unordered_map<std::uint64_t, int32_t> unique_ids;
36  public:
38  HandleManager() = default;
41  handle_type what,
42  const std::string& key,
43  const std::string& type,
44  const std::string& units);
47  interface_handle local_id,
48  handle_type what,
49  const std::string& key,
50  const std::string& type,
51  const std::string& units);
52 
53  void addHandle(const BasicHandleInfo& otherHandle);
55  void addHandleAtIndex(const BasicHandleInfo& otherHandle, int32_t index);
57  void removeHandle(global_handle handle);
59  BasicHandleInfo* getHandleInfo(int32_t index);
61  const BasicHandleInfo* getHandleInfo(int32_t index) const;
65  const BasicHandleInfo* getHandleInfo(interface_handle handle) const;
69  const BasicHandleInfo* findHandle(global_handle id) const;
70 
71  void setHandleOption(interface_handle handle, int32_t option, int32_t val);
72 
73  int32_t getHandleOption(interface_handle handle, int32_t option) const;
75  BasicHandleInfo* getEndpoint(const std::string& name);
77  const BasicHandleInfo* getEndpoint(const std::string& name) const;
83  const BasicHandleInfo* getEndpoint(interface_handle handle) const;
85  const BasicHandleInfo* getFilter(const std::string& name) const;
86  BasicHandleInfo* getFilter(const std::string& name);
87  // auto getFilters (const std::string &name) const { return filters.equal_range (name); }
91  BasicHandleInfo* getPublication(const std::string& name);
92  const BasicHandleInfo* getPublication(const std::string& name) const;
95  BasicHandleInfo* getPublication(interface_handle handle);
96  BasicHandleInfo* getInput(const std::string& name);
97  const BasicHandleInfo* getInput(const std::string& name) const;
98  local_federate_id getLocalFedID(interface_handle handle) const;
99 
100  BasicHandleInfo& operator[](size_t index) { return handles[index]; }
101  const BasicHandleInfo& operator[](size_t index) const { return handles[index]; }
102  auto begin() { return handles.begin(); }
103  auto end() { return handles.end(); }
104  auto begin() const { return handles.begin(); }
105  auto end() const { return handles.end(); }
106  auto size() const { return handles.size(); }
107 
108  private:
109  void addSearchFields(const BasicHandleInfo& handle, int32_t index);
110  std::string generateName(handle_type what) const;
111 };
112 
113 } // namespace helics
helics-time.hpp
helics::HandleManager::getFilter
const BasicHandleInfo * getFilter(const std::string &name) const
Definition: HandleManager.cpp:306
helics::local_federate_id
Definition: federate_id.hpp:22
helics::interface_handle::baseValue
constexpr base_type baseValue() const
Definition: federate_id.hpp:73
helics_handle_option_connection_required
@ helics_handle_option_connection_required
Definition: helics_enums.h:276
helics::global_federate_id
Definition: global_federate_id.hpp:68
extra_flag2
@ extra_flag2
extra flag
Definition: flagOperations.hpp:27
helics::HandleManager::addHandle
BasicHandleInfo & addHandle(global_federate_id fed_id, handle_type what, const std::string &key, const std::string &type, const std::string &units)
Definition: HandleManager.cpp:13
checkActionFlag
bool checkActionFlag(uint16_t flags, FlagIndex flag)
Definition: flagOperations.hpp:75
helics::HandleManager
Definition: HandleManager.hpp:20
helics::handle_type::filter
@ filter
handle to a filter
helics::HandleManager::findHandle
BasicHandleInfo * findHandle(global_handle id)
Definition: HandleManager.cpp:130
helics_handle_option_single_connection_only
@ helics_handle_option_single_connection_only
Definition: helics_enums.h:281
helics_handle_option_connection_optional
@ helics_handle_option_connection_optional
Definition: helics_enums.h:279
helics::global_handle
Definition: global_federate_id.hpp:128
clearActionFlag
void clearActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:90
extra_flag1
@ extra_flag1
extra flag
Definition: flagOperations.hpp:23
helics_handle_option_only_transmit_on_change
@ helics_handle_option_only_transmit_on_change
Definition: helics_enums.h:292
helics::BasicHandleInfo
Definition: BasicHandleInfo.hpp:36
helics_handle_option_only_update_on_change
@ helics_handle_option_only_update_on_change
Definition: helics_enums.h:294
setActionFlag
void setActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:67
helics::HandleManager::HandleManager
HandleManager()=default
helics::HandleManager::getEndpoint
BasicHandleInfo * getEndpoint(const std::string &name)
Definition: HandleManager.cpp:204
helics::HandleManager::getHandleInfo
BasicHandleInfo * getHandleInfo(int32_t index)
Definition: HandleManager.cpp:94
helics::interface_handle
Definition: federate_id.hpp:65
helics::handle_type
handle_type
Definition: BasicHandleInfo.hpp:16
helics::handle_type::input
@ input
handle to a input interface
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
extra_flag4
@ extra_flag4
extra flag
Definition: flagOperations.hpp:32
helics::handle_type::endpoint
@ endpoint
handle to an endpoint
helics::HandleManager::removeHandle
void removeHandle(global_handle handle)
Definition: HandleManager.cpp:47
helics::handle_type::publication
@ publication
handle to output interface
helics::HandleManager::addHandleAtIndex
void addHandleAtIndex(const BasicHandleInfo &otherHandle, int32_t index)
Definition: HandleManager.cpp:79
helics::isValidIndex
bool isValidIndex(sizeType testSize, const SizedDataType &vec)
Definition: core-data.hpp:249