#pragma once #include #include #include #include #include #include #include namespace mbgl { namespace style { class Filter { public: optional> expression; private: optional legacyFilter; public: Filter() : expression() {} Filter(expression::ParseResult _expression, optional _filter = {}) : expression(std::move(*_expression)), legacyFilter(std::move(_filter)){ assert(!expression || *expression != nullptr); } bool operator()(const expression::EvaluationContext& context) const; operator bool() const { return expression || legacyFilter; } friend bool operator==(const Filter& lhs, const Filter& rhs) { if (!lhs.expression || !rhs.expression) { return lhs.expression == rhs.expression; } else { return *(lhs.expression) == *(rhs.expression); } } friend bool operator!=(const Filter& lhs, const Filter& rhs) { return !(lhs == rhs); } mbgl::Value serialize() const { if (legacyFilter) { return *legacyFilter; } else if (expression) { return (**expression).serialize(); } return NullValue(); } }; } // namespace style } // namespace mbgl