cereal_fwd
Fork of cereal library adding archive supporting forward compatibility
Classes | Enumerations | Functions
extendable_binary_details.hpp File Reference

Implementation details for extendable binary archive. More...

#include <cereal/cereal.hpp>
#include <limits>
#include <sstream>
#include <queue>
#include <assert.h>

Go to the source code of this file.

Classes

struct  cereal::extendable_binary_detail::StreamPos
 Struct to keep position of start and end in stream. More...
 
class  cereal::extendable_binary_detail::StreamAdapter
 Class used as an adapter to queue of streams. More...
 

Enumerations

enum  cereal::extendable_binary_detail::FieldType {
  cereal::extendable_binary_detail::FieldType::omitted_field = 0x0, cereal::extendable_binary_detail::FieldType::positive_integer = 0x1, cereal::extendable_binary_detail::FieldType::negative_integer = 0x2, cereal::extendable_binary_detail::FieldType::floating_point = 0x3,
  cereal::extendable_binary_detail::FieldType::integer_packed = 0x4, cereal::extendable_binary_detail::FieldType::class_t = 0x5, cereal::extendable_binary_detail::FieldType::pointer = 0x6, cereal::extendable_binary_detail::FieldType::size_tag = 0x7,
  cereal::extendable_binary_detail::FieldType::packed_array = 0x8, cereal::extendable_binary_detail::FieldType::packed_struct = 0x9, last_field = 0xa, LAST_RESERVED_UNUSED
}
 Describes type of saved field. More...
 
enum  cereal::extendable_binary_detail::ClassMarkers : std::uint8_t { cereal::extendable_binary_detail::ClassMarkers::None = 0, cereal::extendable_binary_detail::ClassMarkers::EmptyClass = 0x1 << 0, HasVersion = 0x1 << 1 }
 Markers for FieldType::class_t. More...
 
enum  cereal::extendable_binary_detail::PointerMarkers : std::uint8_t { cereal::extendable_binary_detail::PointerMarkers::None = 0, Empty = 0x1 << 0, cereal::extendable_binary_detail::PointerMarkers::IsSharedPtr = 0x1 << 1, IsPolymorphicPointer = 0x1 << 2 }
 Markers for FieldType::pointer. More...
 
enum  { maxVarintSize = 10 }
 max size of saved varint More...
 

Functions

std::uint8_t cereal::extendable_binary_detail::is_little_endian ()
 Returns true if the current machine is little endian. More...
 
template<std::size_t DataSize>
void cereal::extendable_binary_detail::swap_bytes (std::uint8_t *data)
 Swaps the order of bytes for some chunk of memory. More...
 
ClassMarkers & cereal::extendable_binary_detail::operator|= (ClassMarkers &l, ClassMarkers r)
 
std::uint8_t cereal::extendable_binary_detail::operator & (ClassMarkers l, ClassMarkers r)
 
PointerMarkers & cereal::extendable_binary_detail::operator|= (PointerMarkers &l, PointerMarkers r)
 
std::uint8_t cereal::extendable_binary_detail::operator & (PointerMarkers l, PointerMarkers r)
 
std::uint8_t cereal::extendable_binary_detail::writeType (FieldType fieldType, std::uint8_t other)
 
std::pair< FieldType, std::uint8_t > cereal::extendable_binary_detail::readType (std::uint8_t input)
 
template<class T >
std::uint8_t cereal::extendable_binary_detail::getHighestBit (T v)
 Get number of bytes needed to save value. More...
 
std::uint8_t cereal::extendable_binary_detail::getHighestBit (std::uint8_t)
 Get number of bytes needed to save value. More...
 
template<class T >
T cereal::extendable_binary_detail::getqNaN ()
 Get quiet not a number value for type.
 
template<>
float cereal::extendable_binary_detail::getqNaN ()
 
template<>
double cereal::extendable_binary_detail::getqNaN ()
 
std::uint8_t cereal::extendable_binary_detail::getFloatSizeFromTagSize (std::uint8_t tagSize)
 Get size of floating point data for size identifier.
 
template<class T >
std::uint8_t cereal::extendable_binary_detail::getTagSizeFromFloatType ()
 Get size identifier for floating point type. More...
 
std::uint8_t cereal::extendable_binary_detail::getIntSizeFromTagSize (std::uint8_t tagSize)
 Get number of bytes to load based on value of identifier for integer tag.
 
std::uint8_t cereal::extendable_binary_detail::getIntSizeTagFromByteCount (unsigned int byteCount)
 Get identifier for size for integer tag based on number of bytes being stored.
 

Detailed Description

Implementation details for extendable binary archive.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

max size of saved varint

enough to save uint64_t 8

◆ ClassMarkers

Markers for FieldType::class_t.

Max size is four bits

◆ FieldType

Describes type of saved field.

Max size if four bits, then four bits for field specific encoding

◆ PointerMarkers

Markers for FieldType::pointer.

Max size is four bits

Function Documentation

◆ getHighestBit() [1/2]

template<class T >
std::uint8_t cereal::extendable_binary_detail::getHighestBit ( T  v)
inline

Get number of bytes needed to save value.

TODO can be done quicker http://stackoverflow.com/questions/2274428/how-to-determine-how-many-bytes-an-integer-needs

Parameters
vvalue to check
Returns
number of bytes needed to save this value

◆ getHighestBit() [2/2]

std::uint8_t cereal::extendable_binary_detail::getHighestBit ( std::uint8_t  )
inline

Get number of bytes needed to save value.

Separate function is needed because of error "shift count >= width of type [-Werror,-Wshift-count-overflow]"

◆ getTagSizeFromFloatType()

template<class T >
std::uint8_t cereal::extendable_binary_detail::getTagSizeFromFloatType ( )
inline

Get size identifier for floating point type.

Template Parameters
Tfloating point type