GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: src/zserio/BitFieldUtil.cpp Lines: 14 14 100.0 %
Date: 2023-12-13 14:51:09 Branches: 13 16 81.2 %

Line Branch Exec Source
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