Zserio C++ runtime library  1.1.0
Built for Zserio 2.15.0
BitFieldUtil.cpp
Go to the documentation of this file.
1 #include "zserio/BitFieldUtil.h"
3 
4 namespace zserio
5 {
6 
7 static void checkBitFieldLength(size_t length)
8 {
9  if (length == 0 || length > 64)
10  {
11  throw CppRuntimeException("Asking for bound of bitfield with invalid length ") << length << "!";
12  }
13 }
14 
15 int64_t getBitFieldLowerBound(size_t length, bool isSigned)
16 {
17  checkBitFieldLength(length);
18 
19  if (isSigned)
20  {
21  return -static_cast<int64_t>((UINT64_C(1) << (length - 1)) - 1) - 1;
22  }
23  else
24  {
25  return 0;
26  }
27 }
28 
29 uint64_t getBitFieldUpperBound(size_t length, bool isSigned)
30 {
31  checkBitFieldLength(length);
32 
33  if (isSigned)
34  {
35  return (UINT64_C(1) << (length - 1)) - 1;
36  }
37  else
38  {
39  return length == 64 ? UINT64_MAX : ((UINT64_C(1) << length) - 1);
40  }
41 }
42 
43 } // namespace zserio
int64_t getBitFieldLowerBound(size_t length, bool isSigned)
uint64_t getBitFieldUpperBound(size_t length, bool isSigned)