blob: c9dc9fb1ec75cfb2b8f240e5d45d5aa9dbf5ef6f [file] [log] [blame]
#pragma once
#include <mbgl/util/variant.hpp>
#include <mbgl/util/feature.hpp>
#include <mbgl/util/geometry.hpp>
#include <mbgl/style/expression/expression.hpp>
#include <string>
#include <vector>
#include <tuple>
namespace mbgl {
namespace style {
class Filter {
public:
optional<std::shared_ptr<const expression::Expression>> expression;
private:
optional<mbgl::Value> legacyFilter;
public:
Filter() : expression() {}
Filter(expression::ParseResult _expression, optional<mbgl::Value> _filter = {})
: expression(std::move(*_expression)),
legacyFilter(std::move(_filter)){
assert(!expression || *expression != nullptr);
}
bool operator()(const expression::EvaluationContext& context) const;
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