mirror of
https://github.com/pocoproject/poco.git
synced 2025-10-28 11:31:53 +01:00
@@ -33,49 +33,48 @@
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
|
||||
|
||||
#include "Poco/SortedDirectoryIterator.h"
|
||||
#include <algorithm>
|
||||
|
||||
|
||||
namespace Poco {
|
||||
|
||||
namespace Poco
|
||||
{
|
||||
|
||||
SortedDirectoryIterator::SortedDirectoryIterator()
|
||||
: DirectoryIterator(), _is_finished(true)
|
||||
: DirectoryIterator(), _is_finished(true)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
SortedDirectoryIterator::SortedDirectoryIterator(const std::string& path)
|
||||
: DirectoryIterator(path), _is_finished(false)
|
||||
: DirectoryIterator(path), _is_finished(false)
|
||||
{
|
||||
scan();
|
||||
next();
|
||||
scan();
|
||||
next();
|
||||
}
|
||||
|
||||
|
||||
SortedDirectoryIterator::SortedDirectoryIterator(const DirectoryIterator& iterator)
|
||||
: DirectoryIterator(iterator), _is_finished(false)
|
||||
: DirectoryIterator(iterator), _is_finished(false)
|
||||
{
|
||||
scan();
|
||||
next();
|
||||
scan();
|
||||
next();
|
||||
}
|
||||
|
||||
|
||||
SortedDirectoryIterator::SortedDirectoryIterator(const File& file)
|
||||
: DirectoryIterator(file), _is_finished(false)
|
||||
: DirectoryIterator(file), _is_finished(false)
|
||||
{
|
||||
scan();
|
||||
next();
|
||||
scan();
|
||||
next();
|
||||
}
|
||||
|
||||
|
||||
SortedDirectoryIterator::SortedDirectoryIterator(const Path& path)
|
||||
: DirectoryIterator(path), _is_finished(false)
|
||||
: DirectoryIterator(path), _is_finished(false)
|
||||
{
|
||||
scan();
|
||||
next();
|
||||
scan();
|
||||
next();
|
||||
}
|
||||
|
||||
|
||||
@@ -83,56 +82,56 @@ SortedDirectoryIterator::~SortedDirectoryIterator()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
SortedDirectoryIterator& SortedDirectoryIterator::operator ++ ()
|
||||
SortedDirectoryIterator& SortedDirectoryIterator::operator ++()
|
||||
{
|
||||
if (!_is_finished)
|
||||
{
|
||||
next();
|
||||
}
|
||||
return *this;
|
||||
if (!_is_finished)
|
||||
{
|
||||
next();
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
void SortedDirectoryIterator::scan()
|
||||
{
|
||||
DirectoryIterator end_it;
|
||||
while (*this != end_it)
|
||||
{
|
||||
if ((*this)->isDirectory())
|
||||
_directories.push_back(_path.toString());
|
||||
else
|
||||
_files.push_back(_path.toString());
|
||||
DirectoryIterator end_it;
|
||||
while (*this != end_it)
|
||||
{
|
||||
if ((*this)->isDirectory())
|
||||
_directories.push_back(_path.toString());
|
||||
else
|
||||
_files.push_back(_path.toString());
|
||||
|
||||
DirectoryIterator::operator++();
|
||||
}
|
||||
DirectoryIterator::operator++();
|
||||
}
|
||||
|
||||
std::sort(_directories.begin(), _directories.end());
|
||||
std::sort(_files.begin(), _files.end());
|
||||
std::sort(_directories.begin(), _directories.end());
|
||||
std::sort(_files.begin(), _files.end());
|
||||
}
|
||||
|
||||
|
||||
void SortedDirectoryIterator::next()
|
||||
{
|
||||
DirectoryIterator end_it;
|
||||
if (!_directories.empty())
|
||||
{
|
||||
_path.assign(_directories.front());
|
||||
_directories.pop_front();
|
||||
_file = _path;
|
||||
}
|
||||
else if (!_files.empty())
|
||||
{
|
||||
_path.assign(_files.front());
|
||||
_files.pop_front();
|
||||
_file = _path;
|
||||
}
|
||||
else
|
||||
{
|
||||
_is_finished = true;
|
||||
_path = end_it.path();
|
||||
_file = _path;
|
||||
}
|
||||
DirectoryIterator end_it;
|
||||
if (!_directories.empty())
|
||||
{
|
||||
_path.assign(_directories.front());
|
||||
_directories.pop_front();
|
||||
_file = _path;
|
||||
}
|
||||
else if (!_files.empty())
|
||||
{
|
||||
_path.assign(_files.front());
|
||||
_files.pop_front();
|
||||
_file = _path;
|
||||
}
|
||||
else
|
||||
{
|
||||
_is_finished = true;
|
||||
_path = end_it.path();
|
||||
_file = _path;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} // namespace Poco
|
||||
|
||||
Reference in New Issue
Block a user