MapLibre Native Core
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
filter.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <mbgl/util/variant.hpp>
4 #include <mbgl/util/feature.hpp>
5 #include <mbgl/util/geometry.hpp>
7 
8 #include <string>
9 #include <vector>
10 #include <tuple>
11 #include <optional>
12 
13 namespace mbgl {
14 namespace style {
15 
16 class Filter {
17 public:
18  std::optional<std::shared_ptr<const expression::Expression>> expression;
19 private:
20  std::optional<mbgl::Value> legacyFilter;
21 public:
22  Filter() = default;
23 
24  Filter(expression::ParseResult _expression, std::optional<mbgl::Value> _filter = std::nullopt)
25  : expression(std::move(*_expression)),
26  legacyFilter(std::move(_filter)){
27  assert(!expression || *expression != nullptr);
28  }
29 
30  bool operator()(const expression::EvaluationContext& context) const;
31 
32  operator bool() const { return expression || legacyFilter; }
33 
34  friend bool operator==(const Filter& lhs, const Filter& rhs) {
35  if (!lhs.expression || !rhs.expression) {
36  return lhs.expression == rhs.expression;
37  } else {
38  return *(lhs.expression) == *(rhs.expression);
39  }
40  }
41 
42  friend bool operator!=(const Filter& lhs, const Filter& rhs) {
43  return !(lhs == rhs);
44  }
45 
47  if (legacyFilter) {
48  return *legacyFilter;
49  }
50  else if (expression) {
51  return (**expression).serialize();
52  }
53  return NullValue();
54  }
55 };
56 
57 } // namespace style
58 } // namespace mbgl
mbgl::Value serialize() const
Definition: filter.hpp:46
bool operator()(const expression::EvaluationContext &context) const
Filter(expression::ParseResult _expression, std::optional< mbgl::Value > _filter=std::nullopt)
Definition: filter.hpp:24
friend bool operator==(const Filter &lhs, const Filter &rhs)
Definition: filter.hpp:34
friend bool operator!=(const Filter &lhs, const Filter &rhs)
Definition: filter.hpp:42
std::optional< std::shared_ptr< const expression::Expression > > expression
Definition: filter.hpp:18
std::optional< std::unique_ptr< Expression > > ParseResult
Definition: actor.hpp:15
mapbox::base::NullValue NullValue
Definition: feature.hpp:12
mapbox::base::Value Value
Definition: feature.hpp:11
Definition: tile_id.hpp:256