From eac6bdff16af09f8b3fc2f6d4a5bb781862b0f18 Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Wed, 15 Apr 2020 17:24:04 +0300 Subject: [core] Add style::Source::setVolatile()/isVolatile() API --- include/mbgl/style/source.hpp | 7 +++++-- src/mbgl/style/source.cpp | 12 ++++++++++++ src/mbgl/style/source_impl.hpp | 4 +++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/include/mbgl/style/source.hpp b/include/mbgl/style/source.hpp index a1650ad06a..e6208294ca 100644 --- a/include/mbgl/style/source.hpp +++ b/include/mbgl/style/source.hpp @@ -66,12 +66,14 @@ public: std::string getID() const; optional getAttribution() const; + // The data from the volatile sources are not stored in a persistent storage. + bool isVolatile() const noexcept; + void setVolatile(bool) noexcept; + // Private implementation class Impl; Immutable baseImpl; - Source(Immutable); - void setObserver(SourceObserver*); SourceObserver* observer = nullptr; @@ -114,6 +116,7 @@ public: virtual mapbox::base::WeakPtr makeWeakPtr() = 0; protected: + explicit Source(Immutable); virtual Mutable createMutable() const noexcept = 0; }; diff --git a/src/mbgl/style/source.cpp b/src/mbgl/style/source.cpp index 42ad367d66..b2a9473fe6 100644 --- a/src/mbgl/style/source.cpp +++ b/src/mbgl/style/source.cpp @@ -27,6 +27,18 @@ optional Source::getAttribution() const { return baseImpl->getAttribution(); } +bool Source::isVolatile() const noexcept { + return baseImpl->isVolatile(); +} + +void Source::setVolatile(bool set) noexcept { + if (isVolatile() == set) return; + auto newImpl = createMutable(); + newImpl->setVolatile(set); + baseImpl = std::move(newImpl); + observer->onSourceChanged(*this); +} + void Source::setObserver(SourceObserver* observer_) { observer = observer_ ? observer_ : &nullObserver; } diff --git a/src/mbgl/style/source_impl.hpp b/src/mbgl/style/source_impl.hpp index b16b763766..87a30dcf95 100644 --- a/src/mbgl/style/source_impl.hpp +++ b/src/mbgl/style/source_impl.hpp @@ -1,7 +1,6 @@ #pragma once #include -#include #include @@ -27,6 +26,8 @@ public: void setMaxOverscaleFactorForParentTiles(optional overscaleFactor) noexcept; optional getMaxOverscaleFactorForParentTiles() const noexcept; + bool isVolatile() const { return volatileFlag; } + void setVolatile(bool set) { volatileFlag = set; } const SourceType type; const std::string id; @@ -34,6 +35,7 @@ protected: optional prefetchZoomDelta; optional maxOverscaleFactor; Duration minimumTileUpdateInterval{Duration::zero()}; + bool volatileFlag = false; Impl(SourceType, std::string); Impl(const Impl&) = default; -- cgit v1.2.1