summaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFObjectHandle.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libqpdf/QPDFObjectHandle.cc')
-rw-r--r--libqpdf/QPDFObjectHandle.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc
index b802a55c..4e77bbaa 100644
--- a/libqpdf/QPDFObjectHandle.cc
+++ b/libqpdf/QPDFObjectHandle.cc
@@ -931,6 +931,30 @@ QPDFObjectHandle::getResourceNames()
return result;
}
+std::string
+QPDFObjectHandle::getUniqueResourceName(std::string const& prefix,
+ int& min_suffix)
+{
+ std::set<std::string> names = getResourceNames();
+ int max_suffix = min_suffix + names.size();
+ while (min_suffix <= max_suffix)
+ {
+ std::string candidate = prefix + QUtil::int_to_string(min_suffix);
+ if (names.count(candidate) == 0)
+ {
+ return candidate;
+ }
+ // Increment after return; min_suffix should be the value
+ // used, not the next value.
+ ++min_suffix;
+ }
+ // This could only happen if there is a coding error.
+ // The number of candidates we test is more than the
+ // number of keys we're checking against.
+ throw std::logic_error("unable to find unconflicting name in"
+ " QPDFObjectHandle::getUniqueResourceName");
+}
+
// Indirect object accessors
QPDF*
QPDFObjectHandle::getOwningQPDF()