summaryrefslogtreecommitdiff
path: root/include/mbgl/style/filter_comparison.hpp
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2014-07-16 18:53:56 -0700
committerKonstantin Käfer <mail@kkaefer.com>2014-07-16 18:53:56 -0700
commit4ea281c750c5afcc68f2832bb42d98a1cbce6735 (patch)
tree60bc7d3ccba2c54859e2e023997cc027cc67aea7 /include/mbgl/style/filter_comparison.hpp
parentc1a64dc5fa73b54cc5de77629781dfc74302a1e7 (diff)
downloadqtlocation-mapboxgl-4ea281c750c5afcc68f2832bb42d98a1cbce6735.tar.gz
rename llmr => mbgl
Diffstat (limited to 'include/mbgl/style/filter_comparison.hpp')
-rw-r--r--include/mbgl/style/filter_comparison.hpp65
1 files changed, 65 insertions, 0 deletions
diff --git a/include/mbgl/style/filter_comparison.hpp b/include/mbgl/style/filter_comparison.hpp
new file mode 100644
index 0000000000..bf48744f1e
--- /dev/null
+++ b/include/mbgl/style/filter_comparison.hpp
@@ -0,0 +1,65 @@
+#ifndef MBGL_STYLE_FILTER_COMPARISON
+#define MBGL_STYLE_FILTER_COMPARISON
+
+#include <mbgl/style/value.hpp>
+
+#include <vector>
+#include <string>
+#include <iosfwd>
+
+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<Value> &&values)
+ : op(op), values(values) {}
+
+ bool compare(const std::vector<Value> &property_values) const;
+
+ private:
+ Operator op = Operator::Equal;
+ std::vector<Value> values;
+
+ friend std::ostream& operator <<(std::ostream &, const Instance &);
+ };
+
+public:
+ FilterComparison(const std::string &field) : field(field) {};
+
+ const std::string &getField() const;
+ template <typename Extractor> inline bool compare(const Extractor &extractor) const;
+
+ template <typename ...Args>
+ inline void add(Args&& ...args) {
+ instances.emplace_back(::std::forward<Args>(args)...);
+ }
+
+private:
+ std::string field;
+ std::vector<Instance> 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