Browse Source

Trade: port AbstractImporter away from std::string.

Except for file callbacks, for these I have another change planned for
zero-copy import and it would be unwise to break stuff twice, providing
two sets of backwards compatibility wrappers. The image / scene
converter plugins went through a similar change earlier already and the
shader converters were made sane since the very beginning. OTOH audio
importers and text stuff are scheduled for merging with Trade or a
larger rework anyway, so I didn't see any point in updating those.

It's mostly a trivial change, except that returned String instances are
now also checked for non-default deleters same as Arrays because yes,
wow such flexibility compared to STL strings. Same was done for
ShaderTools::AbstractConverter already anyway, so nothing unheard-of
either.

The importer plugin interface version is bumped as this likely breaks
ABI in a nasty way that would lead to crashes.
pull/556/head
Vladimír Vondruš 4 years ago
parent
commit
3344c372d1
  1. 9
      doc/changelog.dox
  2. 237
      src/Magnum/Trade/AbstractImporter.cpp
  3. 249
      src/Magnum/Trade/AbstractImporter.h
  4. 534
      src/Magnum/Trade/Test/AbstractImporterTest.cpp
  5. 4
      src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp
  6. 2
      src/MagnumPlugins/AnyImageImporter/AnyImageImporter.h
  7. 60
      src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp
  8. 58
      src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h
  9. 10
      src/MagnumPlugins/ObjImporter/ObjImporter.cpp
  10. 6
      src/MagnumPlugins/ObjImporter/ObjImporter.h
  11. 2
      src/MagnumPlugins/TgaImporter/TgaImporter.cpp

9
doc/changelog.dox

@ -787,6 +787,13 @@ See also:
@ref MAGNUM_BUILD_DEPRECATED is enabled, the returned type acts as a
@ref Corrade::Containers::Optional but has (deprecated) implicit conversion
to a @ref Corrade::Containers::Pointer to avoid breaking user code.
- All @ref Trade::AbstractImporter APIs that used to take or return a
@ref std::string are ported to use @relativeref{Corrade,Containers::StringView}
or @relativeref{Corrade,Containers::String} instead. If
@ref MAGNUM_BUILD_DEPRECATED is enabled, implicit conversion from and to a
@ref std::string is provided by including the
@ref Corrade/Containers/StringStl.h header. Include it explicitly in your
code if you want to keep using a @ref std::string.
- @ref Trade::AbstractImporter::doOpenData() taking an array view is
deprecated in favor of the more flexible signature that takes a r-value
@relativeref{Corrade,Containers::Array}
@ -1286,7 +1293,7 @@ Released 2020-06-27, tagged as
Equivalent APIs are exposed in both @ref Trade::ImageData and
@ref Trade::MeshData as well. See @ref Trade-AnimationData-usage-mutable
for more information.
- New convenience @ref Trade::AbstractImporter::material(const std::string&)
- New convenience @cpp Trade::AbstractImporter::material(const std::string&) @ce
etc. APIs allowing to directly get a data using a string name
- @ref Trade::PhongMaterialData now supports both color and texture instead
of just one or the other, can reference normal textures as well and

237
src/Magnum/Trade/AbstractImporter.cpp

