1 |
|
|
#include "zserio/CppRuntimeException.h" |
2 |
|
|
#include "zserio/BitFieldUtil.h" |
3 |
|
|
|
4 |
|
|
namespace zserio |
5 |
|
|
{ |
6 |
|
|
|
7 |
|
32 |
static void checkBitFieldLength(size_t length) |
8 |
|
|
{ |
9 |
✓✓✓✓
|
32 |
if (length == 0 || length > 64) |
10 |
✓✗✓✗ ✓✗ |
8 |
throw CppRuntimeException("Asking for bound of bitfield with invalid length ") << length << "!"; |
11 |
|
24 |
} |
12 |
|
|
|
13 |
|
16 |
int64_t getBitFieldLowerBound(size_t length, bool isSigned) |
14 |
|
|
{ |
15 |
|
16 |
checkBitFieldLength(length); |
16 |
|
|
|
17 |
✓✓ |
12 |
if (isSigned) |
18 |
|
6 |
return -static_cast<int64_t>((UINT64_C(1) << (length - 1)) - 1) - 1; |
19 |
|
|
else |
20 |
|
6 |
return 0; |
21 |
|
|
} |
22 |
|
|
|
23 |
|
16 |
uint64_t getBitFieldUpperBound(size_t length, bool isSigned) |
24 |
|
|
{ |
25 |
|
16 |
checkBitFieldLength(length); |
26 |
|
|
|
27 |
✓✓ |
12 |
if (isSigned) |
28 |
|
6 |
return (UINT64_C(1) << (length - 1)) - 1; |
29 |
|
|
else |
30 |
✓✓ |
6 |
return length == 64 ? UINT64_MAX : ((UINT64_C(1) << length) - 1); |
31 |
|
|
} |
32 |
|
|
|
33 |
|
|
} // namespace zserio |