protozero
Minimalistic protocol buffer decoder and encoder in C++.
Classes | Typedefs | Enumerations | Functions | Variables
protozero Namespace Reference

All parts of the protozero header-only library are in this namespace. More...

Classes

struct  end_of_buffer_exception
 
struct  exception
 
class  pbf_builder
 
class  pbf_message
 
class  pbf_reader
 
class  pbf_writer
 
struct  unknown_pbf_wire_type_exception
 
struct  varint_too_long_exception
 

Typedefs

typedef uint32_t pbf_tag_type
 
typedef uint32_t pbf_length_type
 

Enumerations

enum  pbf_wire_type : uint32_t {
  varint = 0, fixed64 = 1, length_delimited = 2, fixed32 = 5,
  unknown = 99
}
 

Functions

template<int N>
void byteswap (const char *, char *)
 
template<>
void byteswap< 4 > (const char *data, char *result)
 
template<>
void byteswap< 8 > (const char *data, char *result)
 
uint64_t decode_varint (const char **data, const char *end)
 
template<typename OutputIterator >
int write_varint (OutputIterator data, uint64_t value)
 
uint32_t encode_zigzag32 (int32_t value) noexcept
 
uint64_t encode_zigzag64 (int64_t value) noexcept
 
int32_t decode_zigzag32 (uint32_t value) noexcept
 
int64_t decode_zigzag64 (uint64_t value) noexcept
 

Variables

const int8_t max_varint_length = sizeof(uint64_t) * 8 / 7 + 1
 

Detailed Description

All parts of the protozero header-only library are in this namespace.

Typedef Documentation

typedef uint32_t protozero::pbf_length_type

The type used for length values, such as the length of a field.

typedef uint32_t protozero::pbf_tag_type

The type used for field tags (field numbers).

Enumeration Type Documentation

enum protozero::pbf_wire_type : uint32_t
strong

The type used to encode type information. See the table on https://developers.google.com/protocol-buffers/docs/encoding

Function Documentation

template<int N>
void protozero::byteswap ( const char *  ,
char *   
)
inline

Swap N byte value between endianness formats. This template function must be specialized to actually work.

template<>
void protozero::byteswap< 4 > ( const char *  data,
char *  result 
)
inline

Swap 4 byte value (int32_t, uint32_t, float) between endianness formats.

template<>
void protozero::byteswap< 8 > ( const char *  data,
char *  result 
)
inline

Swap 8 byte value (int64_t, uint64_t, double) between endianness formats.

uint64_t protozero::decode_varint ( const char **  data,
const char *  end 
)
inline

Decode a 64bit varint.

String exception guarantee: if there is an exception the data pointer will not be changed.

Parameters
[in,out]dataPointer to pointer to the input data. After the function returns this will point to the next data to be read.
[in]endPointer one past the end of the input data.
Returns
The decoded integer
Exceptions
varint_too_long_exceptionif the varint is longer then the maximum length that would fit in a 64bit int. Usually this means your data is corrupted or you are trying to read something as a varint that isn't.
end_of_buffer_exceptionif the end of the buffer was reached before the end of the varint.
int32_t protozero::decode_zigzag32 ( uint32_t  value)
inlinenoexcept

Decodes a 32 bit ZigZag-encoded integer.

int64_t protozero::decode_zigzag64 ( uint64_t  value)
inlinenoexcept

Decodes a 64 bit ZigZag-encoded integer.

uint32_t protozero::encode_zigzag32 ( int32_t  value)
inlinenoexcept

ZigZag encodes a 32 bit integer.

uint64_t protozero::encode_zigzag64 ( int64_t  value)
inlinenoexcept

ZigZag encodes a 64 bit integer.

template<typename OutputIterator >
int protozero::write_varint ( OutputIterator  data,
uint64_t  value 
)
inline

Varint-encode a 64bit integer.

Variable Documentation

const int8_t protozero::max_varint_length = sizeof(uint64_t) * 8 / 7 + 1

The maximum length of a 64bit varint.