31#ifndef ETL_GCD_INCLUDED
32#define ETL_GCD_INCLUDED
37#include "static_assert.h"
45 template <
intmax_t Value1,
intmax_t Value2>
48 static ETL_CONSTANT intmax_t value = gcd_const<Value2, Value1 % Value2>::value;
51 template <
intmax_t Value1>
54 static ETL_CONSTANT intmax_t value = Value1;
65 gcd(T a, T b) ETL_NOEXCEPT
67 ETL_STATIC_ASSERT(etl::is_integral<T>::value,
"Integral type required");
69 if ((a == 0 || b == 0))
91 typename etl::enable_if<etl::is_signed<T>::value, T>::type
92 gcd(T a, T b) ETL_NOEXCEPT
94 ETL_STATIC_ASSERT(etl::is_integral<T>::value,
"Integral type required");
96 typedef typename etl::make_unsigned<T>::type utype;
98 utype ua = etl::absolute_unsigned(a);
99 utype ub = etl::absolute_unsigned(b);
101 return static_cast<T
>(gcd(ua, ub));
105 #if ETL_HAS_INITIALIZER_LIST
111 template<
typename T,
typename... TRest>
114 T gcd(T first, TRest... rest) ETL_NOEXCEPT
118 for (T value : {rest...})
120 result = gcd(result, value);
138 template<
typename T,
typename... TRest>
141 T gcd(T a, T b, TRest... rest) ETL_NOEXCEPT
143 T gcd_ab = gcd(a, b);
153 return gcd(gcd_ab, rest...);
enable_if
Definition type_traits_generator.h:1254
bitset_ext
Definition absolute.h:39