MCPcopy Create free account
hub / github.com/boostorg/filesystem / recursive_directory_iterator_pop

Function recursive_directory_iterator_pop

src/directory.cpp:1398–1447  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1396} // namespace
1397
1398BOOST_FILESYSTEM_DECL
1399void recursive_directory_iterator_pop(recursive_directory_iterator& it, system::error_code* ec)
1400{
1401 BOOST_ASSERT_MSG(!it.is_end(), "pop() on end recursive_directory_iterator");
1402 detail::recur_dir_itr_imp* const imp = it.m_imp.get();
1403
1404 if (ec)
1405 ec->clear();
1406
1407 imp->m_stack.pop_back();
1408
1409 while (true)
1410 {
1411 if (imp->m_stack.empty())
1412 {
1413 it.m_imp.reset(); // done, so make end iterator
1414 break;
1415 }
1416
1417 directory_iterator& dir_it = imp->m_stack.back();
1418 system::error_code increment_ec;
1419 detail::directory_iterator_increment(dir_it, &increment_ec);
1420 if (BOOST_UNLIKELY(!!increment_ec))
1421 {
1422 if ((imp->m_options & directory_options::pop_on_error) == directory_options::none)
1423 {
1424 // Make an end iterator on errors
1425 it.m_imp.reset();
1426 }
1427 else
1428 {
1429 recursive_directory_iterator_pop_on_error(imp);
1430
1431 if (imp->m_stack.empty())
1432 it.m_imp.reset(); // done, so make end iterator
1433 }
1434
1435 if (!ec)
1436 BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::recursive_directory_iterator::pop", increment_ec));
1437
1438 *ec = increment_ec;
1439 return;
1440 }
1441
1442 if (dir_it != directory_iterator())
1443 break;
1444
1445 imp->m_stack.pop_back();
1446 }
1447}
1448
1449BOOST_FILESYSTEM_DECL
1450void recursive_directory_iterator_increment(recursive_directory_iterator& it, system::error_code* ec)

Callers 1

popMethod · 0.85

Calls 7

directory_iteratorClass · 0.85
getMethod · 0.80
clearMethod · 0.80
is_endMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected