3#include "di/container/queue/prelude.h" 
    4#include "dius/filesystem/directory_iterator.h" 
    8    : 
public di::container::IteratorBase<RecursiveDirectoryIterator, di::InputIteratorTag,
 
    9                                         di::Expected<DirectoryEntry, di::GenericCode>, i64>
 
   10    , 
public di::meta::EnableBorrowedContainer<RecursiveDirectoryIterator>
 
   11    , 
public di::meta::EnableView<RecursiveDirectoryIterator> {
 
   14        -> di::Result<RecursiveDirectoryIterator> {
 
   18            result.m_stack.push(di::move(base));
 
   19            result.m_recursion_pending = 
true;
 
 
   38    constexpr auto depth() const -> i32 { 
return static_cast<i32
>(m_stack.size()) - 1; }
 
   42        auto& top = *m_stack.top();
 
   47        auto const& current = **top;
 
   51        if (di::exchange(m_recursion_pending, 
true)) {
 
   52            auto is_directory_result = current.is_non_symlink_directory();
 
   53            if (!is_directory_result) {
 
   54                top.m_current = di::Unexpected(is_directory_result.error());
 
   59            if (*is_directory_result) {
 
   62                    top.m_current = di::Unexpected(new_iterator.error());
 
   68                    m_stack.push(*di::move(new_iterator));
 
 
   85            if (!m_stack.empty()) {
 
   86                auto& top = *m_stack.top();
 
 
  101        return a.m_stack.empty() && b.m_stack.empty();
 
 
  104    di::Stack<DirectoryIterator> m_stack;
 
  106    bool m_recursion_pending { 
false };
 
 
Definition directory_entry.h:13
Definition directory_iterator.h:24
static auto create(di::Path path, DirectoryOptions options=DirectoryOptions::None) -> di::Expected< DirectoryIterator, di::GenericCode >
auto end() const -> RecursiveDirectoryIterator
Definition recursive_directory_iterator.h:35
constexpr void disable_recursion_pending()
Definition recursive_directory_iterator.h:95
constexpr auto recursion_pending() const -> bool
Definition recursive_directory_iterator.h:39
auto begin() -> RecursiveDirectoryIterator
Definition recursive_directory_iterator.h:34
constexpr friend auto operator==(RecursiveDirectoryIterator const &a, RecursiveDirectoryIterator const &b) -> bool
Definition recursive_directory_iterator.h:100
RecursiveDirectoryIterator(RecursiveDirectoryIterator &&)=default
auto operator=(RecursiveDirectoryIterator &&) -> RecursiveDirectoryIterator &=default
void advance_one()
Definition recursive_directory_iterator.h:41
auto operator*() const -> di::Expected< DirectoryEntry const &, di::GenericCode >
Definition recursive_directory_iterator.h:32
auto operator=(RecursiveDirectoryIterator const &) -> RecursiveDirectoryIterator &=delete
RecursiveDirectoryIterator(RecursiveDirectoryIterator const &)=delete
constexpr auto depth() const -> i32
Definition recursive_directory_iterator.h:38
static auto create(di::Path path, DirectoryOptions options=DirectoryOptions::None) -> di::Result< RecursiveDirectoryIterator >
Definition recursive_directory_iterator.h:13
RecursiveDirectoryIterator()=default
constexpr auto options() const -> DirectoryOptions
Definition recursive_directory_iterator.h:37
void pop()
Definition recursive_directory_iterator.h:81
Definition directory_entry.h:11
DirectoryOptions
Definition directory_options.h:6
@ None
Definition directory_options.h:7