diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-08-16 15:34:07 +0200 |
---|---|---|
committer | Łukasz Paczos <lukasz.paczos@mapbox.com> | 2019-08-27 13:06:00 +0200 |
commit | cd6e24c2c598b7489e8e3d65dffcb8f1803ba606 (patch) | |
tree | a36f74d8e9d7e9645bfdbf472f1be3fac7f06220 | |
parent | 847eebe07a1425e967c29a70c3d5a3d2c2b91708 (diff) | |
download | qtlocation-mapboxgl-cd6e24c2c598b7489e8e3d65dffcb8f1803ba606.tar.gz |
[core] Fix layer impl cast in render layer implementations
This PR puts `impl()` functions definitions into a nameless namespace
to provide internal linkage and to make sure that appropriate cast function
is invoked.
(cherry picked from commit c7169e6f8db6436444858f07045edaba693b9223)
10 files changed, 46 insertions, 0 deletions
diff --git a/src/mbgl/renderer/layers/render_background_layer.cpp b/src/mbgl/renderer/layers/render_background_layer.cpp index 885b6fe9b2..98449318e7 100644 --- a/src/mbgl/renderer/layers/render_background_layer.cpp +++ b/src/mbgl/renderer/layers/render_background_layer.cpp @@ -16,10 +16,15 @@ namespace mbgl { using namespace style; +namespace { + inline const BackgroundLayer::Impl& impl(const Immutable<style::Layer::Impl>& impl) { + assert(impl->getTypeInfo() == BackgroundLayer::Impl::staticTypeInfo()); return static_cast<const style::BackgroundLayer::Impl&>(*impl); } +} // namespace + RenderBackgroundLayer::RenderBackgroundLayer(Immutable<style::BackgroundLayer::Impl> _impl) : RenderLayer(makeMutable<BackgroundLayerProperties>(std::move(_impl))), unevaluated(impl(baseImpl).paint.untransitioned()) { diff --git a/src/mbgl/renderer/layers/render_circle_layer.cpp b/src/mbgl/renderer/layers/render_circle_layer.cpp index cf59319307..d633e30778 100644 --- a/src/mbgl/renderer/layers/render_circle_layer.cpp +++ b/src/mbgl/renderer/layers/render_circle_layer.cpp @@ -15,10 +15,15 @@ namespace mbgl { using namespace style; +namespace { + inline const style::CircleLayer::Impl& impl(const Immutable<style::Layer::Impl>& impl) { + assert(impl->getTypeInfo() == CircleLayer::Impl::staticTypeInfo()); return static_cast<const style::CircleLayer::Impl&>(*impl); } +} // namespace + RenderCircleLayer::RenderCircleLayer(Immutable<style::CircleLayer::Impl> _impl) : RenderLayer(makeMutable<CircleLayerProperties>(std::move(_impl))), unevaluated(impl(baseImpl).paint.untransitioned()) { diff --git a/src/mbgl/renderer/layers/render_custom_layer.cpp b/src/mbgl/renderer/layers/render_custom_layer.cpp index 75c21997b0..c53286a2a0 100644 --- a/src/mbgl/renderer/layers/render_custom_layer.cpp +++ b/src/mbgl/renderer/layers/render_custom_layer.cpp @@ -14,10 +14,15 @@ namespace mbgl { using namespace style; +namespace { + inline const CustomLayer::Impl& impl(const Immutable<style::Layer::Impl>& impl) { + assert(impl->getTypeInfo() == CustomLayer::Impl::staticTypeInfo()); return static_cast<const CustomLayer::Impl&>(*impl); } +} // namespace + RenderCustomLayer::RenderCustomLayer(Immutable<style::CustomLayer::Impl> _impl) : RenderLayer(makeMutable<CustomLayerProperties>(std::move(_impl))), host(impl(baseImpl).host) { diff --git a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp index 3c97ab7431..835e8c8ee5 100644 --- a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp @@ -20,10 +20,15 @@ namespace mbgl { using namespace style; +namespace { + inline const FillExtrusionLayer::Impl& impl(const Immutable<style::Layer::Impl>& impl) { + assert(impl->getTypeInfo() == FillExtrusionLayer::Impl::staticTypeInfo()); return static_cast<const FillExtrusionLayer::Impl&>(*impl); } +} // namespace + RenderFillExtrusionLayer::RenderFillExtrusionLayer(Immutable<style::FillExtrusionLayer::Impl> _impl) : RenderLayer(makeMutable<FillExtrusionLayerProperties>(std::move(_impl))), unevaluated(impl(baseImpl).paint.untransitioned()) { diff --git a/src/mbgl/renderer/layers/render_fill_layer.cpp b/src/mbgl/renderer/layers/render_fill_layer.cpp index cf31201d77..28e84113c1 100644 --- a/src/mbgl/renderer/layers/render_fill_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_layer.cpp @@ -21,10 +21,15 @@ namespace mbgl { using namespace style; +namespace { + inline const FillLayer::Impl& impl(const Immutable<style::Layer::Impl>& impl) { + assert(impl->getTypeInfo() == FillLayer::Impl::staticTypeInfo()); return static_cast<const FillLayer::Impl&>(*impl); } +} // namespace + RenderFillLayer::RenderFillLayer(Immutable<style::FillLayer::Impl> _impl) : RenderLayer(makeMutable<FillLayerProperties>(std::move(_impl))), unevaluated(impl(baseImpl).paint.untransitioned()) { diff --git a/src/mbgl/renderer/layers/render_heatmap_layer.cpp b/src/mbgl/renderer/layers/render_heatmap_layer.cpp index 478a8f8c47..4fa20ffd13 100644 --- a/src/mbgl/renderer/layers/render_heatmap_layer.cpp +++ b/src/mbgl/renderer/layers/render_heatmap_layer.cpp @@ -19,10 +19,15 @@ namespace mbgl { using namespace style; +namespace { + inline const HeatmapLayer::Impl& impl(const Immutable<Layer::Impl>& impl) { + assert(impl->getTypeInfo() == HeatmapLayer::Impl::staticTypeInfo()); return static_cast<const HeatmapLayer::Impl&>(*impl); } +} // namespace + RenderHeatmapLayer::RenderHeatmapLayer(Immutable<HeatmapLayer::Impl> _impl) : RenderLayer(makeMutable<HeatmapLayerProperties>(std::move(_impl))), unevaluated(impl(baseImpl).paint.untransitioned()), colorRamp({256, 1}) { diff --git a/src/mbgl/renderer/layers/render_hillshade_layer.cpp b/src/mbgl/renderer/layers/render_hillshade_layer.cpp index 2c7e0aef86..a3b96721a4 100644 --- a/src/mbgl/renderer/layers/render_hillshade_layer.cpp +++ b/src/mbgl/renderer/layers/render_hillshade_layer.cpp @@ -18,10 +18,15 @@ namespace mbgl { using namespace style; +namespace { + inline const HillshadeLayer::Impl& impl(const Immutable<style::Layer::Impl>& impl) { + assert(impl->getTypeInfo() == HillshadeLayer::Impl::staticTypeInfo()); return static_cast<const HillshadeLayer::Impl&>(*impl); } +} // namespace + RenderHillshadeLayer::RenderHillshadeLayer(Immutable<style::HillshadeLayer::Impl> _impl) : RenderLayer(makeMutable<HillshadeLayerProperties>(std::move(_impl))), unevaluated(impl(baseImpl).paint.untransitioned()) { diff --git a/src/mbgl/renderer/layers/render_line_layer.cpp b/src/mbgl/renderer/layers/render_line_layer.cpp index 5c56826bd7..16ca2084c7 100644 --- a/src/mbgl/renderer/layers/render_line_layer.cpp +++ b/src/mbgl/renderer/layers/render_line_layer.cpp @@ -20,10 +20,15 @@ namespace mbgl { using namespace style; +namespace { + inline const LineLayer::Impl& impl(const Immutable<style::Layer::Impl>& impl) { + assert(impl->getTypeInfo() == LineLayer::Impl::staticTypeInfo()); return static_cast<const LineLayer::Impl&>(*impl); } +} // namespace + RenderLineLayer::RenderLineLayer(Immutable<style::LineLayer::Impl> _impl) : RenderLayer(makeMutable<LineLayerProperties>(std::move(_impl))), unevaluated(impl(baseImpl).paint.untransitioned()), diff --git a/src/mbgl/renderer/layers/render_raster_layer.cpp b/src/mbgl/renderer/layers/render_raster_layer.cpp index ecaee2985c..dced07a6b7 100644 --- a/src/mbgl/renderer/layers/render_raster_layer.cpp +++ b/src/mbgl/renderer/layers/render_raster_layer.cpp @@ -14,10 +14,15 @@ namespace mbgl { using namespace style; +namespace { + inline const RasterLayer::Impl& impl(const Immutable<style::Layer::Impl>& impl) { + assert(impl->getTypeInfo() == RasterLayer::Impl::staticTypeInfo()); return static_cast<const RasterLayer::Impl&>(*impl); } +} // namespace + RenderRasterLayer::RenderRasterLayer(Immutable<style::RasterLayer::Impl> _impl) : RenderLayer(makeMutable<RasterLayerProperties>(std::move(_impl))), unevaluated(impl(baseImpl).paint.untransitioned()) { diff --git a/src/mbgl/renderer/layers/render_symbol_layer.cpp b/src/mbgl/renderer/layers/render_symbol_layer.cpp index c79008d08b..2cdd413c9d 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.cpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp @@ -227,6 +227,7 @@ void drawText(const DrawFn& draw, } inline const SymbolLayer::Impl& impl(const Immutable<style::Layer::Impl>& impl) { + assert(impl->getTypeInfo() == SymbolLayer::Impl::staticTypeInfo()); return static_cast<const SymbolLayer::Impl&>(*impl); } |