Browse Source

Trade,Text: this is a much better example for template file callbacks.

pull/481/head
Vladimír Vondruš 6 years ago
parent
commit
7231a48fbf
  1. 21
      doc/snippets/MagnumText.cpp
  2. 21
      doc/snippets/MagnumTrade.cpp
  3. 4
      src/Magnum/Text/AbstractFont.h
  4. 4
      src/Magnum/Trade/AbstractImporter.h

21
doc/snippets/MagnumText.cpp

@ -95,7 +95,7 @@ Containers::Pointer<Text::AbstractFont> 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<Text::AbstractFont> font;
/* [AbstractFont-setFileCallback-template] */
struct Data {
std::unordered_map<std::string, Containers::Array<char>> files;
} data;
const Utility::Resource rs{"data"};
font->setFileCallback([](const std::string& filename,
InputFileCallbackPolicy, Data& data)
-> Containers::Optional<Containers::ArrayView<const char>>
{
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<const char>{found->second};
}, data);
InputFileCallbackPolicy, const Utility::Resource& rs) {
return Containers::optional(rs.getRaw(filename));
}, rs);
/* [AbstractFont-setFileCallback-template] */
}

21
doc/snippets/MagnumTrade.cpp

@ -142,7 +142,7 @@ Containers::Pointer<Trade::AbstractImporter> 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<Trade::AbstractImporter> importer;
/* [AbstractImporter-setFileCallback-template] */
struct Data {
std::unordered_map<std::string, Containers::Array<char>> files;
} data;
const Utility::Resource rs{"data"};
importer->setFileCallback([](const std::string& filename,
InputFileCallbackPolicy, Data& data)
-> Containers::Optional<Containers::ArrayView<const char>>
{
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<const char>{found->second};
}, data);
InputFileCallbackPolicy, const Utility::Resource& rs) {
return Containers::optional(rs.getRaw(filename));
}, rs);
/* [AbstractImporter-setFileCallback-template] */
}

4
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
*

4
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
*

Loading…
Cancel
Save