Coverage Report

Created: 2026-01-25 07:18

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/kdegraphics-mobipocket/lib/bitreader_p.h
Line
Count
Source
1
// SPDX-FileCopyrightText: 2008 by Jakub Stachowski <qbast@go2.pl>
2
// Huffdic decompressor based on Python code by Igor Skochinsky
3
// SPDX-License-Identifier: GPL-2.0-or-later
4
5
#include <QByteArray>
6
#include <QtEndian>
7
8
namespace Mobipocket
9
{
10
class BitReader
11
{
12
public:
13
    BitReader(QByteArrayView d)
14
0
        : len(d.size() * 8)
15
0
        , data(d)
16
0
    {
17
0
    }
18
19
    quint32 read()
20
0
    {
21
0
        while (rEndPos - pos < 32) {
22
            // r does not hold sufficient data, fetch some more
23
0
            qint64 bytePos = rEndPos / 8;
24
25
0
            if (len - rEndPos >= 32) {
26
0
                r <<= 32;
27
0
                r |= qFromBigEndian<quint32>(data.constData() + bytePos);
28
0
                rEndPos += 32;
29
0
                break;
30
0
            } else if (len - rEndPos > 0) {
31
0
                r <<= 8;
32
0
                quint8 d = data.at(bytePos);
33
0
                r |= d;
34
0
                rEndPos += 8;
35
0
            } else {
36
0
                r <<= 8;
37
0
                rEndPos += 8;
38
0
            }
39
0
        }
40
41
0
        quint64 t = r << (64 - (rEndPos - pos));
42
0
        return t >> 32;
43
0
    }
44
45
    bool eat(int n)
46
0
    {
47
0
        pos += n;
48
0
        return pos <= len;
49
0
    }
50
51
    int left()
52
0
    {
53
0
        return len - pos;
54
0
    }
55
56
private:
57
    quint64 r = 0;
58
    int pos = 0;
59
    int len = 0;
60
    int rEndPos = 0; //< position past the LSB of r
61
    QByteArrayView data;
62
};
63
} // namespace Mobipocket