diff options
Diffstat (limited to 'src/KingSystem/Resource/resUnitPool.cpp')
| -rw-r--r-- | src/KingSystem/Resource/resUnitPool.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/KingSystem/Resource/resUnitPool.cpp b/src/KingSystem/Resource/resUnitPool.cpp new file mode 100644 index 00000000..fd235159 --- /dev/null +++ b/src/KingSystem/Resource/resUnitPool.cpp @@ -0,0 +1,33 @@ +#include "KingSystem/Resource/resUnitPool.h" + +namespace ksys::res { + +ResourceUnitPool::ResourceUnitPool() = default; + +ResourceUnitPool::~ResourceUnitPool() = default; + +bool ResourceUnitPool::init() { + for (s32 i = 0; i < UnitCapacity; ++i) + mRingBuffer.pushBack(&mUnits[i]); + return true; +} + +ResourceUnit* ResourceUnitPool::tryAlloc() { + if (mRingBuffer.empty()) + return nullptr; + return mRingBuffer.popFront(); +} + +ResourceUnit* ResourceUnitPool::alloc() { + return mRingBuffer.popFront(); +} + +void ResourceUnitPool::free(ResourceUnit* unit) { + mRingBuffer.pushBack(unit); +} + +void ResourceUnitPool::freeForSync(ResourceUnit* unit) { + free(unit); +} + +} // namespace ksys::res |
