Antkeeper  0.0.1
compile.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2023 Christopher J. Howard
3  *
4  * This file is part of Antkeeper source code.
5  *
6  * Antkeeper source code is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * Antkeeper source code is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Antkeeper source code. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef ANTKEEPER_MATH_COMPILE_HPP
21 #define ANTKEEPER_MATH_COMPILE_HPP
22 
23 #include <concepts>
24 
25 namespace math {
26 
28 namespace compile {
29 
37 template <std::unsigned_integral T>
38 [[nodiscard]] consteval T ceil_log2(T x) noexcept
39 {
40  return (x <= T(1)) ? T(0) : ceil_log2((x + T(1)) / T(2)) + T(1);
41 }
42 
50 template <std::unsigned_integral T>
51 [[nodiscard]] consteval T exp2(T x) noexcept
52 {
53  return (x) ? T(2) << (x - 1) : T(1);
54 }
55 
64 template <std::unsigned_integral T>
65 [[nodiscard]] consteval T pow(T x, T e) noexcept
66 {
67  return (e == 0) ? T(1) : (x * pow<T>(x, e - 1));
68 }
69 
70 } // namespace compile
71 
72 } // namespace math
73 
74 #endif // ANTKEEPER_MATH_COMPILE_HPP
consteval T ceil_log2(T x) noexcept
Compile-time ceil(log2(x)) for unsigned integrals.
Definition: compile.hpp:38
consteval T pow(T x, T e) noexcept
Compile-time pow for unsigned integrals.
Definition: compile.hpp:65
consteval T exp2(T x) noexcept
Compile-time exp2 for unsigned integrals.
Definition: compile.hpp:51
constexpr T e
e.
Definition: numbers.hpp:37
Mathematical functions and data types.
Definition: angles.hpp:26