[core] Eliminate Source dependency on TileSource

This commit is contained in:
John Firebaugh
2016-06-06 17:06:51 -07:00
committed by Konstantin Käfer
parent c3a8534a43
commit dbf16440a6
3 changed files with 15 additions and 6 deletions

View File

@@ -2,7 +2,6 @@
#include <mbgl/style/source_observer.hpp>
#include <mbgl/map/transform.hpp>
#include <mbgl/tile/tile.hpp>
#include <mbgl/tile/tile_source.hpp>
#include <mbgl/renderer/painter.hpp>
#include <mbgl/util/exception.hpp>
#include <mbgl/util/constants.hpp>
@@ -244,8 +243,8 @@ bool Source::update(const UpdateParameters& parameters) {
auto retainTileDataFn = [&retain](TileData& tileData, bool required) -> void {
retain.emplace(tileData.id);
tileData.getTileSource()->setNecessity(required ? TileSource::Necessity::Required
: TileSource::Necessity::Optional);
tileData.setNecessity(required ? TileData::Necessity::Required
: TileData::Necessity::Optional);
};
auto getTileDataFn = [this](const OverscaledTileID& dataTileID) -> TileData* {
return getTileData(dataTileID);
@@ -288,7 +287,7 @@ bool Source::update(const UpdateParameters& parameters) {
auto retainIt = retain.begin();
while (dataIt != tileDataMap.end()) {
if (retainIt == retain.end() || dataIt->first < *retainIt) {
dataIt->second->getTileSource()->setNecessity(TileSource::Necessity::Optional);
dataIt->second->setNecessity(TileData::Necessity::Optional);
cache.add(dataIt->first, std::move(dataIt->second));
tileDataMap.erase(dataIt++);
} else {

View File

@@ -24,6 +24,10 @@ void TileData::setTileSource(std::unique_ptr<TileSource> tileSource_) {
tileSource = std::move(tileSource_);
}
void TileData::setNecessity(Necessity necessity) {
tileSource->setNecessity(static_cast<TileSource::Necessity>(necessity));
}
void TileData::setTriedOptional() {
triedOptional = true;
observer->onNeedsRepaint();

View File

@@ -32,8 +32,13 @@ public:
virtual ~TileData();
void setObserver(TileDataObserver* observer);
void setTileSource(std::unique_ptr<TileSource>);
TileSource* getTileSource() { return tileSource.get(); }
enum class Necessity : bool {
Optional = false,
Required = true,
};
void setNecessity(Necessity);
// Mark this tile as no longer needed and cancel any pending work.
virtual void cancel() = 0;
@@ -99,6 +104,7 @@ protected:
DataAvailability availableData = DataAvailability::None;
void setTileSource(std::unique_ptr<TileSource>);
std::unique_ptr<TileSource> tileSource;
TileDataObserver* observer = nullptr;