helics  3.0.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 "helicsTime.hpp"
11 
12 #include <deque>
13 #include <string>
14 #include <string_view>
15 #include <unordered_map>
16 #include <utility>
17 namespace helics {
18 
23  private:
31  std::deque<BasicHandleInfo> handles;
32  std::unordered_map<std::string_view, InterfaceHandle>
33  publications;
34  std::unordered_map<std::string_view, InterfaceHandle>
35  endpoints;
36  std::unordered_map<std::string_view, InterfaceHandle> inputs;
37  std::unordered_map<std::string_view, InterfaceHandle> filters;
38  std::unordered_map<std::uint64_t, int32_t> unique_ids;
39  public:
41  HandleManager() = default;
44  InterfaceType what,
45  const std::string& key,
46  const std::string& type,
47  const std::string& units);
50  InterfaceHandle local_id,
51  InterfaceType what,
52  const std::string& key,
53  const std::string& type,
54  const std::string& units);
55 
56  void addHandle(const BasicHandleInfo& otherHandle);
58  void addHandleAtIndex(const BasicHandleInfo& otherHandle, int32_t index);
60  void removeHandle(GlobalHandle handle);
62  BasicHandleInfo* getHandleInfo(int32_t index);
64  const BasicHandleInfo* getHandleInfo(int32_t index) const;
68  const BasicHandleInfo* getHandleInfo(InterfaceHandle handle) const;
72  const BasicHandleInfo* findHandle(GlobalHandle id) const;
73 
74  void setHandleOption(InterfaceHandle handle, int32_t option, int32_t val);
75 
76  int32_t getHandleOption(InterfaceHandle handle, int32_t option) const;
78  BasicHandleInfo* getEndpoint(std::string_view name);
80  const BasicHandleInfo* getEndpoint(std::string_view name) const;
86  const BasicHandleInfo* getEndpoint(InterfaceHandle handle) const;
88  const BasicHandleInfo* getFilter(std::string_view name) const;
89  BasicHandleInfo* getFilter(std::string_view name);
90  // auto getFilters (const std::string &name) const { return filters.equal_range (name); }
94  BasicHandleInfo* getPublication(std::string_view name);
95  const BasicHandleInfo* getPublication(std::string_view name) const;
98  BasicHandleInfo* getPublication(InterfaceHandle handle);
99  BasicHandleInfo* getInput(std::string_view name);
100  const BasicHandleInfo* getInput(std::string_view name) const;
101  LocalFederateId getLocalFedID(InterfaceHandle handle) const;
102 
103  BasicHandleInfo& operator[](size_t index) { return handles[index]; }
104  const BasicHandleInfo& operator[](size_t index) const { return handles[index]; }
105  auto begin() { return handles.begin(); }
106  auto end() { return handles.end(); }
107  auto begin() const { return handles.begin(); }
108  auto end() const { return handles.end(); }
109  auto size() const { return handles.size(); }
110 
111  private:
112  void addSearchFields(const BasicHandleInfo& handle, int32_t index);
113  std::string generateName(InterfaceType what) const;
114 };
115 
116 } // namespace helics
HELICS_HANDLE_OPTION_ONLY_TRANSMIT_ON_CHANGE
@ HELICS_HANDLE_OPTION_ONLY_TRANSMIT_ON_CHANGE
Definition: helics_enums.h:323
helics::HandleManager::findHandle
BasicHandleInfo * findHandle(GlobalHandle id)
Definition: HandleManager.cpp:130
helics::HandleManager::getFilter
const BasicHandleInfo * getFilter(std::string_view name) const
Definition: HandleManager.cpp:306
HELICS_HANDLE_OPTION_ONLY_UPDATE_ON_CHANGE
@ HELICS_HANDLE_OPTION_ONLY_UPDATE_ON_CHANGE
Definition: helics_enums.h:325
helics::InterfaceType
InterfaceType
Definition: CoreTypes.hpp:96
helics::InterfaceHandle
Definition: LocalFederateId.hpp:65
helics::HandleManager::addHandle
BasicHandleInfo & addHandle(GlobalFederateId fed_id, InterfaceType what, const std::string &key, const std::string &type, const std::string &units)
Definition: HandleManager.cpp:13
extra_flag2
@ extra_flag2
extra flag
Definition: flagOperations.hpp:27
helics::GlobalFederateId
Definition: GlobalFederateId.hpp:68
helics::InterfaceType::FILTER
@ FILTER
handle to a filter
helics::InterfaceType::INPUT
@ INPUT
handle to a input interface
HELICS_HANDLE_OPTION_CONNECTION_OPTIONAL
@ HELICS_HANDLE_OPTION_CONNECTION_OPTIONAL
Definition: helics_enums.h:310
checkActionFlag
bool checkActionFlag(uint16_t flags, FlagIndex flag)
Definition: flagOperations.hpp:85
helics::HandleManager
Definition: HandleManager.hpp:22
clearActionFlag
void clearActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:100
extra_flag1
@ extra_flag1
extra flag
Definition: flagOperations.hpp:23
helics::HandleManager::removeHandle
void removeHandle(GlobalHandle handle)
Definition: HandleManager.cpp:47
helics::BasicHandleInfo
Definition: BasicHandleInfo.hpp:30
HELICS_HANDLE_OPTION_CONNECTION_REQUIRED
@ HELICS_HANDLE_OPTION_CONNECTION_REQUIRED
Definition: helics_enums.h:307
setActionFlag
void setActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:77
helics::HandleManager::HandleManager
HandleManager()=default
helics::HandleManager::getHandleInfo
BasicHandleInfo * getHandleInfo(int32_t index)
Definition: HandleManager.cpp:94
helics::HandleManager::getEndpoint
BasicHandleInfo * getEndpoint(std::string_view name)
Definition: HandleManager.cpp:204
helics::InterfaceHandle::baseValue
constexpr BaseType baseValue() const
Definition: LocalFederateId.hpp:73
helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
helics::InterfaceType::ENDPOINT
@ ENDPOINT
handle to an endpoint
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::LocalFederateId
Definition: LocalFederateId.hpp:22
HELICS_HANDLE_OPTION_SINGLE_CONNECTION_ONLY
@ HELICS_HANDLE_OPTION_SINGLE_CONNECTION_ONLY
Definition: helics_enums.h:312
helics::GlobalHandle
Definition: GlobalFederateId.hpp:128
helicsTime.hpp
helics::HandleManager::addHandleAtIndex
void addHandleAtIndex(const BasicHandleInfo &otherHandle, int32_t index)
Definition: HandleManager.cpp:79
helics::InterfaceType::PUBLICATION
@ PUBLICATION
handle to output interface
helics::isValidIndex
bool isValidIndex(sizeType testSize, const SizedDataType &vec)
Definition: core-data.hpp:132