29 #ifndef CEREAL_ARCHIVES_PORTABLE_BINARY_HPP_
30 #define CEREAL_ARCHIVES_PORTABLE_BINARY_HPP_
38 namespace portable_binary_detail
45 return *
reinterpret_cast<std::int8_t*
>( &test ) == 1;
52 template <std::
size_t DataSize>
55 for( std::size_t i = 0, end = DataSize / 2; i < end; ++i )
56 std::swap( data[i], data[DataSize - i - 1] );
125 this->
operator()( options.is_little_endian() );
131 template <
std::streamsize DataSize> inline
134 std::streamsize writtenSize = 0;
138 for( std::streamsize i = 0; i < size; i += DataSize )
139 for( std::streamsize j = 0; j < DataSize; ++j )
140 writtenSize +=
itsStream.rdbuf()->sputn(
reinterpret_cast<const char*
>( data ) + DataSize - j - 1 + i, 1 );
143 writtenSize =
itsStream.rdbuf()->sputn(
reinterpret_cast<const char*
>( data ), size );
145 if(writtenSize != size)
238 template <
std::streamsize DataSize> inline
242 auto const readSize =
itsStream.rdbuf()->sgetn(
reinterpret_cast<char*
>( data ), size );
251 for( std::streamsize i = 0; i < size; i += DataSize )
252 portable_binary_detail::swap_bytes<DataSize>( ptr + i );
265 template<
class T>
inline
271 "Portable binary only supports IEEE 754 standardized floating point" );
272 ar.template saveBinary<sizeof(T)>(std::addressof(t),
sizeof(t));
276 template<
class T>
inline
282 "Portable binary only supports IEEE 754 standardized floating point" );
283 ar.template loadBinary<sizeof(T)>(std::addressof(t),
sizeof(t));
287 template <
class Archive,
class T>
inline
295 template <
class Archive,
class T>
inline
303 template <
class T>
inline
309 "Portable binary only supports IEEE 754 standardized floating point" );
311 ar.template saveBinary<sizeof(TT)>( bd.
data,
static_cast<std::streamsize
>( bd.
size ) );
315 template <
class T>
inline
321 "Portable binary only supports IEEE 754 standardized floating point" );
323 ar.template loadBinary<sizeof(TT)>( bd.
data,
static_cast<std::streamsize
>( bd.
size ) );
NLOHMANN_BASIC_JSON_TPL_DECLARATION std::string to_string(const NLOHMANN_BASIC_JSON_TPL &j)
user-defined to_string function for JSON values
Definition: json.hpp:25318
Main cereal functionality.
#define CEREAL_REGISTER_ARCHIVE(Archive)
Registers a specific Archive type with cereal.
Definition: cereal.hpp:195
The base output archive class.
Definition: cereal.hpp:319
PortableBinaryOutputArchive & operator()(Types &&... args)
Serializes all passed in data.
Definition: cereal.hpp:331
A class containing various advanced options for the PortableBinaryOutput archive.
Definition: portable_binary.hpp:83
static Options BigEndian()
Save as big endian.
Definition: portable_binary.hpp:96
static Endianness getEndianness()
Gets the endianness of the system.
Definition: portable_binary.hpp:105
Options(Endianness outputEndian=getEndianness())
Specify specific options for the PortableBinaryOutputArchive.
Definition: portable_binary.hpp:100
std::uint8_t is_little_endian() const
Checks if Options is set for little endian.
Definition: portable_binary.hpp:109
static Options LittleEndian()
Save as little endian.
Definition: portable_binary.hpp:93
static Options Default()
Default options, preserve system endianness.
Definition: portable_binary.hpp:90
Endianness itsOutputEndianness
Definition: portable_binary.hpp:113
Endianness
Represents desired endianness.
Definition: portable_binary.hpp:87
An output archive designed to save data in a compact binary representation portable over different ar...
Definition: portable_binary.hpp:79
const uint8_t itsConvertEndianness
If set to true, we will need to swap bytes upon saving.
Definition: portable_binary.hpp:151
~PortableBinaryOutputArchive() CEREAL_NOEXCEPT=default
void saveBinary(const void *data, std::streamsize size)
Writes size bytes of data to the output stream.
Definition: portable_binary.hpp:132
std::ostream & itsStream
Definition: portable_binary.hpp:150
PortableBinaryOutputArchive(std::ostream &stream, Options const &options=Options::Default())
Construct, outputting to the provided stream.
Definition: portable_binary.hpp:120
#define CEREAL_NOEXCEPT
Defines the CEREAL_NOEXCEPT macro to use instead of noexcept.
Definition: macros.hpp:130
type
The type the bitset is encoded with.
Definition: bitset.hpp:44
void swap_bytes(std::uint8_t *data)
Swaps the order of bytes for some chunk of memory.
Definition: portable_binary.hpp:53
std::uint8_t is_little_endian()
Returns true if the current machine is little endian.
Definition: portable_binary.hpp:42
in certain simple scenarios. They should probably not be used if maximizing performance is the main o...
Definition: access.hpp:42
std::enable_if< std::is_arithmetic< T >::value, void >::type CEREAL_LOAD_FUNCTION_NAME(BinaryInputArchive &ar, T &t)
Loading for POD types from binary.
Definition: binary.hpp:126
CEREAL_SERIALIZE_FUNCTION_NAME(Archive &ar, NameValuePair< T > &t)
Serializing NVP types to binary.
Definition: binary.hpp:134
std::enable_if< std::is_arithmetic< T >::value, void >::type CEREAL_SAVE_FUNCTION_NAME(BinaryOutputArchive &ar, T const &t)
Saving for POD types to binary.
Definition: binary.hpp:118
@ AllowEmptyClassElision
Definition: cereal.hpp:185
Definition: json.hpp:5678
NLOHMANN_BASIC_JSON_TPL_DECLARATION void swap(nlohmann::NLOHMANN_BASIC_JSON_TPL &j1, nlohmann::NLOHMANN_BASIC_JSON_TPL &j2) noexcept(//NOLINT(readability-inconsistent-declaration-parameter-name, cert-dcl58-cpp) is_nothrow_move_constructible< nlohmann::NLOHMANN_BASIC_JSON_TPL >::value &&//NOLINT(misc-redundant-expression, cppcoreguidelines-noexcept-swap, performance-noexcept-swap) is_nothrow_move_assignable< nlohmann::NLOHMANN_BASIC_JSON_TPL >::value)
exchanges the values of two JSON objects
Definition: json.hpp:25399
const GenericPointer< typename T::ValueType > T2 value
Definition: pointer.h:1282
PUGI_IMPL_FN bool is_little_endian()
Definition: pugixml.cpp:1931
signed int int32_t
Definition: stdint.h:123
unsigned char uint8_t
Definition: stdint.h:124
signed char int8_t
Definition: stdint.h:121
A wrapper around data that can be serialized in a binary fashion.
Definition: helpers.hpp:212
PT data
pointer to beginning of data
Definition: helpers.hpp:221
uint64_t size
size in bytes
Definition: helpers.hpp:222
An exception class thrown when things go wrong at runtime.
Definition: helpers.hpp:49
#define CEREAL_SETUP_ARCHIVE_TRAITS(InputArchive, OutputArchive)
Sets up traits that relate an input archive to an output archive.
Definition: traits.hpp:169
#define CEREAL_ARCHIVE_RESTRICT(INTYPE, OUTTYPE)
A macro to use to restrict which types of archives your function will work for.
Definition: traits.hpp:1315
#define const
Definition: zconf.h:233