| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 | #ifndef BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP#define BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP// MS compatible compilers support #pragma once#if defined(_MSC_VER)# 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 <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/io/ios_state.hpp>#include <boost/static_assert.hpp>#include <boost/detail/workaround.hpp>#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)#include <boost/archive/dinkumware.hpp>#endif#include <boost/serialization/throw_exception.hpp>#include <boost/archive/codecvt_null.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 headernamespace 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 )#endiftemplate<class IStream>class BOOST_SYMBOL_VISIBLE basic_text_iprimitive {protected:    IStream &is;    io::ios_flags_saver flags_saver;    io::ios_precision_saver precision_saver;    #ifndef BOOST_NO_STD_LOCALE    // note order! - if you change this, libstd++ will fail!    // a) create new locale with new codecvt facet    // b) save current locale    // c) change locale to new one    // d) use stream buffer    // e) change locale back to original    // f) destroy new codecvt facet    boost::archive::codecvt_null<typename IStream::char_type> codecvt_null_facet;    std::locale archive_locale;    basic_istream_locale_saver<        typename IStream::char_type,        typename IStream::traits_type    > locale_saver;    #endif    template<class T>    void load(T & t)    {        if(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    basic_text_iprimitive(IStream  &is, bool no_codecvt);    BOOST_ARCHIVE_OR_WARCHIVE_DECL    ~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
 |