Introduce the style::Layer factory classes

This patch introduces the initial implementation of
- A `LayerFactory` abstract class that creates `style::Layer` instances of
  a certain layer type (line, hillshade, round, ..)
- A singleton `LayerManager` class, which is responsible for initializing
  the `LayerFactory` instances and forwarding the `create()` calls to the
  corresponding factory.
This commit is contained in:
Mikhail Pozdnyakov
2018-10-28 22:33:06 +02:00
parent 278aa33703
commit cfcb53128b
23 changed files with 400 additions and 114 deletions

View File

@@ -510,5 +510,21 @@ Mutable<Layer::Impl> RasterLayer::mutableBaseImpl() const {
return staticMutableCast<Layer::Impl>(mutableImpl());
}
RasterLayerFactory::~RasterLayerFactory() = default;
const char* RasterLayerFactory::type() const {
return "raster";
}
std::unique_ptr<style::Layer> RasterLayerFactory::createLayer(const std::string& id, const conversion::Convertible& value) {
optional<std::string> source = getSource(value);
if (!source) {
return nullptr;
}
std::unique_ptr<style::Layer> layer = std::unique_ptr<style::Layer>(new RasterLayer(id, *source));
return layer;
}
} // namespace style
} // namespace mbgl