32 virtual void WriteData(
size_t count,
const void * data) = 0;
37 size_t WriteData(
size_t max_count,
const std::vector<uint8_t>& data,
size_t offset = 0);
42 size_t WriteData(
const std::vector<uint8_t>& data,
size_t offset = 0);
47 template <
class T, std::
size_t N>
48 void WriteData(
const std::array<T, N>& data,
size_t offset = 0)
52 WriteData(N - offset,
reinterpret_cast<const char *
>(data.data()) + offset);
58 void WriteData(
size_t count, std::string text,
char padding =
'\0');
68 void WriteData(
size_t count, std::istream& in);
78 void WriteWord(
size_t bytes, uint64_t value);
83 template <
typename Clock>
92 template <
typename Clock>
95 WriteWord(
sizeof(
typename Clock::rep), Clock::to_ticks(timestamp));
101 virtual void Seek(offset_t offset) = 0;
106 virtual void Skip(relative_offset_t offset) = 0;
111 virtual void SeekEnd(relative_offset_t offset = 0) = 0;
121 void FillTo(offset_t position);
151 void _FillNulls(
size_t count);
154 void WriteData(
size_t count,
const void * data)
override;
155 void Seek(offset_t offset)
override;
156 void Skip(relative_offset_t offset)
override;
157 void SeekEnd(relative_offset_t offset = 0)
override;
158 offset_t
Tell()
override;
167 std::shared_ptr<Writer> writer;
180 void _ValidateParameters()
210 _ValidateParameters();
219 _ValidateParameters();
227 _ValidateParameters();
230 static std::shared_ptr<Writer> _GetWriter(std::shared_ptr<Writer> writer)
232 if(
auto window_writer = std::dynamic_pointer_cast<WindowWriter>(writer))
234 return window_writer->writer;
242 static offset_t _GetStartOffset(std::shared_ptr<Writer> writer)
244 if(
auto window_writer = std::dynamic_pointer_cast<WindowWriter>(writer))
246 return window_writer->start_offset;
254 static offset_t _GetMaximumSize(std::shared_ptr<Writer> writer)
256 if(
auto window_writer = std::dynamic_pointer_cast<WindowWriter>(writer))
258 return window_writer->maximum_size;
266 static offset_t _GetWindowOffset(std::shared_ptr<Writer> writer)
268 if(
auto window_writer = std::dynamic_pointer_cast<WindowWriter>(writer))
270 return window_writer->window_offset;
279 WindowWriter(std::shared_ptr<Writer> writer, offset_t
start_offset, offset_t
maximum_size, offset_t displacement = 0)
287 void WriteData(
size_t count,
const void * data)
override;
288 void Seek(offset_t offset)
override;
289 void Skip(relative_offset_t offset)
override;
290 void SeekEnd(relative_offset_t offset = 0)
override;
291 offset_t
Tell()
override;
303 std::shared_ptr<Linker::Buffer> buffer;
304 offset_t position = 0;
313 void WriteData(
size_t count,
const void * data)
override;
314 void Seek(offset_t offset)
override;
315 void Skip(relative_offset_t offset)
override;
316 void SeekEnd(relative_offset_t offset = 0)
override;
317 offset_t
Tell()
override;
Writer subclass that stores data into an internal buffer.
Definition writer.h:301
void WriteData(size_t count, const void *data) override
Write out a sequence of bytes.
Definition writer.cc:254
void SeekEnd(relative_offset_t offset=0) override
Jump to a specific offset from the end.
Definition writer.cc:274
void Skip(relative_offset_t offset) override
Jump to a distance in the output stream.
Definition writer.cc:269
void Seek(offset_t offset) override
Jump to a specific location in the ouput stream.
Definition writer.cc:260
offset_t Tell() override
Retrieve the current location.
Definition writer.cc:279
Writer subclass whose target is a C++ output stream.
Definition writer.h:133
offset_t Tell() override
Retrieve the current location.
Definition writer.cc:143
void WriteData(size_t count, const void *data) override
Write out a sequence of bytes.
Definition writer.cc:107
void Skip(relative_offset_t offset) override
Jump to a distance in the output stream.
Definition writer.cc:128
void SeekEnd(relative_offset_t offset=0) override
Jump to a specific offset from the end.
Definition writer.cc:135
std::ostream * out
The output stream.
Definition writer.h:138
void Seek(offset_t offset) override
Jump to a specific location in the ouput stream.
Definition writer.cc:112
Writer subclass that restricts access of another Writer to fixed window.
Definition writer.h:165
void SeekEnd(relative_offset_t offset=0) override
Jump to a specific offset from the end.
Definition writer.cc:219
void _RestrictMaximumSize(offset_t new_maximum)
Decrease the window by decrementing its upper bound.
Definition writer.h:214
void WriteData(size_t count, const void *data) override
Write out a sequence of bytes.
Definition writer.cc:148
offset_t Tell() override
Retrieve the current location.
Definition writer.cc:240
void Seek(offset_t offset) override
Jump to a specific location in the ouput stream.
Definition writer.cc:167
void Skip(relative_offset_t offset) override
Jump to a distance in the output stream.
Definition writer.cc:186
offset_t start_offset
The first offset in the base writer that is accessible, 0 meaning all.
Definition writer.h:170
offset_t window_offset
The lowest address that is allowed to be accessed, the offset at which the byte at start_offset is fo...
Definition writer.h:174
void _AddDisplacement(offset_t displacement)
Shift the address values at which the window is accessed, so the previous offset O is accessed at O +...
Definition writer.h:224
offset_t maximum_size
The maximum number of bytes in the base writer that are accessible, offset_t(-1) is reserved to mean ...
Definition writer.h:172
void _ShiftStartOffset(offset_t addend)
Decrease the window by shifting its lower bound by addend.
Definition writer.h:190
Abstract base class that encapsulates functionality needed to export binary data.
Definition writer.h:15
virtual void Skip(relative_offset_t offset)=0
Jump to a distance in the output stream.
void WriteTimestamp(Timestamp< Clock > timestamp, EndianType endiantype)
Write a date-time value according to some epoch.
Definition writer.h:84
void WriteTimestamp(Timestamp< Clock > timestamp)
Write a date-time value according to some epoch.
Definition writer.h:93
EndianType endiantype
The default endianness of the binary format, used for reading multibyte numeric data.
Definition writer.h:20
virtual offset_t Tell()=0
Retrieve the current location.
void FillTo(offset_t position)
Move to a specific offset, fill with zeroes if needed.
Definition writer.cc:75
virtual void Seek(offset_t offset)=0
Jump to a specific location in the ouput stream.
virtual void WriteData(size_t count, const void *data)=0
Write out a sequence of bytes.
virtual void SeekEnd(relative_offset_t offset=0)=0
Jump to a specific offset from the end.
void AlignTo(offset_t align)
Align the current pointer.
Definition writer.cc:96
void WriteWord(size_t bytes, uint64_t value, EndianType endiantype)
Write a word.
Definition writer.cc:63
void WriteData(const std::array< T, N > &data, size_t offset=0)
Write out a sequence of bytes.
Definition writer.h:48