From afbfd0e78176d47c495a29c795fbd3690fa0ded3 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Thu, 3 Apr 2025 23:18:51 +0200 Subject: Add numeric library --- asl/base/numeric.hpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 asl/base/numeric.hpp (limited to 'asl/base/numeric.hpp') diff --git a/asl/base/numeric.hpp b/asl/base/numeric.hpp new file mode 100644 index 0000000..bbd229d --- /dev/null +++ b/asl/base/numeric.hpp @@ -0,0 +1,43 @@ +// Copyright 2025 Steven Le Rouzic +// +// SPDX-License-Identifier: BSD-3-Clause + +#pragma once + +#include "asl/base/integers.hpp" +#include "asl/base/bit.hpp" +#include "asl/base/meta.hpp" + +namespace asl +{ + +template +constexpr bool is_pow2(T x) +{ + using unsigned_type = select_t, T, as_unsigned_integer>; + return x > 0 && has_single_bit(static_cast(x)); +} + +template +concept is_numeric = is_integer || is_floating_point; + +template +constexpr T min(T a, T b) +{ + return (a <= b) ? a : b; +} + +template +constexpr T max(T a, T b) +{ + return (a >= b) ? a : b; +} + +template +constexpr T clamp(T x, T a, T b) +{ + return min(max(x, a), b); +} + +} // namespace asl + -- cgit