27 if (buffer_has_write_data())
61 const size_t asked = size_t(std::min(int64_t(destination.buffer.size), size - done));
62 const size_t received = pread(destination.buffer.data, asked, start + done);
65 reading_past_end_of_file();
67 destination.pwrite(destination.buffer.data, received, start + done);
68 done += int64_t(received);
83 for (int64_t current = from; current < until;)
85 const int64_t half_buffer_size = Buffered_File::buffer.ssize / 2;
87 const size_t n0 = pread
89 destination.buffer.data,
90 size_t(std::min(half_buffer_size, until - current)),
98 const size_t n = destination.pread
100 destination.buffer.data + half_buffer_size + n1,
115 reading_past_end_of_file();
117 const int diff = std::memcmp
119 destination.buffer.data,
120 destination.buffer.data + half_buffer_size,
127 current += int64_t(n0);
137 compact_write<size_t>(s.size());
145 const size_t size = compact_read<size_t>();
146 std::string s(size, 0);
156 const int64_t size = compact_read<int64_t>();
157 if (size > 0 && size < max_size)
159 s.resize(
size_t(size));
169 if (buffer_has_write_data())
172 try { write_buffer(); }
catch (...) {}
180 Async_Reader reader(*
this, blob.get_position(), blob.get_end());
181 std::string result(
size_t(blob.get_size()), 0);
182 reader.
read(result.data(), result.size());
184 reading_past_end_of_file();
size_t read(char *buffer, size_t capacity)
bool is_end_of_file() const
virtual void copy_to(Buffered_File &destination, int64_t start, int64_t size) const
void set_position(int64_t position)
virtual bool equal_to(Buffered_File &destination, int64_t from, int64_t until) const
size_t read_data(char *data, const size_t n)
void write_string(const std::string &s)
std::string read_string()
void destructor_flush() noexcept
void write_data(const char *data, size_t n)
std::string safe_read_string(int64_t max_size)
int64_t get_position() const noexcept
Buffered_File(Open_Mode mode)
static void write(const char *message) noexcept
void sequential_seek(int64_t new_position)
@ shared_write
like write_existing_or_create_new, but does not lock the file, and does not fail if locked
@ read_existing
fails if does not exist