summaryrefslogtreecommitdiff
path: root/include/mbgl/storage/default_file_source.hpp
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2015-01-29 18:30:46 +0100
committerKonstantin Käfer <mail@kkaefer.com>2015-02-04 10:49:09 +0100
commit29baacf3a5bb773d94d08d16b81c3cda45a44eb6 (patch)
tree1dc3ca456151138ee5e8b7cf88b3afcecc3df1db /include/mbgl/storage/default_file_source.hpp
parent3d51e116a84ee168975bcee8377e9156f77e2731 (diff)
downloadqtlocation-mapboxgl-29baacf3a5bb773d94d08d16b81c3cda45a44eb6.tar.gz
refactor makefile
Diffstat (limited to 'include/mbgl/storage/default_file_source.hpp')
-rw-r--r--include/mbgl/storage/default_file_source.hpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/include/mbgl/storage/default_file_source.hpp b/include/mbgl/storage/default_file_source.hpp
new file mode 100644
index 0000000000..21048e99e5
--- /dev/null
+++ b/include/mbgl/storage/default_file_source.hpp
@@ -0,0 +1,60 @@
+#ifndef MBGL_STORAGE_DEFAULT_DEFAULT_FILE_SOURCE
+#define MBGL_STORAGE_DEFAULT_DEFAULT_FILE_SOURCE
+
+#include <mbgl/storage/file_source.hpp>
+#include <mbgl/storage/file_cache.hpp>
+
+#include <set>
+#include <unordered_map>
+#include <thread>
+
+namespace mapbox { namespace util { template<typename... Types> class variant; } }
+
+namespace mbgl {
+
+namespace util { template <typename T> class AsyncQueue; }
+
+class SharedRequestBase;
+
+class DefaultFileSource : public FileSource {
+public:
+ DefaultFileSource(FileCache *cache);
+ DefaultFileSource(FileCache *cache, uv_loop_t *loop);
+ ~DefaultFileSource();
+
+ Request *request(const Resource &resource, uv_loop_t *loop, Callback callback);
+ void cancel(Request *request);
+ void request(const Resource &resource, Callback callback);
+
+ enum class CacheHint : uint8_t { Full, Refresh, No };
+ void notify(SharedRequestBase *sharedRequest, const std::set<Request *> &observers,
+ std::shared_ptr<const Response> response, FileCache::Hint hint);
+
+private:
+ struct ActionDispatcher;
+ struct AddRequestAction;
+ struct RemoveRequestAction;
+ struct ResultAction;
+ struct StopAction;
+ using Action =
+ mapbox::util::variant<AddRequestAction, RemoveRequestAction, ResultAction, StopAction>;
+ using Queue = util::AsyncQueue<Action>;
+
+ void process(AddRequestAction &action);
+ void process(RemoveRequestAction &action);
+ void process(ResultAction &action);
+ void process(StopAction &action);
+
+ SharedRequestBase *find(const Resource &resource);
+
+ std::unordered_map<Resource, SharedRequestBase *, Resource::Hash> pending;
+
+ uv_loop_t *loop = nullptr;
+ FileCache *cache = nullptr;
+ Queue *queue = nullptr;
+ std::thread thread;
+};
+
+}
+
+#endif