[core] Push Source::tileset down to TileSource

This commit is contained in:
John Firebaugh
2016-06-14 10:55:58 -07:00
parent 755cc80edf
commit 9dfcb95e4f
12 changed files with 32 additions and 29 deletions

View File

@@ -4,10 +4,12 @@
#include <mbgl/storage/resource.hpp>
#include <mbgl/storage/response.hpp>
#include <mbgl/style/parser.hpp>
#include <mbgl/style/tile_source.hpp>
#include <mbgl/text/glyph.hpp>
#include <mbgl/util/tile_cover.hpp>
#include <mbgl/util/mapbox.hpp>
#include <mbgl/util/run_loop.hpp>
#include <mbgl/util/tileset.hpp>
#include <set>
@@ -102,9 +104,10 @@ OfflineRegionStatus OfflineDownload::getStatus() const {
for (const auto& source : parser.sources) {
switch (source->type) {
case SourceType::Vector:
case SourceType::Raster:
if (source->getTileset()) {
result.requiredResourceCount += tileResources(source->type, source->tileSize, *source->getTileset()).size();
case SourceType::Raster: {
style::TileSource* tileSource = static_cast<style::TileSource*>(source.get());
if (tileSource->getTileset()) {
result.requiredResourceCount += tileResources(source->type, source->tileSize, *tileSource->getTileset()).size();
} else {
result.requiredResourceCount += 1;
optional<Response> sourceResponse = offlineDatabase.get(Resource::source(source->url));
@@ -116,6 +119,7 @@ OfflineRegionStatus OfflineDownload::getStatus() const {
}
}
break;
}
case SourceType::GeoJSON:
if (!source->url.empty()) {
@@ -154,9 +158,10 @@ void OfflineDownload::activateDownload() {
switch (type) {
case SourceType::Vector:
case SourceType::Raster:
if (source->getTileset()) {
ensureTiles(type, tileSize, *source->getTileset());
case SourceType::Raster: {
style::TileSource* tileSource = static_cast<style::TileSource*>(source.get());
if (tileSource->getTileset()) {
ensureTiles(type, tileSize, *tileSource->getTileset());
} else {
status.requiredResourceCountIsPrecise = false;
requiredSourceURLs.insert(url);
@@ -171,6 +176,7 @@ void OfflineDownload::activateDownload() {
});
}
break;
}
case SourceType::GeoJSON:
if (!source->url.empty()) {

View File

@@ -5,7 +5,7 @@
namespace mbgl {
AnnotationSource::AnnotationSource()
: Source(SourceType::Annotations, AnnotationManager::SourceID, "", util::tileSize, std::make_unique<Tileset>()) {
: Source(SourceType::Annotations, AnnotationManager::SourceID, "", util::tileSize) {
}
Range<uint8_t> AnnotationSource::getZoomRange() {

View File

@@ -15,6 +15,7 @@
#include <mbgl/tile/geometry_tile_data.hpp>
#include <mbgl/util/mapbox.hpp>
#include <mbgl/util/enum.hpp>
#include <mbgl/util/tileset.hpp>
#include <rapidjson/document.h>
#include <rapidjson/error/en.h>

View File

@@ -14,6 +14,9 @@
#include <forward_list>
namespace mbgl {
class Tileset;
namespace style {
std::unique_ptr<Tileset> parseTileJSON(const std::string& json, const std::string& sourceURL, SourceType, uint16_t tileSize);

View File

@@ -35,13 +35,11 @@ static SourceObserver nullObserver;
Source::Source(SourceType type_,
std::string id_,
std::string url_,
uint16_t tileSize_,
std::unique_ptr<Tileset>&& tileset_)
uint16_t tileSize_)
: type(type_),
id(std::move(id_)),
url(std::move(url_)),
tileSize(tileSize_),
tileset(std::move(tileset_)),
observer(&nullObserver) {
}

View File

@@ -10,9 +10,8 @@
#include <mbgl/util/mat4.hpp>
#include <mbgl/util/rapidjson.hpp>
#include <mbgl/util/feature.hpp>
#include <mbgl/util/tileset.hpp>
#include <mbgl/util/range.hpp>
#include <forward_list>
#include <vector>
#include <map>
@@ -36,16 +35,13 @@ public:
Source(SourceType,
std::string id,
std::string url,
uint16_t tileSize,
std::unique_ptr<Tileset>&&);
uint16_t tileSize);
~Source() override;
bool loaded = false;
virtual void load(FileSource&) = 0;
bool isLoaded() const;
const Tileset* getTileset() const { return tileset.get(); }
// Request or parse all the tiles relevant for the "TransformState". This method
// will return true if all the tiles were scheduled for updating of false if
// they were not. shouldReparsePartialTiles must be set to "true" if there is
@@ -91,8 +87,6 @@ private:
protected:
void invalidateTiles();
std::unique_ptr<const Tileset> tileset;
SourceObserver* observer = nullptr;
private:

View File

@@ -34,7 +34,6 @@ std::unique_ptr<mapbox::geojsonvt::GeoJSONVT> parseGeoJSON(const JSValue& value)
std::unique_ptr<GeoJSONSource> GeoJSONSource::parse(const std::string& id,
const JSValue& value) {
auto tileset = std::make_unique<Tileset>();
std::unique_ptr<mapbox::geojsonvt::GeoJSONVT> geojsonvt;
std::string url;
@@ -58,14 +57,13 @@ std::unique_ptr<GeoJSONSource> GeoJSONSource::parse(const std::string& id,
return nullptr;
}
return std::make_unique<GeoJSONSource>(id, url, std::move(tileset), std::move(geojsonvt));
return std::make_unique<GeoJSONSource>(id, url, std::move(geojsonvt));
}
GeoJSONSource::GeoJSONSource(std::string id_,
std::string url_,
std::unique_ptr<Tileset>&& tileset_,
std::unique_ptr<mapbox::geojsonvt::GeoJSONVT>&& geojsonvt_)
: Source(SourceType::GeoJSON, std::move(id_), std::move(url_), util::tileSize, std::move(tileset_)),
: Source(SourceType::GeoJSON, std::move(id_), std::move(url_), util::tileSize),
geojsonvt(std::move(geojsonvt_)) {
}
@@ -94,8 +92,6 @@ void GeoJSONSource::load(FileSource& fileSource) {
} else if (res.noContent) {
observer->onSourceError(*this, std::make_exception_ptr(std::runtime_error("unexpectedly empty GeoJSON")));
} else {
std::unique_ptr<Tileset> newTileset = std::make_unique<Tileset>();
rapidjson::GenericDocument<rapidjson::UTF8<>, rapidjson::CrtAllocator> d;
d.Parse<0>(res.data->c_str());
@@ -107,11 +103,9 @@ void GeoJSONSource::load(FileSource& fileSource) {
}
geojsonvt = style::parseGeoJSON(d);
newTileset->zoomRange.max = geojsonvt->options.maxZoom;
invalidateTiles();
tileset = std::move(newTileset);
loaded = true;
observer->onSourceLoaded(*this);
}

View File

@@ -23,7 +23,6 @@ public:
GeoJSONSource(std::string id,
std::string url,
std::unique_ptr<Tileset>&&,
std::unique_ptr<mapbox::geojsonvt::GeoJSONVT>&&);
~GeoJSONSource() final;

View File

@@ -1,6 +1,7 @@
#include <mbgl/style/tile_source.hpp>
#include <mbgl/style/source_observer.hpp>
#include <mbgl/style/parser.hpp>
#include <mbgl/util/tileset.hpp>
#include <mbgl/storage/file_source.hpp>
namespace mbgl {
@@ -11,7 +12,8 @@ TileSource::TileSource(SourceType type_,
std::string url_,
uint16_t tileSize_,
std::unique_ptr<Tileset>&& tileset_)
: Source(type_, std::move(id_), std::move(url_), tileSize_, std::move(tileset_)) {
: Source(type_, std::move(id_), std::move(url_), tileSize_),
tileset(std::move(tileset_)) {
}
TileSource::~TileSource() = default;

View File

@@ -4,6 +4,7 @@
namespace mbgl {
class Tileset;
class AsyncRequest;
namespace style {
@@ -23,9 +24,12 @@ public:
void load(FileSource&) final;
private:
const Tileset* getTileset() const { return tileset.get(); }
protected:
Range<uint8_t> getZoomRange() final;
std::unique_ptr<const Tileset> tileset;
std::unique_ptr<AsyncRequest> req;
};

View File

@@ -9,6 +9,7 @@
#include <mbgl/util/run_loop.hpp>
#include <mbgl/util/string.hpp>
#include <mbgl/util/io.hpp>
#include <mbgl/util/tileset.hpp>
#include <mbgl/platform/log.hpp>
#include <mbgl/map/transform.hpp>

View File

@@ -4,6 +4,7 @@
#include <mbgl/style/parser.hpp>
#include <mbgl/util/io.hpp>
#include <mbgl/util/enum.hpp>
#include <mbgl/util/tileset.hpp>
#include <rapidjson/document.h>