diff options
Diffstat (limited to 'src/shared')
| -rw-r--r-- | src/shared/directoryentry.cpp | 23 | ||||
| -rw-r--r-- | src/shared/directoryentry.h | 36 | ||||
| -rw-r--r-- | src/shared/fileentry.cpp | 14 | ||||
| -rw-r--r-- | src/shared/fileentry.h | 21 | ||||
| -rw-r--r-- | src/shared/fileregister.cpp | 6 | ||||
| -rw-r--r-- | src/shared/fileregister.h | 4 | ||||
| -rw-r--r-- | src/shared/fileregisterfwd.h | 7 | ||||
| -rw-r--r-- | src/shared/filesorigin.cpp | 13 | ||||
| -rw-r--r-- | src/shared/filesorigin.h | 10 | ||||
| -rw-r--r-- | src/shared/originconnection.cpp | 14 | ||||
| -rw-r--r-- | src/shared/originconnection.h | 17 |
11 files changed, 74 insertions, 91 deletions
diff --git a/src/shared/directoryentry.cpp b/src/shared/directoryentry.cpp index 1036dfe6..14c8323e 100644 --- a/src/shared/directoryentry.cpp +++ b/src/shared/directoryentry.cpp @@ -359,7 +359,7 @@ int DirectoryEntry::anyOrigin() const // we continue looking in subdirectories
for (DirectoryEntry *entry : m_SubDirectories) {
int res = entry->anyOrigin();
- if (res != -1){
+ if (res != InvalidOriginID){
return res;
}
}
@@ -398,7 +398,7 @@ DirectoryEntry *DirectoryEntry::findSubDirectory( DirectoryEntry *DirectoryEntry::findSubDirectoryRecursive(const std::wstring &path)
{
- return getSubDirectoryRecursive(path, false, -1);
+ return getSubDirectoryRecursive(path, false, InvalidOriginID);
}
const FileEntryPtr DirectoryEntry::findFile(
@@ -407,9 +407,9 @@ const FileEntryPtr DirectoryEntry::findFile( FilesLookup::const_iterator iter;
if (alreadyLowerCase) {
- iter = m_FilesLookup.find(FileKey(name));
+ iter = m_FilesLookup.find(DirectoryEntryFileKey(name));
} else {
- iter = m_FilesLookup.find(FileKey(ToLowerCopy(name)));
+ iter = m_FilesLookup.find(DirectoryEntryFileKey(ToLowerCopy(name)));
}
if (iter != m_FilesLookup.end()) {
@@ -419,7 +419,7 @@ const FileEntryPtr DirectoryEntry::findFile( }
}
-const FileEntryPtr DirectoryEntry::findFile(const FileKey& key) const
+const FileEntryPtr DirectoryEntry::findFile(const DirectoryEntryFileKey& key) const
{
auto iter = m_FilesLookup.find(key);
@@ -495,7 +495,7 @@ const FileEntryPtr DirectoryEntry::searchFile( return FileEntryPtr();
}
-void DirectoryEntry::removeFile(FileEntry::Index index)
+void DirectoryEntry::removeFile(FileIndex index)
{
removeFileFromList(index);
}
@@ -589,7 +589,7 @@ FilesOrigin &DirectoryEntry::createOrigin( return r.first;
}
-void DirectoryEntry::removeFiles(const std::set<FileEntry::Index> &indices)
+void DirectoryEntry::removeFiles(const std::set<FileIndex> &indices)
{
removeFilesFromList(indices);
}
@@ -601,7 +601,7 @@ FileEntryPtr DirectoryEntry::insert( std::wstring fileNameLower = ToLowerCopy(fileName);
FileEntryPtr fe;
- FileKey key(std::move(fileNameLower));
+ DirectoryEntryFileKey key(std::move(fileNameLower));
{
std::unique_lock lock(m_FilesMutex);
@@ -931,7 +931,7 @@ void DirectoryEntry::removeDirectoryFromList(SubDirectories::iterator itor) m_SubDirectories.erase(itor);
}
-void DirectoryEntry::removeFileFromList(FileEntry::Index index)
+void DirectoryEntry::removeFileFromList(FileIndex index)
{
auto removeFrom = [&](auto& list) {
auto iter = std::find_if(
@@ -961,7 +961,7 @@ void DirectoryEntry::removeFileFromList(FileEntry::Index index) removeFrom(m_Files);
}
-void DirectoryEntry::removeFilesFromList(const std::set<FileEntry::Index>& indices)
+void DirectoryEntry::removeFilesFromList(const std::set<FileIndex>& indices)
{
for (auto iter = m_Files.begin(); iter != m_Files.end();) {
if (indices.find(iter->second) != indices.end()) {
@@ -980,8 +980,7 @@ void DirectoryEntry::removeFilesFromList(const std::set<FileEntry::Index>& indic }
}
-void DirectoryEntry::addFileToList(
- std::wstring fileNameLower, FileEntry::Index index)
+void DirectoryEntry::addFileToList(std::wstring fileNameLower, FileIndex index)
{
m_FilesLookup.emplace(fileNameLower, index);
m_Files.emplace(std::move(fileNameLower), index);
diff --git a/src/shared/directoryentry.h b/src/shared/directoryentry.h index df946946..5ca7389d 100644 --- a/src/shared/directoryentry.h +++ b/src/shared/directoryentry.h @@ -49,22 +49,20 @@ namespace MOShared class DirectoryEntry
{
public:
- using FileKey = DirectoryEntryFileKey;
-
DirectoryEntry(
- std::wstring name, DirectoryEntry *parent, int originID);
+ std::wstring name, DirectoryEntry *parent, OriginID originID);
DirectoryEntry(
- std::wstring name, DirectoryEntry *parent, int originID,
+ std::wstring name, DirectoryEntry *parent, OriginID originID,
boost::shared_ptr<FileRegister> fileRegister,
boost::shared_ptr<OriginConnection> originConnection);
+ ~DirectoryEntry();
+
// noncopyable
DirectoryEntry(const DirectoryEntry&) = delete;
DirectoryEntry& operator=(const DirectoryEntry&) = delete;
- ~DirectoryEntry();
-
void clear();
bool isPopulated() const
@@ -110,7 +108,7 @@ public: const std::wstring &originName, const std::wstring &directory,
env::Directory& root, int priority, DirectoryStats& stats);
- void propagateOrigin(int origin);
+ void propagateOrigin(OriginID origin);
const std::wstring &getName() const
{
@@ -123,11 +121,11 @@ public: }
bool originExists(const std::wstring &name) const;
- FilesOrigin &getOriginByID(int ID) const;
+ FilesOrigin &getOriginByID(OriginID ID) const;
FilesOrigin &getOriginByName(const std::wstring &name) const;
- const FilesOrigin* findOriginByID(int ID) const;
+ const FilesOrigin* findOriginByID(OriginID ID) const;
- int anyOrigin() const;
+ OriginID anyOrigin() const;
std::vector<FileEntryPtr> getFiles() const;
@@ -191,7 +189,7 @@ public: * @return fileentry object for the file or nullptr if no file matches
*/
const FileEntryPtr findFile(const std::wstring &name, bool alreadyLowerCase=false) const;
- const FileEntryPtr findFile(const FileKey& key) const;
+ const FileEntryPtr findFile(const DirectoryEntryFileKey& key) const;
bool hasFile(const std::wstring& name) const;
bool containsArchive(std::wstring archiveName);
@@ -209,7 +207,7 @@ public: // remove the specified file from the tree. This can be a path leading to a
// file in a subdirectory
- bool removeFile(const std::wstring &filePath, int *origin = nullptr);
+ bool removeFile(const std::wstring &filePath, OriginID *origin = nullptr);
/**
* @brief remove the specified directory
@@ -217,9 +215,9 @@ public: */
void removeDir(const std::wstring &path);
- bool remove(const std::wstring &fileName, int *origin);
+ bool remove(const std::wstring &fileName, OriginID *origin);
- bool hasContentsFromOrigin(int originID) const;
+ bool hasContentsFromOrigin(OriginID originID) const;
FilesOrigin &createOrigin(
const std::wstring &originName,
@@ -231,7 +229,7 @@ public: private:
using FilesMap = std::map<std::wstring, FileIndex>;
- using FilesLookup = std::unordered_map<FileKey, FileIndex>;
+ using FilesLookup = std::unordered_map<DirectoryEntryFileKey, FileIndex>;
using SubDirectories = std::vector<DirectoryEntry*>;
using SubDirectoriesLookup = std::unordered_map<std::wstring, DirectoryEntry*>;
@@ -245,7 +243,7 @@ private: SubDirectoriesLookup m_SubDirectoriesLookup;
DirectoryEntry *m_Parent;
- std::set<int> m_Origins;
+ std::set<OriginID> m_Origins;
bool m_Populated;
bool m_TopLevel;
mutable std::mutex m_SubDirMutex;
@@ -273,14 +271,14 @@ private: DirectoryEntry* getSubDirectory(
std::wstring_view name, bool create, DirectoryStats& stats,
- int originID = -1);
+ OriginID originID = InvalidOriginID);
DirectoryEntry* getSubDirectory(
env::Directory& dir, bool create, DirectoryStats& stats,
- int originID = -1);
+ OriginID originID = InvalidOriginID);
DirectoryEntry* getSubDirectoryRecursive(
- const std::wstring &path, bool create, int originID = -1);
+ const std::wstring &path, bool create, OriginID originID = InvalidOriginID);
void removeDirRecursive();
diff --git a/src/shared/fileentry.cpp b/src/shared/fileentry.cpp index d4e1beb4..e57c3cc5 100644 --- a/src/shared/fileentry.cpp +++ b/src/shared/fileentry.cpp @@ -6,19 +6,19 @@ namespace MOShared { FileEntry::FileEntry() : - m_Index(UINT_MAX), m_Name(), m_Origin(-1), m_Parent(nullptr), + m_Index(InvalidFileIndex), m_Name(), m_Origin(-1), m_Parent(nullptr), m_FileSize(NoFileSize), m_CompressedFileSize(NoFileSize) { } -FileEntry::FileEntry(Index index, std::wstring name, DirectoryEntry *parent) : +FileEntry::FileEntry(FileIndex 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) { } void FileEntry::addOrigin( - int origin, FILETIME fileTime, std::wstring_view archive, int order) + OriginID origin, FILETIME fileTime, std::wstring_view archive, int order) { std::scoped_lock lock(m_OriginsMutex); @@ -83,7 +83,7 @@ void FileEntry::addOrigin( } } -bool FileEntry::removeOrigin(int origin) +bool FileEntry::removeOrigin(OriginID origin) { std::scoped_lock lock(m_OriginsMutex); @@ -116,7 +116,7 @@ bool FileEntry::removeOrigin(int origin) } } - int currentID = currentIter->first; + OriginID currentID = currentIter->first; m_Archive = currentIter->second; m_Alternatives.erase(currentIter); @@ -201,11 +201,11 @@ bool FileEntry::isFromArchive(std::wstring archiveName) const return false; } -std::wstring FileEntry::getFullPath(int originID) const +std::wstring FileEntry::getFullPath(OriginID originID) const { std::scoped_lock lock(m_OriginsMutex); - if (originID == -1) { + if (originID == InvalidOriginID) { bool ignore = false; originID = getOrigin(ignore); } diff --git a/src/shared/fileentry.h b/src/shared/fileentry.h index 52ce89cd..aceeec57 100644 --- a/src/shared/fileentry.h +++ b/src/shared/fileentry.h @@ -12,28 +12,25 @@ public: static constexpr uint64_t NoFileSize = std::numeric_limits<uint64_t>::max(); - typedef unsigned int Index; - typedef boost::shared_ptr<FileEntry> Ptr; - FileEntry(); - FileEntry(Index index, std::wstring name, DirectoryEntry *parent); + FileEntry(FileIndex index, std::wstring name, DirectoryEntry *parent); // noncopyable FileEntry(const FileEntry&) = delete; FileEntry& operator=(const FileEntry&) = delete; - Index getIndex() const + FileIndex getIndex() const { return m_Index; } void addOrigin( - int origin, FILETIME fileTime, std::wstring_view archive, int order); + OriginID origin, FILETIME fileTime, std::wstring_view archive, int order); // remove the specified origin from the list of origins that contain this // file. if no origin is left, the file is effectively deleted and true is // returned. otherwise, false is returned - bool removeOrigin(int origin); + bool removeOrigin(OriginID origin); void sortOrigins(); @@ -50,12 +47,12 @@ public: return m_Name; } - int getOrigin() const + OriginID getOrigin() const { return m_Origin; } - int getOrigin(bool &archive) const + OriginID getOrigin(bool &archive) const { archive = (m_Archive.first.length() != 0); return m_Origin; @@ -71,7 +68,7 @@ public: // if originID is -1, uses the main origin; if this file doesn't exist in the // given origin, returns an empty string // - std::wstring getFullPath(int originID=-1) const; + std::wstring getFullPath(OriginID originID=InvalidOriginID) const; std::wstring getRelativePath() const; @@ -107,9 +104,9 @@ public: } private: - Index m_Index; + FileIndex m_Index; std::wstring m_Name; - int m_Origin; + OriginID m_Origin; std::pair<std::wstring, int> m_Archive; AlternativesVector m_Alternatives; DirectoryEntry *m_Parent; diff --git a/src/shared/fileregister.cpp b/src/shared/fileregister.cpp index 4add0455..b56599d1 100644 --- a/src/shared/fileregister.cpp +++ b/src/shared/fileregister.cpp @@ -79,7 +79,7 @@ bool FileRegister::removeFile(FileIndex index) return false; } -void FileRegister::removeOrigin(FileIndex index, int originID) +void FileRegister::removeOrigin(FileIndex index, OriginID originID) { std::unique_lock lock(m_Mutex); @@ -100,7 +100,7 @@ void FileRegister::removeOrigin(FileIndex index, int originID) } void FileRegister::removeOriginMulti( - std::set<FileIndex> indices, int originID) + std::set<FileIndex> indices, OriginID originID) { std::vector<FileEntryPtr> removedFiles; @@ -167,7 +167,7 @@ void FileRegister::unregisterFile(FileEntryPtr file) bool ignore; // unregister from origin - int originID = file->getOrigin(ignore); + OriginID originID = file->getOrigin(ignore); m_OriginConnection->getByID(originID).removeFile(file->getIndex()); const auto& alternatives = file->getAlternatives(); diff --git a/src/shared/fileregister.h b/src/shared/fileregister.h index d5e360c1..9294d20e 100644 --- a/src/shared/fileregister.h +++ b/src/shared/fileregister.h @@ -36,8 +36,8 @@ public: } bool removeFile(FileIndex index); - void removeOrigin(FileIndex index, int originID); - void removeOriginMulti(std::set<FileIndex> indices, int originID); + void removeOrigin(FileIndex index, OriginID originID); + void removeOriginMulti(std::set<FileIndex> indices, OriginID originID); void sortOrigins(); diff --git a/src/shared/fileregisterfwd.h b/src/shared/fileregisterfwd.h index b8d33378..6348fee1 100644 --- a/src/shared/fileregisterfwd.h +++ b/src/shared/fileregisterfwd.h @@ -35,6 +35,11 @@ struct DirectoryStats; using FileEntryPtr = boost::shared_ptr<FileEntry>; using FileIndex = unsigned int; +using OriginID = int; + +constexpr FileIndex InvalidFileIndex = UINT_MAX; +constexpr OriginID InvalidOriginID = -1; + // a vector of {originId, {archiveName, order}} // @@ -43,7 +48,7 @@ using FileIndex = unsigned int; // // is a file is not in an archive, archiveName is empty and order is usually // -1 -using AlternativesVector = std::vector<std::pair<int, std::pair<std::wstring, int>>>; +using AlternativesVector = std::vector<std::pair<OriginID, std::pair<std::wstring, int>>>; struct DirectoryStats { diff --git a/src/shared/filesorigin.cpp b/src/shared/filesorigin.cpp index 47ae4b94..7476b6c5 100644 --- a/src/shared/filesorigin.cpp +++ b/src/shared/filesorigin.cpp @@ -21,19 +21,8 @@ FilesOrigin::FilesOrigin() { } -/*FilesOrigin::FilesOrigin(const FilesOrigin &reference) - : m_ID(reference.m_ID) - , m_Disabled(reference.m_Disabled) - , m_Name(reference.m_Name) - , m_Path(reference.m_Path) - , m_Priority(reference.m_Priority) - , m_FileRegister(reference.m_FileRegister) - , m_OriginConnection(reference.m_OriginConnection) -{ -}*/ - FilesOrigin::FilesOrigin( - int ID, const std::wstring &name, const std::wstring &path, int priority, + OriginID ID, const std::wstring &name, const std::wstring &path, int priority, boost::shared_ptr<MOShared::FileRegister> fileRegister, boost::shared_ptr<MOShared::OriginConnection> originConnection) : m_ID(ID), m_Disabled(false), m_Name(name), m_Path(path), diff --git a/src/shared/filesorigin.h b/src/shared/filesorigin.h index 4ea21f57..222a834f 100644 --- a/src/shared/filesorigin.h +++ b/src/shared/filesorigin.h @@ -11,18 +11,16 @@ class FilesOrigin { public: FilesOrigin(); -// FilesOrigin(const FilesOrigin &reference); FilesOrigin( - int ID, const std::wstring &name, const std::wstring &path, int priority, + OriginID ID, const std::wstring &name, const std::wstring &path, + int priority, boost::shared_ptr<FileRegister> fileRegister, boost::shared_ptr<OriginConnection> originConnection); // noncopyable FilesOrigin(const FilesOrigin&) = delete; FilesOrigin& operator=(const FilesOrigin&) = delete; - FilesOrigin(FilesOrigin&&) = default; - FilesOrigin& operator=(FilesOrigin&&) = default; // sets priority for this origin, but it will overwrite the existing mapping // for this priority, the previous origin will no longer be referenced @@ -39,7 +37,7 @@ public: return m_Name; } - int getID() const + OriginID getID() const { return m_ID; } @@ -71,7 +69,7 @@ public: bool containsArchive(std::wstring archiveName); private: - int m_ID; + OriginID m_ID; bool m_Disabled; std::set<FileIndex> m_Files; std::wstring m_Name; diff --git a/src/shared/originconnection.cpp b/src/shared/originconnection.cpp index a56126cc..c1c096f0 100644 --- a/src/shared/originconnection.cpp +++ b/src/shared/originconnection.cpp @@ -54,13 +54,13 @@ bool OriginConnection::exists(const std::wstring &name) return m_OriginsNameMap.find(name) != m_OriginsNameMap.end(); } -FilesOrigin& OriginConnection::getByID(Index ID) +FilesOrigin& OriginConnection::getByID(OriginID ID) { std::scoped_lock lock(m_Mutex); return m_Origins[ID]; } -const FilesOrigin* OriginConnection::findByID(Index ID) const +const FilesOrigin* OriginConnection::findByID(OriginID ID) const { std::scoped_lock lock(m_Mutex); @@ -77,7 +77,7 @@ FilesOrigin& OriginConnection::getByName(const std::wstring &name) { std::scoped_lock lock(m_Mutex); - std::map<std::wstring, int>::iterator iter = m_OriginsNameMap.find(name); + auto iter = m_OriginsNameMap.find(name); if (iter != m_OriginsNameMap.end()) { return m_Origins[iter->second]; @@ -95,7 +95,7 @@ void OriginConnection::changePriorityLookup(int oldPriority, int newPriority) auto iter = m_OriginsPriorityMap.find(oldPriority); if (iter != m_OriginsPriorityMap.end()) { - Index idx = iter->second; + OriginID idx = iter->second; m_OriginsPriorityMap.erase(iter); m_OriginsPriorityMap[newPriority] = idx; } @@ -108,7 +108,7 @@ void OriginConnection::changeNameLookup(const std::wstring &oldName, const std:: auto iter = m_OriginsNameMap.find(oldName); if (iter != m_OriginsNameMap.end()) { - Index idx = iter->second; + OriginID idx = iter->second; m_OriginsNameMap.erase(iter); m_OriginsNameMap[newName] = idx; } else { @@ -116,7 +116,7 @@ void OriginConnection::changeNameLookup(const std::wstring &oldName, const std:: } } -OriginConnection::Index OriginConnection::createID() +OriginID OriginConnection::createID() { return m_NextID++; } @@ -126,7 +126,7 @@ FilesOrigin& OriginConnection::createOriginNoLock( boost::shared_ptr<FileRegister> fileRegister, boost::shared_ptr<OriginConnection> originConnection) { - int newID = createID(); + OriginID newID = createID(); auto itor = m_Origins.emplace( std::piecewise_construct, diff --git a/src/shared/originconnection.h b/src/shared/originconnection.h index 1fbb07ac..5fecd63a 100644 --- a/src/shared/originconnection.h +++ b/src/shared/originconnection.h @@ -9,9 +9,6 @@ namespace MOShared class OriginConnection { public: - typedef int Index; - static const int INVALID_INDEX = INT_MIN; - OriginConnection(); // noncopyable @@ -31,8 +28,8 @@ public: bool exists(const std::wstring &name); - FilesOrigin &getByID(Index ID); - const FilesOrigin* findByID(Index ID) const; + FilesOrigin &getByID(OriginID ID); + const FilesOrigin* findByID(OriginID ID) const; FilesOrigin &getByName(const std::wstring &name); void changePriorityLookup(int oldPriority, int newPriority); @@ -40,13 +37,13 @@ public: void changeNameLookup(const std::wstring &oldName, const std::wstring &newName); private: - Index m_NextID; - std::map<Index, FilesOrigin> m_Origins; - std::map<std::wstring, Index> m_OriginsNameMap; - std::map<int, Index> m_OriginsPriorityMap; + std::atomic<OriginID> m_NextID; + std::map<OriginID, FilesOrigin> m_Origins; + std::map<std::wstring, OriginID> m_OriginsNameMap; + std::map<int, OriginID> m_OriginsPriorityMap; mutable std::mutex m_Mutex; - Index createID(); + OriginID createID(); FilesOrigin& createOriginNoLock( const std::wstring &originName, const std::wstring &directory, int priority, |
