protozero
Minimalistic protocol buffer decoder and encoder in C++.
Public Member Functions | Friends | List of all members
protozero::pbf_writer Class Reference

#include <pbf_writer.hpp>

Inheritance diagram for protozero::pbf_writer:
Inheritance graph
[legend]

Public Member Functions

 pbf_writer (std::string &data) noexcept
 
 pbf_writer () noexcept
 
 pbf_writer (pbf_writer &parent_writer, pbf_tag_type tag, std::size_t size=0)
 
 pbf_writer (const pbf_writer &) noexcept=default
 A pbf_writer object can be copied.
 
pbf_writeroperator= (const pbf_writer &) noexcept=default
 A pbf_writer object can be copied.
 
 pbf_writer (pbf_writer &&) noexcept=default
 A pbf_writer object can be moved.
 
pbf_writeroperator= (pbf_writer &&) noexcept=default
 A pbf_writer object can be moved.
 
void swap (pbf_writer &other) noexcept
 
void reserve (std::size_t size)
 
void rollback ()
 
Scalar field writer functions
void add_bool (pbf_tag_type tag, bool value)
 
void add_enum (pbf_tag_type tag, int32_t value)
 
void add_int32 (pbf_tag_type tag, int32_t value)
 
void add_sint32 (pbf_tag_type tag, int32_t value)
 
void add_uint32 (pbf_tag_type tag, uint32_t value)
 
void add_int64 (pbf_tag_type tag, int64_t value)
 
void add_sint64 (pbf_tag_type tag, int64_t value)
 
void add_uint64 (pbf_tag_type tag, uint64_t value)
 
void add_fixed32 (pbf_tag_type tag, uint32_t value)
 
void add_sfixed32 (pbf_tag_type tag, int32_t value)
 
void add_fixed64 (pbf_tag_type tag, uint64_t value)
 
void add_sfixed64 (pbf_tag_type tag, int64_t value)
 
void add_float (pbf_tag_type tag, float value)
 
void add_double (pbf_tag_type tag, double value)
 
void add_bytes (pbf_tag_type tag, const char *value, std::size_t size)
 
void add_bytes (pbf_tag_type tag, const data_view &value)
 
void add_bytes (pbf_tag_type tag, const std::string &value)
 
void add_string (pbf_tag_type tag, const char *value, std::size_t size)
 
void add_string (pbf_tag_type tag, const data_view &value)
 
void add_string (pbf_tag_type tag, const std::string &value)
 
void add_string (pbf_tag_type tag, const char *value)
 
void add_message (pbf_tag_type tag, const char *value, std::size_t size)
 
void add_message (pbf_tag_type tag, const data_view &value)
 
void add_message (pbf_tag_type tag, const std::string &value)
 
Repeated packed field writer functions
template<typename InputIterator >
void add_packed_bool (pbf_tag_type tag, InputIterator first, InputIterator last)
 
template<typename InputIterator >
void add_packed_enum (pbf_tag_type tag, InputIterator first, InputIterator last)
 
template<typename InputIterator >
void add_packed_int32 (pbf_tag_type tag, InputIterator first, InputIterator last)
 
template<typename InputIterator >
void add_packed_sint32 (pbf_tag_type tag, InputIterator first, InputIterator last)
 
template<typename InputIterator >
void add_packed_uint32 (pbf_tag_type tag, InputIterator first, InputIterator last)
 
template<typename InputIterator >
void add_packed_int64 (pbf_tag_type tag, InputIterator first, InputIterator last)
 
template<typename InputIterator >
void add_packed_sint64 (pbf_tag_type tag, InputIterator first, InputIterator last)
 
template<typename InputIterator >
void add_packed_uint64 (pbf_tag_type tag, InputIterator first, InputIterator last)
 
template<typename InputIterator >
void add_packed_fixed32 (pbf_tag_type tag, InputIterator first, InputIterator last)
 
