From 234586823ddd2d63ab8fbc44c51da1931e495acd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Capelle?= Date: Thu, 19 Nov 2020 21:21:58 +0100 Subject: [PATCH] Return shared_ptr in IPlugin::requirements(). --- src/runner/CMakeLists.txt | 2 +- src/runner/proxypluginwrappers.cpp | 8 ++++---- src/runner/proxypluginwrappers.h | 6 ++---- src/runner/pythonrunner.cpp | 26 +++++++++++++------------- 4 files changed, 20 insertions(+), 22 deletions(-) diff --git a/src/runner/CMakeLists.txt b/src/runner/CMakeLists.txt index 6c4a506..6515a8e 100644 --- a/src/runner/CMakeLists.txt +++ b/src/runner/CMakeLists.txt @@ -46,6 +46,6 @@ add_filter(NAME src/utils GROUPS add_filter(NAME src/wrappers GROUPS gamefeatureswrappers proxypluginwrappers - pythonwrappersutilities + pythonwrapperutilities uibasewrappers ) diff --git a/src/runner/proxypluginwrappers.cpp b/src/runner/proxypluginwrappers.cpp index f7f4f8f..3d6e99e 100644 --- a/src/runner/proxypluginwrappers.cpp +++ b/src/runner/proxypluginwrappers.cpp @@ -72,11 +72,11 @@ QList class_name::settings() const \ QString class_name::localizedName_Default() const { return IPlugin::localizedName(); } \ QString class_name::master_Default() const { return IPlugin::master(); } \ BOOST_PP_EXPR_IF(include_requirements, \ - QList class_name::requirements() const { \ - return basicWrapperFunctionImplementationWithDefault>( \ - this, &class_name::requirements_Default, m_Requirements, "requirements"); \ + std::vector> class_name::requirements() const { \ + return basicWrapperFunctionImplementationWithDefault>>( \ + this, &class_name::requirements_Default, "requirements"); \ } \ - QList class_name::requirements_Default() const { return IPlugin::requirements(); }) + std::vector> class_name::requirements_Default() const { return IPlugin::requirements(); }) #define COMMON_I_PLUGIN_WRAPPER_DEFINITIONS(class_name) COMMON_I_PLUGIN_WRAPPER_DEFINITIONS_IMPL(class_name, 1) diff --git a/src/runner/proxypluginwrappers.h b/src/runner/proxypluginwrappers.h index 908c4e9..1d71f2e 100644 --- a/src/runner/proxypluginwrappers.h +++ b/src/runner/proxypluginwrappers.h @@ -19,8 +19,6 @@ // The wrapper for IPluginGame cannot override requirements() since it's final, // so we need to be able to exclude the declarations. #define COMMON_I_PLUGIN_WRAPPER_DECLARATIONS_IMPL(include_requirements) \ - BOOST_PP_EXPR_IF(include_requirements, \ - private: mutable boost::python::object m_Requirements; ) \ public: \ virtual bool init(MOBase::IOrganizer *moInfo) override; \ virtual QString name() const override; \ @@ -33,8 +31,8 @@ virtual QList settings() const override; \ QString localizedName_Default() const; \ QString master_Default() const; \ BOOST_PP_EXPR_IF(include_requirements, \ - virtual QList requirements() const override; \ - QList requirements_Default() const;) + virtual std::vector> requirements() const override; \ + std::vector> requirements_Default() const;) #define COMMON_I_PLUGIN_WRAPPER_DECLARATIONS COMMON_I_PLUGIN_WRAPPER_DECLARATIONS_IMPL(1) diff --git a/src/runner/pythonrunner.cpp b/src/runner/pythonrunner.cpp index feda706..07f6d89 100644 --- a/src/runner/pythonrunner.cpp +++ b/src/runner/pythonrunner.cpp @@ -87,16 +87,18 @@ BOOST_PYTHON_MODULE(mobase) utils::register_qflags_converter(); // Pointers: - utils::shared_ptr_from_python>(); bpy::register_ptr_to_python>(); bpy::register_ptr_to_python>(); bpy::implicitly_convertible, std::shared_ptr>(); bpy::register_ptr_to_python>(); bpy::register_ptr_to_python>(); bpy::implicitly_convertible, std::shared_ptr>(); - bpy::register_ptr_to_python>(); + + utils::shared_ptr_from_python>(); bpy::register_ptr_to_python>(); - bpy::implicitly_convertible, std::shared_ptr>(); + + utils::shared_ptr_from_python>(); + bpy::register_ptr_to_python>(); // Containers: utils::register_sequence_container>(); @@ -105,13 +107,13 @@ BOOST_PYTHON_MODULE(mobase) utils::register_sequence_container>(); utils::register_sequence_container>(); utils::register_sequence_container>(); - utils::register_sequence_container>(); utils::register_sequence_container(); utils::register_sequence_container>(); utils::register_sequence_container>(); utils::register_sequence_container>(); // Required for QVariant since this is QVariantList. utils::register_sequence_container>>(); utils::register_sequence_container>>(); + utils::register_sequence_container>>(); utils::register_sequence_container>(); utils::register_sequence_container>(); @@ -274,7 +276,7 @@ BOOST_PYTHON_MODULE(mobase) // Plugin requirements: auto iPluginRequirementClass = bpy::class_< - IPluginRequirementWrapper, bpy::bases<>, IPluginRequirementWrapper*, boost::noncopyable>("IPluginRequirement"); + IPluginRequirementWrapper, bpy::bases<>, boost::noncopyable>("IPluginRequirement"); { bpy::scope scope = iPluginRequirementClass; @@ -292,26 +294,24 @@ BOOST_PYTHON_MODULE(mobase) // pluginDependency .def("pluginDependency", +[](QStringList const& pluginNames) { return PluginRequirementFactory::pluginDependency(pluginNames); - }, bpy::return_value_policy(), bpy::arg("plugins")) + }, bpy::arg("plugins")) .def("pluginDependency", +[](QString const& pluginName) { return PluginRequirementFactory::pluginDependency(pluginName); - }, bpy::return_value_policy(), bpy::arg("plugin")) + }, bpy::arg("plugin")) .staticmethod("pluginDependency") // gameDependency .def("gameDependency", +[](QStringList const& gameNames) { return PluginRequirementFactory::gameDependency(gameNames); - }, bpy::return_value_policy(), bpy::arg("games")) + }, bpy::arg("games")) .def("gameDependency", +[](QString const& gameNames) { return PluginRequirementFactory::gameDependency(gameNames); - }, bpy::return_value_policy(), bpy::arg("game")) + }, bpy::arg("game")) .staticmethod("gameDependency") // diagnose - .def("diagnose", &PluginRequirementFactory::diagnose, - bpy::return_value_policy(), bpy::arg("diagnose")) + .def("diagnose", &PluginRequirementFactory::diagnose, bpy::arg("diagnose")) .staticmethod("diagnose") // basic - .def("basic", &PluginRequirementFactory::basic, - bpy::return_value_policy(), (bpy::arg("checker"), "description")) + .def("basic", &PluginRequirementFactory::basic, (bpy::arg("checker"), "description")) .staticmethod("basic"); bpy::class_("FileInfo", bpy::init<>())