1285101Semaste//===-- LockFileBase.h ------------------------------------------*- C++ -*-===// 2285101Semaste// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6285101Semaste// 7285101Semaste//===----------------------------------------------------------------------===// 8285101Semaste 9285101Semaste#ifndef liblldb_Host_LockFileBase_h_ 10285101Semaste#define liblldb_Host_LockFileBase_h_ 11285101Semaste 12321369Sdim#include "lldb/Utility/Status.h" 13285101Semaste 14285101Semaste#include <functional> 15285101Semaste 16314564Sdimnamespace lldb_private { 17285101Semaste 18314564Sdimclass LockFileBase { 19285101Semastepublic: 20314564Sdim virtual ~LockFileBase() = default; 21285101Semaste 22314564Sdim bool IsLocked() const; 23285101Semaste 24321369Sdim Status WriteLock(const uint64_t start, const uint64_t len); 25321369Sdim Status TryWriteLock(const uint64_t start, const uint64_t len); 26285101Semaste 27321369Sdim Status ReadLock(const uint64_t start, const uint64_t len); 28321369Sdim Status TryReadLock(const uint64_t start, const uint64_t len); 29285101Semaste 30321369Sdim Status Unlock(); 31285101Semaste 32285101Semasteprotected: 33321369Sdim using Locker = std::function<Status(const uint64_t, const uint64_t)>; 34285101Semaste 35314564Sdim LockFileBase(int fd); 36285101Semaste 37314564Sdim virtual bool IsValidFile() const; 38285101Semaste 39321369Sdim virtual Status DoWriteLock(const uint64_t start, const uint64_t len) = 0; 40321369Sdim virtual Status DoTryWriteLock(const uint64_t start, const uint64_t len) = 0; 41285101Semaste 42321369Sdim virtual Status DoReadLock(const uint64_t start, const uint64_t len) = 0; 43321369Sdim virtual Status DoTryReadLock(const uint64_t start, const uint64_t len) = 0; 44285101Semaste 45321369Sdim virtual Status DoUnlock() = 0; 46285101Semaste 47321369Sdim Status DoLock(const Locker &locker, const uint64_t start, const uint64_t len); 48285101Semaste 49314564Sdim int m_fd; // not owned. 50314564Sdim bool m_locked; 51314564Sdim uint64_t m_start; 52314564Sdim uint64_t m_len; 53285101Semaste}; 54285101Semaste} 55285101Semaste 56285101Semaste#endif 57