DUDS
Distributed Update of Data from Something
ReverseBits.hpp
Go to the documentation of this file.
1 namespace duds { namespace general {
2 
8 template <typename Integer>
9 constexpr inline bool IsPowerOf2(Integer i) {
10  return i && !(i & (i - 1));
11 }
12 
25 template <typename Integer>
26 inline Integer ReverseBits(Integer i) {
27  static_assert(
28  IsPowerOf2(sizeof(Integer)),
29  "Size must be a power of 2 for this algorithm."
30  );
31  std::size_t s = sizeof(Integer) * 8;
32  Integer m = -1;
33  while (s >>= 1) {
34  m ^= (m << s);
35  i = ((i >> s) & m) | ((i << s) & ~m);
36  }
37  return i;
38 }
39 
52 constexpr inline std::uint8_t ReverseBits(const std::uint8_t i) {
53  return (i * 0x0202020202ULL & 0x010884422010ULL) % 1023;
54 }
55 
56 } }
constexpr bool IsPowerOf2(Integer i)
Returns true only if the given value is a power of 2.
Definition: ReverseBits.hpp:9
Integer ReverseBits(Integer i)
Reverses the bits in a given value.
Definition: ReverseBits.hpp:26