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