17 class GeometryTileFeature;
20 namespace expression {
33 EvaluationContext(std::optional<mbgl::Value> accumulated_, GeometryTileFeature
const * feature_) :
38 EvaluationContext(std::optional<float> zoom_, GeometryTileFeature
const * feature_, std::optional<double> colorRampParameter_) :
64 GeometryTileFeature
const*
feature =
nullptr;
84 explicit operator bool ()
const {
85 return this->
template is<T>();
91 assert(this->
template is<T>());
92 return std::addressof(this->
template get<T>());
96 assert(this->
template is<T>());
97 return std::addressof(this->
template get<T>());
101 assert(this->
template is<T>());
102 return this->
template get<T>();
106 assert(this->
template is<T>());
107 return this->
template get<T>();
111 assert(this->
template is<EvaluationError>());
112 return this->
template get<EvaluationError>();
197 std::optional<double> colorRampParameter,
198 const std::set<std::string>& availableImages)
const;
201 std::optional<double> colorRampParameter,
202 const std::set<std::string>& availableImages,
214 std::vector<mbgl::Value> serialized;
215 serialized.emplace_back(getOperator());
217 serialized.emplace_back(child.
serialize());
225 template <
typename T>
227 if (lhs.size() != rhs.size())
return false;
228 for (
auto leftChild = lhs.begin(), rightChild = rhs.begin();
229 leftChild != lhs.end();
230 leftChild++, rightChild++)
237 static bool childEqual(
const std::unique_ptr<Expression>& lhs,
const std::unique_ptr<Expression>& rhs) {
241 template <
typename T>
242 static bool childEqual(
const std::pair<T, std::unique_ptr<Expression>>& lhs,
243 const std::pair<T, std::unique_ptr<Expression>>& rhs) {
244 return lhs.first == rhs.first && *(lhs.second) == *(rhs.second);
247 template <
typename T>
248 static bool childEqual(
const std::pair<T, std::shared_ptr<Expression>>& lhs,
249 const std::pair<T, std::shared_ptr<Expression>>& rhs) {
250 return lhs.first == rhs.first && *(lhs.second) == *(rhs.second);
253 static bool childEqual(
const std::pair<std::unique_ptr<Expression>, std::unique_ptr<Expression>>& lhs,
254 const std::pair<std::unique_ptr<Expression>, std::unique_ptr<Expression>>& rhs) {
255 return *(lhs.first) == *(rhs.first) && *(lhs.second) == *(rhs.second);
const std::set< std::string > * availableImages
const FeatureState * featureState
EvaluationContext(float zoom_)
EvaluationContext(float zoom_, GeometryTileFeature const *feature_)
std::optional< double > colorRampParameter
const mbgl::CanonicalTileID * canonical
EvaluationContext(float zoom_, GeometryTileFeature const *feature_, const FeatureState *state_)
const Value * formattedSection
EvaluationContext & withCanonicalTileID(const mbgl::CanonicalTileID *canonical_) noexcept
EvaluationContext(std::optional< mbgl::Value > accumulated_, GeometryTileFeature const *feature_)
EvaluationContext(std::optional< float > zoom_, GeometryTileFeature const *feature_, std::optional< double > colorRampParameter_)
EvaluationContext(GeometryTileFeature const *feature_)
GeometryTileFeature const * feature
EvaluationContext()=default
std::optional< float > zoom
std::optional< mbgl::Value > accumulated
EvaluationContext & withFeatureState(const FeatureState *featureState_) noexcept
EvaluationContext & withAvailableImages(const std::set< std::string > *availableImages_) noexcept
EvaluationContext & withFormattedSection(const Value *formattedSection_) noexcept
EvaluationResult(const std::array< double, 4 > &arr)
EvaluationResult(const type::ErrorType &)
EvaluationResult()=default
bool operator!=(const Expression &rhs) const
type::Type getType() const
virtual std::vector< std::optional< Value > > possibleOutputs() const =0
static bool childEqual(const std::pair< T, std::unique_ptr< Expression >> &lhs, const std::pair< T, std::unique_ptr< Expression >> &rhs)
virtual ~Expression()=default
EvaluationResult evaluate(std::optional< float > zoom, const Feature &feature, std::optional< double > colorRampParameter, const std::set< std::string > &availableImages, const CanonicalTileID &canonical) const
EvaluationResult evaluate(std::optional< float > zoom, const Feature &feature, std::optional< double > colorRampParameter, const std::set< std::string > &availableImages) const
Expression(Kind kind_, type::Type type_)
virtual EvaluationResult evaluate(const EvaluationContext ¶ms) const =0
static bool childEqual(const std::pair< T, std::shared_ptr< Expression >> &lhs, const std::pair< T, std::shared_ptr< Expression >> &rhs)
EvaluationResult evaluate(std::optional< mbgl::Value > accumulated, const Feature &feature) const
static bool childrenEqual(const T &lhs, const T &rhs)
virtual std::string getOperator() const =0
virtual void eachChild(const std::function< void(const Expression &)> &) const =0
EvaluationResult evaluate(std::optional< float > zoom, const Feature &feature, std::optional< double > colorRampParameter) const
static bool childEqual(const std::pair< std::unique_ptr< Expression >, std::unique_ptr< Expression >> &lhs, const std::pair< std::unique_ptr< Expression >, std::unique_ptr< Expression >> &rhs)
static bool childEqual(const std::unique_ptr< Expression > &lhs, const std::unique_ptr< Expression > &rhs)
virtual mbgl::Value serialize() const
virtual bool operator==(const Expression &) const =0
VARIANT_INLINE Result(U &&val)
const T * operator->() const
const EvaluationError & error() const
const T & operator*() const
std::unique_ptr< Expression > string(std::unique_ptr< Expression >, std::unique_ptr< Expression > def=nullptr)
std::unique_ptr< Expression > zoom()
variant< NullType, NumberType, BooleanType, StringType, ColorType, ObjectType, ValueType, mapbox::util::recursive_wrapper< Array >, CollatorType, FormattedType, ErrorType, ImageType > Type
Value toExpressionValue(const T &value)
bool operator==(const Undefined &, const Undefined &)
mapbox::base::Value Value
mapbox::base::ValueObject FeatureState
mapbox::util::variant< T... > variant