Browse Source

Better openState

pull/225/head
Konstantinos Chatzilygeroudis 8 years ago
parent
commit
a36b1c5b45
  1. 17
      src/Magnum/Trade/AbstractImporter.cpp
  2. 23
      src/Magnum/Trade/AbstractImporter.h

17
src/Magnum/Trade/AbstractImporter.cpp

@ -62,6 +62,19 @@ void AbstractImporter::doOpenData(Containers::ArrayView<const char>) {
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);
@ -461,8 +474,4 @@ const void* AbstractImporter::importerState() const {
const void* AbstractImporter::doImporterState() const { return nullptr; }
void AbstractImporter::openState(const void* state) { return doOpenState(state); }
void AbstractImporter::doOpenState(const void*) {}
}}

23
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<const char> 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
*
@ -496,8 +509,6 @@ class MAGNUM_EXPORT AbstractImporter: public PluginManager::AbstractManagingPlug
*/
const void* importerState() const;
void openState(const void* state);
protected:
/**
* @brief Implementation for @ref openFile()
@ -523,6 +534,9 @@ class MAGNUM_EXPORT AbstractImporter: public PluginManager::AbstractManagingPlug
/** @brief Implementation for @ref openData() */
virtual void doOpenData(Containers::ArrayView<const char> 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;
@ -823,9 +837,6 @@ class MAGNUM_EXPORT AbstractImporter: public PluginManager::AbstractManagingPlug
/** @brief Implementation for @ref importerState() */
virtual const void* doImporterState() const;
/** @brief Implementation for @ref openState() */
virtual void doOpenState(const void* state);
};
CORRADE_ENUMSET_OPERATORS(AbstractImporter::Features)

Loading…
Cancel
Save