template<typename InputIterator >
void add_packed_sfixed32 (pbf_tag_type tag, InputIterator first, InputIterator last)
 
template<typename InputIterator >
void add_packed_fixed64 (pbf_tag_type tag, InputIterator first, InputIterator last)
 
template<typename InputIterator >
void add_packed_sfixed64 (pbf_tag_type tag, InputIterator first, InputIterator last)
 
template<typename InputIterator >
void add_packed_float (pbf_tag_type tag, InputIterator first, InputIterator last)
 
template<typename InputIterator >
void add_packed_double (pbf_tag_type tag, InputIterator first, InputIterator last)
 

Friends

template<typename T >
class detail::packed_field_varint
 
template<typename T >
class detail::packed_field_svarint
 
template<typename T >
class detail::packed_field_fixed
 

Detailed Description

The pbf_writer is used to write PBF formatted messages into a buffer.

Almost all methods in this class can throw an std::bad_alloc exception if the std::string used as a buffer wants to resize.

Constructor & Destructor Documentation

§ pbf_writer() [1/3]

protozero::pbf_writer::pbf_writer ( std::string &  data)
inlineexplicitnoexcept

Create a writer using the given string as a data store. The pbf_writer stores a reference to that string and adds all data to it. The string doesn't have to be empty. The pbf_writer will just append data.

§ pbf_writer() [2/3]

protozero::pbf_writer::pbf_writer ( )
inlinenoexcept

Create a writer without a data store. In this form the writer can not be used!

§ pbf_writer() [3/3]

protozero::pbf_writer::pbf_writer ( pbf_writer parent_writer,
pbf_tag_type  tag,
std::size_t  size = 0 
)
inline

Construct a pbf_writer for a submessage from the pbf_writer of the parent message.

Parameters
parent_writerThe pbf_writer
tagTag (field number) of the field that will be written
sizeOptional size of the submessage in bytes (use 0 for unknown). Setting this allows some optimizations but is only possible in a few very specific cases.

Member Function Documentation

§ add_bool()

void protozero::pbf_writer::add_bool ( pbf_tag_type  tag,
bool  value 
)
inline

Add "bool" field to data.

Parameters
tagTag (field number) of the field
valueValue to be written

§ add_bytes() [1/3]

void protozero::pbf_writer::add_bytes ( pbf_tag_type  tag,
const char *  value,
std::size_t  size 
)
inline

Add "bytes" field to data.

Parameters
tagTag (field number) of the field
valuePointer to value to be written
sizeNumber of bytes to be written

§ add_bytes() [2/3]

void protozero::pbf_writer::add_bytes ( pbf_tag_type  tag,
const data_view value 
)
inline

Add "bytes" field to data.

Parameters
tagTag (field number) of the field
valueValue to be written

§ add_bytes() [3/3]

void protozero::pbf_writer::add_bytes ( pbf_tag_type  tag,
const std::string &  value 
)
inline

Add "bytes" field to data.

Parameters
tagTag (field number) of the field
valueValue to be written

§ add_double()

void protozero::pbf_writer::add_double ( pbf_tag_type  tag,
double  value 
)
inline

Add "double" field to data.

Parameters
tagTag (field number) of the field
valueValue to be written

§ add_enum()

void protozero::pbf_writer::add_enum ( pbf_tag_type  tag,
int32_t  value 
)
inline

Add "enum" field to data.

Parameters
tagTag (field number) of the field
valueValue to be written

§ add_fixed32()

void protozero::pbf_writer::add_fixed32 ( pbf_tag_type  tag,
uint32_t  value 
)
inline

Add "fixed32" field to data.

Parameters
tagTag (field number) of the field
valueValue to be written

§ add_fixed64()

void protozero::pbf_writer::add_fixed64 ( pbf_tag_type  tag,
uint64_t  value 
)
inline

Add "fixed64" field to data.

Parameters
tagTag (field number) of the field
valueValue to be written

§ add_float()

