From 043fc76ebc8ff401f5d121660bf58497c71dff2c Mon Sep 17 00:00:00 2001 From: KiritoDv Date: Wed, 29 Jan 2025 21:02:51 -0600 Subject: Replaced recursive iteration to be sorted by name and depth --- src/utils/TorchUtils.cpp | 28 ++++++++++++++++++++++++++++ src/utils/TorchUtils.h | 5 ++++- 2 files changed, 32 insertions(+), 1 deletion(-) (limited to 'src/utils') diff --git a/src/utils/TorchUtils.cpp b/src/utils/TorchUtils.cpp index 5dc4621..497b545 100644 --- a/src/utils/TorchUtils.cpp +++ b/src/utils/TorchUtils.cpp @@ -1,9 +1,12 @@ #include "TorchUtils.h" +#include #include #include #include "spdlog/spdlog.h" +namespace fs = std::filesystem; + uint32_t Torch::translate(const uint32_t offset) { if(SEGMENT_NUMBER(offset) > 0x01) { auto segment = SEGMENT_NUMBER(offset); @@ -18,3 +21,28 @@ uint32_t Torch::translate(const uint32_t offset) { return offset; } + +int getFileDepth(const fs::path& base, const fs::path& p) { + return std::distance(base.begin(), p.begin()); +} + +std::vector Torch::getRecursiveEntries(const fs::path baseDir) { + std::vector result; + + for (const auto& entry : fs::recursive_directory_iterator(baseDir)) { + result.push_back(entry); + } + + std::sort(result.begin(), result.end(), [](const fs::directory_entry& a, const fs::directory_entry& b) { + std::string nameA = a.path().parent_path().string(); + std::string nameB = b.path().parent_path().string(); + int depthA = std::distance(a.path().begin(), a.path().end()); + int depthB = std::distance(b.path().begin(), b.path().end()); + + if (nameA != nameB) + return nameA < nameB; + return depthA < depthB; + }); + + return result; +} \ No newline at end of file diff --git a/src/utils/TorchUtils.h b/src/utils/TorchUtils.h index 271ab98..da30acb 100644 --- a/src/utils/TorchUtils.h +++ b/src/utils/TorchUtils.h @@ -4,8 +4,9 @@ #include #include #include -#include #include +#include +#include namespace Torch { template< typename T > @@ -23,4 +24,6 @@ std::string to_hex(T number, const bool append0x = true) { } uint32_t translate(uint32_t offset); +std::vector getRecursiveEntries(const std::filesystem::path baseDir); + }; \ No newline at end of file -- cgit v1.2.3