#ifndef LLMR_STYLE_FILTER_EXPRESSION #define LLMR_STYLE_FILTER_EXPRESSION #include #include #include namespace llmr { class FilterExpression { public: typedef util::recursive_wrapper Wrapper; enum class Operator : uint8_t { And, Or, Xor, Nor }; enum class GeometryType : uint8_t { Any, Point, LineString, Polygon }; public: FilterExpression() = default; FilterExpression(Operator op) : op(op) {}; bool empty() const; template bool compare(const Extractor &extractor) const; void add(const FilterComparison &comparison); void add(const FilterExpression &expression); void setGeometryType(GeometryType g); private: Operator op = Operator::And; GeometryType type = GeometryType::Any; std::vector comparisons; std::vector expressions; friend std::ostream& operator <<(std::ostream &, const FilterExpression &); }; std::ostream& operator <<(std::ostream &s, const FilterExpression &expression); FilterExpression::GeometryType parseGeometryType(const std::string &geometry); } #endif