blob: ff4073b129287767048dd132460d558472e368e2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
#include <mbgl/style/filter_expression_private.hpp>
#include <mbgl/map/vector_tile.hpp>
#include <mbgl/style/value_comparison.hpp>
#include <ostream>
namespace mbgl {
std::ostream& operator <<(std::ostream &s, FilterExpression::Operator op) {
switch (op) {
case FilterExpression::Operator::And: s << "AND"; break;
case FilterExpression::Operator::Or: s << "OR"; break;
case FilterExpression::Operator::Xor: s << "XOR"; break;
case FilterExpression::Operator::Nor: s << "NOR"; break;
}
return s;
}
std::ostream& operator <<(std::ostream &s, FilterExpression::GeometryType type) {
switch (type) {
case FilterExpression::GeometryType::Point: s << "Point"; break;
case FilterExpression::GeometryType::LineString: s << "LineString"; break;
case FilterExpression::GeometryType::Polygon: s << "Polygon"; break;
case FilterExpression::GeometryType::Any: s << "<Any>"; break;
}
return s;
}
bool FilterExpression::empty() const {
return type == GeometryType::Any && comparisons.empty() && expressions.empty();
}
void FilterExpression::add(const FilterComparison &comparison) {
comparisons.emplace_back(comparison);
}
void FilterExpression::add(const FilterExpression &expression) {
expressions.emplace_back(expression);
}
void FilterExpression::setGeometryType(GeometryType g) {
type = g;
}
FilterExpression::GeometryType parseGeometryType(const std::string &geometry) {
if (geometry == "Point") return FilterExpression::GeometryType::Point;
if (geometry == "LineString") return FilterExpression::GeometryType::LineString;
if (geometry == "Polygon") return FilterExpression::GeometryType::Polygon;
return FilterExpression::GeometryType::Any;
}
std::ostream& operator <<(std::ostream &s, const FilterExpression &expression) {
s << "expression " << expression.op << std::endl;
s << " - $type = " << expression.type << std::endl;
for (const FilterComparison &comparison : expression.comparisons) {
s << comparison;
}
s << "end expression" << std::endl;
return s;
}
template bool FilterExpression::compare(const VectorTileTagExtractor &extractor) const;
}
|