aboutsummaryrefslogtreecommitdiff
path: root/tests/DummyData.h
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2020-09-01 00:38:46 +0200
committerShauren <shauren.trinity@gmail.com>2022-02-04 23:37:29 +0100
commitc4b287c7bfb2bb2dcb5efacf238e29413ebe77ec (patch)
tree5a12a24a3a9fbe17f9bac3e6d3ab9f60c8201598 /tests/DummyData.h
parentf7e1b5338de02649fd43dc9c952b8d4b5feb20aa (diff)
Core/Misc: DBC std::array refactors, and |Hachievement unit tests
(cherry picked from commit 3fbbe7cfbe1bc51db12bdc1ec7b21c16d1716366)
Diffstat (limited to 'tests/DummyData.h')
-rw-r--r--tests/DummyData.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/DummyData.h b/tests/DummyData.h
index 98812d3b6b8..35ec4d62e86 100644
--- a/tests/DummyData.h
+++ b/tests/DummyData.h
@@ -20,6 +20,7 @@
#include "Common.h"
#include "Define.h"
+#include "DB2Store.h"
#include <string_view>
@@ -28,6 +29,42 @@ struct ItemTemplate;
class UnitTestDataLoader
{
public:
+ template <typename T, uint32 T::*ID>
+ class DB2
+ {
+ class LoaderGuard
+ {
+ public:
+ LoaderGuard(DB2& d) : _d(d) {}
+ ~LoaderGuard() { _d.Dump(); }
+
+ T& Add() { return _d._storage.emplace_back(); }
+ private:
+ DB2& _d;
+ };
+
+ public:
+ DB2(DB2Storage<T>& store) : _store(store) {}
+ LoaderGuard Loader() { return {*this}; }
+ void Dump()
+ {
+ delete[] _store._indexTable.AsT;
+ for (T const& entry : _storage)
+ if (entry.*ID >= _store._indexTableSize)
+ _store._indexTableSize = entry.*ID + 1;
+ _store._indexTable.AsT = new T*[_store._indexTableSize];
+ for (size_t i = 0; i < _store._indexTableSize; ++i)
+ _store._indexTable.AsT[i] = nullptr;
+ for (T& entry : _storage)
+ _store._indexTable.AsT[entry.*ID] = &entry;
+ }
+
+ private:
+ std::vector<T> _storage;
+ DB2Storage<T>& _store;
+ };
+
+ static void LoadAchievementTemplates();
static void LoadItemTemplates();
private: