27 void Encoded_File::write_blob(
const char *buffer,
size_t size, int64_t offset)
const
30 const Blob blob = db.write_blob(codec.encode(buffer, size));
31 db.new_buffer(blob, int64_t(size), offset);
36 void Encoded_File::flush_write_buffer() const
39 if (write_buffer_size > 0)
41 write_blob(write_buffer.data(), write_buffer_size, write_buffer_offset);
42 write_buffer_size = 0;
50 if (size > write_buffer_total_size)
53 write_blob(buffer, size, offset);
61 write_buffer_offset + int64_t(write_buffer_size) != offset ||
62 write_buffer_size + size > write_buffer_total_size
69 if (write_buffer_size == 0)
70 write_buffer_offset = offset;
72 std::memcpy(write_buffer.data() + write_buffer_size, buffer, size);
74 write_buffer_size += size;
88 db.get_journal().get_file(),
93 write_buffer(write_buffer_total_size),
94 write_buffer_offset(0),
105 write_buffer_offset + int64_t(write_buffer_size),
116 flush_write_buffer();
void pwrite(const char *buffer, size_t size, int64_t offset) override
Write a range of bytes. Extend file size if necessary.
Encoded_File(Codec &codec, db::encoded_file::Writable_Database &db)
size_t pread(char *buffer, size_t size, int64_t offset) const override
Read a range of bytes.
int64_t get_size() const override
Get the size of the file, or -1 if it is unknown.
void sync() override
Write data and meta-data (such as file size) durably to permanent storage.
size_t pread(char *buffer, size_t size, int64_t offset) const override
Read a range of bytes.
int64_t get_size() const override
Get the size of the file, or -1 if it is unknown.
A writable Database constructed from a writable joedb::Buffered_File.
@ write_existing_or_create_new
either write_existing or create_new depending on whether the file exists. Racy in Posix,...