summaryrefslogtreecommitdiff
path: root/src/mbgl/style/layers/layer.cpp.ejs
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/style/layers/layer.cpp.ejs')
-rw-r--r--src/mbgl/style/layers/layer.cpp.ejs69
1 files changed, 47 insertions, 22 deletions
diff --git a/src/mbgl/style/layers/layer.cpp.ejs b/src/mbgl/style/layers/layer.cpp.ejs
index e74e7ab345..a17b9e803c 100644
--- a/src/mbgl/style/layers/layer.cpp.ejs
+++ b/src/mbgl/style/layers/layer.cpp.ejs
@@ -200,6 +200,8 @@ using namespace conversion;
namespace {
+constexpr uint8_t kPaintPropertyCount = <%- paintProperties.length * 2 -%>u;
+
enum class Property : uint8_t {
<% for (const property of paintProperties) { -%>
<%- camelize(property.name) %>,
@@ -207,8 +209,12 @@ enum class Property : uint8_t {
<% for (const property of paintProperties) { -%>
<%- camelize(property.name) %>Transition,
<% } -%>
-<% for (const property of layoutProperties) { -%>
- <%- camelize(property.name) %>,
+<% for (let i = 0; i < layoutProperties.length; ++i) { -%>
+<% if (i===0) { -%>
+ <%- camelize(layoutProperties[i].name) %> = kPaintPropertyCount,
+<% } else { -%>
+ <%- camelize(layoutProperties[i].name) %>,
+<% } -%>
<% } -%>
};
@@ -225,8 +231,46 @@ MAPBOX_ETERNAL_CONSTEXPR const auto layerProperties = mapbox::eternal::hash_map<
<%- paintProperties.map(p => `{"${p.name}-transition", toUint8(Property::${camelize(p.name)}Transition)}`).join(',\n ') %>,
<%- layoutProperties.map(p => `{"${p.name}", toUint8(Property::${camelize(p.name)})}`).join(',\n ') %>});
<% } -%>
+
+StyleProperty getLayerProperty(const <%- camelize(type) %>Layer& layer, Property property) {
+ switch (property) {
+<% for (const property of paintProperties) { -%>
+ case Property::<%- camelize(property.name) %>:
+ return makeStyleProperty(layer.get<%- camelize(property.name) %>());
+<% } -%>
+<% for (const property of paintProperties) { -%>
+ case Property::<%- camelize(property.name) %>Transition:
+ return makeStyleProperty(layer.get<%- camelize(property.name) %>Transition());
+<% } -%>
+<% for (const property of layoutProperties) { -%>
+ case Property::<%- camelize(property.name) %>:
+ return makeStyleProperty(layer.get<%- camelize(property.name) %>());
+<% } -%>
+ }
+ return {};
+}
+
+StyleProperty getLayerProperty(const <%- camelize(type) -%>Layer& layer, const std::string& name) {
+ const auto it = layerProperties.find(name.c_str());
+ if (it == layerProperties.end()) {
+ return {};
+ }
+ return getLayerProperty(layer, static_cast<Property>(it->second));
+}
+
} // namespace
+Value <%- camelize(type) %>Layer::serialize() const {
+ auto result = Layer::serialize();
+ assert(result.getObject());
+ for (const auto& property : layerProperties) {
+ auto styleProperty = getLayerProperty(*this, static_cast<Property>(property.second));
+ if (styleProperty.getKind() == StyleProperty::Kind::Undefined) continue;
+ serializeProperty(result, styleProperty, property.first.c_str(), property.second < kPaintPropertyCount);
+ }
+ return result;
+}
+
optional<Error> <%- camelize(type) %>Layer::setProperty(const std::string& name, const Convertible& value) {
const auto it = layerProperties.find(name.c_str());
if (it == layerProperties.end()) {
@@ -289,26 +333,7 @@ optional<Error> <%- camelize(type) %>Layer::setProperty(const std::string& name,
}
StyleProperty <%- camelize(type) %>Layer::getProperty(const std::string& name) const {
- const auto it = layerProperties.find(name.c_str());
- if (it == layerProperties.end()) {
- return {};
- }
-
- switch (static_cast<Property>(it->second)) {
-<% for (const property of paintProperties) { -%>
- case Property::<%- camelize(property.name) %>:
- return makeStyleProperty(get<%- camelize(property.name) %>());
-<% } -%>
-<% for (const property of paintProperties) { -%>
- case Property::<%- camelize(property.name) %>Transition:
- return makeStyleProperty(get<%- camelize(property.name) %>Transition());
-<% } -%>
-<% for (const property of layoutProperties) { -%>
- case Property::<%- camelize(property.name) %>:
- return makeStyleProperty(get<%- camelize(property.name) %>());
-<% } -%>
- }
- return {};
+ return getLayerProperty(*this, name);
}
Mutable<Layer::Impl> <%- camelize(type) %>Layer::mutableBaseImpl() const {