diff --git a/include/mbgl/style/sources/geojson_source.hpp b/include/mbgl/style/sources/geojson_source.hpp index e633e6efb..ede030172 100644 --- a/include/mbgl/style/sources/geojson_source.hpp +++ b/include/mbgl/style/sources/geojson_source.hpp @@ -43,7 +43,7 @@ public: void setURL(const std::string& url); void setGeoJSON(const GeoJSON&); - optional getURL(); + optional getURL() const; // Private implementation diff --git a/include/mbgl/style/sources/raster_source.hpp b/include/mbgl/style/sources/raster_source.hpp index 9bb951992..395f25e51 100644 --- a/include/mbgl/style/sources/raster_source.hpp +++ b/include/mbgl/style/sources/raster_source.hpp @@ -11,9 +11,12 @@ class RasterSource : public Source { public: RasterSource(std::string id, variant urlOrTileset, uint16_t tileSize); + optional getURL() const; + // Private implementation class Impl; + Impl* const impl; }; template <> diff --git a/include/mbgl/style/sources/vector_source.hpp b/include/mbgl/style/sources/vector_source.hpp index e16a6a68a..8626ce160 100644 --- a/include/mbgl/style/sources/vector_source.hpp +++ b/include/mbgl/style/sources/vector_source.hpp @@ -11,9 +11,12 @@ class VectorSource : public Source { public: VectorSource(std::string id, variant urlOrTileset); + optional getURL() const; + // Private implementation class Impl; + Impl* const impl; }; template <> diff --git a/src/mbgl/style/sources/geojson_source.cpp b/src/mbgl/style/sources/geojson_source.cpp index 748043813..62726cd12 100644 --- a/src/mbgl/style/sources/geojson_source.cpp +++ b/src/mbgl/style/sources/geojson_source.cpp @@ -18,7 +18,7 @@ void GeoJSONSource::setGeoJSON(const mapbox::geojson::geojson& geoJSON) { impl->setGeoJSON(geoJSON); } -optional GeoJSONSource::getURL() { +optional GeoJSONSource::getURL() const { return impl->getURL(); } diff --git a/src/mbgl/style/sources/geojson_source_impl.cpp b/src/mbgl/style/sources/geojson_source_impl.cpp index 4800b9c4b..2929d73d3 100644 --- a/src/mbgl/style/sources/geojson_source_impl.cpp +++ b/src/mbgl/style/sources/geojson_source_impl.cpp @@ -47,7 +47,7 @@ void GeoJSONSource::Impl::setURL(std::string url_) { } } -optional GeoJSONSource::Impl::getURL() { +optional GeoJSONSource::Impl::getURL() const { return url; } diff --git a/src/mbgl/style/sources/geojson_source_impl.hpp b/src/mbgl/style/sources/geojson_source_impl.hpp index 13994d907..eec7cf060 100644 --- a/src/mbgl/style/sources/geojson_source_impl.hpp +++ b/src/mbgl/style/sources/geojson_source_impl.hpp @@ -17,7 +17,7 @@ public: ~Impl() final; void setURL(std::string); - optional getURL(); + optional getURL() const; void setGeoJSON(const GeoJSON&); void setTileData(GeoJSONTile&, const OverscaledTileID& tileID); diff --git a/src/mbgl/style/sources/raster_source.cpp b/src/mbgl/style/sources/raster_source.cpp index 3c65476df..94fdbcef1 100644 --- a/src/mbgl/style/sources/raster_source.cpp +++ b/src/mbgl/style/sources/raster_source.cpp @@ -5,7 +5,17 @@ namespace mbgl { namespace style { RasterSource::RasterSource(std::string id, variant urlOrTileset, uint16_t tileSize) - : Source(SourceType::Raster, std::make_unique(std::move(id), *this, std::move(urlOrTileset), tileSize)) { + : Source(SourceType::Raster, std::make_unique(std::move(id), *this, std::move(urlOrTileset), tileSize)), + impl(static_cast(baseImpl.get())) { +} + +optional RasterSource::getURL() const { + auto urlOrTileset = impl->getURLOrTileset(); + if (urlOrTileset.is()) { + return urlOrTileset.get(); + } else { + return {}; + } } } // namespace style diff --git a/src/mbgl/style/sources/vector_source.cpp b/src/mbgl/style/sources/vector_source.cpp index f2a6b166a..4bcd3b898 100644 --- a/src/mbgl/style/sources/vector_source.cpp +++ b/src/mbgl/style/sources/vector_source.cpp @@ -5,7 +5,17 @@ namespace mbgl { namespace style { VectorSource::VectorSource(std::string id, variant urlOrTileset) - : Source(SourceType::Vector, std::make_unique(std::move(id), *this, std::move(urlOrTileset))) { + : Source(SourceType::Vector, std::make_unique(std::move(id), *this, std::move(urlOrTileset))), + impl(static_cast(baseImpl.get())) { +} + +optional VectorSource::getURL() const { + auto urlOrTileset = impl->getURLOrTileset(); + if (urlOrTileset.is()) { + return urlOrTileset.get(); + } else { + return {}; + } } } // namespace style