#ifndef __URDE_CFACTORYMGR_HPP__ #define __URDE_CFACTORYMGR_HPP__ #include #include "RetroTypes.hpp" #include "IOStreams.hpp" #include "IFactory.hpp" namespace urde { struct SObjectTag; class CVParamTransfer; class IObj; class CFactoryMgr { std::unordered_map m_factories; std::unordered_map m_memFactories; public: CFactoryFnReturn MakeObject(const SObjectTag& tag, urde::CInputStream& in, const CVParamTransfer& paramXfer, CObjectReference* selfRef); bool CanMakeMemory(const urde::SObjectTag& tag) const; CFactoryFnReturn MakeObjectFromMemory(const SObjectTag& tag, std::unique_ptr&& buf, int size, bool compressed, const CVParamTransfer& paramXfer, CObjectReference* selfRef); void AddFactory(FourCC key, FFactoryFunc func) {m_factories[key] = func;} void AddFactory(FourCC key, FMemFactoryFunc func) {m_memFactories[key] = func;} }; } #endif // __URDE_CFACTORYMGR_HPP__