| /*============================================================================ |
| CMake - Cross Platform Makefile Generator |
| Copyright 2014 Ruslan Baratov |
| |
| Distributed under the OSI-approved BSD License (the "License"); |
| see accompanying file Copyright.txt for details. |
| |
| This software is distributed WITHOUT ANY WARRANTY; without even the |
| implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| See the License for more information. |
| ============================================================================*/ |
| #ifndef cmFileLockPool_h |
| #define cmFileLockPool_h |
| |
| #include "cmStandardIncludes.h" |
| |
| #include <list> |
| |
| class cmFileLockResult; |
| class cmFileLock; |
| |
| class cmFileLockPool |
| { |
| public: |
| cmFileLockPool(); |
| ~cmFileLockPool(); |
| |
| //@{ |
| /** |
| * @brief Function scope control. |
| */ |
| void PushFunctionScope(); |
| void PopFunctionScope(); |
| //@} |
| |
| //@{ |
| /** |
| * @brief File scope control. |
| */ |
| void PushFileScope(); |
| void PopFileScope(); |
| //@} |
| |
| //@{ |
| /** |
| * @brief Lock the file in given scope. |
| * @param timeoutSec Lock timeout. If -1 try until success or fatal error. |
| */ |
| cmFileLockResult LockFunctionScope(const std::string& filename, |
| unsigned long timeoutSec); |
| cmFileLockResult LockFileScope(const std::string& filename, |
| unsigned long timeoutSec); |
| cmFileLockResult LockProcessScope(const std::string& filename, |
| unsigned long timeoutSec); |
| //@} |
| |
| /** |
| * @brief Unlock the file explicitly. |
| */ |
| cmFileLockResult Release(const std::string& filename); |
| |
| private: |
| cmFileLockPool(const cmFileLockPool&); |
| cmFileLockPool& operator=(const cmFileLockPool&); |
| |
| bool IsAlreadyLocked(const std::string& filename) const; |
| |
| class ScopePool |
| { |
| public: |
| ScopePool(); |
| ~ScopePool(); |
| |
| cmFileLockResult Lock(const std::string& filename, |
| unsigned long timeoutSec); |
| cmFileLockResult Release(const std::string& filename); |
| bool IsAlreadyLocked(const std::string& filename) const; |
| |
| private: |
| ScopePool(const ScopePool&); |
| ScopePool& operator=(const ScopePool&); |
| |
| typedef std::list<cmFileLock*> List; |
| typedef List::iterator It; |
| typedef List::const_iterator CIt; |
| |
| List Locks; |
| }; |
| |
| typedef std::list<ScopePool*> List; |
| |
| typedef List::iterator It; |
| typedef List::const_iterator CIt; |
| |
| List FunctionScopes; |
| List FileScopes; |
| ScopePool ProcessScope; |
| }; |
| |
| #endif // cmFileLockPool_h |