#pragma once #include #include #include namespace mbgl { namespace style { template class PropertyValue { private: using Value = variant>; Value value; friend bool operator==(const PropertyValue& lhs, const PropertyValue& rhs) { return lhs.value == rhs.value; } friend bool operator!=(const PropertyValue& lhs, const PropertyValue& rhs) { return !(lhs == rhs); } public: PropertyValue() : value() {} PropertyValue( T constant) : value(constant) {} PropertyValue(CameraFunction function) : value(function) {} bool isUndefined() const { return value.which() == 0; } bool isConstant() const { return value.which() == 1; } bool isCameraFunction() const { return value.which() == 2; } bool isDataDriven() const { return false; } const T & asConstant() const { return value.template get< T >(); } const CameraFunction& asCameraFunction() const { return value.template get>(); } template auto evaluate(const Evaluator& evaluator, TimePoint = {}) const { return Value::visit(value, evaluator); } bool hasDataDrivenPropertyDifference(const PropertyValue&) const { return false; } }; } // namespace style } // namespace mbgl