source: NonGTP/Boost/boost/archive/basic_text_iprimitive.hpp @ 857

Revision 857, 4.0 KB checked in by igarcia, 18 years ago (diff)
Line 
1#ifndef BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP
2#define BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP
3
4// MS compatible compilers support #pragma once
5#if defined(_MSC_VER) && (_MSC_VER >= 1020)
6# pragma once
7#endif
8
9/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
10// basic_text_iprimitive.hpp
11
12// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
13// Use, modification and distribution is subject to the Boost Software
14// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
15// http://www.boost.org/LICENSE_1_0.txt)
16
17//  See http://www.boost.org for updates, documentation, and revision history.
18
19// archives stored as text - note these ar templated on the basic
20// stream templates to accommodate wide (and other?) kind of characters
21//
22// note the fact that on libraries without wide characters, ostream is
23// is not a specialization of basic_ostream which in fact is not defined
24// in such cases.   So we can't use basic_ostream<IStream::char_type> but rather
25// use two template parameters
26
27#include <cassert>
28#include <locale>
29#include <cstddef> // size_t
30
31#include <boost/config.hpp>
32#if defined(BOOST_NO_STDC_NAMESPACE)
33namespace std{
34    using ::size_t;
35    #if ! defined(BOOST_DINKUMWARE_STDLIB) && ! defined(__SGI_STL_PORT)
36        using ::locale;
37    #endif
38} // namespace std
39#endif
40
41#include <boost/detail/workaround.hpp>
42#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
43#include <boost/archive/dinkumware.hpp>
44#endif
45
46#include <boost/throw_exception.hpp>
47#include <boost/limits.hpp>
48#include <boost/io/ios_state.hpp>
49#include <boost/scoped_ptr.hpp>
50
51#include <boost/archive/archive_exception.hpp>
52
53#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
54
55namespace boost {
56namespace archive {
57
58/////////////////////////////////////////////////////////////////////////
59// class basic_text_iarchive - load serialized objects from a input text stream
60template<class IStream>
61class basic_text_iprimitive
62{
63#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
64protected:
65#else
66public:
67#endif
68    IStream &is;
69    io::ios_flags_saver flags_saver;
70    io::ios_precision_saver precision_saver;
71    boost::scoped_ptr<std::locale> archive_locale;
72    io::basic_ios_locale_saver<
73        BOOST_DEDUCED_TYPENAME IStream::char_type, BOOST_DEDUCED_TYPENAME IStream::traits_type
74    > locale_saver;
75    template<class T>
76    void load(T & t)
77    {
78        if(is.fail())
79            boost::throw_exception(archive_exception(archive_exception::stream_error));
80        is >> t;
81    }
82    void load(unsigned char & t)
83    {
84        if(is.fail())
85            boost::throw_exception(archive_exception(archive_exception::stream_error));
86        unsigned short int i;
87        is >> i;
88        t = static_cast<unsigned char>(i);
89    }
90    void load(signed char & t)
91    {
92        if(is.fail())
93            boost::throw_exception(archive_exception(archive_exception::stream_error));
94        signed short int i;
95        is >> i;
96        t = static_cast<signed char>(i);
97    }
98    void load(char & t)
99    {
100        if(is.fail())
101            boost::throw_exception(archive_exception(archive_exception::stream_error));
102        short int i;
103        is >> i;
104        t = static_cast<char>(i);
105    }
106    #ifndef BOOST_NO_INTRINSIC_WCHAR_T
107    void load(wchar_t & t)
108    {
109        if(is.fail())
110            boost::throw_exception(archive_exception(archive_exception::stream_error));
111        unsigned i;
112        is >> i;
113        t = static_cast<wchar_t>(i);
114    }
115    #endif
116    BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
117    basic_text_iprimitive(IStream  &is, bool no_codecvt);
118    BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
119    ~basic_text_iprimitive();
120public:
121    BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
122    load_binary(void *address, std::size_t count);
123};
124
125} // namespace archive
126} // namespace boost
127
128#include <boost/archive/detail/abi_suffix.hpp> // pop pragams
129
130#endif // BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP
Note: See TracBrowser for help on using the repository browser.