#pragma once #include "XAssetInfo.h" #include "Zone/Zone.h" #include #include class Zone; template class AssetPool { public: using type = T; std::map*> m_asset_lookup; class Iterator { typename std::map*>::iterator m_iterator; public: explicit Iterator(typename std::map*>::iterator i) { m_iterator = i; } bool operator!=(Iterator rhs) { return m_iterator != rhs.m_iterator; } XAssetInfo* operator*() { return m_iterator.operator*().second; } void operator++() { ++m_iterator; } }; AssetPool() { m_asset_lookup = std::map*>(); } virtual ~AssetPool() = default; virtual XAssetInfo* AddAsset(std::unique_ptr> xAssetInfo) = 0; XAssetInfo* GetAsset(const std::string& name) { auto foundAsset = m_asset_lookup.find(name); if (foundAsset == m_asset_lookup.end()) return nullptr; return foundAsset->second; } Iterator begin() { return Iterator(m_asset_lookup.begin()); } Iterator end() { return Iterator(m_asset_lookup.end()); } };