From 7231a48fbfefceb85038739582e6f85581dfab8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 5 Oct 2020 22:39:47 +0200 Subject: [PATCH] Trade,Text: this is a much better example for template file callbacks. --- doc/snippets/MagnumText.cpp | 21 +++++---------------- doc/snippets/MagnumTrade.cpp | 21 +++++---------------- src/Magnum/Text/AbstractFont.h | 4 +++- src/Magnum/Trade/AbstractImporter.h | 4 +++- 4 files changed, 16 insertions(+), 34 deletions(-) diff --git a/doc/snippets/MagnumText.cpp b/doc/snippets/MagnumText.cpp index 9940730f5..3dfd000fa 100644 --- a/doc/snippets/MagnumText.cpp +++ b/doc/snippets/MagnumText.cpp @@ -95,7 +95,7 @@ Containers::Pointer font; /* [AbstractFont-setFileCallback] */ font->setFileCallback([](const std::string& filename, InputFileCallbackPolicy, void*) { - Utility::Resource rs("data"); + Utility::Resource rs{"data"}; return Containers::optional(rs.getRaw(filename)); }); /* [AbstractFont-setFileCallback] */ @@ -104,22 +104,11 @@ font->setFileCallback([](const std::string& filename, { Containers::Pointer font; /* [AbstractFont-setFileCallback-template] */ -struct Data { - std::unordered_map> files; -} data; - +const Utility::Resource rs{"data"}; font->setFileCallback([](const std::string& filename, - InputFileCallbackPolicy, Data& data) - -> Containers::Optional> - { - auto found = data.files.find(filename); - if(found == data.files.end()) { - if(!Utility::Directory::exists(filename)) - return Containers::NullOpt; - found = data.files.emplace(filename, Utility::Directory::read(filename)).first; - } - return Containers::ArrayView{found->second}; - }, data); + InputFileCallbackPolicy, const Utility::Resource& rs) { + return Containers::optional(rs.getRaw(filename)); + }, rs); /* [AbstractFont-setFileCallback-template] */ } diff --git a/doc/snippets/MagnumTrade.cpp b/doc/snippets/MagnumTrade.cpp index 02b96f50d..375d0f9fa 100644 --- a/doc/snippets/MagnumTrade.cpp +++ b/doc/snippets/MagnumTrade.cpp @@ -142,7 +142,7 @@ Containers::Pointer importer; /* [AbstractImporter-setFileCallback] */ importer->setFileCallback([](const std::string& filename, InputFileCallbackPolicy, void*) { - Utility::Resource rs("data"); + Utility::Resource rs{"data"}; return Containers::optional(rs.getRaw(filename)); }); /* [AbstractImporter-setFileCallback] */ @@ -151,22 +151,11 @@ importer->setFileCallback([](const std::string& filename, { Containers::Pointer importer; /* [AbstractImporter-setFileCallback-template] */ -struct Data { - std::unordered_map> files; -} data; - +const Utility::Resource rs{"data"}; importer->setFileCallback([](const std::string& filename, - InputFileCallbackPolicy, Data& data) - -> Containers::Optional> - { - auto found = data.files.find(filename); - if(found == data.files.end()) { - if(!Utility::Directory::exists(filename)) - return Containers::NullOpt; - found = data.files.emplace(filename, Utility::Directory::read(filename)).first; - } - return Containers::ArrayView{found->second}; - }, data); + InputFileCallbackPolicy, const Utility::Resource& rs) { + return Containers::optional(rs.getRaw(filename)); + }, rs); /* [AbstractImporter-setFileCallback-template] */ } diff --git a/src/Magnum/Text/AbstractFont.h b/src/Magnum/Text/AbstractFont.h index cfc3701b6..d61129203 100644 --- a/src/Magnum/Text/AbstractFont.h +++ b/src/Magnum/Text/AbstractFont.h @@ -286,7 +286,9 @@ class MAGNUM_TEXT_EXPORT AbstractFont: public PluginManager::AbstractPlugin { * * Equivalent to calling the above with a lambda wrapper that casts * @cpp void* @ce back to @cpp T* @ce and dereferences it in order to - * pass it to @p callback. Example usage: + * pass it to @p callback. Example usage --- this reuses an existing + * @ref Corrade::Utility::Resource instance to avoid a potentially slow + * resource group lookup every time: * * @snippet MagnumText.cpp AbstractFont-setFileCallback-template * diff --git a/src/Magnum/Trade/AbstractImporter.h b/src/Magnum/Trade/AbstractImporter.h index 36515d9f0..3e9e4351e 100644 --- a/src/Magnum/Trade/AbstractImporter.h +++ b/src/Magnum/Trade/AbstractImporter.h @@ -457,7 +457,9 @@ class MAGNUM_TRADE_EXPORT AbstractImporter: public PluginManager::AbstractManagi * * Equivalent to calling the above with a lambda wrapper that casts * @cpp void* @ce back to @cpp T* @ce and dereferences it in order to - * pass it to @p callback. Example usage: + * pass it to @p callback. Example usage --- this reuses an existing + * @ref Corrade::Utility::Resource instance to avoid a potentially slow + * resource group lookup every time: * * @snippet MagnumTrade.cpp AbstractImporter-setFileCallback-template *