// Copyright (C) 2020 Jérôme Leclercq // This file is part of the "Nazara Engine - Core module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_PLUGINMANAGER_HPP #define NAZARA_PLUGINMANAGER_HPP #include #include #include #include #include ///TODO: Revision namespace Nz { class DynLib; class NAZARA_CORE_API PluginManager { public: PluginManager() = delete; ~PluginManager() = delete; static void AddDirectory(const std::filesystem::path& directoryPath); static bool Initialize(); static bool Mount(Plugin plugin); static bool Mount(const std::filesystem::path& pluginPath, bool appendExtension = true); static void RemoveDirectory(const std::filesystem::path& directoryPath); static void Unmount(Plugin plugin); static void Unmount(const std::filesystem::path& pluginPath); static void Uninitialize(); private: // https://stackoverflow.com/questions/51065244/is-there-no-standard-hash-for-stdfilesystempath struct PathHash { std::size_t operator()(const std::filesystem::path& p) const { return hash_value(p); } }; static std::set s_directories; static std::unordered_map, PathHash> s_plugins; static bool s_initialized; }; } #endif // NAZARA_PLUGINMANAGER_HPP