#ifndef MBGL_STYLE_FILTER_COMPARISON #define MBGL_STYLE_FILTER_COMPARISON #include #include #include #include namespace mbgl { class FilterComparison { public: enum class Operator : uint8_t { Equal, NotEqual, Greater, GreaterEqual, Less, LessEqual, In, NotIn }; class Instance { public: Instance(Operator op_, std::vector &&values_) : op(op_), values(values_) {} bool compare(const std::vector &property_values) const; private: Operator op = Operator::Equal; std::vector values; friend std::ostream& operator <<(std::ostream &, const Instance &); }; public: FilterComparison(const std::string &field_) : field(field_) {}; const std::string &getField() const; template inline bool compare(const Extractor &extractor) const; template inline void add(Args&& ...args) { instances.emplace_back(::std::forward(args)...); } private: std::string field; std::vector instances; friend std::ostream& operator <<(std::ostream &, const FilterComparison &); }; std::ostream& operator <<(std::ostream &s, const FilterComparison &comparison); std::ostream& operator <<(std::ostream &s, const FilterComparison::Instance &instance); FilterComparison::Operator parseFilterComparisonOperator(const std::string &op); } #endif