From 4d7f955d55f0b0e3d087106a840c2ecf2547c90e Mon Sep 17 00:00:00 2001 From: Konstantinos Chatzilygeroudis Date: Wed, 17 Jan 2018 23:45:35 +0100 Subject: [PATCH] add openState to AbstractImporter to allow setting directly the state --- src/Magnum/Trade/AbstractImporter.cpp | 13 +++++++++++++ src/Magnum/Trade/AbstractImporter.h | 18 +++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/Magnum/Trade/AbstractImporter.cpp b/src/Magnum/Trade/AbstractImporter.cpp index cd9f7da39..4ee01d4d5 100644 --- a/src/Magnum/Trade/AbstractImporter.cpp +++ b/src/Magnum/Trade/AbstractImporter.cpp @@ -62,6 +62,19 @@ void AbstractImporter::doOpenData(Containers::ArrayView) { CORRADE_ASSERT(false, "Trade::AbstractImporter::openData(): feature advertised but not implemented", ); } +bool AbstractImporter::openState(const void* state, const std::string& filePath) { + CORRADE_ASSERT(features() & Feature::OpenState, + "Trade::AbstractImporter::OpenState(): feature not supported", {}); + + close(); + doOpenState(state, filePath); + return isOpened(); +} + +void AbstractImporter::doOpenState(const void*, const std::string&) { + CORRADE_ASSERT(false, "Trade::AbstractImporter::openState(): feature advertised but not implemented", ); +} + bool AbstractImporter::openFile(const std::string& filename) { close(); doOpenFile(filename); diff --git a/src/Magnum/Trade/AbstractImporter.h b/src/Magnum/Trade/AbstractImporter.h index 108c8ddd4..a54bffa44 100644 --- a/src/Magnum/Trade/AbstractImporter.h +++ b/src/Magnum/Trade/AbstractImporter.h @@ -97,7 +97,9 @@ class MAGNUM_EXPORT AbstractImporter: public PluginManager::AbstractManagingPlug */ enum class Feature: UnsignedByte { /** Opening files from raw data using @ref openData() */ - OpenData = 1 << 0 + OpenData = 1 << 0, + /** Opening already loaded state using @ref openState() */ + OpenState = 1 << 1 }; /** @brief Set of features supported by this importer */ @@ -128,6 +130,17 @@ class MAGNUM_EXPORT AbstractImporter: public PluginManager::AbstractManagingPlug */ bool openData(Containers::ArrayView data); + + /** + * @brief Open already loaded state + * + * Closes previous file, if it was opened, and tries to open given + * state. Available only if @ref Feature::OpenState is supported. Returns + * `true` on success, `false` otherwise. + * @see @ref features(), @ref openData() + */ + bool openState(const void* state, const std::string& filePath = {}); + /** * @brief Open file * @@ -521,6 +534,9 @@ class MAGNUM_EXPORT AbstractImporter: public PluginManager::AbstractManagingPlug /** @brief Implementation for @ref openData() */ virtual void doOpenData(Containers::ArrayView data); + /** @brief Implementation for @ref openState() */ + virtual void doOpenState(const void* state, const std::string& filePath = {}); + /** @brief Implementation for @ref close() */ virtual void doClose() = 0;