From 9b0093e32dece62abc6fd7add789613871252a58 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 13 Jun 2016 11:38:18 -0700 Subject: [core] Introduce source subclasses --- src/mbgl/annotation/annotation_manager.cpp | 4 ++-- src/mbgl/annotation/annotation_source.cpp | 13 ++++++++++ src/mbgl/annotation/annotation_source.hpp | 16 +++++++++++++ src/mbgl/style/parser.cpp | 38 ++++++++++++++++++------------ src/mbgl/style/sources/geojson_source.cpp | 15 ++++++++++++ src/mbgl/style/sources/geojson_source.hpp | 18 ++++++++++++++ src/mbgl/style/sources/raster_source.cpp | 15 ++++++++++++ src/mbgl/style/sources/raster_source.hpp | 18 ++++++++++++++ src/mbgl/style/sources/vector_source.cpp | 15 ++++++++++++ src/mbgl/style/sources/vector_source.hpp | 18 ++++++++++++++ test/style/source.cpp | 25 +++++++++++--------- 11 files changed, 167 insertions(+), 28 deletions(-) create mode 100644 src/mbgl/annotation/annotation_source.cpp create mode 100644 src/mbgl/annotation/annotation_source.hpp create mode 100644 src/mbgl/style/sources/geojson_source.cpp create mode 100644 src/mbgl/style/sources/geojson_source.hpp create mode 100644 src/mbgl/style/sources/raster_source.cpp create mode 100644 src/mbgl/style/sources/raster_source.hpp create mode 100644 src/mbgl/style/sources/vector_source.cpp create mode 100644 src/mbgl/style/sources/vector_source.hpp diff --git a/src/mbgl/annotation/annotation_manager.cpp b/src/mbgl/annotation/annotation_manager.cpp index 29062383be..71dca16359 100644 --- a/src/mbgl/annotation/annotation_manager.cpp +++ b/src/mbgl/annotation/annotation_manager.cpp @@ -1,10 +1,10 @@ #include +#include #include #include #include #include #include -#include #include #include #include @@ -107,7 +107,7 @@ std::unique_ptr AnnotationManager::getTileData(const Canonic void AnnotationManager::updateStyle(Style& style) { // Create annotation source, point layer, and point bucket if (!style.getSource(SourceID)) { - std::unique_ptr source = std::make_unique(SourceType::Annotations, SourceID, "", util::tileSize, std::make_unique(), nullptr); + std::unique_ptr source = std::make_unique(SourceID, "", util::tileSize, std::make_unique(), nullptr); source->enabled = true; style.addSource(std::move(source)); diff --git a/src/mbgl/annotation/annotation_source.cpp b/src/mbgl/annotation/annotation_source.cpp new file mode 100644 index 0000000000..8e2a5b22eb --- /dev/null +++ b/src/mbgl/annotation/annotation_source.cpp @@ -0,0 +1,13 @@ +#include + +namespace mbgl { + +AnnotationSource::AnnotationSource(std::string id_, + std::string url_, + uint16_t tileSize_, + std::unique_ptr&& tileset_, + std::unique_ptr&& geojsonvt_) + : Source(SourceType::Annotations, std::move(id_), std::move(url_), tileSize_, std::move(tileset_), std::move(geojsonvt_)) { +} + +} // namespace mbgl diff --git a/src/mbgl/annotation/annotation_source.hpp b/src/mbgl/annotation/annotation_source.hpp new file mode 100644 index 0000000000..6af38f76b4 --- /dev/null +++ b/src/mbgl/annotation/annotation_source.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include + +namespace mbgl { + +class AnnotationSource : public style::Source { +public: + AnnotationSource(std::string id, + std::string url, + uint16_t tileSize, + std::unique_ptr&&, + std::unique_ptr&&); +}; + +} // namespace mbgl diff --git a/src/mbgl/style/parser.cpp b/src/mbgl/style/parser.cpp index 870fd6d71e..0a11d6f978 100644 --- a/src/mbgl/style/parser.cpp +++ b/src/mbgl/style/parser.cpp @@ -1,4 +1,7 @@ #include +#include +#include +#include #include #include #include @@ -182,6 +185,21 @@ void Parser::parseSources(const JSValue& value) { std::unique_ptr tileset; std::unique_ptr geojsonvt; + const std::string id { nameVal.GetString(), nameVal.GetStringLength() }; + std::unique_ptr source; + + if (sourceVal.HasMember("url")) { + const JSValue& urlVal = sourceVal["url"]; + if (urlVal.IsString()) { + url = { urlVal.GetString(), urlVal.GetStringLength() }; + } else { + Log::Error(Event::ParseStyle, "source url must be a string"); + continue; + } + } else { + tileset = parseTileJSON(sourceVal); + } + switch (*type) { case SourceType::Raster: if (sourceVal.HasMember("tileSize")) { @@ -193,20 +211,12 @@ void Parser::parseSources(const JSValue& value) { continue; } } - // Fall through. Vector sources are forbidden from having a tileSize. + + source = std::make_unique(id, url, tileSize, std::move(tileset), std::move(geojsonvt)); + break; case SourceType::Vector: - if (sourceVal.HasMember("url")) { - const JSValue& urlVal = sourceVal["url"]; - if (urlVal.IsString()) { - url = { urlVal.GetString(), urlVal.GetStringLength() }; - } else { - Log::Error(Event::ParseStyle, "source url must be a string"); - continue; - } - } else { - tileset = parseTileJSON(sourceVal); - } + source = std::make_unique(id, url, tileSize, std::move(tileset), std::move(geojsonvt)); break; case SourceType::GeoJSON: @@ -233,6 +243,7 @@ void Parser::parseSources(const JSValue& value) { continue; } + source = std::make_unique(id, url, tileSize, std::move(tileset), std::move(geojsonvt)); break; default: @@ -240,9 +251,6 @@ void Parser::parseSources(const JSValue& value) { continue; } - const std::string id { nameVal.GetString(), nameVal.GetStringLength() }; - std::unique_ptr source = std::make_unique(*type, id, url, tileSize, std::move(tileset), std::move(geojsonvt)); - sourcesMap.emplace(id, source.get()); sources.emplace_back(std::move(source)); } diff --git a/src/mbgl/style/sources/geojson_source.cpp b/src/mbgl/style/sources/geojson_source.cpp new file mode 100644 index 0000000000..785c8a3eb0 --- /dev/null +++ b/src/mbgl/style/sources/geojson_source.cpp @@ -0,0 +1,15 @@ +#include + +namespace mbgl { +namespace style { + +GeoJSONSource::GeoJSONSource(std::string id_, + std::string url_, + uint16_t tileSize_, + std::unique_ptr&& tileset_, + std::unique_ptr&& geojsonvt_) + : Source(SourceType::GeoJSON, std::move(id_), std::move(url_), tileSize_, std::move(tileset_), std::move(geojsonvt_)) { +} + +} // namespace style +} // namespace mbgl diff --git a/src/mbgl/style/sources/geojson_source.hpp b/src/mbgl/style/sources/geojson_source.hpp new file mode 100644 index 0000000000..d9f8cb4c62 --- /dev/null +++ b/src/mbgl/style/sources/geojson_source.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include + +namespace mbgl { +namespace style { + +class GeoJSONSource : public Source { +public: + GeoJSONSource(std::string id, + std::string url, + uint16_t tileSize, + std::unique_ptr&&, + std::unique_ptr&&); +}; + +} // namespace style +} // namespace mbgl diff --git a/src/mbgl/style/sources/raster_source.cpp b/src/mbgl/style/sources/raster_source.cpp new file mode 100644 index 0000000000..d0f525894a --- /dev/null +++ b/src/mbgl/style/sources/raster_source.cpp @@ -0,0 +1,15 @@ +#include + +namespace mbgl { +namespace style { + +RasterSource::RasterSource(std::string id_, + std::string url_, + uint16_t tileSize_, + std::unique_ptr&& tileset_, + std::unique_ptr&& geojsonvt_) + : Source(SourceType::Raster, std::move(id_), std::move(url_), tileSize_, std::move(tileset_), std::move(geojsonvt_)) { +} + +} // namespace style +} // namespace mbgl diff --git a/src/mbgl/style/sources/raster_source.hpp b/src/mbgl/style/sources/raster_source.hpp new file mode 100644 index 0000000000..1b04865464 --- /dev/null +++ b/src/mbgl/style/sources/raster_source.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include + +namespace mbgl { +namespace style { + +class RasterSource : public Source { +public: + RasterSource(std::string id, + std::string url, + uint16_t tileSize, + std::unique_ptr&&, + std::unique_ptr&&); +}; + +} // namespace style +} // namespace mbgl diff --git a/src/mbgl/style/sources/vector_source.cpp b/src/mbgl/style/sources/vector_source.cpp new file mode 100644 index 0000000000..6cbb667c40 --- /dev/null +++ b/src/mbgl/style/sources/vector_source.cpp @@ -0,0 +1,15 @@ +#include + +namespace mbgl { +namespace style { + +VectorSource::VectorSource(std::string id_, + std::string url_, + uint16_t tileSize_, + std::unique_ptr&& tileset_, + std::unique_ptr&& geojsonvt_) + : Source(SourceType::Vector, std::move(id_), std::move(url_), tileSize_, std::move(tileset_), std::move(geojsonvt_)) { +} + +} // namespace style +} // namespace mbgl diff --git a/src/mbgl/style/sources/vector_source.hpp b/src/mbgl/style/sources/vector_source.hpp new file mode 100644 index 0000000000..e3a14a7531 --- /dev/null +++ b/src/mbgl/style/sources/vector_source.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include + +namespace mbgl { +namespace style { + +class VectorSource : public Source { +public: + VectorSource(std::string id, + std::string url, + uint16_t tileSize, + std::unique_ptr&&, + std::unique_ptr&&); +}; + +} // namespace style +} // namespace mbgl diff --git a/test/style/source.cpp b/test/style/source.cpp index ae8fb54d2f..6828042c6a 100644 --- a/test/style/source.cpp +++ b/test/style/source.cpp @@ -2,7 +2,10 @@ #include #include -#include +#include +#include +#include + #include #include #include @@ -83,7 +86,7 @@ TEST(Source, LoadingFail) { test.end(); }; - Source source(SourceType::Vector, "source", "url", 512, nullptr, nullptr); + VectorSource source("source", "url", 512, nullptr, nullptr); source.setObserver(&test.observer); source.load(test.fileSource); @@ -106,7 +109,7 @@ TEST(Source, LoadingCorrupt) { test.end(); }; - Source source(SourceType::Vector, "source", "url", 512, nullptr, nullptr); + VectorSource source("source", "url", 512, nullptr, nullptr); source.setObserver(&test.observer); source.load(test.fileSource); @@ -134,7 +137,7 @@ TEST(Source, RasterTileEmpty) { auto tileset = std::make_unique(); tileset->tiles = { "tiles" }; - Source source(SourceType::Raster, "source", "", 512, std::move(tileset), nullptr); + RasterSource source("source", "", 512, std::move(tileset), nullptr); source.setObserver(&test.observer); source.load(test.fileSource); source.update(test.updateParameters); @@ -163,7 +166,7 @@ TEST(Source, VectorTileEmpty) { auto tileset = std::make_unique(); tileset->tiles = { "tiles" }; - Source source(SourceType::Vector, "source", "", 512, std::move(tileset), nullptr); + VectorSource source("source", "", 512, std::move(tileset), nullptr); source.setObserver(&test.observer); source.load(test.fileSource); source.update(test.updateParameters); @@ -192,7 +195,7 @@ TEST(Source, RasterTileFail) { auto tileset = std::make_unique(); tileset->tiles = { "tiles" }; - Source source(SourceType::Raster, "source", "", 512, std::move(tileset), nullptr); + RasterSource source("source", "", 512, std::move(tileset), nullptr); source.setObserver(&test.observer); source.load(test.fileSource); source.update(test.updateParameters); @@ -221,7 +224,7 @@ TEST(Source, VectorTileFail) { auto tileset = std::make_unique(); tileset->tiles = { "tiles" }; - Source source(SourceType::Vector, "source", "", 512, std::move(tileset), nullptr); + VectorSource source("source", "", 512, std::move(tileset), nullptr); source.setObserver(&test.observer); source.load(test.fileSource); source.update(test.updateParameters); @@ -249,7 +252,7 @@ TEST(Source, RasterTileCorrupt) { auto tileset = std::make_unique(); tileset->tiles = { "tiles" }; - Source source(SourceType::Raster, "source", "", 512, std::move(tileset), nullptr); + RasterSource source("source", "", 512, std::move(tileset), nullptr); source.setObserver(&test.observer); source.load(test.fileSource); source.update(test.updateParameters); @@ -281,7 +284,7 @@ TEST(Source, VectorTileCorrupt) { auto tileset = std::make_unique(); tileset->tiles = { "tiles" }; - Source source(SourceType::Vector, "source", "", 512, std::move(tileset), nullptr); + VectorSource source("source", "", 512, std::move(tileset), nullptr); source.setObserver(&test.observer); source.load(test.fileSource); source.update(test.updateParameters); @@ -308,7 +311,7 @@ TEST(Source, RasterTileCancel) { auto tileset = std::make_unique(); tileset->tiles = { "tiles" }; - Source source(SourceType::Raster, "source", "", 512, std::move(tileset), nullptr); + RasterSource source("source", "", 512, std::move(tileset), nullptr); source.setObserver(&test.observer); source.load(test.fileSource); source.update(test.updateParameters); @@ -335,7 +338,7 @@ TEST(Source, VectorTileCancel) { auto tileset = std::make_unique(); tileset->tiles = { "tiles" }; - Source source(SourceType::Vector, "source", "", 512, std::move(tileset), nullptr); + VectorSource source("source", "", 512, std::move(tileset), nullptr); source.setObserver(&test.observer); source.load(test.fileSource); source.update(test.updateParameters); -- cgit v1.2.1