mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-30 02:31:44 +00:00
Switches handle resources to dynamic arrays (#142)
This commit is contained in:
committed by
Peter Johnson
parent
0a983eeeb8
commit
7597e3c274
@@ -38,16 +38,30 @@ class DigitalHandleResource {
|
||||
public:
|
||||
DigitalHandleResource(const DigitalHandleResource&) = delete;
|
||||
DigitalHandleResource operator=(const DigitalHandleResource&) = delete;
|
||||
DigitalHandleResource() = default;
|
||||
DigitalHandleResource();
|
||||
~DigitalHandleResource();
|
||||
THandle Allocate(int16_t index, HalHandleEnum enumValue, int32_t* status);
|
||||
std::shared_ptr<TStruct> Get(THandle handle, HalHandleEnum enumValue);
|
||||
void Free(THandle handle, HalHandleEnum enumValue);
|
||||
|
||||
private:
|
||||
std::shared_ptr<TStruct> m_structures[size];
|
||||
priority_mutex m_handleMutexes[size];
|
||||
// Dynamic array to shrink HAL file size.
|
||||
std::shared_ptr<TStruct>* m_structures;
|
||||
priority_mutex* m_handleMutexes;
|
||||
};
|
||||
|
||||
template <typename THandle, typename TStruct, int16_t size>
|
||||
DigitalHandleResource<THandle, TStruct, size>::DigitalHandleResource() {
|
||||
m_structures = new std::shared_ptr<TStruct>[size];
|
||||
m_handleMutexes = new priority_mutex[size];
|
||||
}
|
||||
|
||||
template <typename THandle, typename TStruct, int16_t size>
|
||||
DigitalHandleResource<THandle, TStruct, size>::~DigitalHandleResource() {
|
||||
delete[] m_structures;
|
||||
delete[] m_handleMutexes;
|
||||
}
|
||||
|
||||
template <typename THandle, typename TStruct, int16_t size>
|
||||
THandle DigitalHandleResource<THandle, TStruct, size>::Allocate(
|
||||
int16_t index, HalHandleEnum enumValue, int32_t* status) {
|
||||
|
||||
@@ -39,16 +39,34 @@ class IndexedHandleResource {
|
||||
public:
|
||||
IndexedHandleResource(const IndexedHandleResource&) = delete;
|
||||
IndexedHandleResource operator=(const IndexedHandleResource&) = delete;
|
||||
IndexedHandleResource() = default;
|
||||
IndexedHandleResource();
|
||||
~IndexedHandleResource();
|
||||
THandle Allocate(int16_t index, int32_t* status);
|
||||
std::shared_ptr<TStruct> Get(THandle handle);
|
||||
void Free(THandle handle);
|
||||
|
||||
private:
|
||||
std::shared_ptr<TStruct> m_structures[size];
|
||||
priority_mutex m_handleMutexes[size];
|
||||
// Dynamic array to shrink HAL file size.
|
||||
std::shared_ptr<TStruct>* m_structures;
|
||||
priority_mutex* m_handleMutexes;
|
||||
};
|
||||
|
||||
template <typename THandle, typename TStruct, int16_t size,
|
||||
HalHandleEnum enumValue>
|
||||
IndexedHandleResource<THandle, TStruct, size,
|
||||
enumValue>::IndexedHandleResource() {
|
||||
m_structures = new std::shared_ptr<TStruct>[size];
|
||||
m_handleMutexes = new priority_mutex[size];
|
||||
}
|
||||
|
||||
template <typename THandle, typename TStruct, int16_t size,
|
||||
HalHandleEnum enumValue>
|
||||
IndexedHandleResource<THandle, TStruct, size,
|
||||
enumValue>::~IndexedHandleResource() {
|
||||
delete[] m_structures;
|
||||
delete[] m_handleMutexes;
|
||||
}
|
||||
|
||||
template <typename THandle, typename TStruct, int16_t size,
|
||||
HalHandleEnum enumValue>
|
||||
THandle IndexedHandleResource<THandle, TStruct, size, enumValue>::Allocate(
|
||||
|
||||
@@ -38,17 +38,35 @@ class LimitedClassedHandleResource {
|
||||
LimitedClassedHandleResource(const LimitedClassedHandleResource&) = delete;
|
||||
LimitedClassedHandleResource operator=(const LimitedClassedHandleResource&) =
|
||||
delete;
|
||||
LimitedClassedHandleResource() = default;
|
||||
LimitedClassedHandleResource();
|
||||
~LimitedClassedHandleResource();
|
||||
THandle Allocate(std::shared_ptr<TStruct> toSet);
|
||||
std::shared_ptr<TStruct> Get(THandle handle);
|
||||
void Free(THandle handle);
|
||||
|
||||
private:
|
||||
std::shared_ptr<TStruct> m_structures[size];
|
||||
priority_mutex m_handleMutexes[size];
|
||||
// Dynamic array to shrink HAL file size.
|
||||
std::shared_ptr<TStruct>* m_structures;
|
||||
priority_mutex* m_handleMutexes;
|
||||
priority_mutex m_allocateMutex;
|
||||
};
|
||||
|
||||
template <typename THandle, typename TStruct, int16_t size,
|
||||
HalHandleEnum enumValue>
|
||||
LimitedClassedHandleResource<THandle, TStruct, size,
|
||||
enumValue>::LimitedClassedHandleResource() {
|
||||
m_structures = new std::shared_ptr<TStruct>[size];
|
||||
m_handleMutexes = new priority_mutex[size];
|
||||
}
|
||||
|
||||
template <typename THandle, typename TStruct, int16_t size,
|
||||
HalHandleEnum enumValue>
|
||||
LimitedClassedHandleResource<THandle, TStruct, size,
|
||||
enumValue>::~LimitedClassedHandleResource() {
|
||||
delete[] m_structures;
|
||||
delete[] m_handleMutexes;
|
||||
}
|
||||
|
||||
template <typename THandle, typename TStruct, int16_t size,
|
||||
HalHandleEnum enumValue>
|
||||
THandle
|
||||
|
||||
@@ -36,17 +36,35 @@ class LimitedHandleResource {
|
||||
public:
|
||||
LimitedHandleResource(const LimitedHandleResource&) = delete;
|
||||
LimitedHandleResource operator=(const LimitedHandleResource&) = delete;
|
||||
LimitedHandleResource() = default;
|
||||
LimitedHandleResource();
|
||||
~LimitedHandleResource();
|
||||
THandle Allocate();
|
||||
std::shared_ptr<TStruct> Get(THandle handle);
|
||||
void Free(THandle handle);
|
||||
|
||||
private:
|
||||
std::shared_ptr<TStruct> m_structures[size];
|
||||
priority_mutex m_handleMutexes[size];
|
||||
// Dynamic array to shrink HAL file size.
|
||||
std::shared_ptr<TStruct>* m_structures;
|
||||
priority_mutex* m_handleMutexes;
|
||||
priority_mutex m_allocateMutex;
|
||||
};
|
||||
|
||||
template <typename THandle, typename TStruct, int16_t size,
|
||||
HalHandleEnum enumValue>
|
||||
LimitedHandleResource<THandle, TStruct, size,
|
||||
enumValue>::LimitedHandleResource() {
|
||||
m_structures = new std::shared_ptr<TStruct>[size];
|
||||
m_handleMutexes = new priority_mutex[size];
|
||||
}
|
||||
|
||||
template <typename THandle, typename TStruct, int16_t size,
|
||||
HalHandleEnum enumValue>
|
||||
LimitedHandleResource<THandle, TStruct, size,
|
||||
enumValue>::~LimitedHandleResource() {
|
||||
delete[] m_structures;
|
||||
delete[] m_handleMutexes;
|
||||
}
|
||||
|
||||
template <typename THandle, typename TStruct, int16_t size,
|
||||
HalHandleEnum enumValue>
|
||||
THandle LimitedHandleResource<THandle, TStruct, size, enumValue>::Allocate() {
|
||||
|
||||
Reference in New Issue
Block a user