void protozero::pbf_writer::add_float ( pbf_tag_type  tag,
float  value 
)
inline

Add "float" field to data.

Parameters
tagTag (field number) of the field
valueValue to be written

§ add_int32()

void protozero::pbf_writer::add_int32 ( pbf_tag_type  tag,
int32_t  value 
)
inline

Add "int32" field to data.

Parameters
tagTag (field number) of the field
valueValue to be written

§ add_int64()

void protozero::pbf_writer::add_int64 ( pbf_tag_type  tag,
int64_t  value 
)
inline

Add "int64" field to data.

Parameters
tagTag (field number) of the field
valueValue to be written

§ add_message() [1/3]

void protozero::pbf_writer::add_message ( pbf_tag_type  tag,
const char *  value,
std::size_t  size 
)
inline

Add "message" field to data.

Parameters
tagTag (field number) of the field
valuePointer to message to be written
sizeLength of the message

§ add_message() [2/3]

void protozero::pbf_writer::add_message ( pbf_tag_type  tag,
const data_view value 
)
inline

Add "message" field to data.

Parameters
tagTag (field number) of the field
valueValue to be written. The value must be a complete message.

§ add_message() [3/3]

void protozero::pbf_writer::add_message ( pbf_tag_type  tag,
const std::string &  value 
)
inline

Add "message" field to data.

Parameters
tagTag (field number) of the field
valueValue to be written. The value must be a complete message.

§ add_packed_bool()

template<typename InputIterator >
void protozero::pbf_writer::add_packed_bool ( pbf_tag_type  tag,
InputIterator  first,
InputIterator  last 
)
inline

Add "repeated packed bool" field to data.

Template Parameters
InputIteratorA type satisfying the InputIterator concept. Dereferencing the iterator must yield a type assignable to bool.
Parameters
tagTag (field number) of the field
firstIterator pointing to the beginning of the data
lastIterator pointing one past the end of data

§ add_packed_double()

template<typename InputIterator >
void protozero::pbf_writer::add_packed_double ( pbf_tag_type  tag,
InputIterator  first,
InputIterator  last 
)
inline

Add "repeated packed double" field to data.

Template Parameters
InputIteratorA type satisfying the InputIterator concept. Dereferencing the iterator must yield a type assignable to double.
Parameters
tagTag (field number) of the field
firstIterator pointing to the beginning of the data
lastIterator pointing one past the end of data

§ add_packed_enum()

template<typename InputIterator >
void protozero::pbf_writer::add_packed_enum ( pbf_tag_type  tag,
InputIterator  first,
InputIterator  last 
)
inline

Add "repeated packed enum" field to data.

Template Parameters
InputIteratorA type satisfying the InputIterator concept. Dereferencing the iterator must yield a type assignable to int32_t.
Parameters
tagTag (field number) of the field
firstIterator pointing to the beginning of the data
lastIterator pointing one past the end of data

§ add_packed_fixed32()

template<typename InputIterator >
void protozero::pbf_writer::add_packed_fixed32 ( pbf_tag_type  tag,
InputIterator  first,
InputIterator  last 
)
inline

Add "repeated packed fixed32" field to data.

Template Parameters
InputIteratorA type satisfying the InputIterator concept. Dereferencing the iterator must yield a type assignable to uint32_t.
Parameters
tagTag (field number) of the field
firstIterator pointing to the beginning of the data
lastIterator pointing one past the end of data

§ add_packed_fixed64()

template<typename InputIterator >
void protozero::pbf_writer::add_packed_fixed64 ( pbf_tag_type  tag,
InputIterator  first,
InputIterator  last 
)
inline

Add "repeated packed fixed64" field to data.

Template Parameters
InputIteratorA type satisfying the InputIterator concept. Dereferencing the iterator must yield a type assignable to uint64_t.
Parameters
tagTag (field number) of the field
firstIterator pointing to the beginning of the data
lastIterator pointing one past the end of data

