40
40
#include < cstdint>
41
41
#include < ctime>
42
42
#include < memory>
43
- #include < stack>
44
43
#include < string>
45
44
#include < system_error>
46
45
#include < vector>
@@ -1471,7 +1470,7 @@ namespace detail {
1471
1470
1472
1471
// / Keeps state for the recursive_directory_iterator.
1473
1472
struct RecDirIterState {
1474
- std::stack<directory_iterator, std:: vector<directory_iterator> > Stack;
1473
+ std::vector<directory_iterator> Stack;
1475
1474
uint16_t Level = 0 ;
1476
1475
bool HasNoPushRequest = false ;
1477
1476
};
@@ -1490,8 +1489,8 @@ class recursive_directory_iterator {
1490
1489
bool follow_symlinks = true )
1491
1490
: State(std::make_shared<detail::RecDirIterState>()),
1492
1491
Follow(follow_symlinks) {
1493
- State->Stack .push (directory_iterator (path, ec, Follow));
1494
- if (State->Stack .top () == directory_iterator ())
1492
+ State->Stack .push_back (directory_iterator (path, ec, Follow));
1493
+ if (State->Stack .back () == directory_iterator ())
1495
1494
State.reset ();
1496
1495
}
1497
1496
@@ -1502,27 +1501,28 @@ class recursive_directory_iterator {
1502
1501
if (State->HasNoPushRequest )
1503
1502
State->HasNoPushRequest = false ;
1504
1503
else {
1505
- file_type type = State->Stack .top ()->type ();
1504
+ file_type type = State->Stack .back ()->type ();
1506
1505
if (type == file_type::symlink_file && Follow) {
1507
1506
// Resolve the symlink: is it a directory to recurse into?
1508
- ErrorOr<basic_file_status> status = State->Stack .top ()->status ();
1507
+ ErrorOr<basic_file_status> status = State->Stack .back ()->status ();
1509
1508
if (status)
1510
1509
type = status->type ();
1511
1510
// Otherwise broken symlink, and we'll continue.
1512
1511
}
1513
1512
if (type == file_type::directory_file) {
1514
- State->Stack .push (directory_iterator (*State->Stack .top (), ec, Follow));
1515
- if (State->Stack .top () != end_itr) {
1513
+ State->Stack .push_back (
1514
+ directory_iterator (*State->Stack .back (), ec, Follow));
1515
+ if (State->Stack .back () != end_itr) {
1516
1516
++State->Level ;
1517
1517
return *this ;
1518
1518
}
1519
- State->Stack .pop ();
1519
+ State->Stack .pop_back ();
1520
1520
}
1521
1521
}
1522
1522
1523
1523
while (!State->Stack .empty ()
1524
- && State->Stack .top ().increment (ec) == end_itr) {
1525
- State->Stack .pop ();
1524
+ && State->Stack .back ().increment (ec) == end_itr) {
1525
+ State->Stack .pop_back ();
1526
1526
--State->Level ;
1527
1527
}
1528
1528
@@ -1533,8 +1533,8 @@ class recursive_directory_iterator {
1533
1533
return *this ;
1534
1534
}
1535
1535
1536
- const directory_entry &operator *() const { return *State->Stack .top (); }
1537
- const directory_entry *operator ->() const { return &*State->Stack .top (); }
1536
+ const directory_entry &operator *() const { return *State->Stack .back (); }
1537
+ const directory_entry *operator ->() const { return &*State->Stack .back (); }
1538
1538
1539
1539
// observers
1540
1540
// / Gets the current level. Starting path is at level 0.
@@ -1554,10 +1554,10 @@ class recursive_directory_iterator {
1554
1554
do {
1555
1555
if (ec)
1556
1556
report_fatal_error (" Error incrementing directory iterator." );
1557
- State->Stack .pop ();
1557
+ State->Stack .pop_back ();
1558
1558
--State->Level ;
1559
1559
} while (!State->Stack .empty ()
1560
- && State->Stack .top ().increment (ec) == end_itr);
1560
+ && State->Stack .back ().increment (ec) == end_itr);
1561
1561
1562
1562
// Check if we are done. If so, create an end iterator.
1563
1563
if (State->Stack .empty ())
0 commit comments