| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- /*============================================================================
- 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
|