diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2016-06-06 19:05:32 -0700 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2016-06-10 12:42:14 +0200 |
commit | 49120b1974edf744939f7801068dde612d79a4d7 (patch) | |
tree | d75181adb98fb849958a25c4816a95fefc772ec2 /src | |
parent | 94cfb1eb5aae9df9de128bfd57d2e934bb9b7e90 (diff) | |
download | qtlocation-mapboxgl-49120b1974edf744939f7801068dde612d79a4d7.tar.gz |
[core] Merge FileBasedTileSource and TileSource
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/tile/file_based_tile_source.hpp | 37 | ||||
-rw-r--r-- | src/mbgl/tile/raster_tile_data.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/tile/raster_tile_data.hpp | 5 | ||||
-rw-r--r-- | src/mbgl/tile/tile_source.cpp | 7 | ||||
-rw-r--r-- | src/mbgl/tile/tile_source.hpp | 52 | ||||
-rw-r--r-- | src/mbgl/tile/tile_source_impl.hpp (renamed from src/mbgl/tile/file_based_tile_source_impl.hpp) | 21 | ||||
-rw-r--r-- | src/mbgl/tile/vector_tile_data.cpp | 7 | ||||
-rw-r--r-- | src/mbgl/tile/vector_tile_data.hpp | 4 |
8 files changed, 55 insertions, 86 deletions
diff --git a/src/mbgl/tile/file_based_tile_source.hpp b/src/mbgl/tile/file_based_tile_source.hpp deleted file mode 100644 index fdada6d6ae..0000000000 --- a/src/mbgl/tile/file_based_tile_source.hpp +++ /dev/null @@ -1,37 +0,0 @@ -#pragma once - -#include <mbgl/tile/tile_source.hpp> -#include <mbgl/storage/resource.hpp> - -namespace mbgl { - -class FileSource; -class AsyncRequest; -class Response; - -template <typename T> -class FileBasedTileSource : public TileSource { -public: - FileBasedTileSource(T&, - const OverscaledTileID&, - const style::UpdateParameters&, - const Tileset&); - virtual ~FileBasedTileSource() = default; - -protected: - void makeRequired() override; - void makeOptional() override; - -private: - void loadOptional(); - void loadedData(const Response&); - void loadRequired(); - -private: - T& tileData; - Resource resource; - FileSource& fileSource; - std::unique_ptr<AsyncRequest> request; -}; - -} // namespace mbgl diff --git a/src/mbgl/tile/raster_tile_data.cpp b/src/mbgl/tile/raster_tile_data.cpp index 3c64630951..cc48b3e155 100644 --- a/src/mbgl/tile/raster_tile_data.cpp +++ b/src/mbgl/tile/raster_tile_data.cpp @@ -2,9 +2,7 @@ #include <mbgl/style/source.hpp> #include <mbgl/style/update_parameters.hpp> #include <mbgl/tile/tile_data_observer.hpp> -#include <mbgl/tile/file_based_tile_source.hpp> -#include <mbgl/tile/file_based_tile_source_impl.hpp> -#include <mbgl/tile/tile_source.hpp> +#include <mbgl/tile/tile_source_impl.hpp> #include <mbgl/storage/resource.hpp> #include <mbgl/storage/response.hpp> #include <mbgl/storage/file_source.hpp> @@ -19,7 +17,7 @@ RasterTileData::RasterTileData(const OverscaledTileID& id_, : TileData(id_), texturePool(parameters.texturePool), worker(parameters.worker), - tileSource(std::make_unique<FileBasedTileSource<RasterTileData>>(*this, id_, parameters, tileset)) { + tileSource(*this, id_, parameters, tileset) { } void RasterTileData::setError(std::exception_ptr err) { @@ -66,7 +64,7 @@ Bucket* RasterTileData::getBucket(const style::Layer&) { } void RasterTileData::setNecessity(Necessity necessity) { - tileSource->setNecessity(static_cast<TileSource::Necessity>(necessity)); + tileSource.setNecessity(static_cast<TileSource<RasterTileData>::Necessity>(necessity)); } void RasterTileData::cancel() { diff --git a/src/mbgl/tile/raster_tile_data.hpp b/src/mbgl/tile/raster_tile_data.hpp index ce8fb2a0f8..bbd033230d 100644 --- a/src/mbgl/tile/raster_tile_data.hpp +++ b/src/mbgl/tile/raster_tile_data.hpp @@ -2,13 +2,12 @@ #include <mbgl/tile/tile_data.hpp> #include <mbgl/renderer/raster_bucket.hpp> +#include <mbgl/tile/tile_source.hpp> namespace mbgl { -class RasterTileSource; class AsyncRequest; class Tileset; -class TileSource; namespace gl { class TexturePool; } @@ -41,7 +40,7 @@ private: gl::TexturePool& texturePool; Worker& worker; - std::unique_ptr<TileSource> tileSource; + TileSource<RasterTileData> tileSource; std::unique_ptr<AsyncRequest> workRequest; // Contains the Bucket object for the tile. Buckets are render diff --git a/src/mbgl/tile/tile_source.cpp b/src/mbgl/tile/tile_source.cpp deleted file mode 100644 index c45da0c779..0000000000 --- a/src/mbgl/tile/tile_source.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include <mbgl/tile/tile_source.hpp> - -#include <cassert> - -namespace mbgl { - -} // namespace mbgl diff --git a/src/mbgl/tile/tile_source.hpp b/src/mbgl/tile/tile_source.hpp index b21da0bcdb..69688241fd 100644 --- a/src/mbgl/tile/tile_source.hpp +++ b/src/mbgl/tile/tile_source.hpp @@ -1,9 +1,20 @@ #pragma once #include <mbgl/util/noncopyable.hpp> +#include <mbgl/storage/resource.hpp> namespace mbgl { +class FileSource; +class AsyncRequest; +class Response; +class Tileset; + +namespace style { +class UpdateParameters; +} + +template <typename T> class TileSource : private util::noncopyable { public: // TileSources can have two states: optional or required. @@ -16,20 +27,10 @@ public: Required = true, }; -protected: - TileSource() : necessity(Necessity::Optional) { - } - -public: - virtual ~TileSource() = default; - - bool isOptional() const { - return necessity == Necessity::Optional; - } - - bool isRequired() const { - return necessity == Necessity::Required; - } + TileSource(T&, + const OverscaledTileID&, + const style::UpdateParameters&, + const Tileset&); void setNecessity(Necessity newNecessity) { if (newNecessity != necessity) { @@ -42,19 +43,34 @@ public: } } -protected: +private: + bool isOptional() const { + return necessity == Necessity::Optional; + } + + bool isRequired() const { + return necessity == Necessity::Required; + } + // called when the tile is one of the ideal tiles that we want to show definitely. the tile source // should try to make every effort (e.g. fetch from internet, or revalidate existing resources). - virtual void makeRequired() {} + void makeRequired(); // called when the zoom level no longer corresponds to the displayed one, but // we're still interested in retaining the tile, e.g. for backfill. // subclassed TileSources should cancel actions they are taking to provide // an up-to-date version or load new data - virtual void makeOptional() {} + void makeOptional(); + + void loadOptional(); + void loadedData(const Response&); + void loadRequired(); -protected: + T& tileData; Necessity necessity; + Resource resource; + FileSource& fileSource; + std::unique_ptr<AsyncRequest> request; }; } // namespace mbgl diff --git a/src/mbgl/tile/file_based_tile_source_impl.hpp b/src/mbgl/tile/tile_source_impl.hpp index e81e752862..8d5caeb829 100644 --- a/src/mbgl/tile/file_based_tile_source_impl.hpp +++ b/src/mbgl/tile/tile_source_impl.hpp @@ -1,6 +1,6 @@ #pragma once -#include <mbgl/tile/file_based_tile_source.hpp> +#include <mbgl/tile/tile_source.hpp> #include <mbgl/storage/file_source.hpp> #include <mbgl/style/update_parameters.hpp> #include <mbgl/util/tileset.hpp> @@ -10,11 +10,12 @@ namespace mbgl { template <typename T> -FileBasedTileSource<T>::FileBasedTileSource(T& tileData_, - const OverscaledTileID& id, - const style::UpdateParameters& parameters, - const Tileset& tileset) +TileSource<T>::TileSource(T& tileData_, + const OverscaledTileID& id, + const style::UpdateParameters& parameters, + const Tileset& tileset) : tileData(tileData_), + necessity(Necessity::Optional), resource(Resource::tile( tileset.tiles.at(0), parameters.pixelRatio, @@ -43,7 +44,7 @@ FileBasedTileSource<T>::FileBasedTileSource(T& tileData_, } template <typename T> -void FileBasedTileSource<T>::loadOptional() { +void TileSource<T>::loadOptional() { assert(!request); resource.necessity = Resource::Optional; @@ -68,14 +69,14 @@ void FileBasedTileSource<T>::loadOptional() { } template <typename T> -void FileBasedTileSource<T>::makeRequired() { +void TileSource<T>::makeRequired() { if (!request) { loadRequired(); } } template <typename T> -void FileBasedTileSource<T>::makeOptional() { +void TileSource<T>::makeOptional() { if (resource.necessity == Resource::Required && request) { // Abort a potential HTTP request. request.reset(); @@ -83,7 +84,7 @@ void FileBasedTileSource<T>::makeOptional() { } template <typename T> -void FileBasedTileSource<T>::loadedData(const Response& res) { +void TileSource<T>::loadedData(const Response& res) { if (res.error && res.error->reason != Response::Error::Reason::NotFound) { tileData.setError(std::make_exception_ptr(std::runtime_error(res.error->message))); } else if (res.notModified) { @@ -100,7 +101,7 @@ void FileBasedTileSource<T>::loadedData(const Response& res) { } template <typename T> -void FileBasedTileSource<T>::loadRequired() { +void TileSource<T>::loadRequired() { assert(!request); resource.necessity = Resource::Required; diff --git a/src/mbgl/tile/vector_tile_data.cpp b/src/mbgl/tile/vector_tile_data.cpp index e07d210f43..6961d31bd2 100644 --- a/src/mbgl/tile/vector_tile_data.cpp +++ b/src/mbgl/tile/vector_tile_data.cpp @@ -1,7 +1,6 @@ #include <mbgl/tile/vector_tile_data.hpp> -#include <mbgl/tile/file_based_tile_source.hpp> -#include <mbgl/tile/file_based_tile_source_impl.hpp> #include <mbgl/tile/tile_source.hpp> +#include <mbgl/tile/tile_source_impl.hpp> #include <mbgl/tile/vector_tile.hpp> #include <mbgl/style/update_parameters.hpp> #include <mbgl/util/async_request.hpp> @@ -13,13 +12,13 @@ VectorTileData::VectorTileData(const OverscaledTileID& id_, const style::UpdateParameters& parameters, const Tileset& tileset) : GeometryTileData(id_, sourceID, parameters.style, parameters.mode), - tileSource(std::make_unique<FileBasedTileSource<VectorTileData>>(*this, id_, parameters, tileset)) { + tileSource(*this, id_, parameters, tileset) { } VectorTileData::~VectorTileData() = default; void VectorTileData::setNecessity(Necessity necessity) { - tileSource->setNecessity(static_cast<TileSource::Necessity>(necessity)); + tileSource.setNecessity(static_cast<TileSource<VectorTileData>::Necessity>(necessity)); } std::unique_ptr<GeometryTile> VectorTileData::parseData(std::shared_ptr<const std::string> data) { diff --git a/src/mbgl/tile/vector_tile_data.hpp b/src/mbgl/tile/vector_tile_data.hpp index d7a14314d2..8e653386b8 100644 --- a/src/mbgl/tile/vector_tile_data.hpp +++ b/src/mbgl/tile/vector_tile_data.hpp @@ -1,11 +1,11 @@ #pragma once #include <mbgl/tile/geometry_tile_data.hpp> +#include <mbgl/tile/tile_source.hpp> namespace mbgl { class Tileset; -class TileSource; class GeometryTile; namespace style { @@ -25,7 +25,7 @@ public: static std::unique_ptr<GeometryTile> parseData(std::shared_ptr<const std::string>); private: - std::unique_ptr<TileSource> tileSource; + TileSource<VectorTileData> tileSource; }; } // namespace mbgl |