Coverage Report

Created: 2025-10-10 06:21

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/qpdf/libqpdf/Buffer.cc
Line
Count
Source
1
#include <qpdf/assert_test.h>
2
3
#include <qpdf/Buffer.hh>
4
5
class Buffer::Members
6
{
7
    friend class Buffer;
8
9
  public:
10
0
    Members() = default;
11
    // Constructor for Buffers that don't own the memory.
12
    Members(size_t size, char* buf) :
13
290k
        size(size),
14
290k
        buf(buf)
15
290k
    {
16
290k
    }
17
    Members(std::string&& content) :
18
15.8M
        str(std::move(content)),
19
15.8M
        size(str.size()),
20
15.8M
        buf(str.data())
21
15.8M
    {
22
15.8M
    }
23
    Members(Members const&) = delete;
24
16.1M
    ~Members() = default;
25
26
  private:
27
    std::string str;
28
    size_t size;
29
    char* buf;
30
};
31
32
Buffer::Buffer() :
33
0
    m(std::make_unique<Members>())
34
0
{
35
0
}
36
37
Buffer::Buffer(size_t size) :
38
15.7M
    m(std::make_unique<Members>(std::string(size, '\0')))
39
15.7M
{
40
15.7M
}
41
42
Buffer::Buffer(std::string&& content) :
43
81.3k
    m(std::make_unique<Members>(std::move(content)))
44
81.3k
{
45
81.3k
}
46
47
Buffer::Buffer(unsigned char* buf, size_t size) :
48
290k
    m(std::make_unique<Members>(size, reinterpret_cast<char*>(buf)))
49
290k
{
50
290k
}
51
52
Buffer::Buffer(std::string& content) :
53
0
    m(std::make_unique<Members>(content.size(), content.data()))
54
0
{
55
0
}
56
57
Buffer::Buffer(Buffer&& rhs) noexcept :
58
21.6M
    m(std::move(rhs.m))
59
21.6M
{
60
21.6M
}
61
62
Buffer&
63
Buffer::operator=(Buffer&& rhs) noexcept
64
0
{
65
0
    std::swap(m, rhs.m);
66
0
    return *this;
67
0
}
68
69
37.8M
Buffer::~Buffer() = default;
70
71
size_t
72
Buffer::getSize() const
73
857k
{
74
857k
    return m->size;
75
857k
}
76
77
unsigned char const*
78
Buffer::getBuffer() const
79
0
{
80
0
    return reinterpret_cast<unsigned char*>(m->buf);
81
0
}
82
83
unsigned char*
84
Buffer::getBuffer()
85
39.8M
{
86
39.8M
    return reinterpret_cast<unsigned char*>(m->buf);
87
39.8M
}
88
89
Buffer
90
Buffer::copy() const
91
0
{
92
0
    if (m->size == 0) {
93
0
        return {};
94
0
    }
95
0
    return {std::string(m->buf, m->size)};
96
0
}
97
98
std::string
99
Buffer::move()
100
0
{
101
0
    if (m->size == 0) {
102
0
        return {};
103
0
    }
104
0
    if (!m->str.empty()) {
105
0
        m->size = 0;
106
0
        m->buf = nullptr;
107
0
        return std::move(m->str);
108
0
    }
109
0
    return {m->buf, m->size};
110
0
}
111
112
std::string_view
113
Buffer::view() const
114
0
{
115
0
    if (!m->buf) {
116
0
        return {};
117
0
    }
118
0
    return {m->buf, m->size};
119
0
}
120
121
char const*
122
Buffer::data() const
123
0
{
124
0
    return m->buf ? m->buf : m->str.data();
125
0
}
126
127
char*
128
Buffer::data()
129
0
{
130
0
    return m->buf ? m->buf : m->str.data();
131
0
}
132
133
bool
134
Buffer::empty() const
135
0
{
136
0
    return m->size == 0;
137
0
}
138
139
size_t
140
Buffer::size() const
141
0
{
142
0
    return m->size;
143
0
}