constexpr_log2_ceil
[folly.git] / folly / ConstexprMath.h
index 5b0bc51d57d514f713a8b6932fdef62ac012e244..34f7664e2c1cfc4fa21009573e0fe88f4fdd4b3f 100644 (file)
@@ -108,6 +108,11 @@ template <typename T>
 constexpr T constexpr_log2(T a, T e) {
   return e == T(1) ? a : constexpr_log2(a + T(1), e / T(2));
 }
+
+template <typename T>
+constexpr T constexpr_log2_ceil(T l2, T t) {
+  return l2 + T(T(1) << l2 < t ? 1 : 0);
+}
 } // namespace detail
 
 template <typename T>
@@ -115,6 +120,11 @@ constexpr T constexpr_log2(T t) {
   return detail::constexpr_log2(T(0), t);
 }
 
+template <typename T>
+constexpr T constexpr_log2_ceil(T t) {
+  return detail::constexpr_log2_ceil(constexpr_log2(t), t);
+}
+
 template <typename T>
 constexpr T constexpr_ceil(T t, T round) {
   return round == T(0)