Coverage Report

Created: 2026-07-30 07:17

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
391
        : len(d.size() * 8)
15
391
        , data(d)
16
391
    {
17
391
    }
18
19
    quint32 read()
20
341
    {
21
369
        while (rEndPos - pos < 32) {
22
            // r does not hold sufficient data, fetch some more
23
95
            qint64 bytePos = rEndPos / 8;
24
25
95
            if (len - rEndPos >= 32) {
26
67
                r <<= 32;
27
67
                r |= qFromBigEndian<quint32>(data.constData() + bytePos);
28
67
                rEndPos += 32;
29
67
                break;
30
67
            } else if (len - rEndPos > 0) {
31
14
                r <<= 8;
32
14
                quint8 d = data.at(bytePos);
33
14
                r |= d;
34
14
                rEndPos += 8;
35
14
            } else {
36
14
                r <<= 8;
37
14
                rEndPos += 8;
38
14
            }
39
95
        }
40
41
341
        quint64 t = r << (64 - (rEndPos - pos));
42
341
        return t >> 32;
43
341
    }
44
45
    bool eat(int n)
46
323
    {
47
323
        pos += n;
48
323
        return pos <= len;
49
323
    }
50
51
    int left()
52
693
    {
53
693
        return len - pos;
54
693
    }
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