Browse Source

Audio,Text,Trade: accept void ArrayViews in importer plugins.

This makes it much less annoying to pass arbitrarily typed data, such as
std::uint8_t or char8_t and what not. It was already done like this for
the new shader converter plugins, where the input is often 32-bit ints
for SPIR-V.

OTOH the internal virtual API is kept with ArrayView<const char>, as
that makes it easier to operate on by the implementations.
pull/240/head
Vladimír Vondruš 5 years ago
parent
commit
440ece15fb
  1. 2
      doc/changelog.dox
  2. 4
      src/Magnum/Audio/AbstractImporter.cpp
  3. 2
      src/Magnum/Audio/AbstractImporter.h
  4. 4
      src/Magnum/Text/AbstractFont.cpp
  5. 10
      src/Magnum/Text/AbstractFont.h
  6. 4
      src/Magnum/Trade/AbstractImporter.cpp
  7. 2
      src/Magnum/Trade/AbstractImporter.h

2
doc/changelog.dox

@ -2305,7 +2305,7 @@ Released 2019-10-24, tagged as
- @cpp Text::AbstractFont::openSingleData() @ce and - @cpp Text::AbstractFont::openSingleData() @ce and
@cpp Text::AbstractFont::openData() @ce taking a list of files are @cpp Text::AbstractFont::openData() @ce taking a list of files are
deprecated in favor of deprecated in favor of
@ref Text::AbstractFont::openData(Containers::ArrayView<const char>, Float) @ref Text::AbstractFont::openData(Containers::ArrayView<const void>, Float)
and @ref Text::AbstractFont::setFileCallback() and @ref Text::AbstractFont::setFileCallback()
- @ref GL::Buffer::setData() and @ref GL::Buffer::setSubData() no longer has - @ref GL::Buffer::setData() and @ref GL::Buffer::setSubData() no longer has
overloads taking @ref std::vector / @ref std::array, but instead relies on overloads taking @ref std::vector / @ref std::array, but instead relies on

4
src/Magnum/Audio/AbstractImporter.cpp

