summaryrefslogtreecommitdiff
path: root/include/llmr
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2014-07-16 18:26:05 -0700
committerKonstantin Käfer <mail@kkaefer.com>2014-07-16 18:26:35 -0700
commit4d1d2c5d5d4037d7e4ef91894663c49ba7f48e26 (patch)
treeaeea42f16bf372b76c8e5ecf5746acb0d1086b49 /include/llmr
parenta1d7da71c6f382258b2569020b50483958cfef0a (diff)
downloadqtlocation-mapboxgl-4d1d2c5d5d4037d7e4ef91894663c49ba7f48e26.tar.gz
separate comparisons and expressions
Diffstat (limited to 'include/llmr')
-rw-r--r--include/llmr/style/filter_comparison.hpp65
-rw-r--r--include/llmr/style/filter_comparison_private.hpp23
-rw-r--r--include/llmr/style/filter_expression.hpp56
-rw-r--r--include/llmr/style/filter_expression_private.hpp14
4 files changed, 90 insertions, 68 deletions
diff --git a/include/llmr/style/filter_comparison.hpp b/include/llmr/style/filter_comparison.hpp
new file mode 100644
index 0000000000..0e7a929e1c
--- /dev/null
+++ b/include/llmr/style/filter_comparison.hpp
@@ -0,0 +1,65 @@
+#ifndef LLMR_STYLE_FILTER_COMPARISON
+#define LLMR_STYLE_FILTER_COMPARISON
+
+#include <llmr/style/value.hpp>
+
+#include <vector>
+#include <string>
+#include <iosfwd>
+
+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<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
diff --git a/include/llmr/style/filter_comparison_private.hpp b/include/llmr/style/filter_comparison_private.hpp
new file mode 100644
index 0000000000..d778097730
--- /dev/null
+++ b/include/llmr/style/filter_comparison_private.hpp
@@ -0,0 +1,23 @@
+#ifndef LLMR_STYLE_FILTER_COMPARISON_PRIVATE
+#define LLMR_STYLE_FILTER_COMPARISON_PRIVATE
+
+#include "filter_comparison.hpp"
+
+namespace llmr {
+
+template <typename Extractor>
+inline bool FilterComparison::compare(const Extractor &extractor) const {
+ const std::vector<Value> values = extractor.getValues(field);
+
+ // All instances are ANDed together.
+ for (const Instance &instance : instances) {
+ if (!instance.compare(values)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+}
+
+#endif
diff --git a/include/llmr/style/filter_expression.hpp b/include/llmr/style/filter_expression.hpp
index 97ba8c9719..db67aa43a1 100644
--- a/include/llmr/style/filter_expression.hpp
+++ b/include/llmr/style/filter_expression.hpp
@@ -1,67 +1,13 @@
#ifndef LLMR_STYLE_FILTER_EXPRESSION
#define LLMR_STYLE_FILTER_EXPRESSION
-#include <llmr/style/value.hpp>
+#include <llmr/style/filter_comparison.hpp>
#include <llmr/util/recursive_wrapper.hpp>
-#include <vector>
-#include <string>
#include <iosfwd>
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<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);
-
-
class FilterExpression {
public:
typedef util::recursive_wrapper<FilterExpression> Wrapper;
diff --git a/include/llmr/style/filter_expression_private.hpp b/include/llmr/style/filter_expression_private.hpp
index c21fcac085..91c434e6ff 100644
--- a/include/llmr/style/filter_expression_private.hpp
+++ b/include/llmr/style/filter_expression_private.hpp
@@ -2,23 +2,11 @@
#define LLMR_STYLE_FILTER_EXPRESSION_PRIVATE
#include "filter_expression.hpp"
+#include "filter_comparison_private.hpp"
namespace llmr {
template <typename Extractor>
-inline bool FilterComparison::compare(const Extractor &extractor) const {
- const std::vector<Value> values = extractor.getValues(field);
-
- // All instances are ANDed together.
- for (const Instance &instance : instances) {
- if (!instance.compare(values)) {
- return false;
- }
- }
- return true;
-}
-
-template <typename Extractor>
bool FilterExpression::compare(const Extractor &extractor) const {
if (type != GeometryType::Any && extractor.getType() != type && extractor.getType() != GeometryType::Any) {
return false;