diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2016-06-06 18:47:23 -0700 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2016-06-10 12:42:14 +0200 |
commit | a1d1bb0c6dc63757abc3dbcab9ff1c4bacca7ba7 (patch) | |
tree | 2d43d41f165a9ed42e8f1fba584e843bd332846f /src | |
parent | 4596157fe0c3b24533014e1b94e920485452856a (diff) | |
download | qtlocation-mapboxgl-a1d1bb0c6dc63757abc3dbcab9ff1c4bacca7ba7.tar.gz |
[core] Simplify FileBasedTileSource
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/tile/file_based_tile_source.hpp | 8 | ||||
-rw-r--r-- | src/mbgl/tile/file_based_tile_source_impl.hpp | 40 | ||||
-rw-r--r-- | src/mbgl/tile/raster_tile_data.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/tile/tile_source.hpp | 34 | ||||
-rw-r--r-- | src/mbgl/tile/vector_tile_data.cpp | 2 |
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); } |