summaryrefslogtreecommitdiff
path: root/src/mbgl/storage/request.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/storage/request.cpp')
-rw-r--r--src/mbgl/storage/request.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/mbgl/storage/request.cpp b/src/mbgl/storage/request.cpp
new file mode 100644
index 0000000000..39fbd36789
--- /dev/null
+++ b/src/mbgl/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(std::this_thread::get_id()), base(base_) {
+}
+
+Request::~Request() {
+ assert(thread_id == std::this_thread::get_id());
+}
+
+void Request::onload(CompletedCallback cb) {
+ assert(thread_id == std::this_thread::get_id());
+ if (base) {
+ Callback *callback = base->add(std::move(cb), base);
+ if (callback) {
+ callbacks.push_front(callback);
+ }
+ }
+}
+
+void Request::oncancel(AbortedCallback cb) {
+ assert(thread_id == std::this_thread::get_id());
+ if (base) {
+ Callback *callback = base->add(std::move(cb), base);
+ if (callback) {
+ callbacks.push_front(callback);
+ }
+ }
+}
+
+void Request::cancel() {
+ assert(thread_id == std::this_thread::get_id());
+ if (base) {
+ for (Callback *callback : callbacks) {
+ base->remove(callback);
+ }
+ base.reset();
+ }
+ callbacks.clear();
+}
+
+}