summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-06-06 19:05:32 -0700
committerKonstantin Käfer <mail@kkaefer.com>2016-06-10 12:42:14 +0200
commit49120b1974edf744939f7801068dde612d79a4d7 (patch)
treed75181adb98fb849958a25c4816a95fefc772ec2 /src
parent94cfb1eb5aae9df9de128bfd57d2e934bb9b7e90 (diff)
downloadqtlocation-mapboxgl-49120b1974edf744939f7801068dde612d79a4d7.tar.gz
[core] Merge FileBasedTileSource and TileSource
Diffstat (limited to 'src')
-rw-r--r--src/mbgl/tile/file_based_tile_source.hpp37
-rw-r--r--src/mbgl/tile/raster_tile_data.cpp8
-rw-r--r--src/mbgl/tile/raster_tile_data.hpp5
-rw-r--r--src/mbgl/tile/tile_source.cpp7
-rw-r--r--src/mbgl/tile/tile_source.hpp52
-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.cpp7
-rw-r--r--src/mbgl/tile/vector_tile_data.hpp4
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