summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2018-12-19 16:15:20 +0200
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2018-12-19 19:09:19 +0200
commitd4d12fb8a51decc11342ace1015161ca304048d0 (patch)
tree459cdd21437faf0434a4e8ce40dd6066f0d4c060
parent46ddb7c0c1c348696e2e2559355e1910a7abb616 (diff)
downloadqtlocation-mapboxgl-d4d12fb8a51decc11342ace1015161ca304048d0.tar.gz
[core] Use eternal::hash_map in style::Layers
-rw-r--r--src/mbgl/style/layers/background_layer.cpp70
-rw-r--r--src/mbgl/style/layers/circle_layer.cpp166
-rw-r--r--src/mbgl/style/layers/fill_extrusion_layer.cpp130
-rw-r--r--src/mbgl/style/layers/fill_layer.cpp118
-rw-r--r--src/mbgl/style/layers/heatmap_layer.cpp94
-rw-r--r--src/mbgl/style/layers/hillshade_layer.cpp106
-rw-r--r--src/mbgl/style/layers/layer.cpp.ejs54
-rw-r--r--src/mbgl/style/layers/line_layer.cpp195
-rw-r--r--src/mbgl/style/layers/raster_layer.cpp130
-rw-r--r--src/mbgl/style/layers/symbol_layer.cpp462
10 files changed, 311 insertions, 1214 deletions
diff --git a/src/mbgl/style/layers/background_layer.cpp b/src/mbgl/style/layers/background_layer.cpp
index eb3c7a2666..89b367b632 100644
--- a/src/mbgl/style/layers/background_layer.cpp
+++ b/src/mbgl/style/layers/background_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 {
@@ -145,8 +146,7 @@ TransitionOptions BackgroundLayer::getBackgroundOpacityTransition() const {
using namespace conversion;
optional<Error> BackgroundLayer::setPaintProperty(const std::string& name, const Convertible& value) {
- enum class Property {
- Unknown,
+ enum class Property : uint8_t {
BackgroundColor,
BackgroundPattern,
BackgroundOpacity,
@@ -155,45 +155,22 @@ optional<Error> BackgroundLayer::setPaintProperty(const std::string& name, const
BackgroundOpacityTransition,
};
- Property property = Property::Unknown;
- switch (util::hashFNV1a(name.c_str())) {
- case util::hashFNV1a("background-color"):
- if (name == "background-color") {
- property = Property::BackgroundColor;
- }
- break;
- case util::hashFNV1a("background-color-transition"):
- if (name == "background-color-transition") {
- property = Property::BackgroundColorTransition;
- }
- break;
- case util::hashFNV1a("background-pattern"):
- if (name == "background-pattern") {
- property = Property::BackgroundPattern;
- }
- break;
- case util::hashFNV1a("background-pattern-transition"):
- if (name == "background-pattern-transition") {
- property = Property::BackgroundPatternTransition;
- }
- break;
- case util::hashFNV1a("background-opacity"):
- if (name == "background-opacity") {
- property = Property::BackgroundOpacity;
- }
- break;
- case util::hashFNV1a("background-opacity-transition"):
- if (name == "background-opacity-transition") {
- property = Property::BackgroundOpacityTransition;
- }
- break;
-
- }
-
- if (property == Property::Unknown) {
+ MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map<mapbox::eternal::string, uint8_t>({
+ { "background-color", static_cast<uint8_t>(Property::BackgroundColor) },
+ { "background-pattern", static_cast<uint8_t>(Property::BackgroundPattern) },
+ { "background-opacity", static_cast<uint8_t>(Property::BackgroundOpacity) },
+ { "background-color-transition", static_cast<uint8_t>(Property::BackgroundColorTransition) },
+ { "background-pattern-transition", static_cast<uint8_t>(Property::BackgroundPatternTransition) },
+ { "background-opacity-transition", static_cast<uint8_t>(Property::BackgroundOpacityTransition) }
+ });
+
+ 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::BackgroundColor) {
Error error;
@@ -262,21 +239,6 @@ optional<Error> BackgroundLayer::setLayoutProperty(const std::string& name, cons
return Layer::setVisibility(value);
}
- enum class Property {
- Unknown,
- };
-
- Property property = Property::Unknown;
- switch (util::hashFNV1a(name.c_str())) {
-
- }
-
- if (property == Property::Unknown) {
- return Error { "layer doesn't support this property" };
- }
-
-
-
return Error { "layer doesn't support this property" };
}
diff --git a/src/mbgl/style/layers/circle_layer.cpp b/src/mbgl/style/layers/circle_layer.cpp
index 92327a57e0..18f9a62f74 100644
--- a/src/mbgl/style/layers/circle_layer.cpp
+++ b/src/mbgl/style/layers/circle_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 {
@@ -361,8 +362,7 @@ TransitionOptions CircleLayer::getCircleStrokeOpacityTransition() const {
using namespace conversion;
optional<Error> CircleLayer::setPaintProperty(const std::string& name, const Convertible& value) {
- enum class Property {
- Unknown,
+ enum class Property : uint8_t {
CircleRadius,
CircleColor,
CircleBlur,
@@ -387,125 +387,38 @@ optional<Error> CircleLayer::setPaintProperty(const std::string& name, const Con
CircleStrokeOpacityTransition,
};
- Property property = Property::Unknown;
- switch (util::hashFNV1a(name.c_str())) {
- case util::hashFNV1a("circle-radius"):
- if (name == "circle-radius") {
- property = Property::CircleRadius;
- }
- break;
- case util::hashFNV1a("circle-radius-transition"):
- if (name == "circle-radius-transition") {
- property = Property::CircleRadiusTransition;
- }
- break;
- case util::hashFNV1a("circle-color"):
- if (name == "circle-color") {
- property = Property::CircleColor;
- }
- break;
- case util::hashFNV1a("circle-color-transition"):
- if (name == "circle-color-transition") {
- property = Property::CircleColorTransition;
- }
- break;
- case util::hashFNV1a("circle-blur"):
- if (name == "circle-blur") {
- property = Property::CircleBlur;
- }
- break;
- case util::hashFNV1a("circle-blur-transition"):
- if (name == "circle-blur-transition") {
- property = Property::CircleBlurTransition;
- }
- break;
- case util::hashFNV1a("circle-opacity"):
- if (name == "circle-opacity") {
- property = Property::CircleOpacity;
- }
- break;
- case util::hashFNV1a("circle-opacity-transition"):
- if (name == "circle-opacity-transition") {
- property = Property::CircleOpacityTransition;
- }
- break;
- case util::hashFNV1a("circle-translate"):
- if (name == "circle-translate") {
- property = Property::CircleTranslate;
- }
- break;
- case util::hashFNV1a("circle-translate-transition"):
- if (name == "circle-translate-transition") {
- property = Property::CircleTranslateTransition;
- }
- break;
- case util::hashFNV1a("circle-translate-anchor"):
- if (name == "circle-translate-anchor") {
- property = Property::CircleTranslateAnchor;
- }
- break;
- case util::hashFNV1a("circle-translate-anchor-transition"):
- if (name == "circle-translate-anchor-transition") {
- property = Property::CircleTranslateAnchorTransition;
- }
- break;
- case util::hashFNV1a("circle-pitch-scale"):
- if (name == "circle-pitch-scale") {
- property = Property::CirclePitchScale;
- }
- break;
- case util::hashFNV1a("circle-pitch-scale-transition"):
- if (name == "circle-pitch-scale-transition") {
- property = Property::CirclePitchScaleTransition;
- }
- break;
- case util::hashFNV1a("circle-pitch-alignment"):
- if (name == "circle-pitch-alignment") {
- property = Property::CirclePitchAlignment;
- }
- break;
- case util::hashFNV1a("circle-pitch-alignment-transition"):
- if (name == "circle-pitch-alignment-transition") {
- property = Property::CirclePitchAlignmentTransition;
- }
- break;
- case util::hashFNV1a("circle-stroke-width"):
- if (name == "circle-stroke-width") {
- property = Property::CircleStrokeWidth;
- }
- break;
- case util::hashFNV1a("circle-stroke-width-transition"):
- if (name == "circle-stroke-width-transition") {
- property = Property::CircleStrokeWidthTransition;
- }
- break;
- case util::hashFNV1a("circle-stroke-color"):
- if (name == "circle-stroke-color") {
- property = Property::CircleStrokeColor;
- }
- break;
- case util::hashFNV1a("circle-stroke-color-transition"):
- if (name == "circle-stroke-color-transition") {
- property = Property::CircleStrokeColorTransition;
- }
- break;
- case util::hashFNV1a("circle-stroke-opacity"):
- if (name == "circle-stroke-opacity") {
- property = Property::CircleStrokeOpacity;
- }
- break;
- case util::hashFNV1a("circle-stroke-opacity-transition"):
- if (name == "circle-stroke-opacity-transition") {
- property = Property::CircleStrokeOpacityTransition;
- }
- break;
-
- }
-
- if (property == Property::Unknown) {
+ MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map<mapbox::eternal::string, uint8_t>({
+ { "circle-radius", static_cast<uint8_t>(Property::CircleRadius) },
+ { "circle-color", static_cast<uint8_t>(Property::CircleColor) },
+ { "circle-blur", static_cast<uint8_t>(Property::CircleBlur) },
+ { "circle-opacity", static_cast<uint8_t>(Property::CircleOpacity) },
+ { "circle-translate", static_cast<uint8_t>(Property::CircleTranslate) },
+ { "circle-translate-anchor", static_cast<uint8_t>(Property::CircleTranslateAnchor) },
+ { "circle-pitch-scale", static_cast<uint8_t>(Property::CirclePitchScale) },
+ { "circle-pitch-alignment", static_cast<uint8_t>(Property::CirclePitchAlignment) },
+ { "circle-stroke-width", static_cast<uint8_t>(Property::CircleStrokeWidth) },
+ { "circle-stroke-color", static_cast<uint8_t>(Property::CircleStrokeColor) },
+ { "circle-stroke-opacity", static_cast<uint8_t>(Property::CircleStrokeOpacity) },
+ { "circle-radius-transition", static_cast<uint8_t>(Property::CircleRadiusTransition) },
+ { "circle-color-transition", static_cast<uint8_t>(Property::CircleColorTransition) },
+ { "circle-blur-transition", static_cast<uint8_t>(Property::CircleBlurTransition) },
+ { "circle-opacity-transition", static_cast<uint8_t>(Property::CircleOpacityTransition) },
+ { "circle-translate-transition", static_cast<uint8_t>(Property::CircleTranslateTransition) },
+ { "circle-translate-anchor-transition", static_cast<uint8_t>(Property::CircleTranslateAnchorTransition) },
+ { "circle-pitch-scale-transition", static_cast<uint8_t>(Property::CirclePitchScaleTransition) },
+ { "circle-pitch-alignment-transition", static_cast<uint8_t>(Property::CirclePitchAlignmentTransition) },
+ { "circle-stroke-width-transition", static_cast<uint8_t>(Property::CircleStrokeWidthTransition) },
+ { "circle-stroke-color-transition", static_cast<uint8_t>(Property::CircleStrokeColorTransition) },
+ { "circle-stroke-opacity-transition", static_cast<uint8_t>(Property::CircleStrokeOpacityTransition) }
+ });
+
+ 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::CircleRadius || property == Property::CircleBlur || property == Property::CircleOpacity || property == Property::CircleStrokeWidth || property == Property::CircleStrokeOpacity) {
Error error;
@@ -679,21 +592,6 @@ optional<Error> CircleLayer::setLayoutProperty(const std::string& name, const Co
return Layer::setVisibility(value);
}
- enum class Property {
- Unknown,
- };
-
- Property property = Property::Unknown;
- switch (util::hashFNV1a(name.c_str())) {
-
- }
-
- if (property == Property::Unknown) {
- return Error { "layer doesn't support this property" };
- }
-
-
-
return Error { "layer doesn't support this property" };
}
diff --git a/src/mbgl/style/layers/fill_extrusion_layer.cpp b/src/mbgl/style/layers/fill_extrusion_layer.cpp
index 74fd4ad757..3bbaebfe6d 100644
--- a/src/mbgl/style/layers/fill_extrusion_layer.cpp
+++ b/src/mbgl/style/layers/fill_extrusion_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 {
@@ -280,8 +281,7 @@ TransitionOptions FillExtrusionLayer::getFillExtrusionVerticalGradientTransition
using namespace conversion;
optional<Error> FillExtrusionLayer::setPaintProperty(const std::string& name, const Convertible& value) {
- enum class Property {
- Unknown,
+ enum class Property : uint8_t {
FillExtrusionOpacity,
FillExtrusionColor,
FillExtrusionTranslate,
@@ -300,95 +300,32 @@ optional<Error> FillExtrusionLayer::setPaintProperty(const std::string& name, co
FillExtrusionVerticalGradientTransition,
};
- Property property = Property::Unknown;
- switch (util::hashFNV1a(name.c_str())) {
- case util::hashFNV1a("fill-extrusion-opacity"):
- if (name == "fill-extrusion-opacity") {
- property = Property::FillExtrusionOpacity;
- }
- break;
- case util::hashFNV1a("fill-extrusion-opacity-transition"):
- if (name == "fill-extrusion-opacity-transition") {
- property = Property::FillExtrusionOpacityTransition;
- }
- break;
- case util::hashFNV1a("fill-extrusion-color"):
- if (name == "fill-extrusion-color") {
- property = Property::FillExtrusionColor;
- }
- break;
- case util::hashFNV1a("fill-extrusion-color-transition"):
- if (name == "fill-extrusion-color-transition") {
- property = Property::FillExtrusionColorTransition;
- }
- break;
- case util::hashFNV1a("fill-extrusion-translate"):
- if (name == "fill-extrusion-translate") {
- property = Property::FillExtrusionTranslate;
- }
- break;
- case util::hashFNV1a("fill-extrusion-translate-transition"):
- if (name == "fill-extrusion-translate-transition") {
- property = Property::FillExtrusionTranslateTransition;
- }
- break;
- case util::hashFNV1a("fill-extrusion-translate-anchor"):
- if (name == "fill-extrusion-translate-anchor") {
- property = Property::FillExtrusionTranslateAnchor;
- }
- break;
- case util::hashFNV1a("fill-extrusion-translate-anchor-transition"):
- if (name == "fill-extrusion-translate-anchor-transition") {
- property = Property::FillExtrusionTranslateAnchorTransition;
- }
- break;
- case util::hashFNV1a("fill-extrusion-pattern"):
- if (name == "fill-extrusion-pattern") {
- property = Property::FillExtrusionPattern;
- }
- break;
- case util::hashFNV1a("fill-extrusion-pattern-transition"):
- if (name == "fill-extrusion-pattern-transition") {
- property = Property::FillExtrusionPatternTransition;
- }
- break;
- case util::hashFNV1a("fill-extrusion-height"):
- if (name == "fill-extrusion-height") {
- property = Property::FillExtrusionHeight;
- }
- break;
- case util::hashFNV1a("fill-extrusion-height-transition"):
- if (name == "fill-extrusion-height-transition") {
- property = Property::FillExtrusionHeightTransition;
- }
- break;
- case util::hashFNV1a("fill-extrusion-base"):
- if (name == "fill-extrusion-base") {
- property = Property::FillExtrusionBase;
- }
- break;
- case util::hashFNV1a("fill-extrusion-base-transition"):
- if (name == "fill-extrusion-base-transition") {
- property = Property::FillExtrusionBaseTransition;
- }
- break;
- case util::hashFNV1a("fill-extrusion-vertical-gradient"):
- if (name == "fill-extrusion-vertical-gradient") {
- property = Property::FillExtrusionVerticalGradient;
- }
- break;
- case util::hashFNV1a("fill-extrusion-vertical-gradient-transition"):
- if (name == "fill-extrusion-vertical-gradient-transition") {
- property = Property::FillExtrusionVerticalGradientTransition;
- }
- break;
-
- }
-
- if (property == Property::Unknown) {
+ MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map<mapbox::eternal::string, uint8_t>({
+ { "fill-extrusion-opacity", static_cast<uint8_t>(Property::FillExtrusionOpacity) },
+ { "fill-extrusion-color", static_cast<uint8_t>(Property::FillExtrusionColor) },
+ { "fill-extrusion-translate", static_cast<uint8_t>(Property::FillExtrusionTranslate) },
+ { "fill-extrusion-translate-anchor", static_cast<uint8_t>(Property::FillExtrusionTranslateAnchor) },
+ { "fill-extrusion-pattern", static_cast<uint8_t>(Property::FillExtrusionPattern) },
+ { "fill-extrusion-height", static_cast<uint8_t>(Property::FillExtrusionHeight) },
+ { "fill-extrusion-base", static_cast<uint8_t>(Property::FillExtrusionBase) },
+ { "fill-extrusion-vertical-gradient", static_cast<uint8_t>(Property::FillExtrusionVerticalGradient) },
+ { "fill-extrusion-opacity-transition", static_cast<uint8_t>(Property::FillExtrusionOpacityTransition) },
+ { "fill-extrusion-color-transition", static_cast<uint8_t>(Property::FillExtrusionColorTransition) },
+ { "fill-extrusion-translate-transition", static_cast<uint8_t>(Property::FillExtrusionTranslateTransition) },
+ { "fill-extrusion-translate-anchor-transition", static_cast<uint8_t>(Property::FillExtrusionTranslateAnchorTransition) },
+ { "fill-extrusion-pattern-transition", static_cast<uint8_t>(Property::FillExtrusionPatternTransition) },
+ { "fill-extrusion-height-transition", static_cast<uint8_t>(Property::FillExtrusionHeightTransition) },
+ { "fill-extrusion-base-transition", static_cast<uint8_t>(Property::FillExtrusionBaseTransition) },
+ { "fill-extrusion-vertical-gradient-transition", static_cast<uint8_t>(Property::FillExtrusionVerticalGradientTransition) }
+ });
+
+ 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::FillExtrusionOpacity) {
Error error;
@@ -537,21 +474,6 @@ optional<Error> FillExtrusionLayer::setLayoutProperty(const std::string& name, c
return Layer::setVisibility(value);
}
- enum class Property {
- Unknown,
- };
-
- Property property = Property::Unknown;
- switch (util::hashFNV1a(name.c_str())) {
-
- }
-
- if (property == Property::Unknown) {
- return Error { "layer doesn't support this property" };
- }
-
-
-
return Error { "layer doesn't support this property" };
}
diff --git a/src/mbgl/style/layers/fill_layer.cpp b/src/mbgl/style/layers/fill_layer.cpp
index 55b5d9c8cb..6f3c163825 100644
--- a/src/mbgl/style/layers/fill_layer.cpp
+++ b/src/mbgl/style/layers/fill_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 {
@@ -253,8 +254,7 @@ TransitionOptions FillLayer::getFillPatternTransition() const {
using namespace conversion;
optional<Error> FillLayer::setPaintProperty(const std::string& name, const Convertible& value) {
- enum class Property {
- Unknown,
+ enum class Property : uint8_t {
FillAntialias,
FillOpacity,
FillColor,
@@ -271,85 +271,30 @@ optional<Error> FillLayer::setPaintProperty(const std::string& name, const Conve
FillPatternTransition,
};
- Property property = Property::Unknown;
- switch (util::hashFNV1a(name.c_str())) {
- case util::hashFNV1a("fill-antialias"):
- if (name == "fill-antialias") {
- property = Property::FillAntialias;
- }
- break;
- case util::hashFNV1a("fill-antialias-transition"):
- if (name == "fill-antialias-transition") {
- property = Property::FillAntialiasTransition;
- }
- break;
- case util::hashFNV1a("fill-opacity"):
- if (name == "fill-opacity") {
- property = Property::FillOpacity;
- }
- break;
- case util::hashFNV1a("fill-opacity-transition"):
- if (name == "fill-opacity-transition") {
- property = Property::FillOpacityTransition;
- }
- break;
- case util::hashFNV1a("fill-color"):
- if (name == "fill-color") {
- property = Property::FillColor;
- }
- break;
- case util::hashFNV1a("fill-color-transition"):
- if (name == "fill-color-transition") {
- property = Property::FillColorTransition;
- }
- break;
- case util::hashFNV1a("fill-outline-color"):
- if (name == "fill-outline-color") {
- property = Property::FillOutlineColor;
- }
- break;
- case util::hashFNV1a("fill-outline-color-transition"):
- if (name == "fill-outline-color-transition") {
- property = Property::FillOutlineColorTransition;
- }
- break;
- case util::hashFNV1a("fill-translate"):
- if (name == "fill-translate") {
- property = Property::FillTranslate;
- }
- break;
- case util::hashFNV1a("fill-translate-transition"):
- if (name == "fill-translate-transition") {
- property = Property::FillTranslateTransition;
- }
- break;
- case util::hashFNV1a("fill-translate-anchor"):
- if (name == "fill-translate-anchor") {
- property = Property::FillTranslateAnchor;
- }
- break;
- case util::hashFNV1a("fill-translate-anchor-transition"):
- if (name == "fill-translate-anchor-transition") {
- property = Property::FillTranslateAnchorTransition;
- }
- break;
- case util::hashFNV1a("fill-pattern"):
- if (name == "fill-pattern") {
- property = Property::FillPattern;
- }
- break;
- case util::hashFNV1a("fill-pattern-transition"):
- if (name == "fill-pattern-transition") {
- property = Property::FillPatternTransition;
- }
- break;
-
- }
-
- if (property == Property::Unknown) {
+ MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map<mapbox::eternal::string, uint8_t>({
+ { "fill-antialias", static_cast<uint8_t>(Property::FillAntialias) },
+ { "fill-opacity", static_cast<uint8_t>(Property::FillOpacity) },
+ { "fill-color", static_cast<uint8_t>(Property::FillColor) },
+ { "fill-outline-color", static_cast<uint8_t>(Property::FillOutlineColor) },
+ { "fill-translate", static_cast<uint8_t>(Property::FillTranslate) },
+ { "fill-translate-anchor", static_cast<uint8_t>(Property::FillTranslateAnchor) },
+ { "fill-pattern", static_cast<uint8_t>(Property::FillPattern) },
+ { "fill-antialias-transition", static_cast<uint8_t>(Property::FillAntialiasTransition) },
+ { "fill-opacity-transition", static_cast<uint8_t>(Property::FillOpacityTransition) },
+ { "fill-color-transition", static_cast<uint8_t>(Property::FillColorTransition) },
+ { "fill-outline-color-transition", static_cast<uint8_t>(Property::FillOutlineColorTransition) },
+ { "fill-translate-transition", static_cast<uint8_t>(Property::FillTranslateTransition) },
+ { "fill-translate-anchor-transition", static_cast<uint8_t>(Property::FillTranslateAnchorTransition) },
+ { "fill-pattern-transition", static_cast<uint8_t>(Property::FillPatternTransition) }
+ });
+
+ 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::FillAntialias) {
Error error;
@@ -481,21 +426,6 @@ optional<Error> FillLayer::setLayoutProperty(const std::string& name, const Conv
return Layer::setVisibility(value);
}
- enum class Property {
- Unknown,
- };
-
- Property property = Property::Unknown;
- switch (util::hashFNV1a(name.c_str())) {
-
- }
-
- if (property == Property::Unknown) {
- return Error { "layer doesn't support this property" };
- }
-
-
-
return Error { "layer doesn't support this property" };
}
diff --git a/src/mbgl/style/layers/heatmap_layer.cpp b/src/mbgl/style/layers/heatmap_layer.cpp
index 29c5fc5e4e..d548ee9b74 100644
--- a/src/mbgl/style/layers/heatmap_layer.cpp
+++ b/src/mbgl/style/layers/heatmap_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 {
@@ -201,8 +202,7 @@ TransitionOptions HeatmapLayer::getHeatmapOpacityTransition() const {
using namespace conversion;
optional<Error> HeatmapLayer::setPaintProperty(const std::string& name, const Convertible& value) {
- enum class Property {
- Unknown,
+ enum class Property : uint8_t {
HeatmapRadius,
HeatmapWeight,
HeatmapIntensity,
@@ -215,65 +215,26 @@ optional<Error> HeatmapLayer::setPaintProperty(const std::string& name, const Co
HeatmapOpacityTransition,
};
- Property property = Property::Unknown;
- switch (util::hashFNV1a(name.c_str())) {
- case util::hashFNV1a("heatmap-radius"):
- if (name == "heatmap-radius") {
- property = Property::HeatmapRadius;
- }
- break;
- case util::hashFNV1a("heatmap-radius-transition"):
- if (name == "heatmap-radius-transition") {
- property = Property::HeatmapRadiusTransition;
- }
- break;
- case util::hashFNV1a("heatmap-weight"):
- if (name == "heatmap-weight") {
- property = Property::HeatmapWeight;
- }
- break;
- case util::hashFNV1a("heatmap-weight-transition"):
- if (name == "heatmap-weight-transition") {
- property = Property::HeatmapWeightTransition;
- }
- break;
- case util::hashFNV1a("heatmap-intensity"):
- if (name == "heatmap-intensity") {
- property = Property::HeatmapIntensity;
- }
- break;
- case util::hashFNV1a("heatmap-intensity-transition"):
- if (name == "heatmap-intensity-transition") {
- property = Property::HeatmapIntensityTransition;
- }
- break;
- case util::hashFNV1a("heatmap-color"):
- if (name == "heatmap-color") {
- property = Property::HeatmapColor;
- }
- break;
- case util::hashFNV1a("heatmap-color-transition"):
- if (name == "heatmap-color-transition") {
- property = Property::HeatmapColorTransition;
- }
- break;
- case util::hashFNV1a("heatmap-opacity"):
- if (name == "heatmap-opacity") {
- property = Property::HeatmapOpacity;
- }
- break;
- case util::hashFNV1a("heatmap-opacity-transition"):
- if (name == "heatmap-opacity-transition") {
- property = Property::HeatmapOpacityTransition;
- }
- break;
-
- }
-
- if (property == Property::Unknown) {
+ MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map<mapbox::eternal::string, uint8_t>({
+ { "heatmap-radius", static_cast<uint8_t>(Property::HeatmapRadius) },
+ { "heatmap-weight", static_cast<uint8_t>(Property::HeatmapWeight) },
+ { "heatmap-intensity", static_cast<uint8_t>(Property::HeatmapIntensity) },
+ { "heatmap-color", static_cast<uint8_t>(Property::HeatmapColor) },
+ { "heatmap-opacity", static_cast<uint8_t>(Property::HeatmapOpacity) },
+ { "heatmap-radius-transition", static_cast<uint8_t>(Property::HeatmapRadiusTransition) },
+ { "heatmap-weight-transition", static_cast<uint8_t>(Property::HeatmapWeightTransition) },
+ { "heatmap-intensity-transition", static_cast<uint8_t>(Property::HeatmapIntensityTransition) },
+ { "heatmap-color-transition", static_cast<uint8_t>(Property::HeatmapColorTransition) },
+ { "heatmap-opacity-transition", static_cast<uint8_t>(Property::HeatmapOpacityTransition) }
+ });
+
+ 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::HeatmapRadius || property == Property::HeatmapWeight) {
Error error;
@@ -366,21 +327,6 @@ optional<Error> HeatmapLayer::setLayoutProperty(const std::string& name, const C
return Layer::setVisibility(value);
}
- enum class Property {
- Unknown,
- };
-
- Property property = Property::Unknown;
- switch (util::hashFNV1a(name.c_str())) {
-
- }
-
- if (property == Property::Unknown) {
- return Error { "layer doesn't support this property" };
- }
-
-
-
return Error { "layer doesn't support this property" };
}
diff --git a/src/mbgl/style/layers/hillshade_layer.cpp b/src/mbgl/style/layers/hillshade_layer.cpp
index 0ae63b18c6..49d3217a3b 100644
--- a/src/mbgl/style/layers/hillshade_layer.cpp
+++ b/src/mbgl/style/layers/hillshade_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 {
@@ -226,8 +227,7 @@ TransitionOptions HillshadeLayer::getHillshadeAccentColorTransition() const {
using namespace conversion;
optional<Error> HillshadeLayer::setPaintProperty(const std::string& name, const Convertible& value) {
- enum class Property {
- Unknown,
+ enum class Property : uint8_t {
HillshadeIlluminationDirection,
HillshadeIlluminationAnchor,
HillshadeExaggeration,
@@ -242,75 +242,28 @@ optional<Error> HillshadeLayer::setPaintProperty(const std::string& name, const
HillshadeAccentColorTransition,
};
- Property property = Property::Unknown;
- switch (util::hashFNV1a(name.c_str())) {
- case util::hashFNV1a("hillshade-illumination-direction"):
- if (name == "hillshade-illumination-direction") {
- property = Property::HillshadeIlluminationDirection;
- }
- break;
- case util::hashFNV1a("hillshade-illumination-direction-transition"):
- if (name == "hillshade-illumination-direction-transition") {
- property = Property::HillshadeIlluminationDirectionTransition;
- }
- break;
- case util::hashFNV1a("hillshade-illumination-anchor"):
- if (name == "hillshade-illumination-anchor") {
- property = Property::HillshadeIlluminationAnchor;
- }
- break;
- case util::hashFNV1a("hillshade-illumination-anchor-transition"):
- if (name == "hillshade-illumination-anchor-transition") {
- property = Property::HillshadeIlluminationAnchorTransition;
- }
- break;
- case util::hashFNV1a("hillshade-exaggeration"):
- if (name == "hillshade-exaggeration") {
- property = Property::HillshadeExaggeration;
- }
- break;
- case util::hashFNV1a("hillshade-exaggeration-transition"):
- if (name == "hillshade-exaggeration-transition") {
- property = Property::HillshadeExaggerationTransition;
- }
- break;
- case util::hashFNV1a("hillshade-shadow-color"):
- if (name == "hillshade-shadow-color") {
- property = Property::HillshadeShadowColor;
- }
- break;
- case util::hashFNV1a("hillshade-shadow-color-transition"):
- if (name == "hillshade-shadow-color-transition") {
- property = Property::HillshadeShadowColorTransition;
- }
- break;
- case util::hashFNV1a("hillshade-highlight-color"):
- if (name == "hillshade-highlight-color") {
- property = Property::HillshadeHighlightColor;
- }
- break;
- case util::hashFNV1a("hillshade-highlight-color-transition"):
- if (name == "hillshade-highlight-color-transition") {
- property = Property::HillshadeHighlightColorTransition;
- }
- break;
- case util::hashFNV1a("hillshade-accent-color"):
- if (name == "hillshade-accent-color") {
- property = Property::HillshadeAccentColor;
- }
- break;
- case util::hashFNV1a("hillshade-accent-color-transition"):
- if (name == "hillshade-accent-color-transition") {
- property = Property::HillshadeAccentColorTransition;
- }
- break;
-
- }
-
- if (property == Property::Unknown) {
+ MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map<mapbox::eternal::string, uint8_t>({
+ { "hillshade-illumination-direction", static_cast<uint8_t>(Property::HillshadeIlluminationDirection) },
+ { "hillshade-illumination-anchor", static_cast<uint8_t>(Property::HillshadeIlluminationAnchor) },
+ { "hillshade-exaggeration", static_cast<uint8_t>(Property::HillshadeExaggeration) },
+ { "hillshade-shadow-color", static_cast<uint8_t>(Property::HillshadeShadowColor) },
+ { "hillshade-highlight-color", static_cast<uint8_t>(Property::HillshadeHighlightColor) },
+ { "hillshade-accent-color", static_cast<uint8_t>(Property::HillshadeAccentColor) },
+ { "hillshade-illumination-direction-transition", static_cast<uint8_t>(Property::HillshadeIlluminationDirectionTransition) },
+ { "hillshade-illumination-anchor-transition", static_cast<uint8_t>(Property::HillshadeIlluminationAnchorTransition) },
+ { "hillshade-exaggeration-transition", static_cast<uint8_t>(Property::HillshadeExaggerationTransition) },
+ { "hillshade-shadow-color-transition", static_cast<uint8_t>(Property::HillshadeShadowColorTransition) },
+ { "hillshade-highlight-color-transition", static_cast<uint8_t>(Property::HillshadeHighlightColorTransition) },
+ { "hillshade-accent-color-transition", static_cast<uint8_t>(Property::HillshadeAccentColorTransition) }
+ });
+
+ 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::HillshadeIlluminationDirection || property == Property::HillshadeExaggeration) {
Error error;
@@ -413,21 +366,6 @@ optional<Error> HillshadeLayer::setLayoutProperty(const std::string& name, const
return Layer::setVisibility(value);
}
- enum class Property {
- Unknown,
- };
-
- Property property = Property::Unknown;
- switch (util::hashFNV1a(name.c_str())) {
-
- }
-
- if (property == Property::Unknown) {
- return Error { "layer doesn't support this property" };
- }
-
-
-
return Error { "layer doesn't support this property" };
}
diff --git a/src/mbgl/style/layers/layer.cpp.ejs b/src/mbgl/style/layers/layer.cpp.ejs
index e34386fc20..fcae615fe0 100644
--- a/src/mbgl/style/layers/layer.cpp.ejs
+++ b/src/mbgl/style/layers/layer.cpp.ejs
@@ -14,7 +14,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 {
@@ -170,8 +171,7 @@ TransitionOptions <%- camelize(type) %>Layer::get<%- camelize(property.name) %>T
using namespace conversion;
optional<Error> <%- camelize(type) %>Layer::setPaintProperty(const std::string& name, const Convertible& value) {
- enum class Property {
- Unknown,
+ enum class Property : uint8_t {
<% for (const property of paintProperties) { -%>
<%- camelize(property.name) %>,
<% } -%>
@@ -180,26 +180,18 @@ optional<Error> <%- camelize(type) %>Layer::setPaintProperty(const std::string&
<% } -%>
};
- Property property = Property::Unknown;
- switch (util::hashFNV1a(name.c_str())) {
- <% for (const property of paintProperties) { -%>
-case util::hashFNV1a("<%- property.name %>"):
- if (name == "<%- property.name %>") {
- property = Property::<%- camelize(property.name) %>;
- }
- break;
- case util::hashFNV1a("<%- property.name %>-transition"):
- if (name == "<%- property.name %>-transition") {
- property = Property::<%- camelize(property.name) %>Transition;
- }
- break;
- <% } %>
- }
+ MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map<mapbox::eternal::string, uint8_t>({
+ <%- paintProperties.map(p => `{ "${p.name}", static_cast<uint8_t>(Property::${camelize(p.name)}) }`).join(',\n ') %>,
+ <%- paintProperties.map(p => `{ "${p.name}-transition", static_cast<uint8_t>(Property::${camelize(p.name)}Transition) }`).join(',\n ') %>
+ });
- if (property == Property::Unknown) {
+ 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);
+
<%
const paintConversions = {};
for (const property of paintProperties) {
@@ -250,29 +242,23 @@ optional<Error> <%- camelize(type) %>Layer::setLayoutProperty(const std::string&
if (name == "visibility") {
return Layer::setVisibility(value);
}
-
+<% if (layoutProperties.length) { -%>
enum class Property {
- Unknown,
<% for (const property of layoutProperties) { -%>
<%- camelize(property.name) %>,
<% } -%>
};
+ MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map<mapbox::eternal::string, uint8_t>({
+ <%- layoutProperties.map(p => `{ "${p.name}", static_cast<uint8_t>(Property::${camelize(p.name)}) }`).join(',\n ') %>
+ });
- Property property = Property::Unknown;
- switch (util::hashFNV1a(name.c_str())) {
- <% for (const property of layoutProperties) { %>
- case util::hashFNV1a("<%- property.name %>"):
- if (name == "<%- property.name %>") {
- property = Property::<%- camelize(property.name) %>;
- }
- break;
- <% } %>
- }
-
- if (property == Property::Unknown) {
+ 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);
+
<%
const layoutConversions = {};
for (const property of layoutProperties) {
@@ -303,7 +289,7 @@ optional<Error> <%- camelize(type) %>Layer::setLayoutProperty(const std::string&
<% } %>
}
<% } %>
-
+<% } /* if (layoutProperties.length) */ %>
return Error { "layer doesn't support this property" };
}
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;
diff --git a/src/mbgl/style/layers/raster_layer.cpp b/src/mbgl/style/layers/raster_layer.cpp
index ea3ec3e31c..b0820456e1 100644
--- a/src/mbgl/style/layers/raster_layer.cpp
+++ b/src/mbgl/style/layers/raster_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 {
@@ -280,8 +281,7 @@ TransitionOptions RasterLayer::getRasterFadeDurationTransition() const {
using namespace conversion;
optional<Error> RasterLayer::setPaintProperty(const std::string& name, const Convertible& value) {
- enum class Property {
- Unknown,
+ enum class Property : uint8_t {
RasterOpacity,
RasterHueRotate,
RasterBrightnessMin,
@@ -300,95 +300,32 @@ optional<Error> RasterLayer::setPaintProperty(const std::string& name, const Con
RasterFadeDurationTransition,
};
- Property property = Property::Unknown;
- switch (util::hashFNV1a(name.c_str())) {
- case util::hashFNV1a("raster-opacity"):
- if (name == "raster-opacity") {
- property = Property::RasterOpacity;
- }
- break;
- case util::hashFNV1a("raster-opacity-transition"):
- if (name == "raster-opacity-transition") {
- property = Property::RasterOpacityTransition;
- }
- break;
- case util::hashFNV1a("raster-hue-rotate"):
- if (name == "raster-hue-rotate") {
- property = Property::RasterHueRotate;
- }
- break;
- case util::hashFNV1a("raster-hue-rotate-transition"):
- if (name == "raster-hue-rotate-transition") {
- property = Property::RasterHueRotateTransition;
- }
- break;
- case util::hashFNV1a("raster-brightness-min"):
- if (name == "raster-brightness-min") {
- property = Property::RasterBrightnessMin;
- }
- break;
- case util::hashFNV1a("raster-brightness-min-transition"):
- if (name == "raster-brightness-min-transition") {
- property = Property::RasterBrightnessMinTransition;
- }
- break;
- case util::hashFNV1a("raster-brightness-max"):
- if (name == "raster-brightness-max") {
- property = Property::RasterBrightnessMax;
- }
- break;
- case util::hashFNV1a("raster-brightness-max-transition"):
- if (name == "raster-brightness-max-transition") {
- property = Property::RasterBrightnessMaxTransition;
- }
- break;
- case util::hashFNV1a("raster-saturation"):
- if (name == "raster-saturation") {
- property = Property::RasterSaturation;
- }
- break;
- case util::hashFNV1a("raster-saturation-transition"):
- if (name == "raster-saturation-transition") {
- property = Property::RasterSaturationTransition;
- }
- break;
- case util::hashFNV1a("raster-contrast"):
- if (name == "raster-contrast") {
- property = Property::RasterContrast;
- }
- break;
- case util::hashFNV1a("raster-contrast-transition"):
- if (name == "raster-contrast-transition") {
- property = Property::RasterContrastTransition;
- }
- break;
- case util::hashFNV1a("raster-resampling"):
- if (name == "raster-resampling") {
- property = Property::RasterResampling;
- }
- break;
- case util::hashFNV1a("raster-resampling-transition"):
- if (name == "raster-resampling-transition") {
- property = Property::RasterResamplingTransition;
- }
- break;
- case util::hashFNV1a("raster-fade-duration"):
- if (name == "raster-fade-duration") {
- property = Property::RasterFadeDuration;
- }
- break;
- case util::hashFNV1a("raster-fade-duration-transition"):
- if (name == "raster-fade-duration-transition") {
- property = Property::RasterFadeDurationTransition;
- }
- break;
-
- }
-
- if (property == Property::Unknown) {
+ MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map<mapbox::eternal::string, uint8_t>({
+ { "raster-opacity", static_cast<uint8_t>(Property::RasterOpacity) },
+ { "raster-hue-rotate", static_cast<uint8_t>(Property::RasterHueRotate) },
+ { "raster-brightness-min", static_cast<uint8_t>(Property::RasterBrightnessMin) },
+ { "raster-brightness-max", static_cast<uint8_t>(Property::RasterBrightnessMax) },
+ { "raster-saturation", static_cast<uint8_t>(Property::RasterSaturation) },
+ { "raster-contrast", static_cast<uint8_t>(Property::RasterContrast) },
+ { "raster-resampling", static_cast<uint8_t>(Property::RasterResampling) },
+ { "raster-fade-duration", static_cast<uint8_t>(Property::RasterFadeDuration) },
+ { "raster-opacity-transition", static_cast<uint8_t>(Property::RasterOpacityTransition) },
+ { "raster-hue-rotate-transition", static_cast<uint8_t>(Property::RasterHueRotateTransition) },
+ { "raster-brightness-min-transition", static_cast<uint8_t>(Property::RasterBrightnessMinTransition) },
+ { "raster-brightness-max-transition", static_cast<uint8_t>(Property::RasterBrightnessMaxTransition) },
+ { "raster-saturation-transition", static_cast<uint8_t>(Property::RasterSaturationTransition) },
+ { "raster-contrast-transition", static_cast<uint8_t>(Property::RasterContrastTransition) },
+ { "raster-resampling-transition", static_cast<uint8_t>(Property::RasterResamplingTransition) },
+ { "raster-fade-duration-transition", static_cast<uint8_t>(Property::RasterFadeDurationTransition) }
+ });
+
+ 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::RasterOpacity || property == Property::RasterHueRotate || property == Property::RasterBrightnessMin || property == Property::RasterBrightnessMax || property == Property::RasterSaturation || property == Property::RasterContrast || property == Property::RasterFadeDuration) {
Error error;
@@ -502,21 +439,6 @@ optional<Error> RasterLayer::setLayoutProperty(const std::string& name, const Co
return Layer::setVisibility(value);
}
- enum class Property {
- Unknown,
- };
-
- Property property = Property::Unknown;
- switch (util::hashFNV1a(name.c_str())) {
-
- }
-
- if (property == Property::Unknown) {
- return Error { "layer doesn't support this property" };
- }
-
-
-
return Error { "layer doesn't support this property" };
}
diff --git a/src/mbgl/style/layers/symbol_layer.cpp b/src/mbgl/style/layers/symbol_layer.cpp
index be25594f54..75ed881058 100644
--- a/src/mbgl/style/layers/symbol_layer.cpp
+++ b/src/mbgl/style/layers/symbol_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 {
@@ -1035,8 +1036,7 @@ TransitionOptions SymbolLayer::getTextTranslateAnchorTransition() const {
using namespace conversion;
optional<Error> SymbolLayer::setPaintProperty(const std::string& name, const Convertible& value) {
- enum class Property {
- Unknown,
+ enum class Property : uint8_t {
IconOpacity,
IconColor,
IconHaloColor,
@@ -1067,155 +1067,44 @@ optional<Error> SymbolLayer::setPaintProperty(const std::string& name, const Con
TextTranslateAnchorTransition,
};
- Property property = Property::Unknown;
- switch (util::hashFNV1a(name.c_str())) {
- case util::hashFNV1a("icon-opacity"):
- if (name == "icon-opacity") {
- property = Property::IconOpacity;
- }
- break;
- case util::hashFNV1a("icon-opacity-transition"):
- if (name == "icon-opacity-transition") {
- property = Property::IconOpacityTransition;
- }
- break;
- case util::hashFNV1a("icon-color"):
- if (name == "icon-color") {
- property = Property::IconColor;
- }
- break;
- case util::hashFNV1a("icon-color-transition"):
- if (name == "icon-color-transition") {
- property = Property::IconColorTransition;
- }
- break;
- case util::hashFNV1a("icon-halo-color"):
- if (name == "icon-halo-color") {
- property = Property::IconHaloColor;
- }
- break;
- case util::hashFNV1a("icon-halo-color-transition"):
- if (name == "icon-halo-color-transition") {
- property = Property::IconHaloColorTransition;
- }
- break;
- case util::hashFNV1a("icon-halo-width"):
- if (name == "icon-halo-width") {
- property = Property::IconHaloWidth;
- }
- break;
- case util::hashFNV1a("icon-halo-width-transition"):
- if (name == "icon-halo-width-transition") {
- property = Property::IconHaloWidthTransition;
- }
- break;
- case util::hashFNV1a("icon-halo-blur"):
- if (name == "icon-halo-blur") {
- property = Property::IconHaloBlur;
- }
- break;
- case util::hashFNV1a("icon-halo-blur-transition"):
- if (name == "icon-halo-blur-transition") {
- property = Property::IconHaloBlurTransition;
- }
- break;
- case util::hashFNV1a("icon-translate"):
- if (name == "icon-translate") {
- property = Property::IconTranslate;
- }
- break;
- case util::hashFNV1a("icon-translate-transition"):
- if (name == "icon-translate-transition") {
- property = Property::IconTranslateTransition;
- }
- break;
- case util::hashFNV1a("icon-translate-anchor"):
- if (name == "icon-translate-anchor") {
- property = Property::IconTranslateAnchor;
- }
- break;
- case util::hashFNV1a("icon-translate-anchor-transition"):
- if (name == "icon-translate-anchor-transition") {
- property = Property::IconTranslateAnchorTransition;
- }
- break;
- case util::hashFNV1a("text-opacity"):
- if (name == "text-opacity") {
- property = Property::TextOpacity;
- }
- break;
- case util::hashFNV1a("text-opacity-transition"):
- if (name == "text-opacity-transition") {
- property = Property::TextOpacityTransition;
- }
- break;
- case util::hashFNV1a("text-color"):
- if (name == "text-color") {
- property = Property::TextColor;
- }
- break;
- case util::hashFNV1a("text-color-transition"):
- if (name == "text-color-transition") {
- property = Property::TextColorTransition;
- }
- break;
- case util::hashFNV1a("text-halo-color"):
- if (name == "text-halo-color") {
- property = Property::TextHaloColor;
- }
- break;
- case util::hashFNV1a("text-halo-color-transition"):
- if (name == "text-halo-color-transition") {
- property = Property::TextHaloColorTransition;
- }
- break;
- case util::hashFNV1a("text-halo-width"):
- if (name == "text-halo-width") {
- property = Property::TextHaloWidth;
- }
- break;
- case util::hashFNV1a("text-halo-width-transition"):
- if (name == "text-halo-width-transition") {
- property = Property::TextHaloWidthTransition;
- }
- break;
- case util::hashFNV1a("text-halo-blur"):
- if (name == "text-halo-blur") {
- property = Property::TextHaloBlur;
- }
- break;
- case util::hashFNV1a("text-halo-blur-transition"):
- if (name == "text-halo-blur-transition") {
- property = Property::TextHaloBlurTransition;
- }
- break;
- case util::hashFNV1a("text-translate"):
- if (name == "text-translate") {
- property = Property::TextTranslate;
- }
- break;
- case util::hashFNV1a("text-translate-transition"):
- if (name == "text-translate-transition") {
- property = Property::TextTranslateTransition;
- }
- break;
- case util::hashFNV1a("text-translate-anchor"):
- if (name == "text-translate-anchor") {
- property = Property::TextTranslateAnchor;
- }
- break;
- case util::hashFNV1a("text-translate-anchor-transition"):
- if (name == "text-translate-anchor-transition") {
- property = Property::TextTranslateAnchorTransition;
- }
- break;
-
- }
-
- if (property == Property::Unknown) {
+ MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map<mapbox::eternal::string, uint8_t>({
+ { "icon-opacity", static_cast<uint8_t>(Property::IconOpacity) },
+ { "icon-color", static_cast<uint8_t>(Property::IconColor) },
+ { "icon-halo-color", static_cast<uint8_t>(Property::IconHaloColor) },
+ { "icon-halo-width", static_cast<uint8_t>(Property::IconHaloWidth) },
+ { "icon-halo-blur", static_cast<uint8_t>(Property::IconHaloBlur) },
+ { "icon-translate", static_cast<uint8_t>(Property::IconTranslate) },
+ { "icon-translate-anchor", static_cast<uint8_t>(Property::IconTranslateAnchor) },
+ { "text-opacity", static_cast<uint8_t>(Property::TextOpacity) },
+ { "text-color", static_cast<uint8_t>(Property::TextColor) },
+ { "text-halo-color", static_cast<uint8_t>(Property::TextHaloColor) },
+ { "text-halo-width", static_cast<uint8_t>(Property::TextHaloWidth) },
+ { "text-halo-blur", static_cast<uint8_t>(Property::TextHaloBlur) },
+ { "text-translate", static_cast<uint8_t>(Property::TextTranslate) },
+ { "text-translate-anchor", static_cast<uint8_t>(Property::TextTranslateAnchor) },
+ { "icon-opacity-transition", static_cast<uint8_t>(Property::IconOpacityTransition) },
+ { "icon-color-transition", static_cast<uint8_t>(Property::IconColorTransition) },
+ { "icon-halo-color-transition", static_cast<uint8_t>(Property::IconHaloColorTransition) },
+ { "icon-halo-width-transition", static_cast<uint8_t>(Property::IconHaloWidthTransition) },
+ { "icon-halo-blur-transition", static_cast<uint8_t>(Property::IconHaloBlurTransition) },
+ { "icon-translate-transition", static_cast<uint8_t>(Property::IconTranslateTransition) },
+ { "icon-translate-anchor-transition", static_cast<uint8_t>(Property::IconTranslateAnchorTransition) },
+ { "text-opacity-transition", static_cast<uint8_t>(Property::TextOpacityTransition) },
+ { "text-color-transition", static_cast<uint8_t>(Property::TextColorTransition) },
+ { "text-halo-color-transition", static_cast<uint8_t>(Property::TextHaloColorTransition) },
+ { "text-halo-width-transition", static_cast<uint8_t>(Property::TextHaloWidthTransition) },
+ { "text-halo-blur-transition", static_cast<uint8_t>(Property::TextHaloBlurTransition) },
+ { "text-translate-transition", static_cast<uint8_t>(Property::TextTranslateTransition) },
+ { "text-translate-anchor-transition", static_cast<uint8_t>(Property::TextTranslateAnchorTransition) }
+ });
+
+ 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::IconOpacity || property == Property::IconHaloWidth || property == Property::IconHaloBlur || property == Property::TextOpacity || property == Property::TextHaloWidth || property == Property::TextHaloBlur) {
Error error;
@@ -1408,9 +1297,7 @@ optional<Error> SymbolLayer::setLayoutProperty(const std::string& name, const Co
if (name == "visibility") {
return Layer::setVisibility(value);
}
-
enum class Property {
- Unknown,
SymbolPlacement,
SymbolSpacing,
SymbolAvoidEdges,
@@ -1449,238 +1336,53 @@ optional<Error> SymbolLayer::setLayoutProperty(const std::string& name, const Co
TextIgnorePlacement,
TextOptional,
};
-
- Property property = Property::Unknown;
- switch (util::hashFNV1a(name.c_str())) {
-
- case util::hashFNV1a("symbol-placement"):
- if (name == "symbol-placement") {
- property = Property::SymbolPlacement;
- }
- break;
-
- case util::hashFNV1a("symbol-spacing"):
- if (name == "symbol-spacing") {
- property = Property::SymbolSpacing;
- }
- break;
-
- case util::hashFNV1a("symbol-avoid-edges"):
- if (name == "symbol-avoid-edges") {
- property = Property::SymbolAvoidEdges;
- }
- break;
-
- case util::hashFNV1a("symbol-z-order"):
- if (name == "symbol-z-order") {
- property = Property::SymbolZOrder;
- }
- break;
-
- case util::hashFNV1a("icon-allow-overlap"):
- if (name == "icon-allow-overlap") {
- property = Property::IconAllowOverlap;
- }
- break;
-
- case util::hashFNV1a("icon-ignore-placement"):
- if (name == "icon-ignore-placement") {
- property = Property::IconIgnorePlacement;
- }
- break;
-
- case util::hashFNV1a("icon-optional"):
- if (name == "icon-optional") {
- property = Property::IconOptional;
- }
- break;
-
- case util::hashFNV1a("icon-rotation-alignment"):
- if (name == "icon-rotation-alignment") {
- property = Property::IconRotationAlignment;
- }
- break;
-
- case util::hashFNV1a("icon-size"):
- if (name == "icon-size") {
- property = Property::IconSize;
- }
- break;
-
- case util::hashFNV1a("icon-text-fit"):
- if (name == "icon-text-fit") {
- property = Property::IconTextFit;
- }
- break;
-
- case util::hashFNV1a("icon-text-fit-padding"):
- if (name == "icon-text-fit-padding") {
- property = Property::IconTextFitPadding;
- }
- break;
-
- case util::hashFNV1a("icon-image"):
- if (name == "icon-image") {
- property = Property::IconImage;
- }
- break;
-
- case util::hashFNV1a("icon-rotate"):
- if (name == "icon-rotate") {
- property = Property::IconRotate;
- }
- break;
-
- case util::hashFNV1a("icon-padding"):
- if (name == "icon-padding") {
- property = Property::IconPadding;
- }
- break;
-
- case util::hashFNV1a("icon-keep-upright"):
- if (name == "icon-keep-upright") {
- property = Property::IconKeepUpright;
- }
- break;
-
- case util::hashFNV1a("icon-offset"):
- if (name == "icon-offset") {
- property = Property::IconOffset;
- }
- break;
-
- case util::hashFNV1a("icon-anchor"):
- if (name == "icon-anchor") {
- property = Property::IconAnchor;
- }
- break;
-
- case util::hashFNV1a("icon-pitch-alignment"):
- if (name == "icon-pitch-alignment") {
- property = Property::IconPitchAlignment;
- }
- break;
-
- case util::hashFNV1a("text-pitch-alignment"):
- if (name == "text-pitch-alignment") {
- property = Property::TextPitchAlignment;
- }
- break;
-
- case util::hashFNV1a("text-rotation-alignment"):
- if (name == "text-rotation-alignment") {
- property = Property::TextRotationAlignment;
- }
- break;
-
- case util::hashFNV1a("text-field"):
- if (name == "text-field") {
- property = Property::TextField;
- }
- break;
-
- case util::hashFNV1a("text-font"):
- if (name == "text-font") {
- property = Property::TextFont;
- }
- break;
-
- case util::hashFNV1a("text-size"):
- if (name == "text-size") {
- property = Property::TextSize;
- }
- break;
-
- case util::hashFNV1a("text-max-width"):
- if (name == "text-max-width") {
- property = Property::TextMaxWidth;
- }
- break;
-
- case util::hashFNV1a("text-line-height"):
- if (name == "text-line-height") {
- property = Property::TextLineHeight;
- }
- break;
-
- case util::hashFNV1a("text-letter-spacing"):
- if (name == "text-letter-spacing") {
- property = Property::TextLetterSpacing;
- }
- break;
-
- case util::hashFNV1a("text-justify"):
- if (name == "text-justify") {
- property = Property::TextJustify;
- }
- break;
-
- case util::hashFNV1a("text-anchor"):
- if (name == "text-anchor") {
- property = Property::TextAnchor;
- }
- break;
-
- case util::hashFNV1a("text-max-angle"):
- if (name == "text-max-angle") {
- property = Property::TextMaxAngle;
- }
- break;
-
- case util::hashFNV1a("text-rotate"):
- if (name == "text-rotate") {
- property = Property::TextRotate;
- }
- break;
-
- case util::hashFNV1a("text-padding"):
- if (name == "text-padding") {
- property = Property::TextPadding;
- }
- break;
-
- case util::hashFNV1a("text-keep-upright"):
- if (name == "text-keep-upright") {
- property = Property::TextKeepUpright;
- }
- break;
-
- case util::hashFNV1a("text-transform"):
- if (name == "text-transform") {
- property = Property::TextTransform;
- }
- break;
-
- case util::hashFNV1a("text-offset"):
- if (name == "text-offset") {
- property = Property::TextOffset;
- }
- break;
-
- case util::hashFNV1a("text-allow-overlap"):
- if (name == "text-allow-overlap") {
- property = Property::TextAllowOverlap;
- }
- break;
-
- case util::hashFNV1a("text-ignore-placement"):
- if (name == "text-ignore-placement") {
- property = Property::TextIgnorePlacement;
- }
- break;
-
- case util::hashFNV1a("text-optional"):
- if (name == "text-optional") {
- property = Property::TextOptional;
- }
- break;
-
- }
-
- if (property == Property::Unknown) {
+ MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map<mapbox::eternal::string, uint8_t>({
+ { "symbol-placement", static_cast<uint8_t>(Property::SymbolPlacement) },
+ { "symbol-spacing", static_cast<uint8_t>(Property::SymbolSpacing) },
+ { "symbol-avoid-edges", static_cast<uint8_t>(Property::SymbolAvoidEdges) },
+ { "symbol-z-order", static_cast<uint8_t>(Property::SymbolZOrder) },
+ { "icon-allow-overlap", static_cast<uint8_t>(Property::IconAllowOverlap) },
+ { "icon-ignore-placement", static_cast<uint8_t>(Property::IconIgnorePlacement) },
+ { "icon-optional", static_cast<uint8_t>(Property::IconOptional) },
+ { "icon-rotation-alignment", static_cast<uint8_t>(Property::IconRotationAlignment) },
+ { "icon-size", static_cast<uint8_t>(Property::IconSize) },
+ { "icon-text-fit", static_cast<uint8_t>(Property::IconTextFit) },
+ { "icon-text-fit-padding", static_cast<uint8_t>(Property::IconTextFitPadding) },
+ { "icon-image", static_cast<uint8_t>(Property::IconImage) },
+ { "icon-rotate", static_cast<uint8_t>(Property::IconRotate) },
+ { "icon-padding", static_cast<uint8_t>(Property::IconPadding) },
+ { "icon-keep-upright", static_cast<uint8_t>(Property::IconKeepUpright) },
+ { "icon-offset", static_cast<uint8_t>(Property::IconOffset) },
+ { "icon-anchor", static_cast<uint8_t>(Property::IconAnchor) },
+ { "icon-pitch-alignment", static_cast<uint8_t>(Property::IconPitchAlignment) },
+ { "text-pitch-alignment", static_cast<uint8_t>(Property::TextPitchAlignment) },
+ { "text-rotation-alignment", static_cast<uint8_t>(Property::TextRotationAlignment) },
+ { "text-field", static_cast<uint8_t>(Property::TextField) },
+ { "text-font", static_cast<uint8_t>(Property::TextFont) },
+ { "text-size", static_cast<uint8_t>(Property::TextSize) },
+ { "text-max-width", static_cast<uint8_t>(Property::TextMaxWidth) },
+ { "text-line-height", static_cast<uint8_t>(Property::TextLineHeight) },
+ { "text-letter-spacing", static_cast<uint8_t>(Property::TextLetterSpacing) },
+ { "text-justify", static_cast<uint8_t>(Property::TextJustify) },
+ { "text-anchor", static_cast<uint8_t>(Property::TextAnchor) },
+ { "text-max-angle", static_cast<uint8_t>(Property::TextMaxAngle) },
+ { "text-rotate", static_cast<uint8_t>(Property::TextRotate) },
+ { "text-padding", static_cast<uint8_t>(Property::TextPadding) },
+ { "text-keep-upright", static_cast<uint8_t>(Property::TextKeepUpright) },
+ { "text-transform", static_cast<uint8_t>(Property::TextTransform) },
+ { "text-offset", static_cast<uint8_t>(Property::TextOffset) },
+ { "text-allow-overlap", static_cast<uint8_t>(Property::TextAllowOverlap) },
+ { "text-ignore-placement", static_cast<uint8_t>(Property::TextIgnorePlacement) },
+ { "text-optional", static_cast<uint8_t>(Property::TextOptional) }
+ });
+
+ 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::SymbolPlacement) {
Error error;