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] | data | Pointer to pointer to the input data. After the function returns this will point to the next data to be read.
  [in] | end | Pointer one past the end of the input data.

Returns
  The decoded integer

Exceptions

  varint_too_long_exception | if 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_exception | if the end of the buffer was reached before the end of the varint.

int32_t protozero::decode_zigzag32 | ( | uint32_t | value | ) |

inline noexcept

Decodes a 32 bit ZigZag-encoded integer.

int64_t protozero::decode_zigzag64 | ( | uint64_t | value | ) |

inline noexcept

Decodes a 64 bit ZigZag-encoded integer.

uint32_t protozero::encode_zigzag32 | ( | int32_t | value | ) |

inline noexcept

ZigZag encodes a 32 bit integer.

uint64_t protozero::encode_zigzag64 | ( | int64_t | value | ) |

inline noexcept

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.