summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-06-06 18:47:23 -0700
committerKonstantin Käfer <mail@kkaefer.com>2016-06-10 12:42:14 +0200
commita1d1bb0c6dc63757abc3dbcab9ff1c4bacca7ba7 (patch)
tree2d43d41f165a9ed42e8f1fba584e843bd332846f /src
parent4596157fe0c3b24533014e1b94e920485452856a (diff)
downloadqtlocation-mapboxgl-a1d1bb0c6dc63757abc3dbcab9ff1c4bacca7ba7.tar.gz
[core] Simplify FileBasedTileSource
Diffstat (limited to 'src')
-rw-r--r--src/mbgl/tile/file_based_tile_source.hpp8
-rw-r--r--src/mbgl/tile/file_based_tile_source_impl.hpp40
-rw-r--r--src/mbgl/tile/raster_tile_data.cpp2
-rw-r--r--src/mbgl/tile/tile_source.hpp34
-rw-r--r--src/mbgl/tile/vector_tile_data.cpp2
5 files changed, 27 insertions, 59 deletions
diff --git a/src/mbgl/tile/file_based_tile_source.hpp b/src/mbgl/tile/file_based_tile_source.hpp
index ee06469619..77028e780e 100644
--- a/src/mbgl/tile/file_based_tile_source.hpp
+++ b/src/mbgl/tile/file_based_tile_source.hpp
@@ -1,5 +1,6 @@
#pragma once
+#include <mbgl/tile/tile_source.hpp>
#include <mbgl/storage/resource.hpp>
namespace mbgl {
@@ -8,10 +9,10 @@ class FileSource;
class AsyncRequest;
class Response;
-template <typename T, typename I>
-class FileBasedTileSource : public T {
+template <typename T>
+class FileBasedTileSource : public TileSource {
public:
- FileBasedTileSource(typename T::data_type&, const Resource&, FileSource&);
+ FileBasedTileSource(T&, const Resource&, FileSource&);
virtual ~FileBasedTileSource() = default;
protected:
@@ -24,6 +25,7 @@ private:
void loadRequired();
private:
+ T& tileData;
Resource resource;
FileSource& fileSource;
std::unique_ptr<AsyncRequest> request;
diff --git a/src/mbgl/tile/file_based_tile_source_impl.hpp b/src/mbgl/tile/file_based_tile_source_impl.hpp
index b8a69e3f60..2d10b64584 100644
--- a/src/mbgl/tile/file_based_tile_source_impl.hpp
+++ b/src/mbgl/tile/file_based_tile_source_impl.hpp
@@ -7,11 +7,11 @@
namespace mbgl {
-template <typename T, typename I>
-FileBasedTileSource<T, I>::FileBasedTileSource(typename T::data_type& tileData_,
- const Resource& resource_,
- FileSource& fileSource_)
- : T(tileData_), resource(resource_), fileSource(fileSource_) {
+template <typename T>
+FileBasedTileSource<T>::FileBasedTileSource(T& tileData_,
+ const Resource& resource_,
+ FileSource& fileSource_)
+ : tileData(tileData_), resource(resource_), fileSource(fileSource_) {
assert(!request);
if (fileSource.supportsOptionalRequests()) {
// When supported, the first request is always optional, even if the TileSource
@@ -23,7 +23,7 @@ FileBasedTileSource<T, I>::FileBasedTileSource(typename T::data_type& tileData_,
} else {
// When the FileSource doesn't support optional requests, we do nothing until the
// data is definitely required.
- if (T::isRequired()) {
+ if (isRequired()) {
loadRequired();
} else {
// We're using this field to check whether the pending request is optional or required.
@@ -32,15 +32,15 @@ FileBasedTileSource<T, I>::FileBasedTileSource(typename T::data_type& tileData_,
}
}
-template <typename T, typename I>
-void FileBasedTileSource<T, I>::loadOptional() {
+template <typename T>
+void FileBasedTileSource<T>::loadOptional() {
assert(!request);
resource.necessity = Resource::Optional;
request = fileSource.request(resource, [this](Response res) {
request.reset();
- T::tileData.setTriedOptional();
+ tileData.setTriedOptional();
if (res.error && res.error->reason == Response::Error::Reason::NotFound) {
// When the optional request could not be satisfied, don't treat it as an error.
@@ -51,31 +51,31 @@ void FileBasedTileSource<T, I>::loadOptional() {
loadedData(res);
}
- if (T::isRequired()) {
+ if (isRequired()) {
loadRequired();
}
});
}
-template <typename T, typename I>
-void FileBasedTileSource<T, I>::makeRequired() {
+template <typename T>
+void FileBasedTileSource<T>::makeRequired() {
if (!request) {
loadRequired();
}
}
-template <typename T, typename I>
-void FileBasedTileSource<T, I>::makeOptional() {
+template <typename T>
+void FileBasedTileSource<T>::makeOptional() {
if (resource.necessity == Resource::Required && request) {
// Abort a potential HTTP request.
request.reset();
}
}
-template <typename T, typename I>
-void FileBasedTileSource<T, I>::loadedData(const Response& res) {
+template <typename T>
+void FileBasedTileSource<T>::loadedData(const Response& res) {
if (res.error && res.error->reason != Response::Error::Reason::NotFound) {
- T::tileData.setError(std::make_exception_ptr(std::runtime_error(res.error->message)));
+ tileData.setError(std::make_exception_ptr(std::runtime_error(res.error->message)));
} else if (res.notModified) {
resource.priorExpires = res.expires;
// Do not notify the TileData object; when we get this message, it already has the current
@@ -84,13 +84,13 @@ void FileBasedTileSource<T, I>::loadedData(const Response& res) {
resource.priorModified = res.modified;
resource.priorExpires = res.expires;
resource.priorEtag = res.etag;
- T::tileData.setData(res.noContent ? nullptr : I::parseData(res.data), res.modified,
+ tileData.setData(res.noContent ? nullptr : T::parseData(res.data), res.modified,
res.expires);
}
}
-template <typename T, typename I>
-void FileBasedTileSource<T, I>::loadRequired() {
+template <typename T>
+void FileBasedTileSource<T>::loadRequired() {
assert(!request);
resource.necessity = Resource::Required;
diff --git a/src/mbgl/tile/raster_tile_data.cpp b/src/mbgl/tile/raster_tile_data.cpp
index ac6299e22e..f28da3d3d2 100644
--- a/src/mbgl/tile/raster_tile_data.cpp
+++ b/src/mbgl/tile/raster_tile_data.cpp
@@ -23,7 +23,7 @@ RasterTileData::RasterTileData(const OverscaledTileID& id_,
const auto resource = Resource::tile(
tileset.tiles.at(0), parameters.pixelRatio, id_.canonical.x,
id_.canonical.y, id_.canonical.z);
- tileSource = std::make_unique<FileBasedTileSource<RasterTileSource, RasterTileData>>(
+ tileSource = std::make_unique<FileBasedTileSource<RasterTileData>>(
*this, resource, parameters.fileSource);
}
diff --git a/src/mbgl/tile/tile_source.hpp b/src/mbgl/tile/tile_source.hpp
index 8ecc9c3fae..b21da0bcdb 100644
--- a/src/mbgl/tile/tile_source.hpp
+++ b/src/mbgl/tile/tile_source.hpp
@@ -57,38 +57,4 @@ protected:
Necessity necessity;
};
-class GeometryTileData;
-class RasterTileData;
-
-class GeometryTileSource : public TileSource {
-public:
- using data_type = GeometryTileData;
-
-protected:
- GeometryTileSource(data_type& tileData_)
- : tileData(tileData_) {
- }
-
-public:
- virtual ~GeometryTileSource() = default;
-
-protected:
- data_type& tileData;
-};
-
-class RasterTileSource : public TileSource {
-public:
- using data_type = RasterTileData;
-
-protected:
- RasterTileSource(data_type& tileData_)
- : tileData(tileData_){};
-
-public:
- virtual ~RasterTileSource() = default;
-
-protected:
- data_type& tileData;
-};
-
} // namespace mbgl
diff --git a/src/mbgl/tile/vector_tile_data.cpp b/src/mbgl/tile/vector_tile_data.cpp
index b9cdbc3a99..dc5c536e6f 100644
--- a/src/mbgl/tile/vector_tile_data.cpp
+++ b/src/mbgl/tile/vector_tile_data.cpp
@@ -18,7 +18,7 @@ VectorTileData::VectorTileData(const OverscaledTileID& overscaledTileID,
const auto resource = Resource::tile(
tileset.tiles.at(0), parameters.pixelRatio, overscaledTileID.canonical.x,
overscaledTileID.canonical.y, overscaledTileID.canonical.z);
- tileSource = std::make_unique<FileBasedTileSource<GeometryTileSource, VectorTileData>>(
+ tileSource = std::make_unique<FileBasedTileSource<VectorTileData>>(
*this, resource, parameters.fileSource);
}