Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Replace if/else with evaluator template #8758

Closed
tobrun opened this issue Apr 18, 2017 · 0 comments
Closed

Replace if/else with evaluator template #8758

tobrun opened this issue Apr 18, 2017 · 0 comments
Labels
Android Mapbox Maps SDK for Android refactor

Comments

@tobrun
Copy link
Member

tobrun commented Apr 18, 2017

Follow up from #8709 (comment), we should cleanup the Android binding code to avoid if-else checking:

        std::string sourceLayerId;
        if (layer.is<FillLayer>()) {
            sourceLayerId = layer.as<FillLayer>()->getSourceLayer();
        } else if (layer.is<LineLayer>()) {
            sourceLayerId = layer.as<LineLayer>()->getSourceLayer();
        } else if (layer.is<SymbolLayer>()) {
            sourceLayerId = layer.as<SymbolLayer>()->getSourceLayer();
        } else if (layer.is<CircleLayer>()) {
            sourceLayerId = layer.as<CircleLayer>()->getSourceLayer();
        } else {
            mbgl::Log::Warning(mbgl::Event::JNI, "Layer doesn't support source layer");
        }

This can be replaced with the following template:

struct Evaluator {
    std::string operator()(mbgl::style::BackgroundLayer&) { return {}; }
    std::string operator()(mbgl::style::RasterLayer&) { return {}; }
    std::string operator()(mbgl::style::CustomLayer&) { return {}; }

    template <class VectorLayer>
    std::string operator()(VectorLayer& layer) {
        return layer.getSourceLayer();
    }
};
// ...
std::string sourceLayerId = layer.accept(Evaluator());

cc @ivovandongen

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Android Mapbox Maps SDK for Android refactor
Projects
None yet
Development

No branches or pull requests

1 participant