aboutsummaryrefslogtreecommitdiffstats
path: root/lib/cereal/include/cereal/archives/binary.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/cereal/include/cereal/archives/binary.hpp')
-rw-r--r--lib/cereal/include/cereal/archives/binary.hpp169
1 files changed, 0 insertions, 169 deletions
diff --git a/lib/cereal/include/cereal/archives/binary.hpp b/lib/cereal/include/cereal/archives/binary.hpp
deleted file mode 100644
index 7e00322..0000000
--- a/lib/cereal/include/cereal/archives/binary.hpp
+++ /dev/null
@@ -1,169 +0,0 @@
-/*! \file binary.hpp
- \brief Binary input and output archives */
-/*
- Copyright (c) 2014, Randolph Voorhies, Shane Grant
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of cereal nor the
- names of its contributors may be used to endorse or promote products
- derived from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL RANDOLPH VOORHIES OR SHANE GRANT BE LIABLE FOR ANY
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-#ifndef CEREAL_ARCHIVES_BINARY_HPP_
-#define CEREAL_ARCHIVES_BINARY_HPP_
-
-#include "cereal/cereal.hpp"
-#include <sstream>
-
-namespace cereal
-{
- // ######################################################################
- //! An output archive designed to save data in a compact binary representation
- /*! This archive outputs data to a stream in an extremely compact binary
- representation with as little extra metadata as possible.
-
- This archive does nothing to ensure that the endianness of the saved
- and loaded data is the same. If you need to have portability over
- architectures with different endianness, use PortableBinaryOutputArchive.
-
- When using a binary archive and a file stream, you must use the
- std::ios::binary format flag to avoid having your data altered
- inadvertently.
-
- \ingroup Archives */
- class BinaryOutputArchive : public OutputArchive<BinaryOutputArchive, AllowEmptyClassElision>
- {
- public:
- //! Construct, outputting to the provided stream
- /*! @param stream The stream to output to. Can be a stringstream, a file stream, or
- even cout! */
- BinaryOutputArchive(std::ostream & stream) :
- OutputArchive<BinaryOutputArchive, AllowEmptyClassElision>(this),
- itsStream(stream)
- { }
-
- ~BinaryOutputArchive() CEREAL_NOEXCEPT = default;
-
- //! Writes size bytes of data to the output stream
- void saveBinary( const void * data, std::size_t size )
- {
- auto const writtenSize = static_cast<std::size_t>( itsStream.rdbuf()->sputn( reinterpret_cast<const char*>( data ), size ) );
-
- if(writtenSize != size)
- throw Exception("Failed to write " + std::to_string(size) + " bytes to output stream! Wrote " + std::to_string(writtenSize));
- }
-
- private:
- std::ostream & itsStream;
- };
-
- // ######################################################################
- //! An input archive designed to load data saved using BinaryOutputArchive
- /* This archive does nothing to ensure that the endianness of the saved
- and loaded data is the same. If you need to have portability over
- architectures with different endianness, use PortableBinaryOutputArchive.
-
- When using a binary archive and a file stream, you must use the
- std::ios::binary format flag to avoid having your data altered
- inadvertently.
-
- \ingroup Archives */
- class BinaryInputArchive : public InputArchive<BinaryInputArchive, AllowEmptyClassElision>
- {
- public:
- //! Construct, loading from the provided stream
- BinaryInputArchive(std::istream & stream) :
- InputArchive<BinaryInputArchive, AllowEmptyClassElision>(this),
- itsStream(stream)
- { }
-
- ~BinaryInputArchive() CEREAL_NOEXCEPT = default;
-
- //! Reads size bytes of data from the input stream
- void loadBinary( void * const data, std::size_t size )
- {
- auto const readSize = static_cast<std::size_t>( itsStream.rdbuf()->sgetn( reinterpret_cast<char*>( data ), size ) );
-
- if(readSize != size)
- throw Exception("Failed to read " + std::to_string(size) + " bytes from input stream! Read " + std::to_string(readSize));
- }
-
- private:
- std::istream & itsStream;
- };
-
- // ######################################################################
- // Common BinaryArchive serialization functions
-
- //! Saving for POD types to binary
- template<class T> inline
- typename std::enable_if<std::is_arithmetic<T>::value, void>::type
- CEREAL_SAVE_FUNCTION_NAME(BinaryOutputArchive & ar, T const & t)
- {
- ar.saveBinary(std::addressof(t), sizeof(t));
- }
-
- //! Loading for POD types from binary
- template<class T> inline
- typename std::enable_if<std::is_arithmetic<T>::value, void>::type
- CEREAL_LOAD_FUNCTION_NAME(BinaryInputArchive & ar, T & t)
- {
- ar.loadBinary(std::addressof(t), sizeof(t));
- }
-
- //! Serializing NVP types to binary
- template <class Archive, class T> inline
- CEREAL_ARCHIVE_RESTRICT(BinaryInputArchive, BinaryOutputArchive)
- CEREAL_SERIALIZE_FUNCTION_NAME( Archive & ar, NameValuePair<T> & t )
- {
- ar( t.value );
- }
-
- //! Serializing SizeTags to binary
- template <class Archive, class T> inline
- CEREAL_ARCHIVE_RESTRICT(BinaryInputArchive, BinaryOutputArchive)
- CEREAL_SERIALIZE_FUNCTION_NAME( Archive & ar, SizeTag<T> & t )
- {
- ar( t.size );
- }
-
- //! Saving binary data
- template <class T> inline
- void CEREAL_SAVE_FUNCTION_NAME(BinaryOutputArchive & ar, BinaryData<T> const & bd)
- {
- ar.saveBinary( bd.data, static_cast<std::size_t>( bd.size ) );
- }
-
- //! Loading binary data
- template <class T> inline
- void CEREAL_LOAD_FUNCTION_NAME(BinaryInputArchive & ar, BinaryData<T> & bd)
- {
- ar.loadBinary(bd.data, static_cast<std::size_t>(bd.size));
- }
-} // namespace cereal
-
-// register archives for polymorphic support
-CEREAL_REGISTER_ARCHIVE(cereal::BinaryOutputArchive)
-CEREAL_REGISTER_ARCHIVE(cereal::BinaryInputArchive)
-
-// tie input and output archives together
-CEREAL_SETUP_ARCHIVE_TRAITS(cereal::BinaryInputArchive, cereal::BinaryOutputArchive)
-
-#endif // CEREAL_ARCHIVES_BINARY_HPP_