#pragma once #include #include #include #include #include namespace mbgl { namespace style { class Filter; class NullFilter {}; class EqualsFilter { public: std::string key; Value value; }; class NotEqualsFilter { public: std::string key; Value value; }; class LessThanFilter { public: std::string key; Value value; }; class LessThanEqualsFilter { public: std::string key; Value value; }; class GreaterThanFilter { public: std::string key; Value value; }; class GreaterThanEqualsFilter { public: std::string key; Value value; }; class InFilter { public: std::string key; std::vector values; }; class NotInFilter { public: std::string key; std::vector values; }; class AnyFilter { public: std::vector filters; }; class AllFilter { public: std::vector filters; }; class NoneFilter { public: std::vector filters; }; class HasFilter { public: std::string key; }; class NotHasFilter { public: std::string key; }; using FilterBase = variant< class NullFilter, class EqualsFilter, class NotEqualsFilter, class LessThanFilter, class LessThanEqualsFilter, class GreaterThanFilter, class GreaterThanEqualsFilter, class InFilter, class NotInFilter, class AnyFilter, class AllFilter, class NoneFilter, class HasFilter, class NotHasFilter>; class Filter : public FilterBase { public: using FilterBase::FilterBase; bool operator()(const Feature&) const; template bool operator()(FeatureType type, optional id, PropertyAccessor accessor) const; }; } // namespace style } // namespace mbgl