diff options
Diffstat (limited to 'src/shared/originconnection.h')
| -rw-r--r-- | src/shared/originconnection.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/shared/originconnection.h b/src/shared/originconnection.h new file mode 100644 index 00000000..5fecd63a --- /dev/null +++ b/src/shared/originconnection.h @@ -0,0 +1,56 @@ +#ifndef MO_REGISTER_ORIGINCONNECTION_INCLUDED +#define MO_REGISTER_ORIGINCONNECTION_INCLUDED + +#include "fileregisterfwd.h" + +namespace MOShared +{ + +class OriginConnection +{ +public: + OriginConnection(); + + // noncopyable + OriginConnection(const OriginConnection&) = delete; + OriginConnection& operator=(const OriginConnection&) = delete; + + std::pair<FilesOrigin&, bool> getOrCreate( + const std::wstring &originName, const std::wstring &directory, int priority, + const boost::shared_ptr<FileRegister>& fileRegister, + const boost::shared_ptr<OriginConnection>& originConnection, + DirectoryStats& stats); + + FilesOrigin& createOrigin( + const std::wstring &originName, const std::wstring &directory, int priority, + boost::shared_ptr<FileRegister> fileRegister, + boost::shared_ptr<OriginConnection> originConnection); + + bool exists(const std::wstring &name); + + FilesOrigin &getByID(OriginID ID); + const FilesOrigin* findByID(OriginID ID) const; + FilesOrigin &getByName(const std::wstring &name); + + void changePriorityLookup(int oldPriority, int newPriority); + + void changeNameLookup(const std::wstring &oldName, const std::wstring &newName); + +private: + 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; + + OriginID createID(); + + FilesOrigin& createOriginNoLock( + const std::wstring &originName, const std::wstring &directory, int priority, + boost::shared_ptr<FileRegister> fileRegister, + boost::shared_ptr<OriginConnection> originConnection); +}; + +} // namespace + +#endif // MO_REGISTER_ORIGINCONNECTION_INCLUDED |
