#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 getOrCreate( const std::wstring &originName, const std::wstring &directory, int priority, const boost::shared_ptr& fileRegister, const boost::shared_ptr& originConnection, DirectoryStats& stats); FilesOrigin& createOrigin( const std::wstring &originName, const std::wstring &directory, int priority, boost::shared_ptr fileRegister, boost::shared_ptr 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 m_NextID; std::map m_Origins; std::map m_OriginsNameMap; std::map 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, boost::shared_ptr originConnection); }; } // namespace #endif // MO_REGISTER_ORIGINCONNECTION_INCLUDED