Commit 30bc392ae4a2eb88879ed26059cbe702a3f4b134

Authored by m-holger
1 parent c3191449

Refactor `Buffer::Members`: remove `own_memory`, simplify constructor logic, and…

… replace manual memory management with `std::string`.
Showing 1 changed file with 21 additions and 40 deletions
libqpdf/Buffer.cc
... ... @@ -9,53 +9,35 @@ class Buffer::Members
9 9 friend class Buffer;
10 10  
11 11 public:
12   - Members(size_t size, unsigned char* buf, bool own_memory);
13   - Members(std::string&& content);
  12 + Members() = default;
  13 + // Constructor for Buffers that don't own the memory.
  14 + Members(size_t size, unsigned char* buf) :
  15 + size(size),
  16 + buf(buf)
  17 + {
  18 + }
  19 + Members(std::string&& content) :
  20 + str(std::move(content)),
  21 + size(str.size()),
  22 + buf(reinterpret_cast<unsigned char*>(str.data()))
  23 + {
  24 + }
14 25 Members(Members const&) = delete;
15   - ~Members();
  26 + ~Members() = default;
16 27  
17 28 private:
18   -
19 29 std::string str;
20   - bool own_memory;
21 30 size_t size;
22 31 unsigned char* buf;
23 32 };
24 33  
25   -Buffer::Members::Members(size_t size, unsigned char* buf, bool own_memory) :
26   - own_memory(own_memory),
27   - size(size),
28   - buf(nullptr)
29   -{
30   - if (own_memory) {
31   - this->buf = (size ? new unsigned char[size] : nullptr);
32   - } else {
33   - this->buf = buf;
34   - }
35   -}
36   -
37   -Buffer::Members::Members(std::string&& content) :
38   - str(std::move(content)),
39   - own_memory(false),
40   - size(str.size()),
41   - buf(reinterpret_cast<unsigned char*>(str.data()))
42   -{
43   -}
44   -
45   -Buffer::Members::~Members()
46   -{
47   - if (this->own_memory) {
48   - delete[] this->buf;
49   - }
50   -}
51   -
52 34 Buffer::Buffer() :
53   - m(std::make_unique<Members>(0, nullptr, true))
  35 + m(std::make_unique<Members>())
54 36 {
55 37 }
56 38  
57 39 Buffer::Buffer(size_t size) :
58   - m(std::make_unique<Members>(size, nullptr, true))
  40 + m(std::make_unique<Members>(std::string(size, '\0')))
59 41 {
60 42 }
61 43  
... ... @@ -65,12 +47,12 @@ Buffer::Buffer(std::string&amp;&amp; content) :
65 47 }
66 48  
67 49 Buffer::Buffer(unsigned char* buf, size_t size) :
68   - m(std::make_unique<Members>(size, buf, false))
  50 + m(std::make_unique<Members>(size, buf))
69 51 {
70 52 }
71 53  
72 54 Buffer::Buffer(std::string& content) :
73   - m(std::make_unique<Members>(content.size(), reinterpret_cast<unsigned char*>(content.data()), false))
  55 + m(std::make_unique<Members>(content.size(), reinterpret_cast<unsigned char*>(content.data())))
74 56 {
75 57 }
76 58  
... ... @@ -109,9 +91,8 @@ Buffer::getBuffer()
109 91 Buffer
110 92 Buffer::copy() const
111 93 {
112   - auto result = Buffer(m->size);
113   - if (m->size) {
114   - memcpy(result.m->buf, m->buf, m->size);
  94 + if (m->size == 0) {
  95 + return {};
115 96 }
116   - return result;
  97 + return {std::string(reinterpret_cast<char const*>(m->buf), m->size)};
117 98 }
... ...