Joedb 10.5.0
The Journal-Only Embedded Database
Loading...
Searching...
No Matches
File_Lock.h
Go to the documentation of this file.
1#ifndef joedb_File_Lock_declared
2#define joedb_File_Lock_declared
3
5
6namespace joedb
7{
9 {
10 public:
11 enum class Mode {shared, exclusive};
12
13 private:
14 Abstract_File &file;
15
16 public:
17 File_Head_Lock(Abstract_File &file, Mode mode): file(file)
18 {
19 if (mode == Mode::shared)
20 file.shared_lock_head();
21 else
22 file.exclusive_lock_head();
23 }
24
25 File_Head_Lock(const File_Head_Lock &) = delete;
27
29 {
30 file.unlock_head();
31 }
32 };
33
35 {
36 private:
37 Abstract_File *file;
38
39 public:
40 explicit File_Tail_Lock(Abstract_File *file): file(file)
41 {
42 if (file)
43 file->exclusive_lock_tail();
44 }
45
46 File_Tail_Lock(const File_Tail_Lock &) = delete;
48
49 /// Leave the file locked, transferring unlock responsibility to the caller.
50 void release() noexcept {file = nullptr;}
51
53 {
54 if (file)
55 file->unlock_tail();
56 }
57 };
58}
59
60#endif
File_Head_Lock(const File_Head_Lock &)=delete
File_Head_Lock(Abstract_File &file, Mode mode)
Definition File_Lock.h:17
File_Head_Lock & operator=(const File_Head_Lock &)=delete
File_Tail_Lock(Abstract_File *file)
Definition File_Lock.h:40
File_Tail_Lock & operator=(const File_Tail_Lock &)=delete
void release() noexcept
Leave the file locked, transferring unlock responsibility to the caller.
Definition File_Lock.h:50
File_Tail_Lock(const File_Tail_Lock &)=delete