| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #pragma once |
| |
| #include <cfloat> |
| #include <type_traits> |
| #include <valarray> |
| |
| #include "impeller/geometry/constants.h" |
| |
| namespace impeller { |
| |
| using Scalar = float; |
| |
| template <class T, class = std::enable_if_t<std::is_arithmetic_v<T>>> |
| constexpr T Absolute(const T& val) { |
| return val >= T{} ? val : -val; |
| } |
| |
| constexpr inline bool ScalarNearlyZero(Scalar x, |
| Scalar tolerance = kEhCloseEnough) { |
| return Absolute(x) <= tolerance; |
| } |
| |
| constexpr inline bool ScalarNearlyEqual(Scalar x, |
| Scalar y, |
| Scalar tolerance = kEhCloseEnough) { |
| return ScalarNearlyZero(x - y, tolerance); |
| } |
| |
| struct Degrees; |
| |
| struct Radians { |
| Scalar radians = 0.0; |
| |
| constexpr Radians() = default; |
| |
| explicit constexpr Radians(Scalar p_radians) : radians(p_radians) {} |
| }; |
| |
| struct Degrees { |
| Scalar degrees = 0.0; |
| |
| constexpr Degrees() = default; |
| |
| explicit constexpr Degrees(Scalar p_degrees) : degrees(p_degrees) {} |
| |
| constexpr operator Radians() const { |
| return Radians{degrees * kPi / 180.0f}; |
| }; |
| }; |
| |
| } // namespace impeller |