diff options
Diffstat (limited to 'include/mbgl/style')
-rw-r--r-- | include/mbgl/style/source.hpp | 63 | ||||
-rw-r--r-- | include/mbgl/style/sources/geojson_source.hpp | 27 | ||||
-rw-r--r-- | include/mbgl/style/sources/raster_source.hpp | 20 | ||||
-rw-r--r-- | include/mbgl/style/sources/vector_source.hpp | 20 |
4 files changed, 130 insertions, 0 deletions
diff --git a/include/mbgl/style/source.hpp b/include/mbgl/style/source.hpp new file mode 100644 index 0000000000..92341066b1 --- /dev/null +++ b/include/mbgl/style/source.hpp @@ -0,0 +1,63 @@ +#pragma once + +#include <mbgl/util/noncopyable.hpp> +#include <mbgl/style/types.hpp> + +#include <memory> +#include <string> + +namespace mbgl { +namespace style { + +/** + * The runtime representation of a [source](https://www.mapbox.com/mapbox-gl-style-spec/#sources) from the Mapbox Style + * Specification. + * + * `Source` is an abstract base class; concrete derived classes are provided for each source type. `Source` contains + * functionality that is common to all layer types: + * + * * Runtime type information: type predicates and casting + * * Accessors for properties common to all source types: ID, etc. + * * Cloning and copying + * + * All other functionality lives in the derived classes. To instantiate a source, create an instance of the desired + * type, passing the ID: + * + * auto vectorSource = std::make_unique<VectorSource>("my-vector-source"); + */ +class Source : public mbgl::util::noncopyable { +public: + virtual ~Source(); + + // Check whether this source is of the given subtype. + template <class T> + bool is() const; + + // Dynamically cast this source to the given subtype. + template <class T> + T* as() { + return is<T>() ? reinterpret_cast<T*>(this) : nullptr; + } + + template <class T> + const T* as() const { + return is<T>() ? reinterpret_cast<const T*>(this) : nullptr; + } + + const std::string& getID() const; + + // Create a new source with the specified `id`. All other properties + // are copied from this source. + std::unique_ptr<Source> copy(const std::string& id) const; + + // Private implementation + class Impl; + const std::unique_ptr<Impl> baseImpl; + +protected: + const SourceType type; + Source(SourceType, std::unique_ptr<Impl>); +}; + +} // namespace style +} // namespace mbgl diff --git a/include/mbgl/style/sources/geojson_source.hpp b/include/mbgl/style/sources/geojson_source.hpp new file mode 100644 index 0000000000..96b9a99606 --- /dev/null +++ b/include/mbgl/style/sources/geojson_source.hpp @@ -0,0 +1,27 @@ +#pragma once + +#include <mbgl/style/source.hpp> + +namespace mbgl { +namespace style { + +class GeoJSONSource : public Source { +public: + // Future public API: + // void setData(FeatureCollection&&); + // void setJSON(const std::string& json); + // void loadData(const std::string& url); + + + // Private implementation + + class Impl; + + template <class Fn> + GeoJSONSource(Fn&& fn) + : Source(SourceType::GeoJSON, fn(*this)) { + } +}; + +} // namespace style +} // namespace mbgl diff --git a/include/mbgl/style/sources/raster_source.hpp b/include/mbgl/style/sources/raster_source.hpp new file mode 100644 index 0000000000..2d1d648eec --- /dev/null +++ b/include/mbgl/style/sources/raster_source.hpp @@ -0,0 +1,20 @@ +#pragma once + +#include <mbgl/style/source.hpp> +#include <mbgl/util/tileset.hpp> +#include <mbgl/util/variant.hpp> + +namespace mbgl { +namespace style { + +class RasterSource : public Source { +public: + RasterSource(std::string id, variant<std::string, Tileset> urlOrTileset, uint16_t tileSize); + + // Private implementation + + class Impl; +}; + +} // namespace style +} // namespace mbgl diff --git a/include/mbgl/style/sources/vector_source.hpp b/include/mbgl/style/sources/vector_source.hpp new file mode 100644 index 0000000000..3d53362734 --- /dev/null +++ b/include/mbgl/style/sources/vector_source.hpp @@ -0,0 +1,20 @@ +#pragma once + +#include <mbgl/style/source.hpp> +#include <mbgl/util/tileset.hpp> +#include <mbgl/util/variant.hpp> + +namespace mbgl { +namespace style { + +class VectorSource : public Source { +public: + VectorSource(std::string id, variant<std::string, Tileset> urlOrTileset); + + // Private implementation + + class Impl; +}; + +} // namespace style +} // namespace mbgl |