From e871cabfa630bbbea0277f23be52aefa4f4eba56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Wed, 20 Oct 2021 21:51:57 +0200 Subject: [PATCH] Adapt plugins to the AbstractImporter interface change. --- .../AnyImageImporter/AnyImageImporter.cpp | 21 ++++++++++--------- .../AnyImageImporter/AnyImageImporter.h | 2 +- .../AnySceneImporter/AnySceneImporter.cpp | 2 +- src/MagnumPlugins/ObjImporter/ObjImporter.cpp | 5 +++-- src/MagnumPlugins/ObjImporter/ObjImporter.h | 2 +- .../TgaImporter/Test/TgaImporterTest.cpp | 1 + src/MagnumPlugins/TgaImporter/TgaImporter.cpp | 13 ++++++++---- src/MagnumPlugins/TgaImporter/TgaImporter.h | 2 +- 8 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp b/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp index 549126a91..d177ad43f 100644 --- a/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp +++ b/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp @@ -153,13 +153,14 @@ void AnyImageImporter::doOpenFile(const std::string& filename) { _in = std::move(importer); } -void AnyImageImporter::doOpenData(Containers::ArrayView data) { +void AnyImageImporter::doOpenData(Containers::Array&& data, DataFlags) { using namespace Containers::Literals; CORRADE_INTERNAL_ASSERT(manager()); /* So we can use the convenient hasSuffix() API */ - const Containers::StringView dataString = data; + const Containers::ArrayView dataView = data; + const Containers::StringView dataString = dataView; std::string plugin; /* https://github.com/BinomialLLC/basis_universal/blob/7d784c728844c007d8c95d63231f7adcc0f65364/transcoder/basisu_file_headers.h#L78 */ @@ -193,22 +194,22 @@ void AnyImageImporter::doOpenData(Containers::ArrayView data) { plugin = "TiffImporter"; /* https://github.com/file/file/blob/d04de269e0b06ccd0a7d1bf4974fed1d75be7d9e/magic/Magdir/images#L18-L22 TGAs are a complete guesswork, so try after everything else fails. */ - else if([data]() { + else if([dataView]() { /* TGA header is 18 bytes */ - if(data.size() < 18) return false; + if(dataView.size() < 18) return false; /* Third byte (image type) must be one of these */ - if(data[2] != 1 && data[2] != 2 && data[2] != 3 && - data[2] != 9 && data[2] != 10 && data[2] != 11) return false; + if(dataView[2] != 1 && dataView[2] != 2 && dataView[2] != 3 && + dataView[2] != 9 && dataView[2] != 10 && dataView[2] != 11) return false; /* If image type is 1 or 9, second byte (colormap type) must be 1 */ - if((data[2] == 1 || data[2] == 9) && data[1] != 1) return false; + if((dataView[2] == 1 || dataView[2] == 9) && dataView[1] != 1) return false; /* ... and 0 otherwise */ - if(data[2] != 1 && data[2] != 9 && data[1] != 0) return false; + if(dataView[2] != 1 && dataView[2] != 9 && dataView[1] != 0) return false; /* Colormap index (unsigned short, byte 3+4) should be 0 */ - if(data[3] != 0 && data[4] != 0) return false; + if(dataView[3] != 0 && dataView[4] != 0) return false; /* Probably TGA, heh. Or random memory. */ return true; @@ -279,4 +280,4 @@ Containers::Optional AnyImageImporter::doImage3D(const UnsignedInt }} CORRADE_PLUGIN_REGISTER(AnyImageImporter, Magnum::Trade::AnyImageImporter, - "cz.mosra.magnum.Trade.AbstractImporter/0.3.3") + "cz.mosra.magnum.Trade.AbstractImporter/0.3.4") diff --git a/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.h b/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.h index 7f4795cbd..970e2ba40 100644 --- a/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.h +++ b/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.h @@ -178,7 +178,7 @@ class MAGNUM_ANYIMAGEIMPORTER_EXPORT AnyImageImporter: public AbstractImporter { MAGNUM_ANYIMAGEIMPORTER_LOCAL bool doIsOpened() const override; MAGNUM_ANYIMAGEIMPORTER_LOCAL void doClose() override; MAGNUM_ANYIMAGEIMPORTER_LOCAL void doOpenFile(const std::string& filename) override; - MAGNUM_ANYIMAGEIMPORTER_LOCAL void doOpenData(Containers::ArrayView data) override; + MAGNUM_ANYIMAGEIMPORTER_LOCAL void doOpenData(Containers::Array&& data, DataFlags dataFlags) override; MAGNUM_ANYIMAGEIMPORTER_LOCAL UnsignedInt doImage1DCount() const override; MAGNUM_ANYIMAGEIMPORTER_LOCAL UnsignedInt doImage1DLevelCount(UnsignedInt id) override; diff --git a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp index 12d60b569..1fd743940 100644 --- a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp +++ b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp @@ -261,4 +261,4 @@ Containers::Optional AnySceneImporter::doImage3D(const UnsignedInt }} CORRADE_PLUGIN_REGISTER(AnySceneImporter, Magnum::Trade::AnySceneImporter, - "cz.mosra.magnum.Trade.AbstractImporter/0.3.3") + "cz.mosra.magnum.Trade.AbstractImporter/0.3.4") diff --git a/src/MagnumPlugins/ObjImporter/ObjImporter.cpp b/src/MagnumPlugins/ObjImporter/ObjImporter.cpp index 18cae9762..5c4f37baa 100644 --- a/src/MagnumPlugins/ObjImporter/ObjImporter.cpp +++ b/src/MagnumPlugins/ObjImporter/ObjImporter.cpp @@ -106,8 +106,9 @@ void ObjImporter::doOpenFile(const std::string& filename) { parseMeshNames(); } -void ObjImporter::doOpenData(Containers::ArrayView data) { +void ObjImporter::doOpenData(Containers::Array&& data, DataFlags) { _file.reset(new File); + /** @todo ARGH MY EYES what is this cursed thing, burn it to the ground */ _file->in.reset(new std::istringstream{{data.begin(), data.size()}}); parseMeshNames(); @@ -486,4 +487,4 @@ Containers::Optional ObjImporter::doMesh(UnsignedInt id, UnsignedInt) }} CORRADE_PLUGIN_REGISTER(ObjImporter, Magnum::Trade::ObjImporter, - "cz.mosra.magnum.Trade.AbstractImporter/0.3.3") + "cz.mosra.magnum.Trade.AbstractImporter/0.3.4") diff --git a/src/MagnumPlugins/ObjImporter/ObjImporter.h b/src/MagnumPlugins/ObjImporter/ObjImporter.h index cd621119f..818a10827 100644 --- a/src/MagnumPlugins/ObjImporter/ObjImporter.h +++ b/src/MagnumPlugins/ObjImporter/ObjImporter.h @@ -115,7 +115,7 @@ class MAGNUM_OBJIMPORTER_EXPORT ObjImporter: public AbstractImporter { MAGNUM_OBJIMPORTER_LOCAL ImporterFeatures doFeatures() const override; MAGNUM_OBJIMPORTER_LOCAL bool doIsOpened() const override; - MAGNUM_OBJIMPORTER_LOCAL void doOpenData(Containers::ArrayView data) override; + MAGNUM_OBJIMPORTER_LOCAL void doOpenData(Containers::Array&& data, DataFlags dataFlags) override; MAGNUM_OBJIMPORTER_LOCAL void doOpenFile(const std::string& filename) override; MAGNUM_OBJIMPORTER_LOCAL void doClose() override; diff --git a/src/MagnumPlugins/TgaImporter/Test/TgaImporterTest.cpp b/src/MagnumPlugins/TgaImporter/Test/TgaImporterTest.cpp index a21da4807..fcca130f8 100644 --- a/src/MagnumPlugins/TgaImporter/Test/TgaImporterTest.cpp +++ b/src/MagnumPlugins/TgaImporter/Test/TgaImporterTest.cpp @@ -59,6 +59,7 @@ struct TgaImporterTest: TestSuite::Tester { void rleTooLarge(); + /* no openData() as all tests use openData() and openFile() is used below */ void openTwice(); void importTwice(); diff --git a/src/MagnumPlugins/TgaImporter/TgaImporter.cpp b/src/MagnumPlugins/TgaImporter/TgaImporter.cpp index 78e44c8d1..2f038fee9 100644 --- a/src/MagnumPlugins/TgaImporter/TgaImporter.cpp +++ b/src/MagnumPlugins/TgaImporter/TgaImporter.cpp @@ -50,7 +50,7 @@ bool TgaImporter::doIsOpened() const { return _in; } void TgaImporter::doClose() { _in = nullptr; } -void TgaImporter::doOpenData(const Containers::ArrayView data) { +void TgaImporter::doOpenData(Containers::Array&& data, const DataFlags dataFlags) { /* Because here we're copying the data and using the _in to check if file is opened, having them nullptr would mean openData() would fail without any error message. It's not possible to do this check on the importer @@ -63,8 +63,13 @@ void TgaImporter::doOpenData(const Containers::ArrayView data) { return; } - _in = Containers::Array{NoInit, data.size()}; - Utility::copy(data, _in); + /* Ttake over the existing array or copy the data if we can't */ + if(dataFlags & DataFlag::Owned) { + _in = std::move(data); + } else { + _in = Containers::Array{NoInit, data.size()}; + Utility::copy(data, _in); + } } UnsignedInt TgaImporter::doImage2DCount() const { return 1; } @@ -204,4 +209,4 @@ Containers::Optional TgaImporter::doImage2D(UnsignedInt, UnsignedIn }} CORRADE_PLUGIN_REGISTER(TgaImporter, Magnum::Trade::TgaImporter, - "cz.mosra.magnum.Trade.AbstractImporter/0.3.3") + "cz.mosra.magnum.Trade.AbstractImporter/0.3.4") diff --git a/src/MagnumPlugins/TgaImporter/TgaImporter.h b/src/MagnumPlugins/TgaImporter/TgaImporter.h index 267e51d7c..3dfd0b112 100644 --- a/src/MagnumPlugins/TgaImporter/TgaImporter.h +++ b/src/MagnumPlugins/TgaImporter/TgaImporter.h @@ -112,7 +112,7 @@ class MAGNUM_TGAIMPORTER_EXPORT TgaImporter: public AbstractImporter { private: ImporterFeatures MAGNUM_TGAIMPORTER_LOCAL doFeatures() const override; bool MAGNUM_TGAIMPORTER_LOCAL doIsOpened() const override; - void MAGNUM_TGAIMPORTER_LOCAL doOpenData(Containers::ArrayView data) override; + void MAGNUM_TGAIMPORTER_LOCAL doOpenData(Containers::Array&& data, DataFlags dataFlags) override; void MAGNUM_TGAIMPORTER_LOCAL doClose() override; UnsignedInt MAGNUM_TGAIMPORTER_LOCAL doImage2DCount() const override; Containers::Optional MAGNUM_TGAIMPORTER_LOCAL doImage2D(UnsignedInt id, UnsignedInt level) override;