From 9e236a96b43be2b6df0bde2ff2fe70528ebd436e Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Fri, 16 Aug 2019 16:34:07 +0300 Subject: [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. --- src/mbgl/renderer/layers/render_background_layer.cpp | 5 +++++ src/mbgl/renderer/layers/render_circle_layer.cpp | 5 +++++ src/mbgl/renderer/layers/render_custom_layer.cpp | 5 +++++ src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp | 5 +++++ src/mbgl/renderer/layers/render_fill_layer.cpp | 5 +++++ src/mbgl/renderer/layers/render_heatmap_layer.cpp | 5 +++++ src/mbgl/renderer/layers/render_hillshade_layer.cpp | 5 +++++ src/mbgl/renderer/layers/render_line_layer.cpp | 5 +++++ src/mbgl/renderer/layers/render_raster_layer.cpp | 5 +++++ src/mbgl/renderer/layers/render_symbol_layer.cpp | 1 + 10 files changed, 46 insertions(+) diff --git a/src/mbgl/renderer/layers/render_background_layer.cpp b/src/mbgl/renderer/layers/render_background_layer.cpp index 4725bce435..6f76efda7a 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& impl) { + assert(impl->getTypeInfo() == BackgroundLayer::Impl::staticTypeInfo()); return static_cast(*impl); } +} // namespace + RenderBackgroundLayer::RenderBackgroundLayer(Immutable _impl) : RenderLayer(makeMutable(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 4f1620364f..ea0c20f124 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& impl) { + assert(impl->getTypeInfo() == CircleLayer::Impl::staticTypeInfo()); return static_cast(*impl); } +} // namespace + RenderCircleLayer::RenderCircleLayer(Immutable _impl) : RenderLayer(makeMutable(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& impl) { + assert(impl->getTypeInfo() == CustomLayer::Impl::staticTypeInfo()); return static_cast(*impl); } +} // namespace + RenderCustomLayer::RenderCustomLayer(Immutable _impl) : RenderLayer(makeMutable(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& impl) { + assert(impl->getTypeInfo() == FillExtrusionLayer::Impl::staticTypeInfo()); return static_cast(*impl); } +} // namespace + RenderFillExtrusionLayer::RenderFillExtrusionLayer(Immutable _impl) : RenderLayer(makeMutable(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 6a134a398a..27cb76fede 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& impl) { + assert(impl->getTypeInfo() == FillLayer::Impl::staticTypeInfo()); return static_cast(*impl); } +} // namespace + RenderFillLayer::RenderFillLayer(Immutable _impl) : RenderLayer(makeMutable(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& impl) { + assert(impl->getTypeInfo() == HeatmapLayer::Impl::staticTypeInfo()); return static_cast(*impl); } +} // namespace + RenderHeatmapLayer::RenderHeatmapLayer(Immutable _impl) : RenderLayer(makeMutable(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& impl) { + assert(impl->getTypeInfo() == HillshadeLayer::Impl::staticTypeInfo()); return static_cast(*impl); } +} // namespace + RenderHillshadeLayer::RenderHillshadeLayer(Immutable _impl) : RenderLayer(makeMutable(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 fcd52b21df..6d635f65e7 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& impl) { + assert(impl->getTypeInfo() == LineLayer::Impl::staticTypeInfo()); return static_cast(*impl); } +} // namespace + RenderLineLayer::RenderLineLayer(Immutable _impl) : RenderLayer(makeMutable(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 82d135b9ef..8a1a8a6c28 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& impl) { + assert(impl->getTypeInfo() == RasterLayer::Impl::staticTypeInfo()); return static_cast(*impl); } +} // namespace + RenderRasterLayer::RenderRasterLayer(Immutable _impl) : RenderLayer(makeMutable(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 4dddd57009..9733241393 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& impl) { + assert(impl->getTypeInfo() == SymbolLayer::Impl::staticTypeInfo()); return static_cast(*impl); } -- cgit v1.2.1