summaryrefslogtreecommitdiff
path: root/src/shared/filesorigin.h
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2020-02-15 13:24:56 -0500
committerisanae <14251494+isanae@users.noreply.github.com>2020-02-18 17:25:04 -0500
commitb1cf498924e461556c8f2fe961172685d92bb03f (patch)
treef51694c37c17c87a8965eb9e8fab459d6f63d5ed /src/shared/filesorigin.h
parent88ef0530001d43be8f18fac43a280169b45db852 (diff)
split directoryentry
made classes noncopyable, fixed a few unintended copies
Diffstat (limited to 'src/shared/filesorigin.h')
-rw-r--r--src/shared/filesorigin.h87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/shared/filesorigin.h b/src/shared/filesorigin.h
new file mode 100644
index 00000000..4ea21f57
--- /dev/null
+++ b/src/shared/filesorigin.h
@@ -0,0 +1,87 @@
+#ifndef MO_REGISTER_FILESORIGIN_INCLUDED
+#define MO_REGISTER_FILESORIGIN_INCLUDED
+
+#include "fileregisterfwd.h"
+
+namespace MOShared
+{
+
+// represents a mod or the data directory, providing files to the tree
+class FilesOrigin
+{
+public:
+ FilesOrigin();
+// FilesOrigin(const FilesOrigin &reference);
+
+ FilesOrigin(
+ int 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
+ void setPriority(int priority);
+
+ int getPriority() const
+ {
+ return m_Priority;
+ }
+
+ void setName(const std::wstring &name);
+ const std::wstring &getName() const
+ {
+ return m_Name;
+ }
+
+ int getID() const
+ {
+ return m_ID;
+ }
+
+ const std::wstring &getPath() const
+ {
+ return m_Path;
+ }
+
+ std::vector<FileEntryPtr> getFiles() const;
+ FileEntryPtr findFile(FileIndex index) const;
+
+ void enable(bool enabled, DirectoryStats& stats);
+ void enable(bool enabled);
+
+ bool isDisabled() const
+ {
+ return m_Disabled;
+ }
+
+ void addFile(FileIndex index)
+ {
+ std::scoped_lock lock(m_Mutex);
+ m_Files.insert(index);
+ }
+
+ void removeFile(FileIndex index);
+
+ bool containsArchive(std::wstring archiveName);
+
+private:
+ int m_ID;
+ bool m_Disabled;
+ std::set<FileIndex> m_Files;
+ std::wstring m_Name;
+ std::wstring m_Path;
+ int m_Priority;
+ boost::weak_ptr<FileRegister> m_FileRegister;
+ boost::weak_ptr<OriginConnection> m_OriginConnection;
+ mutable std::mutex m_Mutex;
+};
+
+} // namespace
+
+#endif // MO_REGISTER_FILESORIGIN_INCLUDED