SpECTRE Documentation Coverage Report
Current view: top level - Utilities/StdHelpers - Bit.hpp Hit Total Coverage
Commit: e1f22ede76131d2a431eabbd2dd32008f3162edb Lines: 0 1 0.0 %
Date: 2025-04-16 15:32:12
Legend: Lines: hit not hit

          Line data    Source code
       1           0 : // Distributed under the MIT License.
       2             : // See LICENSE.txt for details.
       3             : 
       4             : #pragma once
       5             : 
       6             : #include <bit>
       7             : 
       8             : #if defined(__cpp_lib_int_pow2) && __cpp_lib_int_pow2 >= 202002L
       9             : // std::bit_floor and std::has_single_bit are defined in <bit>
      10             : #else
      11             : // std::bit_floor and std::has_single_bit are not defined in <bit> and
      12             : // therefore we provide the definitions
      13             : #include <cstdint>
      14             : #include <limits>
      15             : 
      16             : #include "Utilities/Requires.hpp"
      17             : 
      18             : // NOLINTNEXTLINE(cert-dcl58-cpp)
      19             : namespace std {
      20             : template <typename T,
      21             :           Requires<std::is_same_v<T, uint8_t> or std::is_same_v<T, uint16_t> or
      22             :                    std::is_same_v<T, uint32_t> or std::is_same_v<T, uint64_t> or
      23             :                    std::is_same_v<T, size_t> > = nullptr>
      24             : // NOLINTNEXTLINE(cert-dcl58-cpp)
      25             : constexpr T bit_floor(T x) noexcept {
      26             :   if (x != 0) {
      27             :     return T(1) << (std::numeric_limits<T>::digits - std::countl_zero(x) - 1);
      28             :   }
      29             :   return 0;
      30             : }
      31             : 
      32             : template <typename T,
      33             :           Requires<std::is_same_v<T, uint8_t> or std::is_same_v<T, uint16_t> or
      34             :                    std::is_same_v<T, uint32_t> or std::is_same_v<T, uint64_t> or
      35             :                    std::is_same_v<T, size_t> > = nullptr>
      36             : // NOLINTNEXTLINE(cert-dcl58-cpp)
      37             : constexpr bool has_single_bit(T x) noexcept {
      38             :   return std::popcount(x) == 1;
      39             : }
      40             : }  // namespace std
      41             : #endif

Generated by: LCOV version 1.14