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::openData() @ce taking a list of files are
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()
- @ref GL::Buffer::setData() and @ref GL::Buffer::setSubData() no longer has
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} {}
bool AbstractImporter::openData(Containers::ArrayView<const char> data) {
bool AbstractImporter::openData(Containers::ArrayView<const void> data) {
CORRADE_ASSERT(features() & ImporterFeature::OpenData,
"Audio::AbstractImporter::openData(): feature not supported", {});
close();
doOpenData(data);
doOpenData(Containers::arrayCast<const char>(data));
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.
* @see @ref features(), @ref openFile()
*/
bool openData(Containers::ArrayView<const char> data);
bool openData(Containers::ArrayView<const void> data);
/**
* @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*) {}
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,
"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
formats it could be valid (MagnumFont in particular). */
close();
const Metrics metrics = doOpenData(data, size);
const Metrics metrics = doOpenData(Containers::arrayCast<const char>(data), size);
_size = metrics.size;
_ascent = metrics.ascent;
_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.
* @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
/** @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
* @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);
/** @brief @copybrief openData(Containers::ArrayView<const char>, Float)
* @m_deprecated_since{2019,10} Use @ref 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 void>, Float)
* 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
/**

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*) {}
bool AbstractImporter::openData(Containers::ArrayView<const char> data) {
bool AbstractImporter::openData(Containers::ArrayView<const void> data) {
CORRADE_ASSERT(features() & ImporterFeature::OpenData,
"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
formats it could be valid (e.g. OBJ or JSON-based formats). */
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();
}

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.
* @see @ref features(), @ref openFile()
*/
bool openData(Containers::ArrayView<const char> data);
bool openData(Containers::ArrayView<const void> data);
/**
* @brief Open already loaded state

Loading…
Cancel
Save