Commit 7bbd8b30d099f6ede57d7fa84d5e1e4b1cdca1a1
1 parent
59b25578
Refactor `NNTreeIterator::resetLimits`: replace `getArrayNItems` and `getArrayIt…
…em` with `size` and subscript operators, remove redundant debug traces, simplify loop logic, and improve readability.
Showing
2 changed files
with
14 additions
and
23 deletions
libqpdf/NNTree.cc
| ... | ... | @@ -160,35 +160,31 @@ NNTreeIterator::increment(bool backward) |
| 160 | 160 | void |
| 161 | 161 | NNTreeIterator::resetLimits(QPDFObjectHandle a_node, std::list<PathElement>::iterator parent) |
| 162 | 162 | { |
| 163 | - bool done = false; | |
| 164 | - while (!done) { | |
| 163 | + while (true) { | |
| 165 | 164 | if (parent == path.end()) { |
| 166 | - QTC::TC("qpdf", "NNTree remove limits from root"); | |
| 167 | 165 | a_node.removeKey("/Limits"); |
| 168 | - done = true; | |
| 169 | 166 | break; |
| 170 | 167 | } |
| 171 | 168 | auto kids = a_node.getKey("/Kids"); |
| 172 | - int nkids = kids.isArray() ? kids.getArrayNItems() : 0; | |
| 169 | + size_t nkids = kids.isArray() ? kids.size() : 0; | |
| 173 | 170 | auto items = a_node.getKey(impl.details.itemsKey()); |
| 174 | - int nitems = items.isArray() ? items.getArrayNItems() : 0; | |
| 171 | + size_t nitems = items.size(); | |
| 175 | 172 | |
| 176 | 173 | bool changed = true; |
| 177 | 174 | QPDFObjectHandle first; |
| 178 | 175 | QPDFObjectHandle last; |
| 179 | 176 | if (nitems >= 2) { |
| 180 | - first = items.getArrayItem(0); | |
| 181 | - last = items.getArrayItem((nitems - 1) & ~1); | |
| 177 | + first = items[0]; | |
| 178 | + last = items[(nitems - 1u) & ~1u]; | |
| 182 | 179 | } else if (nkids > 0) { |
| 183 | - auto first_kid = kids.getArrayItem(0); | |
| 184 | - auto last_kid = kids.getArrayItem(nkids - 1); | |
| 180 | + auto first_kid = kids[0]; | |
| 181 | + auto last_kid = kids[nkids - 1u]; | |
| 185 | 182 | if (first_kid.isDictionary() && last_kid.isDictionary()) { |
| 186 | 183 | auto first_limits = first_kid.getKey("/Limits"); |
| 187 | 184 | auto last_limits = last_kid.getKey("/Limits"); |
| 188 | - if (first_limits.isArray() && (first_limits.getArrayNItems() >= 2) && | |
| 189 | - last_limits.isArray() && (last_limits.getArrayNItems() >= 2)) { | |
| 190 | - first = first_limits.getArrayItem(0); | |
| 191 | - last = last_limits.getArrayItem(1); | |
| 185 | + if (first_limits.size() >= 2 && last_limits.size() >= 2) { | |
| 186 | + first = first_limits[0]; | |
| 187 | + last = last_limits[1]; | |
| 192 | 188 | } |
| 193 | 189 | } |
| 194 | 190 | } |
| ... | ... | @@ -197,13 +193,12 @@ NNTreeIterator::resetLimits(QPDFObjectHandle a_node, std::list<PathElement>::ite |
| 197 | 193 | limits.appendItem(first); |
| 198 | 194 | limits.appendItem(last); |
| 199 | 195 | auto olimits = a_node.getKey("/Limits"); |
| 200 | - if (olimits.isArray() && (olimits.getArrayNItems() == 2)) { | |
| 201 | - auto ofirst = olimits.getArrayItem(0); | |
| 202 | - auto olast = olimits.getArrayItem(1); | |
| 196 | + if (olimits.size() == 2) { | |
| 197 | + auto ofirst = olimits[0]; | |
| 198 | + auto olast = olimits[1]; | |
| 203 | 199 | if (impl.details.keyValid(ofirst) && impl.details.keyValid(olast) && |
| 204 | 200 | (impl.details.compareKeys(first, ofirst) == 0) && |
| 205 | 201 | (impl.details.compareKeys(last, olast) == 0)) { |
| 206 | - QTC::TC("qpdf", "NNTree limits didn't change"); | |
| 207 | 202 | changed = false; |
| 208 | 203 | } |
| 209 | 204 | } |
| ... | ... | @@ -211,12 +206,11 @@ NNTreeIterator::resetLimits(QPDFObjectHandle a_node, std::list<PathElement>::ite |
| 211 | 206 | a_node.replaceKey("/Limits", limits); |
| 212 | 207 | } |
| 213 | 208 | } else { |
| 214 | - QTC::TC("qpdf", "NNTree unable to determine limits"); | |
| 215 | 209 | impl.warn(a_node, "unable to determine limits"); |
| 216 | 210 | } |
| 217 | 211 | |
| 218 | 212 | if (!changed || parent == path.begin()) { |
| 219 | - done = true; | |
| 213 | + break; | |
| 220 | 214 | } else { |
| 221 | 215 | a_node = parent->node; |
| 222 | 216 | --parent; | ... | ... |
qpdf/qpdf.testcov
| ... | ... | @@ -522,13 +522,10 @@ QPDFPageObjectHelper::forEachXObject 3 |
| 522 | 522 | NNTree skip invalid kid 0 |
| 523 | 523 | NNTree skip item at end of short items 0 |
| 524 | 524 | NNTree skip invalid key 0 |
| 525 | -NNTree unable to determine limits 0 | |
| 526 | 525 | NNTree repair 0 |
| 527 | -NNTree limits didn't change 0 | |
| 528 | 526 | NNTree increment end() 0 |
| 529 | 527 | NNTree insertAfter inserts first 0 |
| 530 | 528 | NNTree erased last kid/item in tree 1 |
| 531 | -NNTree remove limits from root 0 | |
| 532 | 529 | QPDFPageObjectHelper unresolved names 0 |
| 533 | 530 | QPDFPageObjectHelper resolving unresolved 0 |
| 534 | 531 | QPDFFileSpecObjectHelper empty compat_name 0 | ... | ... |