#ifndef LLMR_STYLE_FILTER_COMPARISON #define LLMR_STYLE_FILTER_COMPARISON #include #include #include #include namespace llmr { 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