Joedb 9.5.0
The Journal-Only Embedded Database
Loading...
Searching...
No Matches
Interpreted_File.cpp
Go to the documentation of this file.
2#include "joedb/Multiplexer.h"
4
5namespace joedb
6{
7 ////////////////////////////////////////////////////////////////////////////
8 void Interpreted_Stream_File::pwrite
9 ////////////////////////////////////////////////////////////////////////////
10 (
11 const char *buffer,
12 size_t size,
13 int64_t offset
14 )
15 {
16 Memory_File::pwrite(buffer, size, offset);
17
18 if (offset < Header::ssize && readonly_journal.pull())
19 {
20 Interpreter_Writable writable(stream, db);
21 Multiplexer multiplexer{writable, db};
22 readonly_journal.play_until_checkpoint(multiplexer);
23 stream.flush();
24 }
25 }
26
27 ////////////////////////////////////////////////////////////////////////////
29 ////////////////////////////////////////////////////////////////////////////
30 Readonly_Interpreted_File(stream, false),
31 stream(stream),
32 file_view(*this),
33 readonly_journal(file_view)
34 {
35 stream.clear(); // clears eof flag after reading, get ready to write
36 Writable writable;
37 readonly_journal.play_until_checkpoint(writable);
38 }
39
40 ////////////////////////////////////////////////////////////////////////////
41 detail::Interpreted_File_Data::Interpreted_File_Data(const char *file_name)
42 ////////////////////////////////////////////////////////////////////////////
43 {
44 constexpr auto in = std::ios::binary | std::ios::in;
45 file_stream.open(file_name, in | std::ios::out);
46 if (!file_stream)
47 file_stream.open(file_name, in | std::ios::out | std::ios::trunc);
48 }
49
50 ////////////////////////////////////////////////////////////////////////////
51 detail::Interpreted_File_Data::~Interpreted_File_Data() = default;
52 ////////////////////////////////////////////////////////////////////////////
53
54 ////////////////////////////////////////////////////////////////////////////
55 Interpreted_File::Interpreted_File(const char *file_name):
56 ////////////////////////////////////////////////////////////////////////////
57 Interpreted_File_Data(file_name),
58 Interpreted_Stream_File(file_stream)
59 {
60 }
61}
Interpreted_File(const char *file_name)
Interpreted_Stream_File(std::iostream &stream)
void pwrite(const char *buffer, size_t size, int64_t offset) override
Write a range of bytes. Extend file size if necessary.
void play_until_checkpoint(Writable &writable)
Definition Blob.h:7
static constexpr int64_t ssize
Definition Header.h:18