#ifndef MESH_DATA_MANAGER_HPP #define MESH_DATA_MANAGER_HPP #include <mesh/IMeshData.hpp> #include <utils/PugsAssert.hpp> #include <utils/PugsMacros.hpp> #include <memory> #include <unordered_map> class IMesh; template <size_t> class Connectivity; template <typename ConnectivityType> class Mesh; template <size_t Dimension> class MeshData; class MeshDataManager { private: std::unordered_map<const IMesh*, std::shared_ptr<IMeshData>> m_mesh_mesh_data_map; static MeshDataManager* m_instance; MeshDataManager(const MeshDataManager&) = delete; MeshDataManager(MeshDataManager&&) = delete; MeshDataManager() = default; ~MeshDataManager() = default; public: static void create(); static void destroy(); PUGS_INLINE static MeshDataManager& instance() { Assert(m_instance != nullptr, "MeshDataManager was not created!"); return *m_instance; } void deleteMeshData(const IMesh*); template <size_t Dimension> MeshData<Dimension>& getMeshData(const Mesh<Connectivity<Dimension>>&); }; #endif // MESH_DATA_MANAGER_HPP