// Copyright (C) 2023 Jérôme "Lynix" Leclercq (lynix680@gmail.com) // This file is part of the "Nazara Engine - Core module" // For conditions of distribution and use, see copyright notice in Config.hpp #include #include namespace Nz { template Plugin::Plugin(DynLib dynLib, std::unique_ptr pluginInterface, bool isActive) : m_interface(std::move(pluginInterface)), m_lib(std::move(dynLib)), m_isActive(isActive) { } template Plugin::~Plugin() { if (m_interface) { Deactivate(); // Destroys interface before freeing the library m_interface.reset(); } m_lib.Unload(); } template bool Plugin::Activate() { if (m_isActive) return true; if (!m_interface->Activate()) return false; m_isActive = true; return true; } template template Plugin Plugin::Cast() && { return Plugin(std::move(m_lib), std::unique_ptr(static_cast(m_interface.release())), m_isActive); } template void Plugin::Deactivate() { if (m_isActive) { m_interface->Deactivate(); m_isActive = false; } } template const DynLib& Plugin::GetDynamicLibrary() const { return m_lib; } template T* Plugin::operator->() { return m_interface; } template const T* Plugin::operator->() const { return m_interface; } } #include