From 33fe70d7b5ff69416ae48235dfd1f6ef389a778f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 26 Mar 2018 09:32:46 +0200 Subject: [PATCH] Simplify the converter utility plugin loading code. Also have different return codes for different kinds of errors. --- src/Magnum/Text/fontconverter.cpp | 12 +++++------- .../TextureTools/distancefieldconverter.cpp | 16 +++++++--------- src/Magnum/Trade/imageconverter.cpp | 14 ++++++-------- 3 files changed, 18 insertions(+), 24 deletions(-) diff --git a/src/Magnum/Text/fontconverter.cpp b/src/Magnum/Text/fontconverter.cpp index 1ec83a6a8..f0d8c3b81 100644 --- a/src/Magnum/Text/fontconverter.cpp +++ b/src/Magnum/Text/fontconverter.cpp @@ -148,20 +148,18 @@ int FontConverter::exec() { /* Load font */ PluginManager::Manager fontManager(Utility::Directory::join(args.value("plugin-dir"), "fonts/")); - if(!(fontManager.load(args.value("font")) & PluginManager::LoadState::Loaded)) - std::exit(1); - std::unique_ptr font = fontManager.instance(args.value("font")); + std::unique_ptr font = fontManager.loadAndInstantiate(args.value("font")); + if(!font) return 1; /* Load font converter */ PluginManager::Manager converterManager(Utility::Directory::join(args.value("plugin-dir"), "fontconverters/")); - if(!(converterManager.load(args.value("converter")) & PluginManager::LoadState::Loaded)) - std::exit(1); - std::unique_ptr converter = converterManager.instance(args.value("converter")); + std::unique_ptr converter = converterManager.loadAndInstantiate(args.value("converter")); + if(!converter) return 2; /* Open font */ if(!font->openFile(args.value("input"), args.value("font-size"))) { Error() << "Cannot open font" << args.value("input"); - std::exit(1); + return 3; } /* Create distance field glyph cache if radius is specified */ diff --git a/src/Magnum/TextureTools/distancefieldconverter.cpp b/src/Magnum/TextureTools/distancefieldconverter.cpp index b71cc56e1..d9586adcc 100644 --- a/src/Magnum/TextureTools/distancefieldconverter.cpp +++ b/src/Magnum/TextureTools/distancefieldconverter.cpp @@ -141,21 +141,19 @@ DistanceFieldConverter::DistanceFieldConverter(const Arguments& arguments): Plat int DistanceFieldConverter::exec() { /* Load importer plugin */ PluginManager::Manager importerManager(Utility::Directory::join(args.value("plugin-dir"), "importers/")); - if(!(importerManager.load(args.value("importer")) & PluginManager::LoadState::Loaded)) - return 1; - std::unique_ptr importer = importerManager.instance(args.value("importer")); + std::unique_ptr importer = importerManager.loadAndInstantiate(args.value("importer")); + if(!importer) return 1; /* Load converter plugin */ PluginManager::Manager converterManager(Utility::Directory::join(args.value("plugin-dir"), "imageconverters/")); - if(!(converterManager.load(args.value("converter")) & PluginManager::LoadState::Loaded)) - return 1; - std::unique_ptr converter = converterManager.instance(args.value("converter")); + std::unique_ptr converter = converterManager.loadAndInstantiate(args.value("converter")); + if(!converter) return 2; /* Open input file */ Containers::Optional image; if(!importer->openFile(args.value("input")) || !(image = importer->image2D(0))) { Error() << "Cannot open file" << args.value("input"); - return 1; + return 3; } /* Decide about internal format */ @@ -165,7 +163,7 @@ int DistanceFieldConverter::exec() { else if(image->format() == PixelFormat::RGBA) internalFormat = TextureFormat::RGBA8; else { Error() << "Unsupported image format" << image->format(); - return 1; + return 4; } /* Input texture */ @@ -191,7 +189,7 @@ int DistanceFieldConverter::exec() { output.image(0, result); if(!converter->exportToFile(result, args.value("output"))) { Error() << "Cannot save file" << args.value("output"); - return 1; + return 5; } return 0; diff --git a/src/Magnum/Trade/imageconverter.cpp b/src/Magnum/Trade/imageconverter.cpp index 3a66c6f7b..dffd9ae5b 100644 --- a/src/Magnum/Trade/imageconverter.cpp +++ b/src/Magnum/Trade/imageconverter.cpp @@ -86,21 +86,19 @@ int main(int argc, char** argv) { /* Load importer plugin */ PluginManager::Manager importerManager(Utility::Directory::join(args.value("plugin-dir"), "importers/")); - if(!(importerManager.load(args.value("importer")) & PluginManager::LoadState::Loaded)) - return 1; - std::unique_ptr importer = importerManager.instance(args.value("importer")); + std::unique_ptr importer = importerManager.loadAndInstantiate(args.value("importer")); + if(!importer) return 1; /* Load converter plugin */ PluginManager::Manager converterManager(Utility::Directory::join(args.value("plugin-dir"), "imageconverters/")); - if(!(converterManager.load(args.value("converter")) & PluginManager::LoadState::Loaded)) - return 1; - std::unique_ptr converter = converterManager.instance(args.value("converter")); + std::unique_ptr converter = converterManager.loadAndInstantiate(args.value("converter")); + if(!converter) return 2; /* Open input file */ Containers::Optional image; if(!importer->openFile(args.value("input")) || !(image = importer->image2D(0))) { Error() << "Cannot open file" << args.value("input"); - return 1; + return 3; } Debug() << "Converting image of size" << image->size() << Debug::nospace << ", format" << image->format() << "and type" << image->type() << "to" << args.value("output"); @@ -108,6 +106,6 @@ int main(int argc, char** argv) { /* Save output file */ if(!converter->exportToFile(*image, args.value("output"))) { Error() << "Cannot save file" << args.value("output"); - return 1; + return 4; } }