#pragma once #include #include #include #include #include namespace mbgl { namespace style { template class LayoutProperty { public: explicit LayoutProperty(T v) : value(std::move(v)), defaultValue(value) {} const PropertyValue& get() const { return currentValue; } void set(const PropertyValue& value_) { currentValue = value_; } void parse(const char * name, const JSValue& layout) { if (layout.HasMember(name)) { currentValue = parseProperty(name, layout[name]); } } void calculate(const CalculationParameters& parameters) { if (currentValue) { PropertyEvaluator evaluator(parameters, defaultValue); value = PropertyValue::visit(currentValue, evaluator); } } // TODO: remove / privatize operator T() const { return value; } T value; private: T defaultValue; PropertyValue currentValue; }; } // namespace style } // namespace mbgl