31template <
typename THandle,
typename TStruct,
int16_t size>
41 THandle* handle, int32_t* status);
50 std::array<std::shared_ptr<TStruct>, size> m_structures;
51 std::array<wpi::util::mutex, size> m_handleMutexes;
54template <
typename THandle,
typename TStruct,
int16_t size>
55std::shared_ptr<TStruct>
64 std::scoped_lock lock(m_handleMutexes[
index]);
66 if (m_structures[
index] !=
nullptr) {
69 return m_structures[
index];
71 m_structures[
index] = std::make_shared<TStruct>();
75 return m_structures[
index];
78template <
typename THandle,
typename TStruct,
int16_t size>
86 std::scoped_lock lock(m_handleMutexes[
index]);
89 return m_structures[
index];
92template <
typename THandle,
typename TStruct,
int16_t size>
101 std::scoped_lock lock(m_handleMutexes[
index]);
102 m_structures[
index].reset();
105template <
typename THandle,
typename TStruct,
int16_t size>
107 for (
int i = 0; i < size; i++) {
108 std::scoped_lock lock(m_handleMutexes[i]);
109 m_structures[i].reset();
@ index
Definition base.h:690
void Free(THandle handle, HAL_HandleEnum enumValue)
Definition DigitalHandleResource.hpp:93
friend class DigitalHandleResourceTest
Definition DigitalHandleResource.hpp:33
std::shared_ptr< TStruct > Get(THandle handle, HAL_HandleEnum enumValue)
Definition DigitalHandleResource.hpp:79
int16_t GetIndex(THandle handle, HAL_HandleEnum enumValue)
Definition DigitalHandleResource.hpp:42
DigitalHandleResource & operator=(const DigitalHandleResource &)=delete
DigitalHandleResource(const DigitalHandleResource &)=delete
void ResetHandles() override
Definition DigitalHandleResource.hpp:106
std::shared_ptr< TStruct > Allocate(int16_t index, HAL_HandleEnum enumValue, THandle *handle, int32_t *status)
Definition DigitalHandleResource.hpp:56
DigitalHandleResource()=default
virtual void ResetHandles()
int16_t m_version
Definition HandlesInternal.hpp:37
#define RESOURCE_OUT_OF_RANGE
Definition Errors.h:84
#define RESOURCE_IS_ALLOCATED
Definition Errors.h:82
#define HAL_SUCCESS
Definition Errors.h:48
#define HAL_kInvalidHandle
Definition Types.h:15
WPILib Hardware Abstraction Layer (HAL) namespace.
Definition Types.hpp:9
HAL_HandleEnum
Enum of HAL handle types.
Definition HandlesInternal.hpp:45
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.