#pragma once #include #include namespace mbgl { namespace style { class LayerProperties; } // namespace style class Bucket; class BucketParameters; class GeometryTileLayer; class Layout; class LayoutParameters; class RenderLayer; /** * @brief The LayerFactory abstract class * * This class is responsible for creation of the layer objects that belong to a concrete layer type. */ class LayerFactory { public: virtual ~LayerFactory() = default; /// Returns the layer type data. virtual const style::LayerTypeInfo* getTypeInfo() const noexcept = 0; /// Returns a new Layer instance on success call; returns `nullptr` otherwise. virtual std::unique_ptr createLayer(const std::string& id, const style::conversion::Convertible& value) noexcept = 0; /// Returns a new RenderLayer instance. virtual std::unique_ptr createRenderLayer(Immutable) noexcept = 0; /// Returns a new Bucket instance on success call; returns `nullptr` otherwise. virtual std::unique_ptr createBucket(const BucketParameters&, const std::vector>&) noexcept; /// Returns a new Layout instance on success call; returns `nullptr` otherwise. virtual std::unique_ptr createLayout(const LayoutParameters&, std::unique_ptr, const std::vector>&) noexcept; protected: optional getSource(const style::conversion::Convertible& value) const noexcept; bool initSourceLayerAndFilter(style::Layer*, const style::conversion::Convertible& value) const noexcept; }; } // namespace mbgl