directory_only_iterator is OK now
This commit is contained in:
parent
9f430f7220
commit
17782a60e1
@ -26,22 +26,28 @@ namespace nana {namespace experimental {namespace filesystem {namespace ext {
|
|||||||
constexpr auto def_rootname = "Root/";
|
constexpr auto def_rootname = "Root/";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// nana::experimental::filesystem::path_user()); // REPLACE !!!!!!!!!! to filesystem_ext.hhp
|
// nana::experimental::filesystem::path_user());
|
||||||
|
|
||||||
inline bool is_directory(const directory_entry& d) noexcept
|
inline bool is_directory(const std::experimental::filesystem::directory_entry& dir) noexcept
|
||||||
{
|
{
|
||||||
return is_directory(d.status());
|
return is_directory(dir.status());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class DI> // DI = directory_iterator from std, boost, or nana : return directory_entry
|
//template<class DI> // DI = directory_iterator from std, boost, or nana : return directory_entry
|
||||||
class directory_only_iterator : public DI
|
class directory_only_iterator : public std::experimental::filesystem::directory_iterator
|
||||||
{
|
{
|
||||||
DI& find_first()
|
using DI = std::experimental::filesystem::directory_iterator;
|
||||||
|
directory_only_iterator& find_first()
|
||||||
{
|
{
|
||||||
while(( (*this) != DI{}) || !is_directory((*this)->status()) )
|
auto end = directory_only_iterator{};
|
||||||
this->DI::operator++();
|
while (*this != end)
|
||||||
return (*this);
|
{
|
||||||
|
if (is_directory((**this).status()))
|
||||||
|
return *this;
|
||||||
|
this->DI::operator++();
|
||||||
|
}
|
||||||
|
return end;
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
template <class... Arg>
|
template <class... Arg>
|
||||||
@ -49,19 +55,31 @@ public:
|
|||||||
{
|
{
|
||||||
find_first();
|
find_first();
|
||||||
}
|
}
|
||||||
|
directory_only_iterator( ) {}
|
||||||
directory_only_iterator& operator++()
|
directory_only_iterator& operator++()
|
||||||
{
|
{
|
||||||
this->DI::operator++();
|
this->DI::operator++();
|
||||||
return find_first();
|
return find_first();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
inline directory_only_iterator begin(directory_only_iterator iter) noexcept
|
||||||
template<class DI> // DI = directory_iterator from std, boost, or nana : value_type directory_entry
|
|
||||||
class regular_file_only_iterator : public DI
|
|
||||||
{
|
{
|
||||||
DI& find_first()
|
return iter;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline directory_only_iterator end(const directory_only_iterator&) noexcept
|
||||||
|
{
|
||||||
|
return{};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//template<class DI> // DI = directory_iterator from std, boost, or nana : value_type directory_entry
|
||||||
|
class regular_file_only_iterator : public std::experimental::filesystem::directory_iterator
|
||||||
|
{
|
||||||
|
using DI = std::experimental::filesystem::directory_iterator;
|
||||||
|
regular_file_only_iterator& find_first()
|
||||||
{
|
{
|
||||||
while(( (*this) != DI{}) || !is_regular_file((*this)->status()) )
|
while(( (*this) != DI{}) && !is_regular_file((**this).status()))
|
||||||
this->DI::operator++();
|
this->DI::operator++();
|
||||||
return (*this);
|
return (*this);
|
||||||
}
|
}
|
||||||
@ -71,6 +89,7 @@ public:
|
|||||||
{
|
{
|
||||||
find_first();
|
find_first();
|
||||||
}
|
}
|
||||||
|
regular_file_only_iterator() : DI() {}
|
||||||
regular_file_only_iterator& operator++()
|
regular_file_only_iterator& operator++()
|
||||||
{
|
{
|
||||||
this->DI::operator++();
|
this->DI::operator++();
|
||||||
@ -78,5 +97,15 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}}}}
|
inline regular_file_only_iterator begin(regular_file_only_iterator iter) noexcept
|
||||||
|
{
|
||||||
|
return iter;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline regular_file_only_iterator end(const regular_file_only_iterator&) noexcept
|
||||||
|
{
|
||||||
|
return{};
|
||||||
|
}
|
||||||
|
|
||||||
|
}}}}
|
||||||
#endif //NANA_FILESYSTEM_EXT_HPP
|
#endif //NANA_FILESYSTEM_EXT_HPP
|
||||||
|
Loading…
x
Reference in New Issue
Block a user