Switches handle resources to dynamic arrays (#142)

This commit is contained in:
Thad House
2016-07-07 21:32:41 -07:00
committed by Peter Johnson
parent 0a983eeeb8
commit 7597e3c274
4 changed files with 80 additions and 12 deletions

View File

@@ -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) {

View File

@@ -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(

View File

@@ -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

View File

@@ -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() {