Made early exit a bit faster

This commit is contained in:
emeric
2021-03-17 15:17:07 +01:00
parent 1ea3a619b9
commit ad84c888f5
2 changed files with 8 additions and 5 deletions
+6 -4
View File
@@ -78,7 +78,7 @@ getLastWriteTime(const std::filesystem::path& file)
return Wt::WDateTime::fromTime_t(sb.st_mtime); return Wt::WDateTime::fromTime_t(sb.st_mtime);
} }
void bool
exploreFilesRecursive(const std::filesystem::path& directory, std::function<bool(std::error_code, const std::filesystem::path&)> cb) exploreFilesRecursive(const std::filesystem::path& directory, std::function<bool(std::error_code, const std::filesystem::path&)> cb)
{ {
std::error_code ec; std::error_code ec;
@@ -87,7 +87,7 @@ exploreFilesRecursive(const std::filesystem::path& directory, std::function<bool
if (ec) if (ec)
{ {
cb(ec, directory); cb(ec, directory);
return; return true; // try to continue exploring anyway
} }
std::filesystem::directory_iterator itEnd; std::filesystem::directory_iterator itEnd;
@@ -108,16 +108,18 @@ exploreFilesRecursive(const std::filesystem::path& directory, std::function<bool
else if (std::filesystem::is_directory(*itPath, ec)) else if (std::filesystem::is_directory(*itPath, ec))
{ {
if (!ec) if (!ec)
exploreFilesRecursive(*itPath, cb); continueExploring = exploreFilesRecursive(*itPath, cb);
else else
continueExploring = cb(ec, *itPath); continueExploring = cb(ec, *itPath);
} }
} }
if (!continueExploring) if (!continueExploring)
break; return false;
itPath.increment(ec); itPath.increment(ec);
} }
return true;
} }
+2 -1
View File
@@ -35,7 +35,8 @@ bool ensureDirectory(const std::filesystem::path& dir);
// Get the last write time since Epoch // Get the last write time since Epoch
Wt::WDateTime getLastWriteTime(const std::filesystem::path& dir); Wt::WDateTime getLastWriteTime(const std::filesystem::path& dir);
void exploreFilesRecursive(const std::filesystem::path& directory, std::function<bool(std::error_code, const std::filesystem::path&)> cb); // returns false if aborted by user
bool exploreFilesRecursive(const std::filesystem::path& directory, std::function<bool(std::error_code, const std::filesystem::path&)> cb);
namespace std namespace std
{ {