diff options
Diffstat (limited to 'tests/DummyData.h')
-rw-r--r-- | tests/DummyData.h | 37 |
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: |