diff --git a/apps/openmw_test_suite/testing_util.hpp b/apps/openmw_test_suite/testing_util.hpp index b819848a8f..ad1b0423ef 100644 --- a/apps/openmw_test_suite/testing_util.hpp +++ b/apps/openmw_test_suite/testing_util.hpp @@ -51,25 +51,21 @@ namespace TestingOpenMW struct VFSTestData : public VFS::Archive { - std::map mFiles; + VFS::FileMap mFiles; - VFSTestData(std::map files) + explicit VFSTestData(VFS::FileMap&& files) : mFiles(std::move(files)) { } - void listResources(VFS::FileMap& out) override - { - for (const auto& [key, value] : mFiles) - out.emplace(key, value); - } + void listResources(VFS::FileMap& out) override { out = mFiles; } - bool contains(std::string_view file) const override { return mFiles.contains(file); } + bool contains(VFS::Path::NormalizedView file) const override { return mFiles.contains(file); } std::string getDescription() const override { return "TestData"; } }; - inline std::unique_ptr createTestVFS(std::map files) + inline std::unique_ptr createTestVFS(VFS::FileMap&& files) { auto vfs = std::make_unique(); vfs->addArchive(std::make_unique(std::move(files))); diff --git a/components/vfs/archive.hpp b/components/vfs/archive.hpp index 42b88219d7..bd793b8523 100644 --- a/components/vfs/archive.hpp +++ b/components/vfs/archive.hpp @@ -2,9 +2,9 @@ #define OPENMW_COMPONENTS_VFS_ARCHIVE_H #include -#include #include "filemap.hpp" +#include "pathutil.hpp" namespace VFS { @@ -17,7 +17,7 @@ namespace VFS virtual void listResources(FileMap& out) = 0; /// True if this archive contains the provided normalized file. - virtual bool contains(std::string_view file) const = 0; + virtual bool contains(Path::NormalizedView file) const = 0; virtual std::string getDescription() const = 0; }; diff --git a/components/vfs/bsaarchive.hpp b/components/vfs/bsaarchive.hpp index 304fc438ad..847aeca509 100644 --- a/components/vfs/bsaarchive.hpp +++ b/components/vfs/bsaarchive.hpp @@ -52,19 +52,14 @@ namespace VFS void listResources(FileMap& out) override { for (auto& resource : mResources) - { - std::string ent = resource.mInfo->name(); - Path::normalizeFilenameInPlace(ent); - - out[ent] = &resource; - } + out[VFS::Path::Normalized(resource.mInfo->name())] = &resource; } - bool contains(std::string_view file) const override + bool contains(Path::NormalizedView file) const override { for (const auto& it : mResources) { - if (Path::pathEqual(file, it.mInfo->name())) + if (Path::pathEqual(file.value(), it.mInfo->name())) return true; } return false; diff --git a/components/vfs/filesystemarchive.cpp b/components/vfs/filesystemarchive.cpp index 7d88dd9cc0..c72798e7ea 100644 --- a/components/vfs/filesystemarchive.cpp +++ b/components/vfs/filesystemarchive.cpp @@ -37,9 +37,9 @@ namespace VFS FileSystemArchiveFile file(path); - std::string searchable = Path::normalizeFilename(std::string_view{ proper }.substr(prefix)); + VFS::Path::Normalized searchable(std::string_view{ proper }.substr(prefix)); - const auto inserted = mIndex.emplace(searchable, file); + const auto inserted = mIndex.emplace(std::move(searchable), std::move(file)); if (!inserted.second) Log(Debug::Warning) << "Warning: found duplicate file for '" << proper @@ -56,7 +56,7 @@ namespace VFS } } - bool FileSystemArchive::contains(std::string_view file) const + bool FileSystemArchive::contains(Path::NormalizedView file) const { return mIndex.find(file) != mIndex.end(); } diff --git a/components/vfs/filesystemarchive.hpp b/components/vfs/filesystemarchive.hpp index 00fe5ba971..b158ef3472 100644 --- a/components/vfs/filesystemarchive.hpp +++ b/components/vfs/filesystemarchive.hpp @@ -30,12 +30,12 @@ namespace VFS void listResources(FileMap& out) override; - bool contains(std::string_view file) const override; + bool contains(Path::NormalizedView file) const override; std::string getDescription() const override; private: - std::map> mIndex; + std::map> mIndex; bool mBuiltIndex; std::filesystem::path mPath; };