@ -73,12 +73,12 @@ AbstractImporter::AbstractImporter(PluginManager::Manager<AbstractImporter>& man
AbstractImporter::AbstractImporter(PluginManager::AbstractManager& manager, const std::string& plugin): PluginManager::AbstractManagingPlugin<AbstractImporter>{manager, plugin} {} AbstractImporter::AbstractImporter(PluginManager::AbstractManager& manager, const std::string& plugin): PluginManager::AbstractManagingPlugin<AbstractImporter>{manager, plugin} {}
bool AbstractImporter::openData(Containers::ArrayView<const char> data) { bool AbstractImporter::openData(Containers::ArrayView<const void> data) {
CORRADE_ASSERT(features() & ImporterFeature::OpenData, CORRADE_ASSERT(features() & ImporterFeature::OpenData,
"Audio::AbstractImporter::openData(): feature not supported", {}); "Audio::AbstractImporter::openData(): feature not supported", {});
close(); close();
doOpenData(data); doOpenData(Containers::arrayCast<const char>(data));
return isOpened(); return isOpened();
} }

2
src/Magnum/Audio/AbstractImporter.h

@ -167,7 +167,7 @@ class MAGNUM_AUDIO_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* Returns @cpp true @ce on success, @cpp false @ce otherwise. * Returns @cpp true @ce on success, @cpp false @ce otherwise.
* @see @ref features(), @ref openFile() * @see @ref features(), @ref openFile()
*/ */
bool openData(Containers::ArrayView<const char> data); bool openData(Containers::ArrayView<const void> data);
/** /**
* @brief Open file * @brief Open file

4
src/Magnum/Text/AbstractFont.cpp

@ -87,7 +87,7 @@ void AbstractFont::setFileCallback(Containers::Optional<Containers::ArrayView<co
void AbstractFont::doSetFileCallback(Containers::Optional<Containers::ArrayView<const char>>(*)(const std::string&, InputFileCallbackPolicy, void*), void*) {} void AbstractFont::doSetFileCallback(Containers::Optional<Containers::ArrayView<const char>>(*)(const std::string&, InputFileCallbackPolicy, void*), void*) {}
bool AbstractFont::openData(Containers::ArrayView<const char> data, const Float size) { bool AbstractFont::openData(Containers::ArrayView<const void> data, const Float size) {
CORRADE_ASSERT(features() & FontFeature::OpenData, CORRADE_ASSERT(features() & FontFeature::OpenData,
"Text::AbstractFont::openData(): feature not supported", false); "Text::AbstractFont::openData(): feature not supported", false);
@ -95,7 +95,7 @@ bool AbstractFont::openData(Containers::ArrayView<const char> data, const Float
the check doesn't be done on the plugin side) because for some file the check doesn't be done on the plugin side) because for some file
formats it could be valid (MagnumFont in particular). */ formats it could be valid (MagnumFont in particular). */
close(); close();
const Metrics metrics = doOpenData(data, size); const Metrics metrics = doOpenData(Containers::arrayCast<const char>(data), size);
_size = metrics.size; _size = metrics.size;
_ascent = metrics.ascent; _ascent = metrics.ascent;
_descent = metrics.descent; _descent = metrics.descent;

10
src/Magnum/Text/AbstractFont.h

@ -318,20 +318,20 @@ class MAGNUM_TEXT_EXPORT AbstractFont: public PluginManager::AbstractPlugin {
* Returns @cpp true @ce on success, @cpp false @ce otherwise. * Returns @cpp true @ce on success, @cpp false @ce otherwise.
* @see @ref features(), @ref openFile() * @see @ref features(), @ref openFile()
*/ */
bool openData(Containers::ArrayView<const char> data, Float size); bool openData(Containers::ArrayView<const void> data, Float size);
#ifdef MAGNUM_BUILD_DEPRECATED #ifdef MAGNUM_BUILD_DEPRECATED
/** @brief @copybrief openData(Containers::ArrayView<const char>, Float) /** @brief @copybrief openData(Containers::ArrayView<const void>, Float)
* @m_deprecated_since{2019,10} Use @ref openFile() with * @m_deprecated_since{2019,10} Use @ref openFile() with
* @ref setFileCallback() for opening multi-file fonts instead. * @ref setFileCallback() for opening multi-file fonts instead.
*/ */
CORRADE_DEPRECATED("use openFile() with setFileCallback() for opening multi-file fonts instead") bool openData(const std::vector<std::pair<std::string, Containers::ArrayView<const char>>>& data, Float size); CORRADE_DEPRECATED("use openFile() with setFileCallback() for opening multi-file fonts instead") bool openData(const std::vector<std::pair<std::string, Containers::ArrayView<const char>>>& data, Float size);
/** @brief @copybrief openData(Containers::ArrayView<const char>, Float) /** @brief @copybrief openData(Containers::ArrayView<const void>, Float)
* @m_deprecated_since{2019,10} Use @ref openData(Containers::ArrayView<const char>, Float) * @m_deprecated_since{2019,10} Use @ref openData(Containers::ArrayView<const void>, Float)
* instead. * instead.
*/ */
CORRADE_DEPRECATED("use openData(Containers::ArrayView<const char>, Float) instead") bool openSingleData(Containers::ArrayView<const char> data, Float size); CORRADE_DEPRECATED("use openData(Containers::ArrayView<const void>, Float) instead") bool openSingleData(Containers::ArrayView<const char> data, Float size);
#endif #endif
/** /**

4
src/Magnum/Trade/AbstractImporter.cpp

@ -123,7 +123,7 @@ void AbstractImporter::setFileCallback(Containers::Optional<Containers::ArrayVie
void AbstractImporter::doSetFileCallback(Containers::Optional<Containers::ArrayView<const char>>(*)(const std::string&, InputFileCallbackPolicy, void*), void*) {} void AbstractImporter::doSetFileCallback(Containers::Optional<Containers::ArrayView<const char>>(*)(const std::string&, InputFileCallbackPolicy, void*), void*) {}
bool AbstractImporter::openData(Containers::ArrayView<const char> data) { bool AbstractImporter::openData(Containers::ArrayView<const void> data) {
CORRADE_ASSERT(features() & ImporterFeature::OpenData, CORRADE_ASSERT(features() & ImporterFeature::OpenData,
"Trade::AbstractImporter::openData(): feature not supported", {}); "Trade::AbstractImporter::openData(): feature not supported", {});
@ -131,7 +131,7 @@ bool AbstractImporter::openData(Containers::ArrayView<const char> data) {
the check doesn't be done on the plugin side) because for some file the check doesn't be done on the plugin side) because for some file
formats it could be valid (e.g. OBJ or JSON-based formats). */ formats it could be valid (e.g. OBJ or JSON-based formats). */
close(); close();
doOpenData(Containers::Array<char>{const_cast<char*>(data.data()), data.size(), Implementation::nonOwnedArrayDeleter}, {}); doOpenData(Containers::Array<char>{const_cast<char*>(static_cast<const char*>(data.data())), data.size(), Implementation::nonOwnedArrayDeleter}, {});
return isOpened(); return isOpened();
} }

2
src/Magnum/Trade/AbstractImporter.h

@ -633,7 +633,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* @p data is not expected to be alive after the function exits. * @p data is not expected to be alive after the function exits.
* @see @ref features(), @ref openFile() * @see @ref features(), @ref openFile()
*/ */
bool openData(Containers::ArrayView<const char> data); bool openData(Containers::ArrayView<const void> data);
/** /**
* @brief Open already loaded state * @brief Open already loaded state

Loading…
Cancel
Save