1 #pragma once 2 3 #include <cmath> 4 #include <cstdint> 5 #include <type_traits> 6 7 #if defined(__ANDROID__) 8 #include <android/api-level.h> 9 #endif 10 11 namespace mbgl { 12 namespace util { 13 14 // Computes the log2(x) rounded up to the next integer. 15 // (== number of bits required to store x) 16 uint32_t ceil_log2(uint64_t x); 17 18 } // namespace util 19 } // namespace mbgl 20 21 // log2 is not available on Android before API 18. 22 #if defined(__ANDROID__) && defined(__GNUC__) && \ 23 defined(__ANDROID_API__) && __ANDROID_API__ < 18 24 25 template <typename T> log2(T x)26typename std::enable_if_t<std::is_floating_point<T>::value, T> log2(T x) { 27 return ::log(x) / M_LN2; 28 } 29 30 #endif 31