Commit 9e30de80326ad88c155725c66e3d444232119deb

Authored by m-holger
1 parent 0db65e79

Remove temporary OHArray::erase, insert and copy

libqpdf/OHArray.cc
1 1 #include <qpdf/OHArray.hh>
2 2  
3   -#include <qpdf/QPDFObjectHandle.hh>
4   -#include <qpdf/QPDFObject_private.hh>
5   -
6   -#include <stdexcept>
7   -
8   -static const QPDFObjectHandle null_oh = QPDFObjectHandle::newNull();
9   -
10 3 OHArray::OHArray()
11 4 {
12 5 }
13   -
14   -void
15   -OHArray::erase(size_t idx)
16   -{
17   - if (idx >= elements.size()) {
18   - throw std::logic_error("bounds error erasing item from OHArray");
19   - }
20   - int n = int(idx);
21   - elements.erase(elements.cbegin() + n);
22   -}
23   -
24   -void
25   -OHArray::insert(size_t idx, QPDFObjectHandle oh)
26   -{
27   - if (idx > elements.size()) {
28   - throw std::logic_error("bounds error inserting item to OHArray");
29   - } else if (idx == elements.size()) {
30   - // Allow inserting to the last position
31   - elements.push_back(oh.getObj());
32   - } else {
33   - int n = int(idx);
34   - elements.insert(elements.cbegin() + n, oh.getObj());
35   - }
36   -}
37   -
38   -OHArray
39   -OHArray::copy()
40   -{
41   - OHArray result;
42   - result.elements.reserve(elements.size());
43   - for (auto const& element: elements) {
44   - result.elements.push_back(
45   - element ? (element->getObjGen().isIndirect() ? element
46   - : element->copy())
47   - : element);
48   - }
49   - return result;
50   -}
... ...
libqpdf/QPDF_Array.cc
... ... @@ -67,7 +67,20 @@ QPDF_Array::copy(bool shallow)
67 67 if (sparse) {
68 68 return create(shallow ? sp_elements : sp_elements.copy());
69 69 } else {
70   - return create(shallow ? elements : elements.copy());
  70 + if (shallow) {
  71 + return create(elements);
  72 + } else {
  73 + OHArray result;
  74 + result.elements.reserve(elements.elements.size());
  75 + for (auto const& element: elements.elements) {
  76 + result.elements.push_back(
  77 + element
  78 + ? (element->getObjGen().isIndirect() ? element
  79 + : element->copy())
  80 + : element);
  81 + }
  82 + return create(result);
  83 + }
71 84 }
72 85 }
73 86  
... ... @@ -237,11 +250,19 @@ QPDF_Array::insertItem(int at, QPDFObjectHandle const&amp; item)
237 250 sp_elements.insert(QIntC::to_size(at), item);
238 251 } else {
239 252 // As special case, also allow insert beyond the end
  253 + size_t idx = QIntC::to_size(at);
240 254 if ((at < 0) || (at > QIntC::to_int(elements.elements.size()))) {
241 255 throw std::logic_error(
242 256 "INTERNAL ERROR: bounds error accessing QPDF_Array element");
243 257 }
244   - elements.insert(QIntC::to_size(at), item);
  258 + if (idx == elements.elements.size()) {
  259 + // Allow inserting to the last position
  260 + elements.elements.push_back(item.getObj());
  261 + } else {
  262 + int n = int(idx);
  263 + elements.elements.insert(
  264 + elements.elements.cbegin() + n, item.getObj());
  265 + }
245 266 }
246 267 }
247 268  
... ... @@ -261,6 +282,11 @@ QPDF_Array::eraseItem(int at)
261 282 if (sparse) {
262 283 sp_elements.erase(QIntC::to_size(at));
263 284 } else {
264   - elements.erase(QIntC::to_size(at));
  285 + size_t idx = QIntC::to_size(at);
  286 + if (idx >= elements.elements.size()) {
  287 + throw std::logic_error("bounds error erasing item from OHArray");
  288 + }
  289 + int n = int(idx);
  290 + elements.elements.erase(elements.elements.cbegin() + n);
265 291 }
266 292 }
... ...
libqpdf/qpdf/OHArray.hh
... ... @@ -12,9 +12,6 @@ class OHArray
12 12 {
13 13 public:
14 14 OHArray();
15   - void erase(size_t idx);
16   - void insert(size_t idx, QPDFObjectHandle oh);
17   - OHArray copy();
18 15  
19 16 private:
20 17 friend class QPDF_Array;
... ...