diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2018-12-19 16:15:20 +0200 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2018-12-19 19:09:19 +0200 |
commit | d4d12fb8a51decc11342ace1015161ca304048d0 (patch) | |
tree | 459cdd21437faf0434a4e8ce40dd6066f0d4c060 /src/mbgl/style/layers/line_layer.cpp | |
parent | 46ddb7c0c1c348696e2e2559355e1910a7abb616 (diff) | |
download | qtlocation-mapboxgl-d4d12fb8a51decc11342ace1015161ca304048d0.tar.gz |
[core] Use eternal::hash_map in style::Layers
Diffstat (limited to 'src/mbgl/style/layers/line_layer.cpp')
-rw-r--r-- | src/mbgl/style/layers/line_layer.cpp | 195 |
1 files changed, 43 insertions, 152 deletions
diff --git a/src/mbgl/style/layers/line_layer.cpp b/src/mbgl/style/layers/line_layer.cpp index 9b101a1948..643c294edf 100644 --- a/src/mbgl/style/layers/line_layer.cpp +++ b/src/mbgl/style/layers/line_layer.cpp @@ -9,7 +9,8 @@ #include <mbgl/style/conversion/transition_options.hpp> #include <mbgl/style/conversion/json.hpp> #include <mbgl/style/conversion_impl.hpp> -#include <mbgl/util/fnv_hash.hpp> + +#include <mapbox/eternal.hpp> namespace mbgl { namespace style { @@ -426,8 +427,7 @@ TransitionOptions LineLayer::getLineGradientTransition() const { using namespace conversion; optional<Error> LineLayer::setPaintProperty(const std::string& name, const Convertible& value) { - enum class Property { - Unknown, + enum class Property : uint8_t { LineOpacity, LineColor, LineTranslate, @@ -452,125 +452,38 @@ optional<Error> LineLayer::setPaintProperty(const std::string& name, const Conve LineGradientTransition, }; - Property property = Property::Unknown; - switch (util::hashFNV1a(name.c_str())) { - case util::hashFNV1a("line-opacity"): - if (name == "line-opacity") { - property = Property::LineOpacity; - } - break; - case util::hashFNV1a("line-opacity-transition"): - if (name == "line-opacity-transition") { - property = Property::LineOpacityTransition; - } - break; - case util::hashFNV1a("line-color"): - if (name == "line-color") { - property = Property::LineColor; - } - break; - case util::hashFNV1a("line-color-transition"): - if (name == "line-color-transition") { - property = Property::LineColorTransition; - } - break; - case util::hashFNV1a("line-translate"): - if (name == "line-translate") { - property = Property::LineTranslate; - } - break; - case util::hashFNV1a("line-translate-transition"): - if (name == "line-translate-transition") { - property = Property::LineTranslateTransition; - } - break; - case util::hashFNV1a("line-translate-anchor"): - if (name == "line-translate-anchor") { - property = Property::LineTranslateAnchor; - } - break; - case util::hashFNV1a("line-translate-anchor-transition"): - if (name == "line-translate-anchor-transition") { - property = Property::LineTranslateAnchorTransition; - } - break; - case util::hashFNV1a("line-width"): - if (name == "line-width") { - property = Property::LineWidth; - } - break; - case util::hashFNV1a("line-width-transition"): - if (name == "line-width-transition") { - property = Property::LineWidthTransition; - } - break; - case util::hashFNV1a("line-gap-width"): - if (name == "line-gap-width") { - property = Property::LineGapWidth; - } - break; - case util::hashFNV1a("line-gap-width-transition"): - if (name == "line-gap-width-transition") { - property = Property::LineGapWidthTransition; - } - break; - case util::hashFNV1a("line-offset"): - if (name == "line-offset") { - property = Property::LineOffset; - } - break; - case util::hashFNV1a("line-offset-transition"): - if (name == "line-offset-transition") { - property = Property::LineOffsetTransition; - } - break; - case util::hashFNV1a("line-blur"): - if (name == "line-blur") { - property = Property::LineBlur; - } - break; - case util::hashFNV1a("line-blur-transition"): - if (name == "line-blur-transition") { - property = Property::LineBlurTransition; - } - break; - case util::hashFNV1a("line-dasharray"): - if (name == "line-dasharray") { - property = Property::LineDasharray; - } - break; - case util::hashFNV1a("line-dasharray-transition"): - if (name == "line-dasharray-transition") { - property = Property::LineDasharrayTransition; - } - break; - case util::hashFNV1a("line-pattern"): - if (name == "line-pattern") { - property = Property::LinePattern; - } - break; - case util::hashFNV1a("line-pattern-transition"): - if (name == "line-pattern-transition") { - property = Property::LinePatternTransition; - } - break; - case util::hashFNV1a("line-gradient"): - if (name == "line-gradient") { - property = Property::LineGradient; - } - break; - case util::hashFNV1a("line-gradient-transition"): - if (name == "line-gradient-transition") { - property = Property::LineGradientTransition; - } - break; - - } - - if (property == Property::Unknown) { + MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map<mapbox::eternal::string, uint8_t>({ + { "line-opacity", static_cast<uint8_t>(Property::LineOpacity) }, + { "line-color", static_cast<uint8_t>(Property::LineColor) }, + { "line-translate", static_cast<uint8_t>(Property::LineTranslate) }, + { "line-translate-anchor", static_cast<uint8_t>(Property::LineTranslateAnchor) }, + { "line-width", static_cast<uint8_t>(Property::LineWidth) }, + { "line-gap-width", static_cast<uint8_t>(Property::LineGapWidth) }, + { "line-offset", static_cast<uint8_t>(Property::LineOffset) }, + { "line-blur", static_cast<uint8_t>(Property::LineBlur) }, + { "line-dasharray", static_cast<uint8_t>(Property::LineDasharray) }, + { "line-pattern", static_cast<uint8_t>(Property::LinePattern) }, + { "line-gradient", static_cast<uint8_t>(Property::LineGradient) }, + { "line-opacity-transition", static_cast<uint8_t>(Property::LineOpacityTransition) }, + { "line-color-transition", static_cast<uint8_t>(Property::LineColorTransition) }, + { "line-translate-transition", static_cast<uint8_t>(Property::LineTranslateTransition) }, + { "line-translate-anchor-transition", static_cast<uint8_t>(Property::LineTranslateAnchorTransition) }, + { "line-width-transition", static_cast<uint8_t>(Property::LineWidthTransition) }, + { "line-gap-width-transition", static_cast<uint8_t>(Property::LineGapWidthTransition) }, + { "line-offset-transition", static_cast<uint8_t>(Property::LineOffsetTransition) }, + { "line-blur-transition", static_cast<uint8_t>(Property::LineBlurTransition) }, + { "line-dasharray-transition", static_cast<uint8_t>(Property::LineDasharrayTransition) }, + { "line-pattern-transition", static_cast<uint8_t>(Property::LinePatternTransition) }, + { "line-gradient-transition", static_cast<uint8_t>(Property::LineGradientTransition) } + }); + + const auto it = properties.find(name.c_str()); + if (it == properties.end()) { return Error { "layer doesn't support this property" }; } + Property property = static_cast<Property>(it->second); + if (property == Property::LineOpacity || property == Property::LineWidth || property == Property::LineGapWidth || property == Property::LineOffset || property == Property::LineBlur) { Error error; @@ -748,48 +661,26 @@ optional<Error> LineLayer::setLayoutProperty(const std::string& name, const Conv if (name == "visibility") { return Layer::setVisibility(value); } - enum class Property { - Unknown, LineCap, LineJoin, LineMiterLimit, LineRoundLimit, }; - - Property property = Property::Unknown; - switch (util::hashFNV1a(name.c_str())) { - - case util::hashFNV1a("line-cap"): - if (name == "line-cap") { - property = Property::LineCap; - } - break; - - case util::hashFNV1a("line-join"): - if (name == "line-join") { - property = Property::LineJoin; - } - break; - - case util::hashFNV1a("line-miter-limit"): - if (name == "line-miter-limit") { - property = Property::LineMiterLimit; - } - break; - - case util::hashFNV1a("line-round-limit"): - if (name == "line-round-limit") { - property = Property::LineRoundLimit; - } - break; - - } - - if (property == Property::Unknown) { + MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map<mapbox::eternal::string, uint8_t>({ + { "line-cap", static_cast<uint8_t>(Property::LineCap) }, + { "line-join", static_cast<uint8_t>(Property::LineJoin) }, + { "line-miter-limit", static_cast<uint8_t>(Property::LineMiterLimit) }, + { "line-round-limit", static_cast<uint8_t>(Property::LineRoundLimit) } + }); + + const auto it = properties.find(name.c_str()); + if (it == properties.end()) { return Error { "layer doesn't support this property" }; } + Property property = static_cast<Property>(it->second); + if (property == Property::LineCap) { Error error; |