§ add_packed_float()

template<typename InputIterator >
void protozero::pbf_writer::add_packed_float ( pbf_tag_type  tag,
InputIterator  first,
InputIterator  last 
)
inline

Add "repeated packed float" field to data.

Template Parameters
InputIteratorA type satisfying the InputIterator concept. Dereferencing the iterator must yield a type assignable to float.
Parameters
tagTag (field number) of the field
firstIterator pointing to the beginning of the data
lastIterator pointing one past the end of data

§ add_packed_int32()

template<typename InputIterator >
void protozero::pbf_writer::add_packed_int32 ( pbf_tag_type  tag,
InputIterator  first,
InputIterator  last 
)
inline

Add "repeated packed int32" field to data.

Template Parameters
InputIteratorA type satisfying the InputIterator concept. Dereferencing the iterator must yield a type assignable to int32_t.
Parameters
tagTag (field number) of the field
firstIterator pointing to the beginning of the data
lastIterator pointing one past the end of data

§ add_packed_int64()

template<typename InputIterator >
void protozero::pbf_writer::add_packed_int64 ( pbf_tag_type  tag,
InputIterator  first,
InputIterator  last 
)
inline

Add "repeated packed int64" field to data.

Template Parameters
InputIteratorA type satisfying the InputIterator concept. Dereferencing the iterator must yield a type assignable to int64_t.
Parameters
tagTag (field number) of the field
firstIterator pointing to the beginning of the data
lastIterator pointing one past the end of data

§ add_packed_sfixed32()

template<typename InputIterator >
void protozero::pbf_writer::add_packed_sfixed32 ( pbf_tag_type  tag,
InputIterator  first,
InputIterator  last 
)
inline

Add "repeated packed sfixed32" field to data.

Template Parameters
InputIteratorA type satisfying the InputIterator concept. Dereferencing the iterator must yield a type assignable to int32_t.
Parameters
tagTag (field number) of the field
firstIterator pointing to the beginning of the data
lastIterator pointing one past the end of data

§ add_packed_sfixed64()

template<typename InputIterator >
void protozero::pbf_writer::add_packed_sfixed64 ( pbf_tag_type  tag,
InputIterator  first,
InputIterator  last 
)
inline

Add "repeated packed sfixed64" field to data.

Template Parameters
InputIteratorA type satisfying the InputIterator concept. Dereferencing the iterator must yield a type assignable to int64_t.
Parameters
tagTag (field number) of the field
firstIterator pointing to the beginning of the data
lastIterator pointing one past the end of data

§ add_packed_sint32()

template<typename InputIterator >
void protozero::pbf_writer::add_packed_sint32 ( pbf_tag_type  tag,
InputIterator  first,
InputIterator  last 
)
inline

Add "repeated packed sint32" field to data.

Template Parameters
InputIteratorA type satisfying the InputIterator concept. Dereferencing the iterator must yield a type assignable to int32_t.
Parameters
tagTag (field number) of the field
firstIterator pointing to the beginning of the data
lastIterator pointing one past the end of data

§ add_packed_sint64()

template<typename InputIterator >
void protozero::pbf_writer::add_packed_sint64 ( pbf_tag_type  tag,
InputIterator  first,
InputIterator  last 
)
inline

Add "repeated packed sint64" field to data.

Template Parameters
InputIteratorA type satisfying the InputIterator concept. Dereferencing the iterator must yield a type assignable to int64_t.
Parameters
tagTag (field number) of the field
firstIterator pointing to the beginning of the data
lastIterator pointing one past the end of data

§ add_packed_uint32()

template<typename InputIterator >
void protozero::pbf_writer::add_packed_uint32 ( pbf_tag_type  tag,
InputIterator  first,
InputIterator  last 
)
inline

Add "repeated packed uint32" field to data.

Template Parameters
InputIteratorA type satisfying the InputIterator concept. Dereferencing the iterator must yield a type assignable to uint32_t.
Parameters
tagTag (field number) of the field
firstIterator pointing to the beginning of the data
lastIterator pointing one past the end of data

