| 130 | int fPageObjectDescendantCount; |
| 131 | |
| 132 | static std::vector<PageTreeNode> Layer(std::vector<PageTreeNode> vec, PDFDocumentImpl* doc) { |
| 133 | std::vector<PageTreeNode> result; |
| 134 | static constexpr size_t kMaxNodeSize = 8; |
| 135 | const size_t n = vec.size(); |
| 136 | DEBUG_ASSERT(n >= 1); |
| 137 | const size_t result_len = ((n - 1) / kMaxNodeSize) + 1; |
| 138 | DEBUG_ASSERT(result_len >= 1); |
| 139 | DEBUG_ASSERT((n == 1 || result_len < n)); |
| 140 | result.reserve(result_len); |
| 141 | size_t index = 0; |
| 142 | for (size_t i = 0; i < result_len; ++i) { |
| 143 | if (n != 1 && index + 1 == n) { // No need to create a new node. |
| 144 | result.push_back(std::move(vec[index++])); |
| 145 | continue; |
| 146 | } |
| 147 | PDFIndirectReference parent = doc->reserveRef(); |
| 148 | auto kids_list = MakePDFArray(); |
| 149 | int descendantCount = 0; |
| 150 | for (size_t j = 0; j < kMaxNodeSize && index < n; ++j) { |
| 151 | PageTreeNode& node = vec[index++]; |
| 152 | node.fNode->insertRef("Parent", parent); |
| 153 | kids_list->appendRef(doc->emit(*node.fNode, node.fReservedRef)); |
| 154 | descendantCount += node.fPageObjectDescendantCount; |
| 155 | } |
| 156 | auto next = PDFDictionary::Make("Pages"); |
| 157 | next->insertInt("Count", descendantCount); |
| 158 | next->insertObject("Kids", std::move(kids_list)); |
| 159 | result.push_back(PageTreeNode{std::move(next), parent, descendantCount}); |
| 160 | } |
| 161 | return result; |
| 162 | } |
| 163 | }; |
| 164 | std::vector<PageTreeNode> currentLayer; |
| 165 | currentLayer.reserve(pages.size()); |
nothing calls this directly
no test coverage detected