diff options
Diffstat (limited to 'include/mbgl/style/property_value.hpp')
-rw-r--r-- | include/mbgl/style/property_value.hpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/include/mbgl/style/property_value.hpp b/include/mbgl/style/property_value.hpp new file mode 100644 index 0000000000..d8f83a0fb3 --- /dev/null +++ b/include/mbgl/style/property_value.hpp @@ -0,0 +1,38 @@ +#pragma once + +#include <mbgl/util/variant.hpp> +#include <mbgl/style/function.hpp> + +namespace mbgl { +namespace style { + +class Undefined {}; + +template <class T> +class PropertyValue { +private: + using Value = variant<Undefined, T, Function<T>>; + Value value; + +public: + PropertyValue() : value() {} + PropertyValue( T constant) : value(constant) {} + PropertyValue(Function<T> function) : value(function) {} + + bool isUndefined() const { return value.which() == 0; } + bool isConstant() const { return value.which() == 1; } + bool isFunction() const { return value.which() == 2; } + + const T & asConstant() const { return value.template get< T >(); } + const Function<T>& asFunction() const { return value.template get<Function<T>>(); } + + explicit operator bool() const { return !isUndefined(); }; + + template <typename Visitor> + static auto visit(const PropertyValue<T>& value, Visitor&& visitor) { + return Value::visit(value.value, visitor); + } +}; + +} // namespace style +} // namespace mbgl |