aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libqpdf/QPDF.cc12
-rw-r--r--libqpdf/QPDF_Array.cc11
-rw-r--r--libqpdf/SparseOHArray.cc12
-rw-r--r--libqpdf/qpdf/QPDF_Array.hh5
-rw-r--r--libqpdf/qpdf/SparseOHArray.hh6
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;