This commit is contained in:
SirLynix
2022-12-06 20:10:10 +01:00
committed by Jérôme Leclercq
parent b379518479
commit 292ca60592
34 changed files with 1995 additions and 60 deletions

View File

@@ -9,6 +9,7 @@
#include <Nazara/Prerequisites.hpp>
#include <Nazara/Core/Config.hpp>
#include <Nazara/Utils/Algorithm.hpp>
#include <string>
#ifdef NAZARA_COMPILER_MSVC
@@ -37,6 +38,14 @@ namespace Nz
PluginInterface& operator=(const PluginInterface&) = delete;
PluginInterface& operator=(PluginInterface&&) = delete;
};
#ifdef NAZARA_PLUGINS_STATIC
template<typename T>
struct PluginProvider
{
static_assert(AlwaysFalse<T>(), "unknown plugin");
};
#endif
}
#include <Nazara/Core/PluginInterface.inl>

View File

@@ -29,7 +29,9 @@ namespace Nz
void AddSearchDirectory(const std::filesystem::path& directoryPath);
template<typename T> Plugin<T> Load(bool activate = true);
#ifndef NAZARA_PLUGINS_STATIC
GenericPlugin Load(const std::filesystem::path& pluginPath, bool activate = true);
#endif
void RemoveSearchDirectory(const std::filesystem::path& directoryPath);

View File

@@ -11,8 +11,16 @@ namespace Nz
template<typename T>
Plugin<T> PluginLoader::Load(bool activate)
{
#ifdef NAZARA_PLUGINS_STATIC
std::unique_ptr<T> pluginInterface = PluginProvider<T>::Instantiate();
if (activate && !pluginInterface->Activate())
throw std::runtime_error("failed to activate plugin");
return Plugin<T>({}, std::move(pluginInterface), activate);
#else
GenericPlugin plugin = Load(Utf8Path(T::Filename), activate);
return std::move(plugin).Cast<T>();
#endif
}
}