summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2020-02-10 15:10:27 -0500
committerisanae <14251494+isanae@users.noreply.github.com>2020-02-18 17:25:03 -0500
commit7860e927a771d6a07d9b1905071bd389a0e64001 (patch)
tree0b24d49f9b324cda356103f80ca4df8246c82b62 /src
parent3423b0a59337cf4cf99a24a1421ea33c4c641a22 (diff)
removed dead insertFile()
avoided a few string copies lowercase filename in thread
Diffstat (limited to 'src')
-rw-r--r--src/envfs.cpp8
-rw-r--r--src/envfs.h3
-rw-r--r--src/shared/directoryentry.cpp45
-rw-r--r--src/shared/directoryentry.h10
4 files changed, 40 insertions, 26 deletions
diff --git a/src/envfs.cpp b/src/envfs.cpp
index 2716737f..80749046 100644
--- a/src/envfs.cpp
+++ b/src/envfs.cpp
@@ -1,4 +1,5 @@
#include "envfs.h"
+#include "util.h"
#include <utility.h>
#include <log.h>
@@ -368,7 +369,12 @@ Directory getFilesAndDirs(const std::wstring& path)
[](void* pcx, std::wstring_view path, FILETIME ft) {
Context* cx = (Context*)pcx;
- cx->current.top()->files.push_back({std::wstring(path.begin(), path.end()), ft});
+
+ cx->current.top()->files.push_back({
+ std::wstring(path.begin(), path.end()),
+ MOShared::ToLowerCopy(path),
+ ft
+ });
}
);
diff --git a/src/envfs.h b/src/envfs.h
index 1fc53bcf..6cc98775 100644
--- a/src/envfs.h
+++ b/src/envfs.h
@@ -9,7 +9,8 @@ namespace env
struct File
{
std::wstring name;
- FILETIME ft;
+ std::wstring lcname;
+ FILETIME lastModified;
};
struct Directory
diff --git a/src/shared/directoryentry.cpp b/src/shared/directoryentry.cpp
index b7329833..5df2c1ba 100644
--- a/src/shared/directoryentry.cpp
+++ b/src/shared/directoryentry.cpp
@@ -174,8 +174,8 @@ FileEntry::FileEntry() :
{
}
-FileEntry::FileEntry(Index index, std::wstring_view name, DirectoryEntry *parent) :
- m_Index(index), m_Name(name.begin(), name.end()), m_Origin(-1), m_Archive(L"", -1), m_Parent(parent),
+FileEntry::FileEntry(Index index, std::wstring name, DirectoryEntry *parent) :
+ m_Index(index), m_Name(std::move(name)), m_Origin(-1), m_Archive(L"", -1), m_Parent(parent),
m_FileSize(NoFileSize), m_CompressedFileSize(NoFileSize),
m_LastAccessed(time(nullptr))
{
@@ -511,7 +511,7 @@ bool FileRegister::indexValid(FileEntry::Index index) const
return (m_Files.find(index) != m_Files.end());
}
-FileEntry::Ptr FileRegister::createFile(std::wstring_view name, DirectoryEntry *parent)
+FileEntry::Ptr FileRegister::createFile(std::wstring name, DirectoryEntry *parent)
{
FileEntry::Index index = generateIndex();
@@ -707,7 +707,7 @@ void DirectoryEntry::addDir(FilesOrigin& origin, env::Directory& d)
}
for (auto& f : d.files) {
- insert(f.name, origin, f.ft, L"", -1);
+ insert(f, origin, L"", -1);
}
std::sort(
@@ -944,20 +944,6 @@ const FileEntry::Ptr DirectoryEntry::searchFile(
return FileEntry::Ptr();
}
-void DirectoryEntry::insertFile(
- const std::wstring &filePath, FilesOrigin &origin, FILETIME fileTime)
-{
- size_t pos = filePath.find_first_of(L"\\/");
-
- if (pos == std::string::npos) {
- this->insert(filePath, origin, fileTime, std::wstring(), -1);
- } else {
- std::wstring dirName = filePath.substr(0, pos);
- std::wstring rest = filePath.substr(pos + 1);
- getSubDirectoryRecursive(dirName, true, origin.getID())->insertFile(rest, origin, fileTime);
- }
-}
-
void DirectoryEntry::removeFile(FileEntry::Index index)
{
removeFileFromList(index);
@@ -1065,9 +1051,8 @@ FileEntry::Ptr DirectoryEntry::insert(
if (iter != m_Files.end()) {
file = m_FileRegister->getFile(iter->second);
} else {
- file = m_FileRegister->createFile(fileName, this);
+ file = m_FileRegister->createFile(std::wstring(fileName.begin(), fileName.end()), this);
addFileToList(std::move(fileNameLower), file->getIndex());
-
// fileNameLower has moved from this point
}
@@ -1077,6 +1062,26 @@ FileEntry::Ptr DirectoryEntry::insert(
return file;
}
+FileEntry::Ptr DirectoryEntry::insert(
+ env::File& file, FilesOrigin &origin, std::wstring_view archive, int order)
+{
+ auto iter = m_Files.find(file.lcname);
+ FileEntry::Ptr fe;
+
+ if (iter != m_Files.end()) {
+ fe = m_FileRegister->getFile(iter->second);
+ } else {
+ fe = m_FileRegister->createFile(std::move(file.name), this);
+ addFileToList(std::move(file.lcname), fe->getIndex());
+ // both file.name and file.lcname have been moved from this point
+ }
+
+ fe->addOrigin(origin.getID(), file.lastModified, archive, order);
+ origin.addFile(fe->getIndex());
+
+ return fe;
+}
+
void DirectoryEntry::addFiles(FilesOrigin &origin, wchar_t *buffer, int bufferOffset)
{
struct Context
diff --git a/src/shared/directoryentry.h b/src/shared/directoryentry.h
index 772899d7..f8c72d77 100644
--- a/src/shared/directoryentry.h
+++ b/src/shared/directoryentry.h
@@ -80,7 +80,7 @@ public:
AlternativesVector;
FileEntry();
- FileEntry(Index index, std::wstring_view name, DirectoryEntry *parent);
+ FileEntry(Index index, std::wstring name, DirectoryEntry *parent);
Index getIndex() const
{
@@ -263,7 +263,7 @@ public:
bool indexValid(FileEntry::Index index) const;
- FileEntry::Ptr createFile(std::wstring_view name, DirectoryEntry *parent);
+ FileEntry::Ptr createFile(std::wstring name, DirectoryEntry *parent);
FileEntry::Ptr getFile(FileEntry::Index index) const;
size_t size() const
@@ -459,8 +459,6 @@ public:
const FileEntry::Ptr searchFile(
const std::wstring &path, const DirectoryEntry **directory=nullptr) const;
- void insertFile(const std::wstring &filePath, FilesOrigin &origin, FILETIME fileTime);
-
void removeFile(FileEntry::Index index);
// remove the specified file from the tree. This can be a path leading to a
@@ -510,6 +508,10 @@ private:
std::wstring_view fileName, FilesOrigin &origin, FILETIME fileTime,
std::wstring_view archive, int order);
+ FileEntry::Ptr insert(
+ env::File& file, FilesOrigin &origin,
+ std::wstring_view archive, int order);
+
void addFiles(
FilesOrigin &origin, wchar_t *buffer, int bufferOffset);