#include #include #include #include #include #include #include #include #include #include #include #include #include namespace mbgl { namespace style { class LayerManagerBase : public LayerManager { public: LayerManagerBase(); private: // LayerManager overrides. std::unique_ptr createLayer(const std::string& type, const std::string& id, const conversion::Convertible& value, conversion::Error& error) noexcept final; std::vector> factories; }; LayerManagerBase::LayerManagerBase() { factories.emplace_back(std::unique_ptr(new FillLayerFactory)); factories.emplace_back(std::unique_ptr(new LineLayerFactory)); factories.emplace_back(std::unique_ptr(new CircleLayerFactory)); factories.emplace_back(std::unique_ptr(new SymbolLayerFactory)); factories.emplace_back(std::unique_ptr(new RasterLayerFactory)); factories.emplace_back(std::unique_ptr(new BackgroundLayerFactory)); factories.emplace_back(std::unique_ptr(new HillshadeLayerFactory)); factories.emplace_back(std::unique_ptr(new FillExtrusionLayerFactory)); factories.emplace_back(std::unique_ptr(new HeatmapLayerFactory)); } std::unique_ptr LayerManagerBase::createLayer(const std::string& type, const std::string& id, const conversion::Convertible& value, conversion::Error& error) noexcept { for (const auto& factory: factories) { if (factory->supportsType(type)) { auto layer = factory->createLayer(id, value); if (!layer) { error.message = "Error parsing a layer of type: " + type; } return layer; } } error.message = "Unsupported layer type: " + type; return nullptr; } // static LayerManager* LayerManager::get() noexcept { static LayerManagerBase impl; return &impl; } } // namespace style } // namespace mbgl