diff options
Diffstat (limited to 'src/mbgl/storage')
-rw-r--r-- | src/mbgl/storage/request_holder.cpp | 12 | ||||
-rw-r--r-- | src/mbgl/storage/request_holder.hpp | 26 |
2 files changed, 38 insertions, 0 deletions
diff --git a/src/mbgl/storage/request_holder.cpp b/src/mbgl/storage/request_holder.cpp new file mode 100644 index 0000000000..3a038623c4 --- /dev/null +++ b/src/mbgl/storage/request_holder.cpp @@ -0,0 +1,12 @@ +#include <mbgl/storage/request_holder.hpp> +#include <mbgl/storage/file_source.hpp> +#include <mbgl/util/thread_context.hpp> + +namespace mbgl { + +void RequestHolder::Deleter::operator()(Request* req) const { + // This function is called by the unique_ptr's Deleter. + util::ThreadContext::getFileSource()->cancel(req); +} + +} diff --git a/src/mbgl/storage/request_holder.hpp b/src/mbgl/storage/request_holder.hpp new file mode 100644 index 0000000000..62edbfde7d --- /dev/null +++ b/src/mbgl/storage/request_holder.hpp @@ -0,0 +1,26 @@ +#ifndef MBGL_STORAGE_REQUEST_HOLDER +#define MBGL_STORAGE_REQUEST_HOLDER + +#include <memory> + +namespace mbgl { + +class Request; + +class RequestHolder { +public: + inline RequestHolder& operator=(Request* req) { + ptr = std::unique_ptr<Request, Deleter>(req); + return *this; + } + +private: + struct Deleter { + void operator()(Request*) const; + }; + std::unique_ptr<Request, Deleter> ptr; +}; + +} + +#endif |