diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-09-02 13:58:54 +0300 |
---|---|---|
committer | Julian Rex <julian.rex@mapbox.com> | 2019-09-07 00:15:38 -0400 |
commit | 56ccc5ad6b7cb737c0721008ca6ae21ec580d2f6 (patch) | |
tree | a1aca680e6d48c6373ca9710dbb863db85e7e233 | |
parent | 7fd9d38e587e6a5bf7ed7af95b41947d3dbbe7db (diff) | |
download | qtlocation-mapboxgl-56ccc5ad6b7cb737c0721008ca6ae21ec580d2f6.tar.gz |
[core] Weak factory for style::Source
-rw-r--r-- | include/mbgl/style/source.hpp | 4 | ||||
-rw-r--r-- | include/mbgl/style/sources/custom_geometry_source.hpp | 6 | ||||
-rw-r--r-- | include/mbgl/style/sources/geojson_source.hpp | 7 | ||||
-rw-r--r-- | include/mbgl/style/sources/image_source.hpp | 7 | ||||
-rw-r--r-- | include/mbgl/style/sources/raster_source.hpp | 5 | ||||
-rw-r--r-- | include/mbgl/style/sources/vector_source.hpp | 7 | ||||
-rw-r--r-- | src/mbgl/annotation/annotation_source.hpp | 7 |
7 files changed, 38 insertions, 5 deletions
diff --git a/include/mbgl/style/source.hpp b/include/mbgl/style/source.hpp index dc3a8d73fb..1d5223fa0d 100644 --- a/include/mbgl/style/source.hpp +++ b/include/mbgl/style/source.hpp @@ -6,6 +6,8 @@ #include <mbgl/util/immutable.hpp> #include <mbgl/style/types.hpp> +#include <mapbox/weak.hpp> + #include <memory> #include <string> @@ -78,6 +80,8 @@ public: // object here, so that separately-obtained references to this object share // identical platform-native peers. util::peer peer; + + virtual mapbox::base::WeakPtr<Source> makeWeakPtr() = 0; }; } // namespace style diff --git a/include/mbgl/style/sources/custom_geometry_source.hpp b/include/mbgl/style/sources/custom_geometry_source.hpp index 3f29d0c0fb..a5e545f445 100644 --- a/include/mbgl/style/sources/custom_geometry_source.hpp +++ b/include/mbgl/style/sources/custom_geometry_source.hpp @@ -20,7 +20,7 @@ using TileFunction = std::function<void(const CanonicalTileID&)>; class CustomTileLoader; -class CustomGeometrySource : public Source { +class CustomGeometrySource final : public Source { public: struct TileOptions { double tolerance = 0.375; @@ -46,9 +46,13 @@ public: // Private implementation class Impl; const Impl& impl() const; + mapbox::base::WeakPtr<Source> makeWeakPtr() override { + return weakFactory.makeWeakPtr(); + } private: std::shared_ptr<ThreadPool> threadPool; std::unique_ptr<Actor<CustomTileLoader>> loader; + mapbox::base::WeakPtrFactory<Source> weakFactory {this}; }; template <> diff --git a/include/mbgl/style/sources/geojson_source.hpp b/include/mbgl/style/sources/geojson_source.hpp index 4aec1584a6..c99687fad6 100644 --- a/include/mbgl/style/sources/geojson_source.hpp +++ b/include/mbgl/style/sources/geojson_source.hpp @@ -35,7 +35,7 @@ struct GeoJSONOptions { ClusterProperties clusterProperties; }; -class GeoJSONSource : public Source { +class GeoJSONSource final : public Source { public: GeoJSONSource(const std::string& id, optional<GeoJSONOptions> = nullopt); ~GeoJSONSource() final; @@ -50,9 +50,14 @@ public: void loadDescription(FileSource&) final; + mapbox::base::WeakPtr<Source> makeWeakPtr() override { + return weakFactory.makeWeakPtr(); + } + private: optional<std::string> url; std::unique_ptr<AsyncRequest> req; + mapbox::base::WeakPtrFactory<Source> weakFactory {this}; }; template <> diff --git a/include/mbgl/style/sources/image_source.hpp b/include/mbgl/style/sources/image_source.hpp index 009764291f..84faab33c9 100644 --- a/include/mbgl/style/sources/image_source.hpp +++ b/include/mbgl/style/sources/image_source.hpp @@ -10,7 +10,7 @@ class AsyncRequest; namespace style { -class ImageSource : public Source { +class ImageSource final : public Source { public: ImageSource(std::string id, const std::array<LatLng, 4>); ~ImageSource() override; @@ -27,9 +27,14 @@ public: const Impl& impl() const; void loadDescription(FileSource&) final; + + mapbox::base::WeakPtr<Source> makeWeakPtr() override { + return weakFactory.makeWeakPtr(); + } private: optional<std::string> url; std::unique_ptr<AsyncRequest> req; + mapbox::base::WeakPtrFactory<Source> weakFactory {this}; }; template <> diff --git a/include/mbgl/style/sources/raster_source.hpp b/include/mbgl/style/sources/raster_source.hpp index 5aa81aa979..1bdced8da7 100644 --- a/include/mbgl/style/sources/raster_source.hpp +++ b/include/mbgl/style/sources/raster_source.hpp @@ -25,9 +25,14 @@ public: void loadDescription(FileSource&) final; + mapbox::base::WeakPtr<Source> makeWeakPtr() final { + return weakFactory.makeWeakPtr(); + } + private: const variant<std::string, Tileset> urlOrTileset; std::unique_ptr<AsyncRequest> req; + mapbox::base::WeakPtrFactory<Source> weakFactory {this}; }; template <> diff --git a/include/mbgl/style/sources/vector_source.hpp b/include/mbgl/style/sources/vector_source.hpp index 6f16974b40..ece7f5615a 100644 --- a/include/mbgl/style/sources/vector_source.hpp +++ b/include/mbgl/style/sources/vector_source.hpp @@ -10,7 +10,7 @@ class AsyncRequest; namespace style { -class VectorSource : public Source { +class VectorSource final : public Source { public: VectorSource(std::string id, variant<std::string, Tileset> urlOrTileset); ~VectorSource() final; @@ -23,9 +23,14 @@ public: void loadDescription(FileSource&) final; + mapbox::base::WeakPtr<Source> makeWeakPtr() override { + return weakFactory.makeWeakPtr(); + } + private: const variant<std::string, Tileset> urlOrTileset; std::unique_ptr<AsyncRequest> req; + mapbox::base::WeakPtrFactory<Source> weakFactory {this}; }; template <> diff --git a/src/mbgl/annotation/annotation_source.hpp b/src/mbgl/annotation/annotation_source.hpp index 0728f3207e..018e2136ea 100644 --- a/src/mbgl/annotation/annotation_source.hpp +++ b/src/mbgl/annotation/annotation_source.hpp @@ -5,17 +5,22 @@ namespace mbgl { -class AnnotationSource : public style::Source { +class AnnotationSource final : public style::Source { public: AnnotationSource(); class Impl; const Impl& impl() const; + mapbox::base::WeakPtr<Source> makeWeakPtr() override { + return weakFactory.makeWeakPtr(); + } + private: void loadDescription(FileSource&) final; Mutable<Impl> mutableImpl() const; + mapbox::base::WeakPtrFactory<Source> weakFactory {this}; }; class AnnotationSource::Impl : public style::Source::Impl { |