aboutsummaryrefslogtreecommitdiff
path: root/zencore/filesystem.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2022-05-06 11:53:11 +0200
committerDan Engelbrecht <[email protected]>2022-05-06 11:53:11 +0200
commite4b96fade542151fca17b5ac61e3eaad263ce92c (patch)
tree7466cbb6bed79fb4a211a3533210245c21f211eb /zencore/filesystem.cpp
parentreverted unnecessary changes (diff)
downloadzen-e4b96fade542151fca17b5ac61e3eaad263ce92c.tar.xz
zen-e4b96fade542151fca17b5ac61e3eaad263ce92c.zip
Added GetDirectoryContent utility
Diffstat (limited to 'zencore/filesystem.cpp')
-rw-r--r--zencore/filesystem.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/zencore/filesystem.cpp b/zencore/filesystem.cpp
index 437741161..bd85f5a11 100644
--- a/zencore/filesystem.cpp
+++ b/zencore/filesystem.cpp
@@ -1022,6 +1022,40 @@ MaximizeOpenFileCount()
#endif
}
+void
+GetDirectoryContent(const std::filesystem::path& RootDir, uint8_t Flags, DirectoryContent& OutContent)
+{
+ FileSystemTraversal Traversal;
+ struct Visitor : public FileSystemTraversal::TreeVisitor
+ {
+ Visitor(uint8_t Flags, DirectoryContent& OutContent) : Flags(Flags), Content(OutContent) {}
+
+ virtual void VisitFile([[maybe_unused]] const std::filesystem::path& Parent,
+ [[maybe_unused]] const path_view& File,
+ [[maybe_unused]] uint64_t FileSize) override
+ {
+ if (Flags & DirectoryContent::IncludeFilesFlag)
+ {
+ Content.Files.push_back(Parent / File);
+ }
+ }
+
+ virtual bool VisitDirectory([[maybe_unused]] const std::filesystem::path& Parent, const path_view& DirectoryName) override
+ {
+ if (Flags & DirectoryContent::IncludeDirsFlag)
+ {
+ Content.Directories.push_back(Parent / DirectoryName);
+ }
+ return (Flags & DirectoryContent::RecursiveFlag) != 0;
+ }
+
+ const uint8_t Flags;
+ DirectoryContent& Content;
+ } Visit(Flags, OutContent);
+
+ Traversal.TraverseFileSystem(RootDir, Visit);
+}
+
//////////////////////////////////////////////////////////////////////////
//
// Testing related code follows...