Browse Source

Document bitoperations.h

tempestpy_adaptions
Daniel Basgöze 5 years ago
parent
commit
aa0fe082d7
  1. 17
      src/storm/utility/bitoperations.h

17
src/storm/utility/bitoperations.h

@ -1,17 +1,30 @@
#pragma once #pragma once
#include <cstddef> #include <cstddef>
#include "storm/utility/macros.h" #include "storm/utility/macros.h"
/**
* \return 2^n - 1
*/
inline size_t smallestIntWithNBitsSet(size_t n) { inline size_t smallestIntWithNBitsSet(size_t n) {
static_assert(sizeof(size_t) == 8, "size_t has wrong size."); static_assert(sizeof(size_t) == 8, "size_t has wrong size.");
STORM_LOG_ASSERT(n < 64, "Input is too large."); // TODO fix this for 32 bit architectures!
STORM_LOG_ASSERT(
n < 64,
"Input is too large."); // TODO fix this for 32 bit architectures!
if (n == 0) return 0; if (n == 0) return 0;
return (1 << n) - 1; return (1 << n) - 1;
} }
/**
* The next bit permutation in a lexicographical sense.
*
* Example: 00010011, 00010101, 00010110, 00011001,
* 00011010, 00011100, 00100011, and so forth
*
* From https://graphics.stanford.edu/~seander/bithacks.html#NextBitPermutation
*/
inline size_t nextBitPermutation(size_t v) { inline size_t nextBitPermutation(size_t v) {
if (v == 0) return static_cast<size_t>(0); if (v == 0) return static_cast<size_t>(0);
// From https://graphics.stanford.edu/~seander/bithacks.html#NextBitPermutation
size_t t = (v | (v - 1)) + 1; size_t t = (v | (v - 1)) + 1;
return t | ((((t & -t) / (v & -v)) >> 1) - 1); return t | ((((t & -t) / (v & -v)) >> 1) - 1);
} }
Loading…
Cancel
Save