§ add_packed_uint64()

template<typename InputIterator >
void protozero::pbf_writer::add_packed_uint64 ( pbf_tag_type  tag,
InputIterator  first,
InputIterator  last 
)
inline

Add "repeated packed uint64" field to data.

Template Parameters
InputIteratorA type satisfying the InputIterator concept. Dereferencing the iterator must yield a type assignable to uint64_t.
Parameters
tagTag (field number) of the field
firstIterator pointing to the beginning of the data
lastIterator pointing one past the end of data

§ add_sfixed32()

void protozero::pbf_writer::add_sfixed32 ( pbf_tag_type  tag,
int32_t  value 
)
inline

Add "sfixed32" field to data.

Parameters
tagTag (field number) of the field
valueValue to be written

§ add_sfixed64()

void protozero::pbf_writer::add_sfixed64 ( pbf_tag_type  tag,
int64_t  value 
)
inline

Add "sfixed64" field to data.

Parameters
tagTag (field number) of the field
valueValue to be written

§ add_sint32()

void protozero::pbf_writer::add_sint32 ( pbf_tag_type  tag,
int32_t  value 
)
inline

Add "sint32" field to data.

Parameters
tagTag (field number) of the field
valueValue to be written

§ add_sint64()

void protozero::pbf_writer::add_sint64 ( pbf_tag_type  tag,
int64_t  value 
)
inline

Add "sint64" field to data.

Parameters
tagTag (field number) of the field
valueValue to be written

§ add_string() [1/4]

void protozero::pbf_writer::add_string ( pbf_tag_type  tag,
const char *  value,
std::size_t  size 
)
inline

Add "string" field to data.

Parameters
tagTag (field number) of the field
valuePointer to value to be written
sizeNumber of bytes to be written

§ add_string() [2/4]

void protozero::pbf_writer::add_string ( pbf_tag_type  tag,
const data_view value 
)
inline

Add "string" field to data.

Parameters
tagTag (field number) of the field
valueValue to be written

§ add_string() [3/4]

void protozero::pbf_writer::add_string ( pbf_tag_type  tag,
const std::string &  value 
)
inline

Add "string" field to data.

Parameters
tagTag (field number) of the field
valueValue to be written

§ add_string() [4/4]

void protozero::pbf_writer::add_string ( pbf_tag_type  tag,
const char *  value 
)
inline

Add "string" field to data. Bytes from the value are written until a null byte is encountered. The null byte is not added.

Parameters
tagTag (field number) of the field
valuePointer to value to be written

§ add_uint32()

void protozero::pbf_writer::add_uint32 ( pbf_tag_type  tag,
uint32_t  value 
)
inline

Add "uint32" field to data.

Parameters
tagTag (field number) of the field
valueValue to be written

§ add_uint64()

void protozero::pbf_writer::add_uint64 ( pbf_tag_type  tag,
uint64_t  value 
)
inline

Add "uint64" field to data.

Parameters
tagTag (field number) of the field
valueValue to be written

§ reserve()

void protozero::pbf_writer::reserve ( std::size_t  size)
inline

Reserve size bytes in the underlying message store in addition to whatever the message store already holds. So unlike the std::string::reserve() method this is not an absolute size, but additional memory that should be reserved.

Parameters
sizeNumber of bytes to reserve in underlying message store.

§ rollback()

void protozero::pbf_writer::rollback ( )
inline

Cancel writing of this submessage. The complete submessage will be removed as if it was never created and no fields were added.

Precondition
Must be a pbf_writer of a submessage, ie one opened with the pbf_writer constructor taking a parent message.

§ swap()

void protozero::pbf_writer::swap ( pbf_writer other)
inlinenoexcept

Swap the contents of this object with the other.

Parameters
otherOther object to swap data with.

The documentation for this class was generated from the following file: