1 #ifndef cetlib_bit_manipulation_h 2 #define cetlib_bit_manipulation_h 12 #include <type_traits> 22 static constexpr std::size_t
value = std::numeric_limits<U>::digits;
30 template <
class U, std::
size_t n>
31 struct bit_number<U, n, true> {
32 static constexpr std::size_t
value = U(1
u) <<
n;
35 template <
class U, std::
size_t n>
36 struct bit_number<U, n, false> {
37 static constexpr std::size_t
value = U(0
u);
47 template <
class U, std::
size_t n>
48 struct right_bits<U, n, true, true> {
52 template <
class U, std::
size_t n>
53 struct right_bits<U, n, true, false> {
54 static constexpr U
value = ~0
u;
64 template <
class U, std::
size_t n>
65 struct left_bits<U, n, true, true> {
73 template <
class U, std::
size_t n>
74 struct left_bits<U, n, true, false> {
75 static constexpr U
value = U(-1);
84 constexpr std::size_t
mask = nbits - 1ul;
86 return (X << n) | (X >> (nbits -
n) & mask);
const XML_Char int const XML_Char * value