ark::serialization::OutputStream
Defined in header “ark/serialization/output_stream.hh”.
An output stream allows you to serialize data in C++ to a stream that can later be read from, safely. It is the lowest level primitive in the serialization stack.
Methods
-
OutputStream()
Constructor. Initializes a new output stream. -
OutputStream(core::ByteBuffer & buffer)
Constructor. Initializes using the given byte buffer. Allows you to reuse an existing byte buffer (to reduce re-allocations, for example). -
void write_bitstream_header()
Writes a stream header out. This is typically used to identify a new structure/bitstream. -
void write(const Type & type)
A primary dispatcher this allows you to dispatch between writing primitives out, and writing more complex classes recursively. -
void write_primitive(bool value)
These routines write their respective primitives into the internal bitstream. -
void write_primitive(int8_t value)
-
void write_primitive(int16_t value)
-
void write_primitive(int32_t value)
-
void write_primitive(int64_t value)
-
void write_primitive(uint8_t value)
-
void write_primitive(uint16_t value)
-
void write_primitive(uint32_t value)
-
void write_primitive(uint64_t value)
-
void write_primitive(float value)
-
void write_primitive(double value)
-
void write_primitive(const char * value)
-
void write_primitive(const std::string & value)
-
void write_primitive(const std::chrono::nanoseconds & value)
-
void write_primitive(const std::chrono::steady_clock::time_point & value)
-
void write_primitive(const std::chrono::system_clock::time_point & value)
-
void write_primitive(const std::vector< Type > & value)
Writes out a vector of objects. -
void write_primitive(const std::vector< Type > & value, uint32_t size)
Writes out a vector of objects. -
void write_primitive(const std::array< Type, ArraySize > & value)
Writes out a array of objects. -
void write_primitive(const std::map< Key, Value > & value)
Writes out a dictionary of objects. -
void write_primitive(const std::optional< Type > & type)
Writes out the given optional field to the bitstream. If the optional is set, the underlying type will be serialized into the bitstream. -
void write(const IndexedVariant< VariantSubtypes… > & value)
Write out a variant containing one of any number of types. -
void write(const std::variant< VariantSubtypes… > & value, const std::array< uint8_t, sizeof…(VariantSubtypes)> & index)
Write out a variant containing one of any number of types. -
void write(const std::optional< std::variant< VariantSubtypes… » & value, const std::array< uint8_t, sizeof…(VariantSubtypes)> & index)
Write out a variant containing one of any number of types. -
void write_bytes(const void *data __attribute__, size_t size)
Writes an arbitrary number of bytes into the given byte stream. Used internally from the other primitive writers. -
uint8_t * advance(size_t size)
Allocates the given size in the buffer bitstream and returns a pointer to the start of newly allocated space. This allows a user to write directly to the bitstream, mainly useful for integration with third party systems.NOTE: Any call to reserve, write or advance will invalidate the pointer.
-
void begin_optional_group(uint8_t identifier)
Begin writing out a new optional group. You must call the finish_optional_group() API to complete this. -
void finish_optional_group()
Finishes writing the active optional group. -
void reserve(size_t capacity)
Reserves some number of bytes in the underlying byte buffer; this can be useful if you know the size of the object you are going to serialize ahead of time, to reduce memory buffer resizes. -
uint32_t begin_writing_object_with_length()
Begins writing an object out by reserving room for the object’s length. Returns the offset of the empty length reservation. -
void finish_writing_object_with_length(uint32_t start_offset)
Completes writing out the object, updating the length in the bitstream at the given offset. -
const core::ByteBuffer & data()
Returns the raw bitstream.