summaryrefslogtreecommitdiff
path: root/src/KingSystem/Resource/resUnitPool.cpp
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2020-10-04 15:39:04 +0200
committerLéo Lam <leo@leolam.fr>2020-10-08 00:09:53 +0200
commit76655d85a90ca1cede47a45b4faa3e6e767b99a3 (patch)
tree15d04cd8e0e130435f11d561c7c4131ee44f674f /src/KingSystem/Resource/resUnitPool.cpp
parent99de7fa00931d1d7c75a0c51d6fd38c09f60b160 (diff)
ksys/res: Implement some ResourceMgrTask prerequisites
Diffstat (limited to 'src/KingSystem/Resource/resUnitPool.cpp')
-rw-r--r--src/KingSystem/Resource/resUnitPool.cpp33
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