LockFileBase.h revision 321369
1285101Semaste//===-- LockFileBase.h ------------------------------------------*- C++ -*-===// 2285101Semaste// 3285101Semaste// The LLVM Compiler Infrastructure 4285101Semaste// 5285101Semaste// This file is distributed under the University of Illinois Open Source 6285101Semaste// License. See LICENSE.TXT for details. 7285101Semaste// 8285101Semaste//===----------------------------------------------------------------------===// 9285101Semaste 10285101Semaste#ifndef liblldb_Host_LockFileBase_h_ 11285101Semaste#define liblldb_Host_LockFileBase_h_ 12285101Semaste 13321369Sdim#include "lldb/Utility/Status.h" 14285101Semaste 15285101Semaste#include <functional> 16285101Semaste 17314564Sdimnamespace lldb_private { 18285101Semaste 19314564Sdimclass LockFileBase { 20285101Semastepublic: 21314564Sdim virtual ~LockFileBase() = default; 22285101Semaste 23314564Sdim bool IsLocked() const; 24285101Semaste 25321369Sdim Status WriteLock(const uint64_t start, const uint64_t len); 26321369Sdim Status TryWriteLock(const uint64_t start, const uint64_t len); 27285101Semaste 28321369Sdim Status ReadLock(const uint64_t start, const uint64_t len); 29321369Sdim Status TryReadLock(const uint64_t start, const uint64_t len); 30285101Semaste 31321369Sdim Status Unlock(); 32285101Semaste 33285101Semasteprotected: 34321369Sdim using Locker = std::function<Status(const uint64_t, const uint64_t)>; 35285101Semaste 36314564Sdim LockFileBase(int fd); 37285101Semaste 38314564Sdim virtual bool IsValidFile() const; 39285101Semaste 40321369Sdim virtual Status DoWriteLock(const uint64_t start, const uint64_t len) = 0; 41321369Sdim virtual Status DoTryWriteLock(const uint64_t start, const uint64_t len) = 0; 42285101Semaste 43321369Sdim virtual Status DoReadLock(const uint64_t start, const uint64_t len) = 0; 44321369Sdim virtual Status DoTryReadLock(const uint64_t start, const uint64_t len) = 0; 45285101Semaste 46321369Sdim virtual Status DoUnlock() = 0; 47285101Semaste 48321369Sdim Status DoLock(const Locker &locker, const uint64_t start, const uint64_t len); 49285101Semaste 50314564Sdim int m_fd; // not owned. 51314564Sdim bool m_locked; 52314564Sdim uint64_t m_start; 53314564Sdim uint64_t m_len; 54285101Semaste}; 55285101Semaste} 56285101Semaste 57285101Semaste#endif 58