diff --git a/src/mbgl/annotation/annotation_source.cpp b/src/mbgl/annotation/annotation_source.cpp index 1589370f0..50fa7a2c0 100644 --- a/src/mbgl/annotation/annotation_source.cpp +++ b/src/mbgl/annotation/annotation_source.cpp @@ -1,5 +1,6 @@ #include #include +#include namespace mbgl { @@ -7,4 +8,9 @@ AnnotationSource::AnnotationSource() : Source(SourceType::Annotations, AnnotationManager::SourceID, "", util::tileSize, std::make_unique()) { } +std::unique_ptr AnnotationSource::createTile(const OverscaledTileID& tileID, + const style::UpdateParameters& parameters) { + return std::make_unique(tileID, id, parameters); +} + } // namespace mbgl diff --git a/src/mbgl/annotation/annotation_source.hpp b/src/mbgl/annotation/annotation_source.hpp index befff2de8..033580b64 100644 --- a/src/mbgl/annotation/annotation_source.hpp +++ b/src/mbgl/annotation/annotation_source.hpp @@ -7,6 +7,9 @@ namespace mbgl { class AnnotationSource : public style::Source { public: AnnotationSource(); + +private: + std::unique_ptr createTile(const OverscaledTileID&, const style::UpdateParameters&) final; }; } // namespace mbgl diff --git a/src/mbgl/style/source.cpp b/src/mbgl/style/source.cpp index d806e3140..35acf3dd5 100644 --- a/src/mbgl/style/source.cpp +++ b/src/mbgl/style/source.cpp @@ -20,10 +20,6 @@ #include #include -#include -#include -#include -#include #include #include @@ -184,23 +180,6 @@ const std::map& Source::getRenderTiles() const { return renderTiles; } -std::unique_ptr Source::createTile(const OverscaledTileID& overscaledTileID, - const UpdateParameters& parameters) { - // If we don't find working tile data, we're just going to load it. - if (type == SourceType::Raster) { - return std::make_unique(overscaledTileID, parameters, *tileset); - } else if (type == SourceType::Vector) { - return std::make_unique(overscaledTileID, id, parameters, *tileset); - } else if (type == SourceType::Annotations) { - return std::make_unique(overscaledTileID, id, parameters); - } else if (type == SourceType::GeoJSON) { - return std::make_unique(overscaledTileID, id, parameters, geojsonvt.get()); - } else { - Log::Warning(Event::Style, "Source type '%s' is not implemented", Enum::toString(type)); - return nullptr; - } -} - Tile* Source::getTile(const OverscaledTileID& overscaledTileID) const { auto it = tiles.find(overscaledTileID); if (it != tiles.end()) { diff --git a/src/mbgl/style/source.hpp b/src/mbgl/style/source.hpp index 45feadf2f..51a9ba5c7 100644 --- a/src/mbgl/style/source.hpp +++ b/src/mbgl/style/source.hpp @@ -93,12 +93,10 @@ private: void onTileError(Tile&, std::exception_ptr) override; void onNeedsRepaint() override; - std::unique_ptr createTile(const OverscaledTileID&, const UpdateParameters&); - -private: - std::unique_ptr tileset; + virtual std::unique_ptr createTile(const OverscaledTileID&, const UpdateParameters&) = 0; protected: + std::unique_ptr tileset; std::unique_ptr geojsonvt; private: diff --git a/src/mbgl/style/sources/geojson_source.cpp b/src/mbgl/style/sources/geojson_source.cpp index 8a573becf..caedcffcd 100644 --- a/src/mbgl/style/sources/geojson_source.cpp +++ b/src/mbgl/style/sources/geojson_source.cpp @@ -1,4 +1,5 @@ #include +#include #include @@ -14,5 +15,10 @@ GeoJSONSource::GeoJSONSource(std::string id_, geojsonvt = std::move(geojsonvt_); } +std::unique_ptr GeoJSONSource::createTile(const OverscaledTileID& tileID, + const UpdateParameters& parameters) { + return std::make_unique(tileID, id, parameters, geojsonvt.get()); +} + } // namespace style } // namespace mbgl diff --git a/src/mbgl/style/sources/geojson_source.hpp b/src/mbgl/style/sources/geojson_source.hpp index d9f8cb4c6..c9262f22b 100644 --- a/src/mbgl/style/sources/geojson_source.hpp +++ b/src/mbgl/style/sources/geojson_source.hpp @@ -12,6 +12,9 @@ public: uint16_t tileSize, std::unique_ptr&&, std::unique_ptr&&); + +private: + std::unique_ptr createTile(const OverscaledTileID&, const UpdateParameters&) final; }; } // namespace style diff --git a/src/mbgl/style/sources/raster_source.cpp b/src/mbgl/style/sources/raster_source.cpp index 868d3f7f8..de8b24842 100644 --- a/src/mbgl/style/sources/raster_source.cpp +++ b/src/mbgl/style/sources/raster_source.cpp @@ -1,4 +1,5 @@ #include +#include namespace mbgl { namespace style { @@ -10,5 +11,10 @@ RasterSource::RasterSource(std::string id_, : Source(SourceType::Raster, std::move(id_), std::move(url_), tileSize_, std::move(tileset_)) { } +std::unique_ptr RasterSource::createTile(const OverscaledTileID& tileID, + const UpdateParameters& parameters) { + return std::make_unique(tileID, parameters, *tileset); +} + } // namespace style } // namespace mbgl diff --git a/src/mbgl/style/sources/raster_source.hpp b/src/mbgl/style/sources/raster_source.hpp index 0e062c14f..abc203e3c 100644 --- a/src/mbgl/style/sources/raster_source.hpp +++ b/src/mbgl/style/sources/raster_source.hpp @@ -11,6 +11,9 @@ public: std::string url, uint16_t tileSize, std::unique_ptr&&); + +private: + std::unique_ptr createTile(const OverscaledTileID&, const UpdateParameters&) final; }; } // namespace style diff --git a/src/mbgl/style/sources/vector_source.cpp b/src/mbgl/style/sources/vector_source.cpp index e6adb9bb9..5cf0a1e18 100644 --- a/src/mbgl/style/sources/vector_source.cpp +++ b/src/mbgl/style/sources/vector_source.cpp @@ -1,4 +1,5 @@ #include +#include namespace mbgl { namespace style { @@ -9,5 +10,10 @@ VectorSource::VectorSource(std::string id_, : Source(SourceType::Vector, std::move(id_), std::move(url_), util::tileSize, std::move(tileset_)) { } +std::unique_ptr VectorSource::createTile(const OverscaledTileID& tileID, + const UpdateParameters& parameters) { + return std::make_unique(tileID, id, parameters, *tileset); +} + } // namespace style } // namespace mbgl diff --git a/src/mbgl/style/sources/vector_source.hpp b/src/mbgl/style/sources/vector_source.hpp index 08ab9a461..e98c17ddc 100644 --- a/src/mbgl/style/sources/vector_source.hpp +++ b/src/mbgl/style/sources/vector_source.hpp @@ -10,6 +10,9 @@ public: VectorSource(std::string id, std::string url, std::unique_ptr&&); + +private: + std::unique_ptr createTile(const OverscaledTileID&, const UpdateParameters&) final; }; } // namespace style diff --git a/src/mbgl/tile/raster_tile.cpp b/src/mbgl/tile/raster_tile.cpp index 5cfd41a16..f23d01a59 100644 --- a/src/mbgl/tile/raster_tile.cpp +++ b/src/mbgl/tile/raster_tile.cpp @@ -20,6 +20,8 @@ RasterTile::RasterTile(const OverscaledTileID& id_, loader(*this, id_, parameters, tileset) { } +RasterTile::~RasterTile() = default; + void RasterTile::setError(std::exception_ptr err) { observer->onTileError(*this, err); } diff --git a/src/mbgl/tile/raster_tile.hpp b/src/mbgl/tile/raster_tile.hpp index 8c0923e7e..32231f7b0 100644 --- a/src/mbgl/tile/raster_tile.hpp +++ b/src/mbgl/tile/raster_tile.hpp @@ -21,6 +21,7 @@ public: RasterTile(const OverscaledTileID&, const style::UpdateParameters&, const Tileset&); + ~RasterTile() final; void setNecessity(Necessity) final; diff --git a/src/mbgl/tile/tile_loader.hpp b/src/mbgl/tile/tile_loader.hpp index 1086f4ed3..0d64f647d 100644 --- a/src/mbgl/tile/tile_loader.hpp +++ b/src/mbgl/tile/tile_loader.hpp @@ -22,6 +22,7 @@ public: const OverscaledTileID&, const style::UpdateParameters&, const Tileset&); + ~TileLoader(); using Necessity = Resource::Necessity; diff --git a/src/mbgl/tile/tile_loader_impl.hpp b/src/mbgl/tile/tile_loader_impl.hpp index 2e57f2f6f..b987d6ec6 100644 --- a/src/mbgl/tile/tile_loader_impl.hpp +++ b/src/mbgl/tile/tile_loader_impl.hpp @@ -43,6 +43,9 @@ TileLoader::TileLoader(T& tile_, } } +template +TileLoader::~TileLoader() = default; + template void TileLoader::loadOptional() { assert(!request);