1#ifndef joedb_Windows_File_declared
2#define joedb_Windows_File_declared
15 static const std::array<DWORD, mode_count> desired_access;
16 static const std::array<DWORD, mode_count> share_mode;
17 static const std::array<DWORD, mode_count> creation_disposition;
22 static void throw_last_error
28 enum class Lock_Operation
35 BOOL lock(Lock_Operation op, int64_t start, int64_t size);
44 size_t pread(
char* data,
size_t size, int64_t offset)
const override;
45 void pwrite(
const char* data,
size_t size, int64_t offset)
override;
49 void shared_lock(int64_t start, int64_t size)
override;
51 void unlock(int64_t start, int64_t size)
noexcept override;
static constexpr bool lockable
Windows_File(const std::string &file_name, Open_Mode mode)
void sync() override
Write data and meta-data (such as file size) durably to permanent storage.
void exclusive_lock(int64_t start, int64_t size) override
Lock a range of bytes for writing (prevents both writes and reads)
void pwrite(const char *data, size_t size, int64_t offset) override
Write a range of bytes. Extend file size if necessary.
int64_t get_size() const override
Get the size of the file, or -1 if it is unknown.
size_t pread(char *data, size_t size, int64_t offset) const override
Read a range of bytes.
Windows_Handle & operator=(const Windows_Handle &)=delete
~Windows_Handle() override
void shared_lock(int64_t start, int64_t size) override
Lock a range of bytes for reading (prevents writes, not reads)
void unlock(int64_t start, int64_t size) noexcept override
Remove a lock. The range should match the range of a corresponding lock.
Windows_Handle(const Windows_Handle &)=delete
@ mode_count
number of modes