#pragma once #include #include #include "XAssetInfo.h" #include "Zone/Zone.h" class Zone; template class AssetPool { public: 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::string name, T* asset, Zone* zone, std::vector& dependencies) = 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()); } };