#pragma once #include #include #include #include #include #include namespace mbgl { namespace style { template class Transitioning; template class Transitioning> : public IndexedTuple< TypeList, TypeList...>> { private: using Properties = TypeList; using Raw = IndexedTuple; using Super = IndexedTuple< TypeList, TypeList...>>; public: Transitioning() = default; Transitioning(const Raw& raw, Transitioning&& prior, const CascadeParameters& params) : Super { TransitioningProperty( raw.template get().value, std::move(prior.template get()), raw.template get().transition.reverseMerge(params.transition), params.now)... } {} bool hasTransition() const { bool result = false; util::ignore({ result |= this->template get().hasTransition()... }); return result; } }; template class Evaluated; template class Evaluated> : public IndexedTuple< TypeList, TypeList> { private: using Properties = TypeList; using TransitioningPs = Transitioning; using Super = IndexedTuple< TypeList, TypeList>; public: Evaluated() = default; Evaluated(TransitioningPs& transitioning, const PropertyEvaluationParameters& params) : Super { transitioning.template get() .evaluate(PropertyEvaluator(params, Ps::defaultValue()), params.now)... } {} }; using TransitioningLight = Transitioning; using EvaluatedLight = Evaluated; } // namespace style } // namespace mbgl