summaryrefslogtreecommitdiff
path: root/src/mbgl/storage
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2015-10-15 15:46:12 +0200
committerKonstantin Käfer <mail@kkaefer.com>2015-10-26 15:54:27 +0100
commit096a3edf39d23fbd4baa134938c16fed4f2e199c (patch)
tree5ea05889146c1d405719f2878ef21ff68ebeb808 /src/mbgl/storage
parent94a5ac857f7cfc0a8e20035fabc39841fe17249c (diff)
downloadqtlocation-mapboxgl-096a3edf39d23fbd4baa134938c16fed4f2e199c.tar.gz
[core] use RAII-style lifetime tracking of Request objects
Diffstat (limited to 'src/mbgl/storage')
-rw-r--r--src/mbgl/storage/request_holder.cpp12
-rw-r--r--src/mbgl/storage/request_holder.hpp26
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