diff options
Diffstat (limited to 'src/storage/request.cpp')
-rw-r--r-- | src/storage/request.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/storage/request.cpp b/src/storage/request.cpp new file mode 100644 index 0000000000..42bf87a849 --- /dev/null +++ b/src/storage/request.cpp @@ -0,0 +1,49 @@ +#include <mbgl/storage/request.hpp> +#include <mbgl/storage/base_request.hpp> + +#include <uv.h> + +#include <cassert> + +namespace mbgl { + +Request::Request(const util::ptr<BaseRequest> &base_) + : thread_id(uv_thread_self()), base(base_) { +} + +Request::~Request() { + assert(thread_id == uv_thread_self()); +} + +void Request::onload(CompletedCallback cb) { + assert(thread_id == uv_thread_self()); + if (base) { + Callback *callback = base->add(std::move(cb), base); + if (callback) { + callbacks.push_front(callback); + } + } +} + +void Request::oncancel(AbortedCallback cb) { + assert(thread_id == uv_thread_self()); + if (base) { + Callback *callback = base->add(std::move(cb), base); + if (callback) { + callbacks.push_front(callback); + } + } +} + +void Request::cancel() { + assert(thread_id == uv_thread_self()); + if (base) { + for (Callback *callback : callbacks) { + base->remove(callback); + } + base.reset(); + } + callbacks.clear(); +} + +} |