summaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/directoryentry.cpp23
-rw-r--r--src/shared/directoryentry.h36
-rw-r--r--src/shared/fileentry.cpp14
-rw-r--r--src/shared/fileentry.h21
-rw-r--r--src/shared/fileregister.cpp6
-rw-r--r--src/shared/fileregister.h4
-rw-r--r--src/shared/fileregisterfwd.h7
-rw-r--r--src/shared/filesorigin.cpp13
-rw-r--r--src/shared/filesorigin.h10
-rw-r--r--src/shared/originconnection.cpp14
-rw-r--r--src/shared/originconnection.h17
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,