diff options
-rw-r--r-- | libqpdf/QPDF.cc | 12 | ||||
-rw-r--r-- | libqpdf/QPDF_Array.cc | 11 | ||||
-rw-r--r-- | libqpdf/SparseOHArray.cc | 12 | ||||
-rw-r--r-- | libqpdf/qpdf/QPDF_Array.hh | 5 | ||||
-rw-r--r-- | libqpdf/qpdf/SparseOHArray.hh | 6 |
5 files changed, 39 insertions, 7 deletions
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index a549eed0..5a03facc 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -20,6 +20,7 @@ #include <qpdf/QPDF_Null.hh> #include <qpdf/QPDF_Dictionary.hh> #include <qpdf/QPDF_Stream.hh> +#include <qpdf/QPDF_Array.hh> std::string QPDF::qpdf_version = "8.4.2"; @@ -1349,13 +1350,10 @@ QPDF::fixDanglingReferences(bool force) } else if (obj.isArray()) { - std::vector<QPDFObjectHandle> elements = obj.getArrayAsVector(); - for (std::vector<QPDFObjectHandle>::iterator iter = - elements.begin(); - iter != elements.end(); ++iter) - { - to_check.push_back(*iter); - } + QPDF_Array* arr = + dynamic_cast<QPDF_Array*>( + QPDFObjectHandle::ObjAccessor::getObject(obj).getPointer()); + arr->addExplicitElementsToList(to_check); } for (std::list<QPDFObjectHandle>::iterator iter = to_check.begin(); iter != to_check.end(); ++iter) diff --git a/libqpdf/QPDF_Array.cc b/libqpdf/QPDF_Array.cc index 31cd2dbc..99a75dcc 100644 --- a/libqpdf/QPDF_Array.cc +++ b/libqpdf/QPDF_Array.cc @@ -142,3 +142,14 @@ QPDF_Array::getElementsForShallowCopy() const { return this->elements; } + +void +QPDF_Array::addExplicitElementsToList(std::list<QPDFObjectHandle>& l) const +{ + for (std::map<size_t, QPDFObjectHandle>::const_iterator iter = + this->elements.begin(); + iter != this->elements.end(); ++iter) + { + l.push_back((*iter).second); + } +} diff --git a/libqpdf/SparseOHArray.cc b/libqpdf/SparseOHArray.cc index 2c525ca8..76c7c224 100644 --- a/libqpdf/SparseOHArray.cc +++ b/libqpdf/SparseOHArray.cc @@ -141,3 +141,15 @@ SparseOHArray::insert(size_t idx, QPDFObjectHandle oh) ++this->n_elements; } } + +SparseOHArray::const_iterator +SparseOHArray::begin() const +{ + return this->elements.begin(); +} + +SparseOHArray::const_iterator +SparseOHArray::end() const +{ + return this->elements.end(); +} diff --git a/libqpdf/qpdf/QPDF_Array.hh b/libqpdf/qpdf/QPDF_Array.hh index eb0b594b..7ea111a9 100644 --- a/libqpdf/qpdf/QPDF_Array.hh +++ b/libqpdf/qpdf/QPDF_Array.hh @@ -4,6 +4,7 @@ #include <qpdf/QPDFObject.hh> #include <vector> +#include <list> #include <qpdf/SparseOHArray.hh> class QPDF_Array: public QPDFObject @@ -28,7 +29,11 @@ class QPDF_Array: public QPDFObject void appendItem(QPDFObjectHandle const& item); void eraseItem(int at); + // Helper methods for QPDF and QPDFObjectHandle -- these are + // public methods since the whole class is not part of the public + // API. Otherwise, these would be wrapped in accessor classes. SparseOHArray const& getElementsForShallowCopy() const; + void addExplicitElementsToList(std::list<QPDFObjectHandle>&) const; protected: virtual void releaseResolved(); diff --git a/libqpdf/qpdf/SparseOHArray.hh b/libqpdf/qpdf/SparseOHArray.hh index 2e3f334c..6cd30ece 100644 --- a/libqpdf/qpdf/SparseOHArray.hh +++ b/libqpdf/qpdf/SparseOHArray.hh @@ -26,6 +26,12 @@ class SparseOHArray QPDF_DLL void insert(size_t idx, QPDFObjectHandle oh); + typedef std::map<size_t, QPDFObjectHandle>::const_iterator const_iterator; + QPDF_DLL + const_iterator begin() const; + QPDF_DLL + const_iterator end() const; + private: std::map<size_t, QPDFObjectHandle> elements; size_t n_elements; |