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/";
|
||||
#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
|
||||
class directory_only_iterator : public DI
|
||||
//template<class DI> // DI = directory_iterator from std, boost, or nana : return directory_entry
|
||||
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{};
|
||||
while (*this != end)
|
||||
{
|
||||
if (is_directory((**this).status()))
|
||||
return *this;
|
||||
this->DI::operator++();
|
||||
return (*this);
|
||||
}
|
||||
return end;
|
||||
}
|
||||
public:
|
||||
template <class... Arg>
|
||||
@ -49,19 +55,31 @@ public:
|
||||
{
|
||||
find_first();
|
||||
}
|
||||
directory_only_iterator( ) {}
|
||||
directory_only_iterator& operator++()
|
||||
{
|
||||
this->DI::operator++();
|
||||
return find_first();
|
||||
}
|
||||
};
|
||||
inline directory_only_iterator begin(directory_only_iterator iter) noexcept
|
||||
{
|
||||
return iter;
|
||||
}
|
||||
|
||||
template<class DI> // DI = directory_iterator from std, boost, or nana : value_type directory_entry
|
||||
class regular_file_only_iterator : public DI
|
||||
inline directory_only_iterator end(const directory_only_iterator&) noexcept
|
||||
{
|
||||
DI& find_first()
|
||||
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
|
||||
{
|
||||
while(( (*this) != DI{}) || !is_regular_file((*this)->status()) )
|
||||
using DI = std::experimental::filesystem::directory_iterator;
|
||||
regular_file_only_iterator& find_first()
|
||||
{
|
||||
while(( (*this) != DI{}) && !is_regular_file((**this).status()))
|
||||
this->DI::operator++();
|
||||
return (*this);
|
||||
}
|
||||
@ -71,6 +89,7 @@ public:
|
||||
{
|
||||
find_first();
|
||||
}
|
||||
regular_file_only_iterator() : DI() {}
|
||||
regular_file_only_iterator& 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
|
||||
|
Loading…
x
Reference in New Issue
Block a user