@ -25,6 +25,7 @@
#include "AbstractImporter.h"
#include <string> /** @todo remove once file callbacks are <string>-free */
#include <Corrade/Containers/Array.h>
#include <Corrade/Containers/EnumSet.hpp>
#include <Corrade/Containers/Optional.h>
@ -32,7 +33,6 @@
#include <Corrade/Containers/StringStl.h> /** @todo remove once file callbacks are <string>-free */
#include <Corrade/PluginManager/Manager.hpp>
#include <Corrade/Utility/Assert.h>
#include <Corrade/Utility/DebugStl.h> /** @todo remove once AbstractImporter is <string>-free */
#include <Corrade/Utility/Path.h>
#include "Magnum/FileCallback.h"
@ -48,8 +48,10 @@
#include "Magnum/Trade/TextureData.h"
#ifdef MAGNUM_BUILD_DEPRECATED
#include <string> /* for object2DName() etc., not going to change those */
#include <Corrade/Containers/Pair.h>
#include <Corrade/Containers/Triple.h>
#include <Corrade/Utility/DebugStl.h> /* for errors in object2DForName() etc. */
/* This is a header-only tool, meaning no link-time dependency on SceneTools */
/** @todo once this compat is dropped, drop the header-only implementation */
@ -89,7 +91,7 @@ using namespace Containers::Literals;
Containers::StringView AbstractImporter::pluginInterface() {
return
/* [interface] */
"cz.mosra.magnum.Trade.AbstractImporter/0.4"_s
"cz.mosra.magnum.Trade.AbstractImporter/0.5"_s
/* [interface] */
;
}
@ -198,7 +200,7 @@ bool AbstractImporter::openMemory(Containers::ArrayView<const void> memory) {
return isOpened();
}
bool AbstractImporter::openState(const void* state, const std::string& filePath) {
bool AbstractImporter::openState(const void* const state, const Containers::StringView filePath) {
CORRADE_ASSERT(features() & ImporterFeature::OpenState,
"Trade::AbstractImporter::openState(): feature not supported", {});
@ -207,11 +209,15 @@ bool AbstractImporter::openState(const void* state, const std::string& filePath)
return isOpened();
}
void AbstractImporter::doOpenState(const void*, const std::string&) {
bool AbstractImporter::openState(const void* const state) {
return openState(state, {});
}
void AbstractImporter::doOpenState(const void*, const Containers::StringView) {
CORRADE_ASSERT_UNREACHABLE("Trade::AbstractImporter::openState(): feature advertised but not implemented", );
}
bool AbstractImporter::openFile(const std::string& filename) {
bool AbstractImporter::openFile(const Containers::StringView filename) {
close();
/* If file loading callbacks are not set or the importer supports handling
@ -253,7 +259,7 @@ bool AbstractImporter::openFile(const std::string& filename) {
return isOpened();
}
void AbstractImporter::doOpenFile(const std::string& filename) {
void AbstractImporter::doOpenFile(const Containers::StringView filename) {
CORRADE_ASSERT(features() & ImporterFeature::OpenData, "Trade::AbstractImporter::openFile(): not implemented", );
/* If callbacks are set, use them. This is the same implementation as in
@ -310,7 +316,7 @@ UnsignedLong AbstractImporter::objectCount() const {
UnsignedLong AbstractImporter::doObjectCount() const { return 0; }
Int AbstractImporter::sceneForName(const std::string& name) {
Int AbstractImporter::sceneForName(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::sceneForName(): no file opened", -1);
const Int id = doSceneForName(name);
CORRADE_ASSERT(id == -1 || UnsignedInt(id) < doSceneCount(),
@ -318,9 +324,9 @@ Int AbstractImporter::sceneForName(const std::string& name) {
return id;
}
Int AbstractImporter::doSceneForName(const std::string&) { return -1; }
Int AbstractImporter::doSceneForName(Containers::StringView) { return -1; }
Long AbstractImporter::objectForName(const std::string& name) {
Long AbstractImporter::objectForName(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::objectForName(): no file opened", {});
const Long id = doObjectForName(name);
CORRADE_ASSERT(id == -1 || UnsignedLong(id) < doObjectCount(),
@ -328,23 +334,29 @@ Long AbstractImporter::objectForName(const std::string& name) {
return id;
}
Long AbstractImporter::doObjectForName(const std::string&) { return -1; }
Long AbstractImporter::doObjectForName(Containers::StringView) { return -1; }
std::string AbstractImporter::sceneName(const UnsignedInt id) {
Containers::String AbstractImporter::sceneName(const UnsignedInt id) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::sceneName(): no file opened", {});
CORRADE_ASSERT(id < doSceneCount(), "Trade::AbstractImporter::sceneName(): index" << id << "out of range for" << doSceneCount() << "entries", {});
return doSceneName(id);
Containers::String name = doSceneName(id);
CORRADE_ASSERT(name.isSmall() || !name.deleter(),
"Trade::AbstractImporter::sceneName(): implementation is not allowed to use a custom String deleter", {});
return name;
}
std::string AbstractImporter::doSceneName(UnsignedInt) { return {}; }
Containers::String AbstractImporter::doSceneName(UnsignedInt) { return {}; }
std::string AbstractImporter::objectName(const UnsignedLong id) {
Containers::String AbstractImporter::objectName(const UnsignedLong id) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::objectName(): no file opened", {});
CORRADE_ASSERT(id < doObjectCount(), "Trade::AbstractImporter::objectName(): index" << id << "out of range for" << doObjectCount() << "entries", {});
return doObjectName(id);
Containers::String name = doObjectName(id);
CORRADE_ASSERT(name.isSmall() || !name.deleter(),
"Trade::AbstractImporter::objectName(): implementation is not allowed to use a custom String deleter", {});
return name;
}
std::string AbstractImporter::doObjectName(UnsignedLong) { return {}; }
Containers::String AbstractImporter::doObjectName(UnsignedLong) { return {}; }
Containers::Optional<SceneData> AbstractImporter::scene(const UnsignedInt id) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::scene(): no file opened", {});
@ -361,7 +373,7 @@ Containers::Optional<SceneData> AbstractImporter::doScene(UnsignedInt) {
CORRADE_ASSERT_UNREACHABLE("Trade::AbstractImporter::scene(): not implemented", {});
}
Containers::Optional<SceneData> AbstractImporter::scene(const std::string& name) {
Containers::Optional<SceneData> AbstractImporter::scene(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::scene(): no file opened", {});
const Int id = doSceneForName(name);
if(id == -1) {
@ -371,24 +383,27 @@ Containers::Optional<SceneData> AbstractImporter::scene(const std::string& name)
return scene(id); /* not doScene(), so we get the range checks also */
}
SceneField AbstractImporter::sceneFieldForName(const std::string& name) {
SceneField AbstractImporter::sceneFieldForName(const Containers::StringView name) {
const SceneField out = doSceneFieldForName(name);
CORRADE_ASSERT(out == SceneField{} || isSceneFieldCustom(out),
"Trade::AbstractImporter::sceneFieldForName(): implementation-returned" << out << "is neither custom nor invalid", {});
return out;
}
SceneField AbstractImporter::doSceneFieldForName(const std::string&) {
SceneField AbstractImporter::doSceneFieldForName(const Containers::StringView) {
return {};
}
std::string AbstractImporter::sceneFieldName(SceneField name) {
Containers::String AbstractImporter::sceneFieldName(SceneField name) {
CORRADE_ASSERT(isSceneFieldCustom(name),
"Trade::AbstractImporter::sceneFieldName():" << name << "is not custom", {});
return doSceneFieldName(sceneFieldCustom(name));
Containers::String out = doSceneFieldName(sceneFieldCustom(name));
CORRADE_ASSERT(out.isSmall() || !out.deleter(),
"Trade::AbstractImporter::sceneFieldName(): implementation is not allowed to use a custom String deleter", {});
return out;
}
std::string AbstractImporter::doSceneFieldName(UnsignedInt) { return {}; }
Containers::String AbstractImporter::doSceneFieldName(UnsignedInt) { return {}; }
UnsignedInt AbstractImporter::animationCount() const {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::animationCount(): no file opened", {});
@ -397,7 +412,7 @@ UnsignedInt AbstractImporter::animationCount() const {
UnsignedInt AbstractImporter::doAnimationCount() const { return 0; }
Int AbstractImporter::animationForName(const std::string& name) {
Int AbstractImporter::animationForName(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::animationForName(): no file opened", {});
const Int id = doAnimationForName(name);
CORRADE_ASSERT(id == -1 || UnsignedInt(id) < doAnimationCount(),
@ -405,15 +420,18 @@ Int AbstractImporter::animationForName(const std::string& name) {
return id;
}
Int AbstractImporter::doAnimationForName(const std::string&) { return -1; }
Int AbstractImporter::doAnimationForName(Containers::StringView) { return -1; }
std::string AbstractImporter::animationName(const UnsignedInt id) {
Containers::String AbstractImporter::animationName(const UnsignedInt id) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::animationName(): no file opened", {});
CORRADE_ASSERT(id < doAnimationCount(), "Trade::AbstractImporter::animationName(): index" << id << "out of range for" << doAnimationCount() << "entries", {});
return doAnimationName(id);
Containers::String name = doAnimationName(id);
CORRADE_ASSERT(name.isSmall() || !name.deleter(),
"Trade::AbstractImporter::animationName(): implementation is not allowed to use a custom String deleter", {});
return name;
}
std::string AbstractImporter::doAnimationName(UnsignedInt) { return {}; }
Containers::String AbstractImporter::doAnimationName(UnsignedInt) { return {}; }
Containers::Optional<AnimationData> AbstractImporter::animation(const UnsignedInt id) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::animation(): no file opened", {});
@ -430,7 +448,7 @@ Containers::Optional<AnimationData> AbstractImporter::doAnimation(UnsignedInt) {
CORRADE_ASSERT_UNREACHABLE("Trade::AbstractImporter::animation(): not implemented", {});
}
Containers::Optional<AnimationData> AbstractImporter::animation(const std::string& name) {
Containers::Optional<AnimationData> AbstractImporter::animation(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::animation(): no file opened", {});
const Int id = doAnimationForName(name);
if(id == -1) {
@ -447,7 +465,7 @@ UnsignedInt AbstractImporter::lightCount() const {
UnsignedInt AbstractImporter::doLightCount() const { return 0; }
Int AbstractImporter::lightForName(const std::string& name) {
Int AbstractImporter::lightForName(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::lightForName(): no file opened", {});
const Int id = doLightForName(name);
CORRADE_ASSERT(id == -1 || UnsignedInt(id) < doLightCount(),
@ -455,15 +473,18 @@ Int AbstractImporter::lightForName(const std::string& name) {
return id;
}
Int AbstractImporter::doLightForName(const std::string&) { return -1; }
Int AbstractImporter::doLightForName(Containers::StringView) { return -1; }
std::string AbstractImporter::lightName(const UnsignedInt id) {
Containers::String AbstractImporter::lightName(const UnsignedInt id) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::lightName(): no file opened", {});
CORRADE_ASSERT(id < doLightCount(), "Trade::AbstractImporter::lightName(): index" << id << "out of range for" << doLightCount() << "entries", {});
return doLightName(id);
Containers::String name = doLightName(id);
CORRADE_ASSERT(name.isSmall() || !name.deleter(),
"Trade::AbstractImporter::lightName(): implementation is not allowed to use a custom String deleter", {});
return name;
}
std::string AbstractImporter::doLightName(UnsignedInt) { return {}; }
Containers::String AbstractImporter::doLightName(UnsignedInt) { return {}; }
Containers::Optional<LightData> AbstractImporter::light(const UnsignedInt id) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::light(): no file opened", {});
@ -475,7 +496,7 @@ Containers::Optional<LightData> AbstractImporter::doLight(UnsignedInt) {
CORRADE_ASSERT_UNREACHABLE("Trade::AbstractImporter::light(): not implemented", {});
}
Containers::Optional<LightData> AbstractImporter::light(const std::string& name) {
Containers::Optional<LightData> AbstractImporter::light(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::light(): no file opened", {});
const Int id = doLightForName(name);
if(id == -1) {
@ -492,7 +513,7 @@ UnsignedInt AbstractImporter::cameraCount() const {
UnsignedInt AbstractImporter::doCameraCount() const { return 0; }
Int AbstractImporter::cameraForName(const std::string& name) {
Int AbstractImporter::cameraForName(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::cameraForName(): no file opened", {});
const Int id = doCameraForName(name);
CORRADE_ASSERT(id == -1 || UnsignedInt(id) < doCameraCount(),
@ -500,15 +521,18 @@ Int AbstractImporter::cameraForName(const std::string& name) {
return id;
}
Int AbstractImporter::doCameraForName(const std::string&) { return -1; }
Int AbstractImporter::doCameraForName(Containers::StringView) { return -1; }
std::string AbstractImporter::cameraName(const UnsignedInt id) {
Containers::String AbstractImporter::cameraName(const UnsignedInt id) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::cameraName(): no file opened", {});
CORRADE_ASSERT(id < doCameraCount(), "Trade::AbstractImporter::cameraName(): index" << id << "out of range for" << doCameraCount() << "entries", {});
return doCameraName(id);
Containers::String name = doCameraName(id);
CORRADE_ASSERT(name.isSmall() || !name.deleter(),
"Trade::AbstractImporter::cameraName(): implementation is not allowed to use a custom String deleter", {});
return name;
}
std::string AbstractImporter::doCameraName(UnsignedInt) { return {}; }
Containers::String AbstractImporter::doCameraName(UnsignedInt) { return {}; }
Containers::Optional<CameraData> AbstractImporter::camera(const UnsignedInt id) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::camera(): no file opened", {});
@ -520,7 +544,7 @@ Containers::Optional<CameraData> AbstractImporter::doCamera(UnsignedInt) {
CORRADE_ASSERT_UNREACHABLE("Trade::AbstractImporter::camera(): not implemented", {});
}
Containers::Optional<CameraData> AbstractImporter::camera(const std::string& name) {
Containers::Optional<CameraData> AbstractImporter::camera(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::camera(): no file opened", {});
const Int id = doCameraForName(name);
if(id == -1) {
@ -951,7 +975,7 @@ UnsignedInt AbstractImporter::skin2DCount() const {
UnsignedInt AbstractImporter::doSkin2DCount() const { return 0; }
Int AbstractImporter::skin2DForName(const std::string& name) {
Int AbstractImporter::skin2DForName(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::skin2DForName(): no file opened", {});
const Int id = doSkin2DForName(name);
CORRADE_ASSERT(id == -1 || UnsignedInt(id) < doSkin2DCount(),
@ -959,15 +983,18 @@ Int AbstractImporter::skin2DForName(const std::string& name) {
return id;
}
Int AbstractImporter::doSkin2DForName(const std::string&) { return -1; }
Int AbstractImporter::doSkin2DForName(Containers::StringView) { return -1; }
std::string AbstractImporter::skin2DName(const UnsignedInt id) {
Containers::String AbstractImporter::skin2DName(const UnsignedInt id) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::skin2DName(): no file opened", {});
CORRADE_ASSERT(id < doSkin2DCount(), "Trade::AbstractImporter::skin2DName(): index" << id << "out of range for" << doSkin2DCount() << "entries", {});
return doSkin2DName(id);
Containers::String name = doSkin2DName(id);
CORRADE_ASSERT(name.isSmall() || !name.deleter(),
"Trade::AbstractImporter::skin2DName(): implementation is not allowed to use a custom String deleter", {});
return name;
}
std::string AbstractImporter::doSkin2DName(UnsignedInt) { return {}; }
Containers::String AbstractImporter::doSkin2DName(UnsignedInt) { return {}; }
Containers::Optional<SkinData2D> AbstractImporter::skin2D(const UnsignedInt id) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::skin2D(): no file opened", {});
@ -984,7 +1011,7 @@ Containers::Optional<SkinData2D> AbstractImporter::doSkin2D(UnsignedInt) {
CORRADE_ASSERT_UNREACHABLE("Trade::AbstractImporter::skin2D(): not implemented", {});
}
Containers::Optional<SkinData2D> AbstractImporter::skin2D(const std::string& name) {
Containers::Optional<SkinData2D> AbstractImporter::skin2D(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::skin2D(): no file opened", {});
const Int id = doSkin2DForName(name);
if(id == -1) {
@ -1001,7 +1028,7 @@ UnsignedInt AbstractImporter::skin3DCount() const {
UnsignedInt AbstractImporter::doSkin3DCount() const { return 0; }
Int AbstractImporter::skin3DForName(const std::string& name) {
Int AbstractImporter::skin3DForName(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::skin3DForName(): no file opened", {});
const Int id = doSkin3DForName(name);
CORRADE_ASSERT(id == -1 || UnsignedInt(id) < doSkin3DCount(),
@ -1009,15 +1036,18 @@ Int AbstractImporter::skin3DForName(const std::string& name) {
return id;
}
Int AbstractImporter::doSkin3DForName(const std::string&) { return -1; }
Int AbstractImporter::doSkin3DForName(Containers::StringView) { return -1; }
std::string AbstractImporter::skin3DName(const UnsignedInt id) {
Containers::String AbstractImporter::skin3DName(const UnsignedInt id) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::skin3DName(): no file opened", {});
CORRADE_ASSERT(id < doSkin3DCount(), "Trade::AbstractImporter::skin3DName(): index" << id << "out of range for" << doSkin3DCount() << "entries", {});
return doSkin3DName(id);
Containers::String name = doSkin3DName(id);
CORRADE_ASSERT(name.isSmall() || !name.deleter(),
"Trade::AbstractImporter::skin3DName(): implementation is not allowed to use a custom String deleter", {});
return name;
}
std::string AbstractImporter::doSkin3DName(UnsignedInt) { return {}; }
Containers::String AbstractImporter::doSkin3DName(UnsignedInt) { return {}; }
Containers::Optional<SkinData3D> AbstractImporter::skin3D(const UnsignedInt id) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::skin3D(): no file opened", {});
@ -1034,7 +1064,7 @@ Containers::Optional<SkinData3D> AbstractImporter::doSkin3D(UnsignedInt) {
CORRADE_ASSERT_UNREACHABLE("Trade::AbstractImporter::skin3D(): not implemented", {});
}
Containers::Optional<SkinData3D> AbstractImporter::skin3D(const std::string& name) {
Containers::Optional<SkinData3D> AbstractImporter::skin3D(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::skin3D(): no file opened", {});
const Int id = doSkin3DForName(name);
if(id == -1) {
@ -1061,7 +1091,7 @@ UnsignedInt AbstractImporter::meshLevelCount(const UnsignedInt id) {
UnsignedInt AbstractImporter::doMeshLevelCount(UnsignedInt) { return 1; }
Int AbstractImporter::meshForName(const std::string& name) {
Int AbstractImporter::meshForName(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::meshForName(): no file opened", {});
const Int id = doMeshForName(name);
CORRADE_ASSERT(id == -1 || UnsignedInt(id) < doMeshCount(),
@ -1069,15 +1099,18 @@ Int AbstractImporter::meshForName(const std::string& name) {
return id;
}
Int AbstractImporter::doMeshForName(const std::string&) { return -1; }
Int AbstractImporter::doMeshForName(Containers::StringView) { return -1; }
std::string AbstractImporter::meshName(const UnsignedInt id) {
Containers::String AbstractImporter::meshName(const UnsignedInt id) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::meshName(): no file opened", {});
CORRADE_ASSERT(id < doMeshCount(), "Trade::AbstractImporter::meshName(): index" << id << "out of range for" << doMeshCount() << "entries", {});
return doMeshName(id);
Containers::String name = doMeshName(id);
CORRADE_ASSERT(name.isSmall() || !name.deleter(),
"Trade::AbstractImporter::meshName(): implementation is not allowed to use a custom String deleter", {});
return name;
}
std::string AbstractImporter::doMeshName(UnsignedInt) { return {}; }
Containers::String AbstractImporter::doMeshName(UnsignedInt) { return {}; }
Containers::Optional<MeshData> AbstractImporter::mesh(const UnsignedInt id, const UnsignedInt level) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::mesh(): no file opened", {});
@ -1106,7 +1139,7 @@ Containers::Optional<MeshData> AbstractImporter::doMesh(UnsignedInt, UnsignedInt
CORRADE_ASSERT_UNREACHABLE("Trade::AbstractImporter::mesh(): not implemented", {});
}
Containers::Optional<MeshData> AbstractImporter::mesh(const std::string& name, const UnsignedInt level) {
Containers::Optional<MeshData> AbstractImporter::mesh(const Containers::StringView name, const UnsignedInt level) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::mesh(): no file opened", {});
const Int id = doMeshForName(name);
if(id == -1) {
@ -1116,24 +1149,27 @@ Containers::Optional<MeshData> AbstractImporter::mesh(const std::string& name, c
return mesh(id, level); /* not doMesh(), so we get the checks also */
}
MeshAttribute AbstractImporter::meshAttributeForName(const std::string& name) {
MeshAttribute AbstractImporter::meshAttributeForName(const Containers::StringView name) {
const MeshAttribute out = doMeshAttributeForName(name);
CORRADE_ASSERT(out == MeshAttribute{} || isMeshAttributeCustom(out),
"Trade::AbstractImporter::meshAttributeForName(): implementation-returned" << out << "is neither custom nor invalid", {});
return out;
}
MeshAttribute AbstractImporter::doMeshAttributeForName(const std::string&) {
MeshAttribute AbstractImporter::doMeshAttributeForName(Containers::StringView) {
return {};
}
std::string AbstractImporter::meshAttributeName(MeshAttribute name) {
Containers::String AbstractImporter::meshAttributeName(MeshAttribute name) {
CORRADE_ASSERT(isMeshAttributeCustom(name),
"Trade::AbstractImporter::meshAttributeName():" << name << "is not custom", {});
return doMeshAttributeName(meshAttributeCustom(name));
Containers::String out = doMeshAttributeName(meshAttributeCustom(name));
CORRADE_ASSERT(out.isSmall() || !out.deleter(),
"Trade::AbstractImporter::meshAttributeName(): implementation is not allowed to use a custom String deleter", {});
return out;
}
std::string AbstractImporter::doMeshAttributeName(UnsignedShort) { return {}; }
Containers::String AbstractImporter::doMeshAttributeName(UnsignedShort) { return {}; }
#ifdef MAGNUM_BUILD_DEPRECATED
UnsignedInt AbstractImporter::mesh2DCount() const {
@ -1232,7 +1268,7 @@ UnsignedInt AbstractImporter::materialCount() const {
UnsignedInt AbstractImporter::doMaterialCount() const { return 0; }
Int AbstractImporter::materialForName(const std::string& name) {
Int AbstractImporter::materialForName(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::materialForName(): no file opened", {});
const Int id = doMaterialForName(name);
CORRADE_ASSERT(id == -1 || UnsignedInt(id) < doMaterialCount(),
@ -1240,15 +1276,18 @@ Int AbstractImporter::materialForName(const std::string& name) {
return id;
}
Int AbstractImporter::doMaterialForName(const std::string&) { return -1; }
Int AbstractImporter::doMaterialForName(Containers::StringView) { return -1; }
std::string AbstractImporter::materialName(const UnsignedInt id) {
Containers::String AbstractImporter::materialName(const UnsignedInt id) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::materialName(): no file opened", {});
CORRADE_ASSERT(id < doMaterialCount(), "Trade::AbstractImporter::materialName(): index" << id << "out of range for" << doMaterialCount() << "entries", {});
return doMaterialName(id);
Containers::String name = doMaterialName(id);
CORRADE_ASSERT(name.isSmall() || !name.deleter(),
"Trade::AbstractImporter::materialName(): implementation is not allowed to use a custom String deleter", {});
return name;
}
std::string AbstractImporter::doMaterialName(UnsignedInt) { return {}; }
Containers::String AbstractImporter::doMaterialName(UnsignedInt) { return {}; }
#if !defined(MAGNUM_BUILD_DEPRECATED) || defined(DOXYGEN_GENERATING_OUTPUT)
Containers::Optional<MaterialData>
@ -1282,7 +1321,7 @@ Containers::Optional<MaterialData>
#else
Implementation::OptionalButAlsoPointer<MaterialData>
#endif
AbstractImporter::material(const std::string& name) {
AbstractImporter::material(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::material(): no file opened", {});
const Int id = doMaterialForName(name);
if(id == -1) {
@ -1299,7 +1338,7 @@ UnsignedInt AbstractImporter::textureCount() const {
UnsignedInt AbstractImporter::doTextureCount() const { return 0; }
Int AbstractImporter::textureForName(const std::string& name) {
Int AbstractImporter::textureForName(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::textureForName(): no file opened", {});
const Int id = doTextureForName(name);
CORRADE_ASSERT(id == -1 || UnsignedInt(id) < doTextureCount(),
@ -1307,15 +1346,18 @@ Int AbstractImporter::textureForName(const std::string& name) {
return id;
}
Int AbstractImporter::doTextureForName(const std::string&) { return -1; }
Int AbstractImporter::doTextureForName(Containers::StringView) { return -1; }
std::string AbstractImporter::textureName(const UnsignedInt id) {
Containers::String AbstractImporter::textureName(const UnsignedInt id) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::textureName(): no file opened", {});
CORRADE_ASSERT(id < doTextureCount(), "Trade::AbstractImporter::textureName(): index" << id << "out of range for" << doTextureCount() << "entries", {});
return doTextureName(id);
Containers::String name = doTextureName(id);
CORRADE_ASSERT(name.isSmall() || !name.deleter(),
"Trade::AbstractImporter::textureName(): implementation is not allowed to use a custom String deleter", {});
return name;
}
std::string AbstractImporter::doTextureName(UnsignedInt) { return {}; }
Containers::String AbstractImporter::doTextureName(UnsignedInt) { return {}; }
Containers::Optional<TextureData> AbstractImporter::texture(const UnsignedInt id) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::texture(): no file opened", {});
@ -1327,7 +1369,7 @@ Containers::Optional<TextureData> AbstractImporter::doTexture(UnsignedInt) {
CORRADE_ASSERT_UNREACHABLE("Trade::AbstractImporter::texture(): not implemented", {});
}
Containers::Optional<TextureData> AbstractImporter::texture(const std::string& name) {
Containers::Optional<TextureData> AbstractImporter::texture(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::texture(): no file opened", {});
const Int id = doTextureForName(name);
if(id == -1) {
@ -1354,7 +1396,7 @@ UnsignedInt AbstractImporter::image1DLevelCount(const UnsignedInt id) {
UnsignedInt AbstractImporter::doImage1DLevelCount(UnsignedInt) { return 1; }
Int AbstractImporter::image1DForName(const std::string& name) {
Int AbstractImporter::image1DForName(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::image1DForName(): no file opened", {});
const Int id = doImage1DForName(name);
CORRADE_ASSERT(id == -1 || UnsignedInt(id) < doImage1DCount(),
@ -1362,15 +1404,18 @@ Int AbstractImporter::image1DForName(const std::string& name) {
return id;
}
Int AbstractImporter::doImage1DForName(const std::string&) { return -1; }
Int AbstractImporter::doImage1DForName(Containers::StringView) { return -1; }
std::string AbstractImporter::image1DName(const UnsignedInt id) {
Containers::String AbstractImporter::image1DName(const UnsignedInt id) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::image1DName(): no file opened", {});
CORRADE_ASSERT(id < doImage1DCount(), "Trade::AbstractImporter::image1DName(): index" << id << "out of range for" << doImage1DCount() << "entries", {});
return doImage1DName(id);
Containers::String name = doImage1DName(id);
CORRADE_ASSERT(name.isSmall() || !name.deleter(),
"Trade::AbstractImporter::image1DName(): implementation is not allowed to use a custom String deleter", {});
return name;
}
std::string AbstractImporter::doImage1DName(UnsignedInt) { return {}; }
Containers::String AbstractImporter::doImage1DName(UnsignedInt) { return {}; }
Containers::Optional<ImageData1D> AbstractImporter::image1D(const UnsignedInt id, const UnsignedInt level) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::image1D(): no file opened", {});
@ -1396,7 +1441,7 @@ Containers::Optional<ImageData1D> AbstractImporter::doImage1D(UnsignedInt, Unsig
CORRADE_ASSERT_UNREACHABLE("Trade::AbstractImporter::image1D(): not implemented", {});
}
Containers::Optional<ImageData1D> AbstractImporter::image1D(const std::string& name, const UnsignedInt level) {
Containers::Optional<ImageData1D> AbstractImporter::image1D(const Containers::StringView name, const UnsignedInt level) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::image1D(): no file opened", {});
const Int id = doImage1DForName(name);
if(id == -1) {
@ -1424,7 +1469,7 @@ UnsignedInt AbstractImporter::image2DLevelCount(const UnsignedInt id) {
UnsignedInt AbstractImporter::doImage2DLevelCount(UnsignedInt) { return 1; }
Int AbstractImporter::image2DForName(const std::string& name) {
Int AbstractImporter::image2DForName(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::image2DForName(): no file opened", {});
const Int id = doImage2DForName(name);
CORRADE_ASSERT(id == -1 || UnsignedInt(id) < doImage2DCount(),
@ -1432,15 +1477,18 @@ Int AbstractImporter::image2DForName(const std::string& name) {
return id;
}
Int AbstractImporter::doImage2DForName(const std::string&) { return -1; }
Int AbstractImporter::doImage2DForName(Containers::StringView) { return -1; }
std::string AbstractImporter::image2DName(const UnsignedInt id) {
Containers::String AbstractImporter::image2DName(const UnsignedInt id) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::image2DName(): no file opened", {});
CORRADE_ASSERT(id < doImage2DCount(), "Trade::AbstractImporter::image2DName(): index" << id << "out of range for" << doImage2DCount() << "entries", {});
return doImage2DName(id);
Containers::String name = doImage2DName(id);
CORRADE_ASSERT(name.isSmall() || !name.deleter(),
"Trade::AbstractImporter::image2DName(): implementation is not allowed to use a custom String deleter", {});
return name;
}
std::string AbstractImporter::doImage2DName(UnsignedInt) { return {}; }
Containers::String AbstractImporter::doImage2DName(UnsignedInt) { return {}; }
Containers::Optional<ImageData2D> AbstractImporter::image2D(const UnsignedInt id, const UnsignedInt level) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::image2D(): no file opened", {});
@ -1466,7 +1514,7 @@ Containers::Optional<ImageData2D> AbstractImporter::doImage2D(UnsignedInt, Unsig
CORRADE_ASSERT_UNREACHABLE("Trade::AbstractImporter::image2D(): not implemented", {});
}
Containers::Optional<ImageData2D> AbstractImporter::image2D(const std::string& name, const UnsignedInt level) {
Containers::Optional<ImageData2D> AbstractImporter::image2D(const Containers::StringView name, const UnsignedInt level) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::image2D(): no file opened", {});
const Int id = doImage2DForName(name);
if(id == -1) {
@ -1494,7 +1542,7 @@ UnsignedInt AbstractImporter::image3DLevelCount(const UnsignedInt id) {
UnsignedInt AbstractImporter::doImage3DLevelCount(UnsignedInt) { return 1; }
Int AbstractImporter::image3DForName(const std::string& name) {
Int AbstractImporter::image3DForName(const Containers::StringView name) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::image3DForName(): no file opened", {});
const Int id = doImage3DForName(name);
CORRADE_ASSERT(id == -1 || UnsignedInt(id) < doImage3DCount(),
@ -1502,15 +1550,18 @@ Int AbstractImporter::image3DForName(const std::string& name) {
return id;
}
Int AbstractImporter::doImage3DForName(const std::string&) { return -1; }
Int AbstractImporter::doImage3DForName(Containers::StringView) { return -1; }
std::string AbstractImporter::image3DName(const UnsignedInt id) {
Containers::String AbstractImporter::image3DName(const UnsignedInt id) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::image3DName(): no file opened", {});
CORRADE_ASSERT(id < doImage3DCount(), "Trade::AbstractImporter::image3DName(): index" << id << "out of range for" << doImage3DCount() << "entries", {});
return doImage3DName(id);
Containers::String name = doImage3DName(id);
CORRADE_ASSERT(name.isSmall() || !name.deleter(),
"Trade::AbstractImporter::image3DName(): implementation is not allowed to use a custom String deleter", {});
return name;
}
std::string AbstractImporter::doImage3DName(UnsignedInt) { return {}; }
Containers::String AbstractImporter::doImage3DName(UnsignedInt) { return {}; }
Containers::Optional<ImageData3D> AbstractImporter::image3D(const UnsignedInt id, const UnsignedInt level) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::image3D(): no file opened", {});
@ -1536,7 +1587,7 @@ Containers::Optional<ImageData3D> AbstractImporter::doImage3D(UnsignedInt, Unsig
CORRADE_ASSERT_UNREACHABLE("Trade::AbstractImporter::image3D(): not implemented", {});
}
Containers::Optional<ImageData3D> AbstractImporter::image3D(const std::string& name, const UnsignedInt level) {
Containers::Optional<ImageData3D> AbstractImporter::image3D(const Containers::StringView name, const UnsignedInt level) {
CORRADE_ASSERT(isOpened(), "Trade::AbstractImporter::image3D(): no file opened", {});
const Int id = doImage3DForName(name);
if(id == -1) {

249
src/Magnum/Trade/AbstractImporter.h

@ -29,7 +29,6 @@
* @brief Class @ref Magnum::Trade::AbstractImporter, enum @ref Magnum::Trade::ImporterFeature, enum set @ref Magnum::Trade::ImporterFeatures
*/
#include <string> /** @todo remove once openState() doesn't have a default std::string argument */
#include <Corrade/Containers/EnumSet.h>
#include <Corrade/PluginManager/AbstractManagingPlugin.h>
@ -38,6 +37,9 @@
#include "Magnum/Trade/visibility.h"
#ifdef MAGNUM_BUILD_DEPRECATED
/* For APIs that used to take or return a std::string */
#include <Corrade/Containers/StringStl.h>
#include "Magnum/FileCallback.h"
#endif
@ -286,33 +288,34 @@ the name to an IDs first. In that case the function will return an empty
name doesn't exist.
- Animation names can be retrieved using @ref animationName() and mapped to
an ID using @ref animationForName(), imported with @ref animation(const std::string&)
an ID using @ref animationForName(), imported with
@ref animation(Containers::StringView)
- Camera names using @ref cameraName() & @ref cameraForName(), imported with
@ref camera(const std::string&)
@ref camera(Containers::StringView)
- Image names using @ref image1DName() / @ref image2DName() /
@ref image3DName() & @ref image1DForName() / @ref image2DForName() /
@ref image3DForName(), imported with
@ref image1D(const std::string&, UnsignedInt) /
@ref image2D(const std::string&, UnsignedInt) /
@ref image3D(const std::string&, UnsignedInt)
@ref image1D(Containers::StringView, UnsignedInt) /
@ref image2D(Containers::StringView, UnsignedInt) /
@ref image3D(Containers::StringView, UnsignedInt)
- Light names using @ref lightName() & @ref lightForName(), imported with
@ref light(const std::string&)
@ref light(Containers::StringView)
- Material names using @ref materialName() & @ref materialForName(), imported
with @ref material(const std::string&)
with @ref material(Containers::StringView)
- Mesh names using @ref meshName() & @ref meshForName(), imported with
@ref mesh(const std::string&, UnsignedInt). Meshes themselves can have
@ref mesh(Containers::StringView, UnsignedInt). Meshes themselves can have
custom attributes, for which the name mapping can be retrieved using
@ref meshAttributeName() and @ref meshAttributeForName().
- Scene and object names using @ref sceneName() / @ref objectName() &
@ref sceneForName() / @ref objectForName(), imported with
@ref scene(const std::string&). Scenes themselves can have custom fields,
for which the name mapping can be retrieved using @ref sceneFieldName() and
@ref sceneFieldForName().
@ref scene(Containers::StringView). Scenes themselves can have custom
fields, for which the name mapping can be retrieved using
@ref sceneFieldName() and @ref sceneFieldForName().
- Skin names using @ref skin2DName() / @ref skin3DName() &
@ref skin2DForName() / @ref skin3DForName(), imported with
@ref skin2D(const std::string&) / @ref skin3D(const std::string&)
@ref skin2D(Containers::StringView) / @ref skin3D(Containers::StringView)
- Texture names using @ref textureName() & @ref textureForName(), imported
with @ref texture(const std::string&)
with @ref texture(Containers::StringView)
@subsection Trade-AbstractImporter-usage-state Internal importer state
@ -352,12 +355,13 @@ The `*Data` instances returned from various functions *by design* have no
dependency on the importer instance and neither on the dynamic plugin module.
In other words, you don't need to keep the importer instance (or the plugin
manager instance) around in order to have the `*Data` instances valid.
Moreover, all @relativeref{Corrade,Containers::Array} instances returned
through @ref ImageData, @ref AnimationData, @ref MaterialData, @ref MeshData
and @ref SkinData are only allowed to have default deleters (or be non-owning
instances created from @relativeref{Corrade,Containers::ArrayView}) --- this is
to avoid potential dangling function pointer calls when destructing such
instances after the plugin module has been unloaded.
Moreover, all returned @ref Corrade::Containers::String instances and all @relativeref{Corrade,Containers::Array} instances returned through
@ref SceneData, @ref ImageData, @ref AnimationData, @ref MaterialData,
@ref MeshData and @ref SkinData are only allowed to have default deleters (or
be non-owning instances created from
@relativeref{Corrade,Containers::ArrayView}) --- this is to avoid potential
dangling function pointer calls when destructing such instances after the
plugin module has been unloaded.
The only exception are various `importerState()` functions
@ref Trade-AbstractImporter-usage-state "described above", but in that case the
@ -671,7 +675,12 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* @see @ref features(), @ref openData(), @ref openMemory(),
* @ref openFile()
*/
bool openState(const void* state, const std::string& filePath = {});
#ifdef DOXYGEN_GENERATING_OUTPUT
bool openState(const void* state, Containers::StringView filePath = {});
#else
bool openState(const void* state, Containers::StringView filePath);
bool openState(const void* state);
#endif
/**
* @brief Open a file
@ -686,7 +695,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* @see @ref features(), @ref openData(), @ref openMemory(),
* @ref openState()
*/
bool openFile(const std::string& filename);
bool openFile(Containers::StringView filename);
/**
* @brief Close currently opened file
@ -734,9 +743,9 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* no scene for given name exists
*
* Expects that a file is opened.
* @see @ref sceneName(), @ref scene(const std::string&)
* @see @ref sceneName(), @ref scene(Containers::StringView)
*/
Int sceneForName(const std::string& name);
Int sceneForName(Containers::StringView name);
/**
* @brief Object ID for given name
@ -746,7 +755,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* object can be present in multiple scenes at the same time.
* @see @ref objectName()
*/
Long objectForName(const std::string& name);
Long objectForName(Containers::StringView name);
/**
* @brief Scene name
@ -756,7 +765,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* names, returns an empty string. Expects that a file is opened.
* @see @ref sceneForName()
*/
std::string sceneName(UnsignedInt id);
Containers::String sceneName(UnsignedInt id);
/**
* @brief Object name
@ -768,7 +777,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* Expects that a file is opened.
* @see @ref objectForName()
*/
std::string objectName(UnsignedLong id);
Containers::String objectName(UnsignedLong id);
/**
* @brief Scene
@ -776,7 +785,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Returns given scene or @ref Containers::NullOpt if import failed.
* Expects that a file is opened.
* @see @ref scene(const std::string&)
* @see @ref scene(Containers::StringView)
*/
Containers::Optional<SceneData> scene(UnsignedInt id);
@ -790,7 +799,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* otherwise propagates the result from @ref scene(UnsignedInt).
* Expects that a file is opened.
*/
Containers::Optional<SceneData> scene(const std::string& name);
Containers::Optional<SceneData> scene(Containers::StringView name);
/**
* @brief Scene field for given name
@ -803,7 +812,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* documentation of a particular importer for more information.
* @see @ref isSceneFieldCustom()
*/
SceneField sceneFieldForName(const std::string& name);
SceneField sceneFieldForName(Containers::StringView name);
/**
* @brief String name for given custom scene field
@ -818,7 +827,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* particular importer for more information.
* @see @ref isSceneFieldCustom()
*/
std::string sceneFieldName(SceneField name);
Containers::String sceneFieldName(SceneField name);
/**
* @brief Animation count
@ -833,9 +842,9 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* @cpp -1 @ce if no animation for given name exists
*
* Expects that a file is opened.
* @see @ref animationName(), @ref animation(const std::string&)
* @see @ref animationName(), @ref animation(Containers::StringView)
*/
Int animationForName(const std::string& name);
Int animationForName(Containers::StringView name);
/**
* @brief Animation name
@ -845,7 +854,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* importer doesn't support animation names, returns an empty string.
* @see @ref animationForName()
*/
std::string animationName(UnsignedInt id);
Containers::String animationName(UnsignedInt id);
/**
* @brief Animation
@ -853,7 +862,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Returns given animation or @ref Containers::NullOpt if importing
* failed. Expects that a file is opened.
* @see @ref animation(const std::string&)
* @see @ref animation(Containers::StringView)
*/
Containers::Optional<AnimationData> animation(UnsignedInt id);
@ -867,7 +876,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* @ref Containers::NullOpt, otherwise propagates the result from
* @ref animation(UnsignedInt). Expects that a file is opened.
*/
Containers::Optional<AnimationData> animation(const std::string& name);
Containers::Optional<AnimationData> animation(Containers::StringView name);
/**
* @brief Light count
@ -882,9 +891,9 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* no light for given name exists
*
* Expects that a file is opened.
* @see @ref lightName(), @ref light(const std::string&)
* @see @ref lightName(), @ref light(Containers::StringView)
*/
Int lightForName(const std::string& name);
Int lightForName(Containers::StringView name);
/**
* @brief Light name
@ -894,7 +903,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* importer doesn't support light names, returns an empty string.
* @see @ref lightForName()
*/
std::string lightName(UnsignedInt id);
Containers::String lightName(UnsignedInt id);
/**
* @brief Light
@ -902,7 +911,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Returns given light or @ref Containers::NullOpt if importing failed.
* Expects that a file is opened.
* @see @ref light(const std::string&)
* @see @ref light(Containers::StringView)
*/
Containers::Optional<LightData> light(UnsignedInt id);
@ -916,7 +925,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* otherwise propagates the result from @ref light(UnsignedInt).
* Expects that a file is opened.
*/
Containers::Optional<LightData> light(const std::string& name);
Containers::Optional<LightData> light(Containers::StringView name);
/**
* @brief Camera count
@ -931,9 +940,9 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* if no camera for given name exists
*
* Expects that a file is opened.
* @see @ref cameraName(), @ref camera(const std::string&)
* @see @ref cameraName(), @ref camera(Containers::StringView)
*/
Int cameraForName(const std::string& name);
Int cameraForName(Containers::StringView name);
/**
* @brief Camera name
@ -943,7 +952,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* importer doesn't support camera names, returns an empty string.
* @see @ref cameraForName()
*/
std::string cameraName(UnsignedInt id);
Containers::String cameraName(UnsignedInt id);
/**
* @brief Camera
@ -951,7 +960,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Returns given camera or @ref Containers::NullOpt if importing
* failed. Expects that a file is opened.
* @see @ref camera(const std::string&)
* @see @ref camera(Containers::StringView)
*/
Containers::Optional<CameraData> camera(UnsignedInt id);
@ -965,7 +974,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* @ref Containers::NullOpt, otherwise propagates the result from
* @ref camera(UnsignedInt). Expects that a file is opened.
*/
Containers::Optional<CameraData> camera(const std::string& name);
Containers::Optional<CameraData> camera(Containers::StringView name);
#ifdef MAGNUM_BUILD_DEPRECATED
/**
@ -1114,9 +1123,9 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* @m_since_latest
*
* Expects that a file is opened.
* @see @ref skin2DName(), @ref skin2D(const std::string&)
* @see @ref skin2DName(), @ref skin2D(Containers::StringView)
*/
Int skin2DForName(const std::string& name);
Int skin2DForName(Containers::StringView name);
/**
* @brief Two-dimensional skin name
@ -1127,7 +1136,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* returns an empty string. Expects that a file is opened.
* @see @ref skin2DForName()
*/
std::string skin2DName(UnsignedInt id);
Containers::String skin2DName(UnsignedInt id);
/**
* @brief Two-dimensional skin
@ -1136,7 +1145,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Returns given skin or @ref Containers::NullOpt if importing failed.
* Expects that a file is opened.
* @see @ref skin2D(const std::string&)
* @see @ref skin2D(Containers::StringView)
*/
Containers::Optional<SkinData2D> skin2D(UnsignedInt id);
@ -1150,7 +1159,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* @ref Containers::NullOpt, otherwise propagates the result from
* @ref skin2D(UnsignedInt). Expects that a file is opened.
*/
Containers::Optional<SkinData2D> skin2D(const std::string& name);
Containers::Optional<SkinData2D> skin2D(Containers::StringView name);
/**
* @brief Three-dimensional skin count
@ -1167,9 +1176,9 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* @m_since_latest
*
* Expects that a file is opened.
* @see @ref skin3DName(), @ref skin3D(const std::string&)
* @see @ref skin3DName(), @ref skin3D(Containers::StringView)
*/
Int skin3DForName(const std::string& name);
Int skin3DForName(Containers::StringView name);
/**
* @brief Three-dimensional skin name
@ -1180,7 +1189,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* returns an empty string. Expects that a file is opened.
* @see @ref skin3DForName()
*/
std::string skin3DName(UnsignedInt id);
Containers::String skin3DName(UnsignedInt id);
/**
* @brief Three-dimensional skin
@ -1189,7 +1198,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Returns given skin or @ref Containers::NullOpt if importing failed.
* Expects that a file is opened.
* @see @ref skin3D(const std::string&)
* @see @ref skin3D(Containers::StringView)
*/
Containers::Optional<SkinData3D> skin3D(UnsignedInt id);
@ -1203,7 +1212,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* @ref Containers::NullOpt, otherwise propagates the result from
* @ref skin3D(UnsignedInt). Expects that a file is opened.
*/
Containers::Optional<SkinData3D> skin3D(const std::string& name);
Containers::Optional<SkinData3D> skin3D(Containers::StringView name);
/**
* @brief Mesh count
@ -1231,9 +1240,9 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* @m_since{2020,06}
*
* Expects that a file is opened.
* @see @ref meshName(), @ref mesh(const std::string&, UnsignedInt)
* @see @ref meshName(), @ref mesh(Containers::StringView, UnsignedInt)
*/
Int meshForName(const std::string& name);
Int meshForName(Containers::StringView name);
/**
* @brief Mesh name
@ -1244,7 +1253,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* returns an empty string. Expects that a file is opened.
* @see @ref meshForName()
*/
std::string meshName(UnsignedInt id);
Containers::String meshName(UnsignedInt id);
/**
* @brief Mesh
@ -1257,7 +1266,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* largely left as importer-specific --- for example allowing access to
* per-instance, per-face or per-edge data. Expects that a file is
* opened.
* @see @ref mesh(const std::string&, UnsignedInt),
* @see @ref mesh(Containers::StringView, UnsignedInt),
* @ref MeshPrimitive::Instances, @ref MeshPrimitive::Faces,
* @ref MeshPrimitive::Edges
*/
@ -1273,7 +1282,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* @ref Containers::NullOpt, otherwise propagates the result from
* @ref mesh(UnsignedInt, UnsignedInt). Expects that a file is opened.
*/
Containers::Optional<MeshData> mesh(const std::string& name, UnsignedInt level = 0);
Containers::Optional<MeshData> mesh(Containers::StringView name, UnsignedInt level = 0);
/**
* @brief Mesh attribute for given name
@ -1286,7 +1295,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* see documentation of a particular importer for more information.
* @see @ref isMeshAttributeCustom()
*/
MeshAttribute meshAttributeForName(const std::string& name);
MeshAttribute meshAttributeForName(Containers::StringView name);
/**
* @brief String name for given custom mesh attribute
@ -1301,7 +1310,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* particular importer for more information.
* @see @ref isMeshAttributeCustom()
*/
std::string meshAttributeName(MeshAttribute name);
Containers::String meshAttributeName(MeshAttribute name);
#ifdef MAGNUM_BUILD_DEPRECATED
/**
@ -1400,7 +1409,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* Expects that a file is opened.
* @see @ref materialName()
*/
Int materialForName(const std::string& name);
Int materialForName(Containers::StringView name);
/**
* @brief Material name
@ -1408,9 +1417,9 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* If the material has no name or the importer doesn't support material
* names, returns an empty string. Expects that a file is opened.
* @see @ref materialForName(), @ref material(const std::string&)
* @see @ref materialForName(), @ref material(Containers::StringView)
*/
std::string materialName(UnsignedInt id);
Containers::String materialName(UnsignedInt id);
/**
* @brief Material
@ -1418,7 +1427,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Returns given material or @ref Containers::NullOpt if importing
* failed. Expects that a file is opened.
* @see @ref material(const std::string&)
* @see @ref material(Containers::StringView)
*/
#if !defined(MAGNUM_BUILD_DEPRECATED) || defined(DOXYGEN_GENERATING_OUTPUT)
Containers::Optional<MaterialData>
@ -1442,7 +1451,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
#else
Implementation::OptionalButAlsoPointer<MaterialData>
#endif
material(const std::string& name);
material(Containers::StringView name);
/**
* @brief Texture count
@ -1457,9 +1466,9 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* @cpp -1 @ce if no texture for given name exists
*
* Expects that a file is opened.
* @see @ref textureName(), @ref texture(const std::string&)
* @see @ref textureName(), @ref texture(Containers::StringView)
*/
Int textureForName(const std::string& name);
Int textureForName(Containers::StringView name);
/**
* @brief Texture name
@ -1469,7 +1478,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* names, returns an empty string. Expects that a file is opened.
* @see @ref textureForName()
*/
std::string textureName(UnsignedInt id);
Containers::String textureName(UnsignedInt id);
/**
* @brief Texture
@ -1477,7 +1486,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Returns given texture or @ref Containers::NullOpt if importing
* failed. Expects that a file is opened.
* @see @ref texture(const std::string&)
* @see @ref texture(Containers::StringView)
*/
Containers::Optional<TextureData> texture(UnsignedInt id);
@ -1491,7 +1500,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* @ref Containers::NullOpt, otherwise propagates the result from
* @ref texture(UnsignedInt). Expects that a file is opened.
*/
Containers::Optional<TextureData> texture(const std::string& name);
Containers::Optional<TextureData> texture(Containers::StringView name);
/**
* @brief One-dimensional image count
@ -1517,9 +1526,9 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* if no image for given name exists
*
* Expects that a file is opened.
* @see @ref image1DName(), @ref image1D(const std::string&, UnsignedInt)
* @see @ref image1DName(), @ref image1D(Containers::StringView, UnsignedInt)
*/
Int image1DForName(const std::string& name);
Int image1DForName(Containers::StringView name);
/**
* @brief One-dimensional image name
@ -1529,7 +1538,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* names, returns an empty string. Expects that a file is opened.
* @see @ref image1DForName()
*/
std::string image1DName(UnsignedInt id);
Containers::String image1DName(UnsignedInt id);
/**
* @brief One-dimensional image
@ -1538,7 +1547,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Returns given image or @ref Containers::NullOpt if importing failed.
* Expects that a file is opened.
* @see @ref image1D(const std::string&, UnsignedInt)
* @see @ref image1D(Containers::StringView, UnsignedInt)
*/
Containers::Optional<ImageData1D> image1D(UnsignedInt id, UnsignedInt level = 0);
@ -1553,7 +1562,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* @ref image1D(UnsignedInt, UnsignedInt). Expects that a file is
* opened.
*/
Containers::Optional<ImageData1D> image1D(const std::string& name, UnsignedInt level = 0);
Containers::Optional<ImageData1D> image1D(Containers::StringView name, UnsignedInt level = 0);
/**
* @brief Two-dimensional image count
@ -1579,9 +1588,9 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* if no image for given name exists
*
* Expects that a file is opened.
* @see @ref image2DName(), @ref image2D(const std::string&, UnsignedInt)
* @see @ref image2DName(), @ref image2D(Containers::StringView, UnsignedInt)
*/
Int image2DForName(const std::string& name);
Int image2DForName(Containers::StringView name);
/**
* @brief Two-dimensional image name
@ -1591,7 +1600,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* names, returns an empty string. Expects that a file is opened.
* @see @ref image2DForName()
*/
std::string image2DName(UnsignedInt id);
Containers::String image2DName(UnsignedInt id);
/**
* @brief Two-dimensional image
@ -1600,7 +1609,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Returns given image or @ref Containers::NullOpt if importing failed.
* Expects that a file is opened.
* @see @ref image2D(const std::string&, UnsignedInt)
* @see @ref image2D(Containers::StringView, UnsignedInt)
*/
Containers::Optional<ImageData2D> image2D(UnsignedInt id, UnsignedInt level = 0);
@ -1615,7 +1624,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* @ref image2D(UnsignedInt, UnsignedInt). Expects that a file is
* opened.
*/
Containers::Optional<ImageData2D> image2D(const std::string& name, UnsignedInt level = 0);
Containers::Optional<ImageData2D> image2D(Containers::StringView name, UnsignedInt level = 0);
/**
* @brief Three-dimensional image count
@ -1641,9 +1650,9 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* if no image for given name exists
*
* Expects that a file is opened.
* @see @ref image3DName(), @ref image3D(const std::string&, UnsignedInt)
* @see @ref image3DName(), @ref image3D(Containers::StringView, UnsignedInt)
*/
Int image3DForName(const std::string& name);
Int image3DForName(Containers::StringView name);
/**
* @brief Three-dimensional image name
@ -1653,7 +1662,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* names, returns an empty string. Expects that a file is opened.
* @see @ref image3DForName()
*/
std::string image3DName(UnsignedInt id);
Containers::String image3DName(UnsignedInt id);
/**
* @brief Three-dimensional image
@ -1662,7 +1671,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Returns given image or @ref Containers::NullOpt if importing failed.
* Expects that a file is opened.
* @see @ref image3D(const std::string&, UnsignedInt)
* @see @ref image3D(Containers::StringView, UnsignedInt)
*/
Containers::Optional<ImageData3D> image3D(UnsignedInt id, UnsignedInt level = 0);
@ -1677,7 +1686,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* @ref image3D(UnsignedInt, UnsignedInt). Expects that a file is
* opened.
*/
Containers::Optional<ImageData3D> image3D(const std::string& name, UnsignedInt level = 0);
Containers::Optional<ImageData3D> image3D(Containers::StringView name, UnsignedInt level = 0);
/* Since 1.8.17, the original short-hand group closing doesn't work
anymore. FFS. */
@ -1718,7 +1727,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* supported --- instead, file is loaded though the callback and data
* passed through to @ref doOpenData().
*/
virtual void doOpenFile(const std::string& filename);
virtual void doOpenFile(Containers::StringView filename);
private:
/** @brief Implementation for @ref features() */
@ -1808,7 +1817,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
#endif
/** @brief Implementation for @ref openState() */
virtual void doOpenState(const void* state, const std::string& filePath);
virtual void doOpenState(const void* state, Containers::StringView filePath);
/** @brief Implementation for @ref close() */
virtual void doClose() = 0;
@ -1848,28 +1857,28 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Default implementation returns @cpp -1 @ce.
*/
virtual Int doSceneForName(const std::string& name);
virtual Int doSceneForName(Containers::StringView name);
/**
* @brief Implementation for @ref objectForName()
*
* Default implementation returns @cpp -1 @ce.
*/
virtual Long doObjectForName(const std::string& name);
virtual Long doObjectForName(Containers::StringView name);
/**
* @brief Implementation for @ref sceneName()
*
* Default implementation returns an empty string.
*/
virtual std::string doSceneName(UnsignedInt id);
virtual Containers::String doSceneName(UnsignedInt id);
/**
* @brief Implementation for @ref objectName()
*
* Default implementation returns an empty string.
*/
virtual std::string doObjectName(UnsignedLong id);
virtual Containers::String doObjectName(UnsignedLong id);
/** @brief Implementation for @ref scene() */
virtual Containers::Optional<SceneData> doScene(UnsignedInt id);
@ -1880,7 +1889,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Default implementation returns an invalid (zero) value.
*/
virtual SceneField doSceneFieldForName(const std::string& name);
virtual SceneField doSceneFieldForName(Containers::StringView name);
/**
* @brief Implementation for @ref sceneFieldName()
@ -1889,7 +1898,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* Receives the custom ID extracted via @ref sceneFieldCustom(SceneField).
* Default implementation returns an empty string.
*/
virtual std::string doSceneFieldName(UnsignedInt name);
virtual Containers::String doSceneFieldName(UnsignedInt name);
/**
* @brief Implementation for @ref animationCount()
@ -1906,14 +1915,14 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Default implementation returns @cpp -1 @ce.
*/
virtual Int doAnimationForName(const std::string& name);
virtual Int doAnimationForName(Containers::StringView name);
/**
* @brief Implementation for @ref animationName()
*
* Default implementation returns an empty string.
*/
virtual std::string doAnimationName(UnsignedInt id);
virtual Containers::String doAnimationName(UnsignedInt id);
/** @brief Implementation for @ref animation() */
virtual Containers::Optional<AnimationData> doAnimation(UnsignedInt id);
@ -1933,14 +1942,14 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Default implementation returns @cpp -1 @ce.
*/
virtual Int doLightForName(const std::string& name);
virtual Int doLightForName(Containers::StringView name);
/**
* @brief Implementation for @ref lightName()
*
* Default implementation returns an empty string.
*/
virtual std::string doLightName(UnsignedInt id);
virtual Containers::String doLightName(UnsignedInt id);
/** @brief Implementation for @ref light() */
virtual Containers::Optional<LightData> doLight(UnsignedInt id);
@ -1960,14 +1969,14 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Default implementation returns @cpp -1 @ce.
*/
virtual Int doCameraForName(const std::string& name);
virtual Int doCameraForName(Containers::StringView name);
/**
* @brief Implementation for @ref cameraName()
*
* Default implementation returns an empty string.
*/
virtual std::string doCameraName(UnsignedInt id);
virtual Containers::String doCameraName(UnsignedInt id);
/** @brief Implementation for @ref camera() */
virtual Containers::Optional<CameraData> doCamera(UnsignedInt id);
@ -2105,7 +2114,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Default implementation returns @cpp -1 @ce.
*/
virtual Int doSkin2DForName(const std::string& name);
virtual Int doSkin2DForName(Containers::StringView name);
/**
* @brief Implementation for @ref skin2DName()
@ -2113,7 +2122,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Default implementation returns an empty string.
*/
virtual std::string doSkin2DName(UnsignedInt id);
virtual Containers::String doSkin2DName(UnsignedInt id);
/**
* @brief Implementation for @ref skin2D()
@ -2138,7 +2147,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Default implementation returns @cpp -1 @ce.
*/
virtual Int doSkin3DForName(const std::string& name);
virtual Int doSkin3DForName(Containers::StringView name);
/**
* @brief Implementation for @ref skin3DName()
@ -2146,7 +2155,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Default implementation returns an empty string.
*/
virtual std::string doSkin3DName(UnsignedInt id);
virtual Containers::String doSkin3DName(UnsignedInt id);
/**
* @brief Implementation for @ref skin3D()
@ -2185,7 +2194,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Default implementation returns @cpp -1 @ce.
*/
virtual Int doMeshForName(const std::string& name);
virtual Int doMeshForName(Containers::StringView name);
/**
* @brief Implementation for @ref meshName()
@ -2193,7 +2202,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Default implementation returns an empty string.
*/
virtual std::string doMeshName(UnsignedInt id);
virtual Containers::String doMeshName(UnsignedInt id);
/**
* @brief Implementation for @ref mesh()
@ -2207,7 +2216,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Default implementation returns an invalid (zero) value.
*/
virtual MeshAttribute doMeshAttributeForName(const std::string& name);
virtual MeshAttribute doMeshAttributeForName(Containers::StringView name);
/**
* @brief Implementation for @ref meshAttributeName()
@ -2216,7 +2225,7 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
* Receives the custom ID extracted via @ref meshAttributeCustom(MeshAttribute).
* Default implementation returns an empty string.
*/
virtual std::string doMeshAttributeName(UnsignedShort name);
virtual Containers::String doMeshAttributeName(UnsignedShort name);
#ifdef MAGNUM_BUILD_DEPRECATED
/**
@ -2346,14 +2355,14 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Default implementation returns @cpp -1 @ce.
*/
virtual Int doMaterialForName(const std::string& name);
virtual Int doMaterialForName(Containers::StringView name);
/**
* @brief Implementation for @ref materialName()
*
* Default implementation returns an empty string.
*/
virtual std::string doMaterialName(UnsignedInt id);
virtual Containers::String doMaterialName(UnsignedInt id);
/** @brief Implementation for @ref material() */
virtual Containers::Optional<MaterialData> doMaterial(UnsignedInt id);
@ -2373,14 +2382,14 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Default implementation returns @cpp -1 @ce.
*/
virtual Int doTextureForName(const std::string& name);
virtual Int doTextureForName(Containers::StringView name);
/**
* @brief Implementation for @ref textureName()
*
* Default implementation returns an empty string.
*/
virtual std::string doTextureName(UnsignedInt id);
virtual Containers::String doTextureName(UnsignedInt id);
/** @brief Implementation for @ref texture() */
virtual Containers::Optional<TextureData> doTexture(UnsignedInt id);
@ -2409,14 +2418,14 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Default implementation returns @cpp -1 @ce.
*/
virtual Int doImage1DForName(const std::string& name);
virtual Int doImage1DForName(Containers::StringView name);
/**
* @brief Implementation for @ref image1DName()
*
* Default implementation returns an empty string.
*/
virtual std::string doImage1DName(UnsignedInt id);
virtual Containers::String doImage1DName(UnsignedInt id);
/** @brief Implementation for @ref image1D() */
virtual Containers::Optional<ImageData1D> doImage1D(UnsignedInt id, UnsignedInt level);
@ -2453,14 +2462,14 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Default implementation returns @cpp -1 @ce.
*/
virtual Int doImage2DForName(const std::string& name);
virtual Int doImage2DForName(Containers::StringView name);
/**
* @brief Implementation for @ref image2DName()
*
* Default implementation returns an empty string.
*/
virtual std::string doImage2DName(UnsignedInt id);
virtual Containers::String doImage2DName(UnsignedInt id);
/** @brief Implementation for @ref image2D() */
virtual Containers::Optional<ImageData2D> doImage2D(UnsignedInt id, UnsignedInt level);
@ -2489,14 +2498,14 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi
*
* Default implementation returns @cpp -1 @ce.
*/
virtual Int doImage3DForName(const std::string& name);
virtual Int doImage3DForName(Containers::StringView name);
/**
* @brief Implementation for @ref image3DName()
*
* Default implementation returns an empty string.
*/
virtual std::string doImage3DName(UnsignedInt id);
virtual Containers::String doImage3DName(UnsignedInt id);
/** @brief Implementation for @ref image3D() */
virtual Containers::Optional<ImageData3D> doImage3D(UnsignedInt id, UnsignedInt level);

534
src/Magnum/Trade/Test/AbstractImporterTest.cpp

File diff suppressed because it is too large Load Diff

4
src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp

@ -61,7 +61,7 @@ void AnyImageImporter::doClose() {
_in = nullptr;
}
void AnyImageImporter::doOpenFile(const std::string& filename) {
void AnyImageImporter::doOpenFile(const Containers::StringView filename) {
CORRADE_INTERNAL_ASSERT(manager());
/* We don't detect any double extensions yet, so we can normalize just the
@ -291,4 +291,4 @@ Containers::Optional<ImageData3D> AnyImageImporter::doImage3D(const UnsignedInt
}}
CORRADE_PLUGIN_REGISTER(AnyImageImporter, Magnum::Trade::AnyImageImporter,
"cz.mosra.magnum.Trade.AbstractImporter/0.4")
"cz.mosra.magnum.Trade.AbstractImporter/0.5")

2
src/MagnumPlugins/AnyImageImporter/AnyImageImporter.h

@ -179,7 +179,7 @@ class MAGNUM_ANYIMAGEIMPORTER_EXPORT AnyImageImporter: public AbstractImporter {
MAGNUM_ANYIMAGEIMPORTER_LOCAL ImporterFeatures doFeatures() const override;
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 doOpenFile(Containers::StringView filename) override;
MAGNUM_ANYIMAGEIMPORTER_LOCAL void doOpenData(Containers::Array<char>&& data, DataFlags dataFlags) override;
MAGNUM_ANYIMAGEIMPORTER_LOCAL UnsignedInt doImage1DCount() const override;

60
src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp

@ -71,7 +71,7 @@ void AnySceneImporter::doClose() {
_in = nullptr;
}
void AnySceneImporter::doOpenFile(const std::string& filename) {
void AnySceneImporter::doOpenFile(const Containers::StringView filename) {
CORRADE_INTERNAL_ASSERT(manager());
/** @todo lowercase only the extension, once Directory::split() is done */
@ -171,28 +171,28 @@ void AnySceneImporter::doOpenFile(const std::string& filename) {
}
UnsignedInt AnySceneImporter::doAnimationCount() const { return _in->animationCount(); }
Int AnySceneImporter::doAnimationForName(const std::string& name) { return _in->animationForName(name); }
std::string AnySceneImporter::doAnimationName(const UnsignedInt id) { return _in->animationName(id); }
Int AnySceneImporter::doAnimationForName(const Containers::StringView name) { return _in->animationForName(name); }
Containers::String AnySceneImporter::doAnimationName(const UnsignedInt id) { return _in->animationName(id); }
Containers::Optional<AnimationData> AnySceneImporter::doAnimation(const UnsignedInt id) { return _in->animation(id); }
Int AnySceneImporter::doDefaultScene() const { return _in->defaultScene(); }
UnsignedInt AnySceneImporter::doSceneCount() const { return _in->sceneCount(); }
UnsignedLong AnySceneImporter::doObjectCount() const { return _in->objectCount(); }
Int AnySceneImporter::doSceneForName(const std::string& name) { return _in->sceneForName(name); }
Long AnySceneImporter::doObjectForName(const std::string& name) { return _in->objectForName(name); }
std::string AnySceneImporter::doSceneName(const UnsignedInt id) { return _in->sceneName(id); }
std::string AnySceneImporter::doObjectName(const UnsignedLong id) { return _in->objectName(id); }
Int AnySceneImporter::doSceneForName(const Containers::StringView name) { return _in->sceneForName(name); }
Long AnySceneImporter::doObjectForName(const Containers::StringView name) { return _in->objectForName(name); }
Containers::String AnySceneImporter::doSceneName(const UnsignedInt id) { return _in->sceneName(id); }
Containers::String AnySceneImporter::doObjectName(const UnsignedLong id) { return _in->objectName(id); }
Containers::Optional<SceneData> AnySceneImporter::doScene(const UnsignedInt id) { return _in->scene(id); }
UnsignedInt AnySceneImporter::doLightCount() const { return _in->lightCount(); }
Int AnySceneImporter::doLightForName(const std::string& name) { return _in->lightForName(name); }
std::string AnySceneImporter::doLightName(const UnsignedInt id) { return _in->lightName(id); }
Int AnySceneImporter::doLightForName(const Containers::StringView name) { return _in->lightForName(name); }
Containers::String AnySceneImporter::doLightName(const UnsignedInt id) { return _in->lightName(id); }
Containers::Optional<LightData> AnySceneImporter::doLight(const UnsignedInt id) { return _in->light(id); }
UnsignedInt AnySceneImporter::doCameraCount() const { return _in->cameraCount(); }
Int AnySceneImporter::doCameraForName(const std::string& name) { return _in->cameraForName(name); }
std::string AnySceneImporter::doCameraName(const UnsignedInt id) { return _in->cameraName(id); }
Int AnySceneImporter::doCameraForName(const Containers::StringView name) { return _in->cameraForName(name); }
Containers::String AnySceneImporter::doCameraName(const UnsignedInt id) { return _in->cameraName(id); }
Containers::Optional<CameraData> AnySceneImporter::doCamera(const UnsignedInt id) { return _in->camera(id); }
#ifdef MAGNUM_BUILD_DEPRECATED
@ -210,22 +210,22 @@ CORRADE_IGNORE_DEPRECATED_POP
#endif
UnsignedInt AnySceneImporter::doSkin2DCount() const { return _in->skin2DCount(); }
Int AnySceneImporter::doSkin2DForName(const std::string& name) { return _in->skin2DForName(name); }
std::string AnySceneImporter::doSkin2DName(const UnsignedInt id) { return _in->skin2DName(id); }
Int AnySceneImporter::doSkin2DForName(const Containers::StringView name) { return _in->skin2DForName(name); }
Containers::String AnySceneImporter::doSkin2DName(const UnsignedInt id) { return _in->skin2DName(id); }
Containers::Optional<SkinData2D> AnySceneImporter::doSkin2D(const UnsignedInt id) { return _in->skin2D(id); }
UnsignedInt AnySceneImporter::doSkin3DCount() const { return _in->skin3DCount(); }
Int AnySceneImporter::doSkin3DForName(const std::string& name) { return _in->skin3DForName(name); }
std::string AnySceneImporter::doSkin3DName(const UnsignedInt id) { return _in->skin3DName(id); }
Int AnySceneImporter::doSkin3DForName(const Containers::StringView name) { return _in->skin3DForName(name); }
Containers::String AnySceneImporter::doSkin3DName(const UnsignedInt id) { return _in->skin3DName(id); }
Containers::Optional<SkinData3D> AnySceneImporter::doSkin3D(const UnsignedInt id) { return _in->skin3D(id); }
UnsignedInt AnySceneImporter::doMeshCount() const { return _in->meshCount(); }
Int AnySceneImporter::doMeshForName(const std::string& name) { return _in->meshForName(name); }
std::string AnySceneImporter::doMeshName(const UnsignedInt id) { return _in->meshName(id); }
Int AnySceneImporter::doMeshForName(const Containers::StringView name) { return _in->meshForName(name); }
Containers::String AnySceneImporter::doMeshName(const UnsignedInt id) { return _in->meshName(id); }
Containers::Optional<MeshData> AnySceneImporter::doMesh(const UnsignedInt id, const UnsignedInt level) { return _in->mesh(id, level); }
MeshAttribute AnySceneImporter::doMeshAttributeForName(const std::string& name) { return _in->meshAttributeForName(name); }
std::string AnySceneImporter::doMeshAttributeName(const UnsignedShort id) { return _in->meshAttributeName(meshAttributeCustom(id)); }
MeshAttribute AnySceneImporter::doMeshAttributeForName(const Containers::StringView name) { return _in->meshAttributeForName(name); }
Containers::String AnySceneImporter::doMeshAttributeName(const UnsignedShort id) { return _in->meshAttributeName(meshAttributeCustom(id)); }
#ifdef MAGNUM_BUILD_DEPRECATED
CORRADE_IGNORE_DEPRECATED_PUSH
@ -242,34 +242,34 @@ CORRADE_IGNORE_DEPRECATED_POP
#endif
UnsignedInt AnySceneImporter::doMaterialCount() const { return _in->materialCount(); }
Int AnySceneImporter::doMaterialForName(const std::string& name) { return _in->materialForName(name); }
std::string AnySceneImporter::doMaterialName(const UnsignedInt id) { return _in->materialName(id); }
Int AnySceneImporter::doMaterialForName(const Containers::StringView name) { return _in->materialForName(name); }
Containers::String AnySceneImporter::doMaterialName(const UnsignedInt id) { return _in->materialName(id); }
Containers::Optional<MaterialData> AnySceneImporter::doMaterial(const UnsignedInt id) { return _in->material(id); }
UnsignedInt AnySceneImporter::doTextureCount() const { return _in->textureCount(); }
Int AnySceneImporter::doTextureForName(const std::string& name) { return _in->textureForName(name); }
std::string AnySceneImporter::doTextureName(const UnsignedInt id) { return _in->textureName(id); }
Int AnySceneImporter::doTextureForName(const Containers::StringView name) { return _in->textureForName(name); }
Containers::String AnySceneImporter::doTextureName(const UnsignedInt id) { return _in->textureName(id); }
Containers::Optional<TextureData> AnySceneImporter::doTexture(const UnsignedInt id) { return _in->texture(id); }
UnsignedInt AnySceneImporter::doImage1DCount() const { return _in->image1DCount(); }
UnsignedInt AnySceneImporter::doImage1DLevelCount(UnsignedInt id) { return _in->image1DLevelCount(id); }
Int AnySceneImporter::doImage1DForName(const std::string& name) { return _in->image1DForName(name); }
std::string AnySceneImporter::doImage1DName(const UnsignedInt id) { return _in->image1DName(id); }
Int AnySceneImporter::doImage1DForName(const Containers::StringView name) { return _in->image1DForName(name); }
Containers::String AnySceneImporter::doImage1DName(const UnsignedInt id) { return _in->image1DName(id); }
Containers::Optional<ImageData1D> AnySceneImporter::doImage1D(const UnsignedInt id, const UnsignedInt level) { return _in->image1D(id, level); }
UnsignedInt AnySceneImporter::doImage2DCount() const { return _in->image2DCount(); }
UnsignedInt AnySceneImporter::doImage2DLevelCount(UnsignedInt id) { return _in->image2DLevelCount(id); }
Int AnySceneImporter::doImage2DForName(const std::string& name) { return _in->image2DForName(name); }
std::string AnySceneImporter::doImage2DName(const UnsignedInt id) { return _in->image2DName(id); }
Int AnySceneImporter::doImage2DForName(const Containers::StringView name) { return _in->image2DForName(name); }
Containers::String AnySceneImporter::doImage2DName(const UnsignedInt id) { return _in->image2DName(id); }
Containers::Optional<ImageData2D> AnySceneImporter::doImage2D(const UnsignedInt id, const UnsignedInt level) { return _in->image2D(id, level); }
UnsignedInt AnySceneImporter::doImage3DCount() const { return _in->image3DCount(); }
UnsignedInt AnySceneImporter::doImage3DLevelCount(UnsignedInt id) { return _in->image3DLevelCount(id); }
Int AnySceneImporter::doImage3DForName(const std::string& name) { return _in->image3DForName(name); }
std::string AnySceneImporter::doImage3DName(const UnsignedInt id) { return _in->image3DName(id); }
Int AnySceneImporter::doImage3DForName(const Containers::StringView name) { return _in->image3DForName(name); }
Containers::String AnySceneImporter::doImage3DName(const UnsignedInt id) { return _in->image3DName(id); }
Containers::Optional<ImageData3D> AnySceneImporter::doImage3D(const UnsignedInt id, const UnsignedInt level) { return _in->image3D(id, level); }
}}
CORRADE_PLUGIN_REGISTER(AnySceneImporter, Magnum::Trade::AnySceneImporter,
"cz.mosra.magnum.Trade.AbstractImporter/0.4")
"cz.mosra.magnum.Trade.AbstractImporter/0.5")

58
src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h

@ -159,31 +159,31 @@ class MAGNUM_ANYSCENEIMPORTER_EXPORT AnySceneImporter: public AbstractImporter {
MAGNUM_ANYSCENEIMPORTER_LOCAL ImporterFeatures doFeatures() const override;
MAGNUM_ANYSCENEIMPORTER_LOCAL bool doIsOpened() const override;
MAGNUM_ANYSCENEIMPORTER_LOCAL void doClose() override;
MAGNUM_ANYSCENEIMPORTER_LOCAL void doOpenFile(const std::string& filename) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL void doOpenFile(Containers::StringView filename) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doAnimationCount() const override;
MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doAnimationName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doAnimationForName(const std::string& name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doAnimationName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doAnimationForName(Containers::StringView name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional<AnimationData> doAnimation(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doDefaultScene() const override;
MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doSceneCount() const override;
MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedLong doObjectCount() const override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doSceneForName(const std::string& name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Long doObjectForName(const std::string& name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doSceneName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doObjectName(UnsignedLong id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doSceneForName(Containers::StringView name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Long doObjectForName(Containers::StringView name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doSceneName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doObjectName(UnsignedLong id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional<SceneData> doScene(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doLightCount() const override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doLightForName(const std::string& name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doLightName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doLightForName(Containers::StringView name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doLightName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional<LightData> doLight(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doCameraCount() const override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doCameraForName(const std::string& name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doCameraName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doCameraForName(Containers::StringView name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doCameraName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional<CameraData> doCamera(UnsignedInt id) override;
#ifdef MAGNUM_BUILD_DEPRECATED
@ -203,22 +203,22 @@ class MAGNUM_ANYSCENEIMPORTER_EXPORT AnySceneImporter: public AbstractImporter {
#endif
MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doSkin2DCount() const override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doSkin2DForName(const std::string& name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doSkin2DName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doSkin2DForName(Containers::StringView name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doSkin2DName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional<SkinData2D> doSkin2D(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doSkin3DCount() const override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doSkin3DForName(const std::string& name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doSkin3DName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doSkin3DForName(Containers::StringView name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doSkin3DName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional<SkinData3D> doSkin3D(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doMeshCount() const override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doMeshForName(const std::string& name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doMeshName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doMeshForName(Containers::StringView name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doMeshName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional<MeshData> doMesh(UnsignedInt id, UnsignedInt level) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL MeshAttribute doMeshAttributeForName(const std::string& name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doMeshAttributeName(UnsignedShort id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL MeshAttribute doMeshAttributeForName(Containers::StringView name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doMeshAttributeName(UnsignedShort id) override;
#ifdef MAGNUM_BUILD_DEPRECATED
MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doMesh2DCount() const override;
@ -237,31 +237,31 @@ class MAGNUM_ANYSCENEIMPORTER_EXPORT AnySceneImporter: public AbstractImporter {
#endif
MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doMaterialCount() const override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doMaterialForName(const std::string& name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doMaterialName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doMaterialForName(Containers::StringView name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doMaterialName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional<MaterialData> doMaterial(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doTextureCount() const override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doTextureForName(const std::string& name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doTextureName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doTextureForName(Containers::StringView name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doTextureName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional<TextureData> doTexture(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doImage1DCount() const override;
MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doImage1DLevelCount(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doImage1DForName(const std::string& name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doImage1DName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doImage1DForName(Containers::StringView name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doImage1DName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional<ImageData1D> doImage1D(UnsignedInt id, UnsignedInt level) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doImage2DCount() const override;
MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doImage2DLevelCount(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doImage2DForName(const std::string& name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doImage2DName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doImage2DForName(Containers::StringView name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doImage2DName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional<ImageData2D> doImage2D(UnsignedInt id, UnsignedInt level) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doImage3DCount() const override;
MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doImage3DLevelCount(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doImage3DForName(const std::string& name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doImage3DName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doImage3DForName(Containers::StringView name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doImage3DName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional<ImageData3D> doImage3D(UnsignedInt id, UnsignedInt level) override;
Containers::Pointer<AbstractImporter> _in;

10
src/MagnumPlugins/ObjImporter/ObjImporter.cpp

@ -32,6 +32,8 @@
#include <Corrade/Containers/GrowableArray.h>
#include <Corrade/Containers/Optional.h>
#include <Corrade/Containers/StridedArrayView.h>
#include <Corrade/Containers/String.h>
#include <Corrade/Containers/StringStl.h> /** @todo remove once iostream is dropped */
#include <Corrade/Utility/DebugStl.h>
#include <Corrade/Utility/String.h>
@ -94,7 +96,7 @@ void ObjImporter::doClose() { _file.reset(); }
bool ObjImporter::doIsOpened() const { return !!_file; }
void ObjImporter::doOpenFile(const std::string& filename) {
void ObjImporter::doOpenFile(const Containers::StringView filename) {
Containers::Pointer<std::istream> in{new std::ifstream{filename, std::ios::binary}};
if(!in->good()) {
Error() << "Trade::ObjImporter::openFile(): cannot open file" << filename;
@ -209,12 +211,12 @@ void ObjImporter::parseMeshNames() {
UnsignedInt ObjImporter::doMeshCount() const { return _file->meshes.size(); }
Int ObjImporter::doMeshForName(const std::string& name) {
Int ObjImporter::doMeshForName(const Containers::StringView name) {
const auto it = _file->meshesForName.find(name);
return it == _file->meshesForName.end() ? -1 : it->second;
}
std::string ObjImporter::doMeshName(UnsignedInt id) {
Containers::String ObjImporter::doMeshName(UnsignedInt id) {
return _file->meshNames[id];
}
@ -487,4 +489,4 @@ Containers::Optional<MeshData> ObjImporter::doMesh(UnsignedInt id, UnsignedInt)
}}
CORRADE_PLUGIN_REGISTER(ObjImporter, Magnum::Trade::ObjImporter,
"cz.mosra.magnum.Trade.AbstractImporter/0.4")
"cz.mosra.magnum.Trade.AbstractImporter/0.5")

6
src/MagnumPlugins/ObjImporter/ObjImporter.h

@ -116,12 +116,12 @@ class MAGNUM_OBJIMPORTER_EXPORT ObjImporter: public AbstractImporter {
MAGNUM_OBJIMPORTER_LOCAL bool doIsOpened() const override;
MAGNUM_OBJIMPORTER_LOCAL void doOpenData(Containers::Array<char>&& data, DataFlags dataFlags) override;
MAGNUM_OBJIMPORTER_LOCAL void doOpenFile(const std::string& filename) override;
MAGNUM_OBJIMPORTER_LOCAL void doOpenFile(Containers::StringView filename) override;
MAGNUM_OBJIMPORTER_LOCAL void doClose() override;
MAGNUM_OBJIMPORTER_LOCAL UnsignedInt doMeshCount() const override;
MAGNUM_OBJIMPORTER_LOCAL Int doMeshForName(const std::string& name) override;
MAGNUM_OBJIMPORTER_LOCAL std::string doMeshName(UnsignedInt id) override;
MAGNUM_OBJIMPORTER_LOCAL Int doMeshForName(Containers::StringView name) override;
MAGNUM_OBJIMPORTER_LOCAL Containers::String doMeshName(UnsignedInt id) override;
MAGNUM_OBJIMPORTER_LOCAL Containers::Optional<MeshData> doMesh(UnsignedInt id, UnsignedInt level) override;
MAGNUM_OBJIMPORTER_LOCAL void parseMeshNames();

2
src/MagnumPlugins/TgaImporter/TgaImporter.cpp

@ -209,4 +209,4 @@ Containers::Optional<ImageData2D> TgaImporter::doImage2D(UnsignedInt, UnsignedIn
}}
CORRADE_PLUGIN_REGISTER(TgaImporter, Magnum::Trade::TgaImporter,
"cz.mosra.magnum.Trade.AbstractImporter/0.4")
"cz.mosra.magnum.Trade.AbstractImporter/0.5")

Loading…
Cancel
Save