#ifndef MBGL_UTIL_INTERPOLATE #define MBGL_UTIL_INTERPOLATE #include #include #include namespace mbgl { namespace util { template T interpolate(const T a, const T b, const double t) { return a * (1.0 - t) + b * t; } template inline std::array interpolate(const std::array& a, const std::array& b, const double t) { return {{ interpolate(a[0], b[0], t), interpolate(a[1], b[1], t), interpolate(a[2], b[2], t), interpolate(a[3], b[3], t) }}; } template inline std::array interpolate(const std::array& a, const std::array& b, const double t) { return {{ interpolate(a[0], b[0], t), interpolate(a[1], b[1], t) }}; } // fake interpolations that just return the first value template<> inline bool interpolate(const bool a, const bool, const double) { return a; } template<> inline std::vector interpolate(const std::vector a, const std::vector, const double) { return a; } template<> inline std::string interpolate(const std::string a, const std::string, const double) { return a; } template<> inline TranslateAnchorType interpolate(const TranslateAnchorType a, const TranslateAnchorType, const double) { return a; } template<> inline RotateAnchorType interpolate(const RotateAnchorType a, const RotateAnchorType, const double) { return a; } template<> inline CapType interpolate(const CapType a, const CapType, const double) { return a; } template<> inline JoinType interpolate(const JoinType a, const JoinType, const double) { return a; } template<> inline PlacementType interpolate(const PlacementType a, const PlacementType, const double) { return a; } template<> inline TextAnchorType interpolate(const TextAnchorType a, const TextAnchorType, const double) { return a; } template<> inline TextJustifyType interpolate(const TextJustifyType a, const TextJustifyType, const double) { return a; } template<> inline TextTransformType interpolate(const TextTransformType a, const TextTransformType, const double) { return a; } template<> inline RotationAlignmentType interpolate(const RotationAlignmentType a, const RotationAlignmentType, const double) { return a; } template<> inline Faded interpolate(const Faded, const Faded b, const double) { return b; } template<> inline Faded> interpolate(const Faded>, const Faded> b, const double) { return b; } } } #endif