33template <
typename THandle,
typename TStruct, HAL_HandleEnum enumValue>
42 THandle
Allocate(std::shared_ptr<TStruct> structure);
46 std::shared_ptr<TStruct>
Get(THandle handle);
48 std::shared_ptr<TStruct>
Free(THandle handle);
54 template <
typename Functor>
58 std::vector<std::shared_ptr<TStruct>> m_structures;
62template <
typename THandle,
typename TStruct, HAL_HandleEnum enumValue>
64 std::shared_ptr<TStruct> structure) {
65 std::scoped_lock lock(m_handleMutex);
67 for (i = 0; i < m_structures.size(); i++) {
68 if (m_structures[i] ==
nullptr) {
69 m_structures[i] = structure;
77 m_structures.push_back(structure);
78 return static_cast<THandle
>(
82template <
typename THandle,
typename TStruct, HAL_HandleEnum enumValue>
83std::shared_ptr<TStruct>
86 std::scoped_lock lock(m_handleMutex);
90 return m_structures[
index];
93template <
typename THandle,
typename TStruct, HAL_HandleEnum enumValue>
94std::shared_ptr<TStruct>
97 std::scoped_lock lock(m_handleMutex);
101 return std::move(m_structures[
index]);
104template <
typename THandle,
typename TStruct, HAL_HandleEnum enumValue>
107 std::scoped_lock lock(m_handleMutex);
108 for (
size_t i = 0; i < m_structures.size(); i++) {
109 m_structures[i].reset();
115template <
typename THandle,
typename TStruct, HAL_HandleEnum enumValue>
116template <
typename Functor>
119 std::scoped_lock lock(m_handleMutex);
121 for (i = 0; i < m_structures.size(); i++) {
122 if (m_structures[i] !=
nullptr) {
124 m_structures[i].
get());
constexpr T & get(wpi::util::array< T, N > &arr) noexcept
Definition array.hpp:66
@ index
Definition base.h:690
virtual void ResetHandles()
int16_t m_version
Definition HandlesInternal.hpp:37
void ForEach(Functor func)
Definition UnlimitedHandleResource.hpp:117
int16_t GetIndex(THandle handle)
Definition UnlimitedHandleResource.hpp:43
std::shared_ptr< TStruct > Get(THandle handle)
Definition UnlimitedHandleResource.hpp:84
THandle Allocate(std::shared_ptr< TStruct > structure)
Definition UnlimitedHandleResource.hpp:63
void ResetHandles() override
Definition UnlimitedHandleResource.hpp:105
std::shared_ptr< TStruct > Free(THandle handle)
Definition UnlimitedHandleResource.hpp:95
friend class UnlimitedHandleResourceTest
Definition UnlimitedHandleResource.hpp:35
UnlimitedHandleResource & operator=(const UnlimitedHandleResource &)=delete
UnlimitedHandleResource()=default
UnlimitedHandleResource(const UnlimitedHandleResource &)=delete
#define HAL_kInvalidHandle
Definition Types.h:15
WPILib Hardware Abstraction Layer (HAL) namespace.
Definition Types.hpp:9
int16_t getHandleTypedIndex(HAL_Handle handle, HAL_HandleEnum enumType, int16_t version)
Get if the handle is a correct type and version.
Definition HandlesInternal.hpp:135
HAL_Handle createHandle(int16_t index, HAL_HandleEnum handleType, int16_t version)
Create a handle for a specific index, type and version.
::std::mutex mutex
Definition mutex.hpp:17