summaryrefslogtreecommitdiff
path: root/include/mbgl/style/filter.hpp
diff options
context:
space:
mode:
authorLucas Wojciechowski <lucas@lucaswoj.com>2018-03-08 15:48:08 -0800
committerTobrun <tobrun@mapbox.com>2018-03-09 11:12:14 +0100
commit8a3deab73373c8f3182e4337a3619ebcc58ecc2c (patch)
tree46774560da0eac1e710dccbf41af2f2e7e8794c4 /include/mbgl/style/filter.hpp
parent6179110b6bfe8ee0880a055a31c12a88f9bd9b20 (diff)
downloadqtlocation-mapboxgl-8a3deab73373c8f3182e4337a3619ebcc58ecc2c.tar.gz
[core] Add expression filter support (#11251)
* WIP * WIP * WIP * Remove Filter::operator()(const Feature&) * WIP * WIP * WIP * WIP * Hook up expression filter evaluator * Replace `shared_ptr` with &reference * Fill in implementation of `void operator()(const ExpressionFilter&)` * Fix failing tests * Switch back to a shared_ptr per chat with @anandthakker * Fix benchmark compilation * Shot in the dark to fix CI * Shot in the dark to fix CI (part 2) * Shot in the dark to fix CI (part 3) * In src/mbgl/style/conversion/filter.cpp, add a port of isExpressionFilter and use it to decide in Converter<Filter>::operator() whether to parse the incoming JSON as an ExpressionFilter or one of the legacy filter types * Remove bool Filter::operator()(const GeometryTileFeature&) const * Ensure the map zoom is passed into filtering operations wherever applicable * Add expression filter tests * Addressed PR feedback * Implement `NSPredicate *operator()(mbgl::style::ExpressionFilter filter)` * Fix formatting& nit
Diffstat (limited to 'include/mbgl/style/filter.hpp')
-rw-r--r--include/mbgl/style/filter.hpp22
1 files changed, 13 insertions, 9 deletions
diff --git a/include/mbgl/style/filter.hpp b/include/mbgl/style/filter.hpp
index a204a2b17a..ccf8dce188 100644
--- a/include/mbgl/style/filter.hpp
+++ b/include/mbgl/style/filter.hpp
@@ -3,6 +3,7 @@
#include <mbgl/util/variant.hpp>
#include <mbgl/util/feature.hpp>
#include <mbgl/util/geometry.hpp>
+#include <mbgl/style/expression/expression.hpp>
#include <string>
#include <vector>
@@ -232,6 +233,15 @@ public:
return true;
}
};
+
+class ExpressionFilter {
+public:
+ std::shared_ptr<const expression::Expression> expression;
+
+ friend bool operator==(const ExpressionFilter& lhs, const ExpressionFilter& rhs) {
+ return *(lhs.expression) == *(rhs.expression);
+ }
+};
using FilterBase = variant<
@@ -258,19 +268,13 @@ using FilterBase = variant<
class IdentifierInFilter,
class IdentifierNotInFilter,
class HasIdentifierFilter,
- class NotHasIdentifierFilter>;
+ class NotHasIdentifierFilter,
+ class ExpressionFilter>;
class Filter : public FilterBase {
public:
using FilterBase::FilterBase;
-
- bool operator()(const Feature&) const;
-
- template <class GeometryTileFeature>
- bool operator()(const GeometryTileFeature&) const;
-
- template <class PropertyAccessor>
- bool operator()(FeatureType type, optional<FeatureIdentifier> id, PropertyAccessor accessor) const;
+ bool operator()(const expression::EvaluationContext& context) const;
};
} // namespace style