223 const std::string& prefix,
224 std::size_t levelOffset)
227 const auto numW = std::log10(
entries.size()) + 1;
229 std::size_t nextChildParentEntryOffset = std::numeric_limits<std::size_t>::max();
231 std::size_t nextChildIndex = 0;
232 auto updateNextChildEntryOffset = [&]
234 nextChildParentEntryOffset = std::numeric_limits<std::size_t>::max();
235 if (nextChildIndex <
children.size())
237 nextChildParentEntryOffset =
children.at(nextChildIndex).parentEntryOffset;
240 updateNextChildEntryOffset();
242 for (std::size_t entryIdx = 0; entryIdx <
entries.size(); ++entryIdx)
244 const std::size_t level =
245 levelOffset +
entries.size() - entryIdx;
246 while (entryIdx >= nextChildParentEntryOffset && nextChildIndex <
children.size())
248 children.at(nextChildIndex).print(out, prefix +
"| ", level);
249 out << prefix <<
"|/\n";
251 updateNextChildEntryOffset();
253 out << prefix <<
"* -" << std::setw(numW) << level << std::setw(0) <<
": "
254 <<
entries.at(entryIdx) <<
"\n";
257 for (; nextChildIndex <
children.size(); ++nextChildIndex)
259 children.at(nextChildIndex).print(out, prefix +
"| ");
260 out << prefix <<
"|/\n";