| #ifndef BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP |
| #define BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP |
| |
| // MS compatible compilers support #pragma once |
| #if defined(_MSC_VER) && (_MSC_VER >= 1020) |
| # pragma once |
| #endif |
| |
| /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 |
| // basic_text_iprimitive.hpp |
| |
| // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . |
| // Use, modification and distribution is subject to the Boost Software |
| // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at |
| // http://www.boost.org/LICENSE_1_0.txt) |
| |
| // See http://www.boost.org for updates, documentation, and revision history. |
| |
| // archives stored as text - note these are templated on the basic |
| // stream templates to accommodate wide (and other?) kind of characters |
| // |
| // Note the fact that on libraries without wide characters, ostream is |
| // not a specialization of basic_ostream which in fact is not defined |
| // in such cases. So we can't use basic_ostream<IStream::char_type> but rather |
| // use two template parameters |
| |
| #include <cassert> |
| #include <locale> |
| #include <cstddef> // size_t |
| |
| #include <boost/config.hpp> |
| #if defined(BOOST_NO_STDC_NAMESPACE) |
| namespace std{ |
| using ::size_t; |
| #if ! defined(BOOST_DINKUMWARE_STDLIB) && ! defined(__SGI_STL_PORT) |
| using ::locale; |
| #endif |
| } // namespace std |
| #endif |
| |
| #include <boost/detail/workaround.hpp> |
| #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) |
| #include <boost/archive/dinkumware.hpp> |
| #endif |
| |
| #include <boost/limits.hpp> |
| #include <boost/io/ios_state.hpp> |
| #include <boost/scoped_ptr.hpp> |
| #include <boost/static_assert.hpp> |
| |
| #include <boost/serialization/throw_exception.hpp> |
| #include <boost/archive/archive_exception.hpp> |
| #include <boost/archive/basic_streambuf_locale_saver.hpp> |
| #include <boost/archive/detail/abi_prefix.hpp> // must be the last header |
| |
| namespace boost { |
| namespace archive { |
| |
| ///////////////////////////////////////////////////////////////////////// |
| // class basic_text_iarchive - load serialized objects from a input text stream |
| #if defined(_MSC_VER) |
| #pragma warning( push ) |
| #pragma warning( disable : 4244 4267 ) |
| #endif |
| |
| template<class IStream> |
| class basic_text_iprimitive |
| { |
| #ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS |
| protected: |
| #else |
| public: |
| #endif |
| IStream &is; |
| io::ios_flags_saver flags_saver; |
| io::ios_precision_saver precision_saver; |
| |
| #ifndef BOOST_NO_STD_LOCALE |
| boost::scoped_ptr<std::locale> archive_locale; |
| basic_streambuf_locale_saver< |
| BOOST_DEDUCED_TYPENAME IStream::char_type, |
| BOOST_DEDUCED_TYPENAME IStream::traits_type |
| > locale_saver; |
| #endif |
| |
| template<class T> |
| void load(T & t) |
| { |
| if(! is.fail()){ |
| is >> t; |
| return; |
| } |
| boost::serialization::throw_exception( |
| archive_exception(archive_exception::input_stream_error) |
| ); |
| } |
| |
| void load(char & t) |
| { |
| short int i; |
| load(i); |
| t = i; |
| } |
| void load(signed char & t) |
| { |
| short int i; |
| load(i); |
| t = i; |
| } |
| void load(unsigned char & t) |
| { |
| unsigned short int i; |
| load(i); |
| t = i; |
| } |
| |
| #ifndef BOOST_NO_INTRINSIC_WCHAR_T |
| void load(wchar_t & t) |
| { |
| BOOST_STATIC_ASSERT(sizeof(wchar_t) <= sizeof(int)); |
| int i; |
| load(i); |
| t = i; |
| } |
| #endif |
| BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) |
| basic_text_iprimitive(IStream &is, bool no_codecvt); |
| BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) |
| ~basic_text_iprimitive(); |
| public: |
| BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) |
| load_binary(void *address, std::size_t count); |
| }; |
| |
| #if defined(_MSC_VER) |
| #pragma warning( pop ) |
| #endif |
| |
| } // namespace archive |
| } // namespace boost |
| |
| #include <boost/archive/detail/abi_suffix.hpp> // pop pragmas |
| |
| #endif // BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP |