diff options
Diffstat (limited to 'src/utils')
| -rw-r--r-- | src/utils/TorchUtils.cpp | 28 | ||||
| -rw-r--r-- | src/utils/TorchUtils.h | 5 |
2 files changed, 32 insertions, 1 deletions
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 <stack> #include <Companion.h> #include <factories/BaseFactory.h> #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<fs::directory_entry> Torch::getRecursiveEntries(const fs::path baseDir) { + std::vector<fs::directory_entry> 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 <fstream> #include <sstream> #include <iomanip> -#include <algorithm> #include <cstdint> +#include <algorithm> +#include <filesystem> 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<std::filesystem::directory_entry> getRecursiveEntries(const std::filesystem::path baseDir); + };
\ No newline at end of file |
