Chris@16
|
1 #ifndef BOOST_ARCHIVE_CODECVT_NULL_HPP
|
Chris@16
|
2 #define BOOST_ARCHIVE_CODECVT_NULL_HPP
|
Chris@16
|
3
|
Chris@16
|
4 // MS compatible compilers support #pragma once
|
Chris@101
|
5 #if defined(_MSC_VER)
|
Chris@16
|
6 # pragma once
|
Chris@16
|
7 #endif
|
Chris@16
|
8
|
Chris@16
|
9 /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
|
Chris@16
|
10 // codecvt_null.hpp:
|
Chris@16
|
11
|
Chris@16
|
12 // (C) Copyright 2004 Robert Ramey - http://www.rrsd.com .
|
Chris@16
|
13 // Use, modification and distribution is subject to the Boost Software
|
Chris@16
|
14 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
15 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
16
|
Chris@16
|
17 // See http://www.boost.org for updates, documentation, and revision history.
|
Chris@16
|
18
|
Chris@16
|
19 #include <locale>
|
Chris@16
|
20 #include <cstddef> // NULL, size_t
|
Chris@16
|
21 #include <cwchar> // for mbstate_t
|
Chris@16
|
22 #include <boost/config.hpp>
|
Chris@16
|
23 #include <boost/archive/detail/auto_link_archive.hpp>
|
Chris@16
|
24 #include <boost/archive/detail/abi_prefix.hpp> // must be the last header
|
Chris@16
|
25
|
Chris@16
|
26 #if defined(BOOST_NO_STDC_NAMESPACE)
|
Chris@16
|
27 namespace std {
|
Chris@16
|
28 // For STLport on WinCE, BOOST_NO_STDC_NAMESPACE can get defined if STLport is putting symbols in its own namespace.
|
Chris@16
|
29 // In the case of codecvt, however, this does not mean that codecvt is in the global namespace (it will be in STLport's namespace)
|
Chris@16
|
30 # if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
|
Chris@16
|
31 using ::codecvt;
|
Chris@16
|
32 # endif
|
Chris@16
|
33 using ::mbstate_t;
|
Chris@16
|
34 using ::size_t;
|
Chris@16
|
35 } // namespace
|
Chris@16
|
36 #endif
|
Chris@16
|
37
|
Chris@16
|
38 #ifdef BOOST_MSVC
|
Chris@16
|
39 # pragma warning(push)
|
Chris@16
|
40 # pragma warning(disable : 4511 4512)
|
Chris@16
|
41 #endif
|
Chris@16
|
42
|
Chris@16
|
43 namespace boost {
|
Chris@16
|
44 namespace archive {
|
Chris@16
|
45
|
Chris@16
|
46 template<class Ch>
|
Chris@16
|
47 class codecvt_null;
|
Chris@16
|
48
|
Chris@16
|
49 template<>
|
Chris@16
|
50 class codecvt_null<char> : public std::codecvt<char, char, std::mbstate_t>
|
Chris@16
|
51 {
|
Chris@16
|
52 virtual bool do_always_noconv() const throw() {
|
Chris@16
|
53 return true;
|
Chris@16
|
54 }
|
Chris@16
|
55 public:
|
Chris@16
|
56 explicit codecvt_null(std::size_t no_locale_manage = 0) :
|
Chris@16
|
57 std::codecvt<char, char, std::mbstate_t>(no_locale_manage)
|
Chris@16
|
58 {}
|
Chris@16
|
59 };
|
Chris@16
|
60
|
Chris@16
|
61 template<>
|
Chris@16
|
62 class codecvt_null<wchar_t> : public std::codecvt<wchar_t, char, std::mbstate_t>
|
Chris@16
|
63 {
|
Chris@16
|
64 virtual BOOST_WARCHIVE_DECL(std::codecvt_base::result)
|
Chris@16
|
65 do_out(
|
Chris@16
|
66 std::mbstate_t & state,
|
Chris@16
|
67 const wchar_t * first1,
|
Chris@16
|
68 const wchar_t * last1,
|
Chris@16
|
69 const wchar_t * & next1,
|
Chris@16
|
70 char * first2,
|
Chris@16
|
71 char * last2,
|
Chris@16
|
72 char * & next2
|
Chris@16
|
73 ) const;
|
Chris@16
|
74 virtual BOOST_WARCHIVE_DECL(std::codecvt_base::result)
|
Chris@16
|
75 do_in(
|
Chris@16
|
76 std::mbstate_t & state,
|
Chris@16
|
77 const char * first1,
|
Chris@16
|
78 const char * last1,
|
Chris@16
|
79 const char * & next1,
|
Chris@16
|
80 wchar_t * first2,
|
Chris@16
|
81 wchar_t * last2,
|
Chris@16
|
82 wchar_t * & next2
|
Chris@16
|
83 ) const;
|
Chris@16
|
84 virtual int do_encoding( ) const throw( ){
|
Chris@16
|
85 return sizeof(wchar_t) / sizeof(char);
|
Chris@16
|
86 }
|
Chris@16
|
87 virtual int do_max_length( ) const throw( ){
|
Chris@16
|
88 return do_encoding();
|
Chris@16
|
89 }
|
Chris@101
|
90 public:
|
Chris@101
|
91 explicit codecvt_null(std::size_t no_locale_manage = 0) :
|
Chris@101
|
92 std::codecvt<wchar_t, char, std::mbstate_t>(no_locale_manage)
|
Chris@101
|
93 {}
|
Chris@16
|
94 };
|
Chris@16
|
95
|
Chris@16
|
96 } // namespace archive
|
Chris@16
|
97 } // namespace boost
|
Chris@16
|
98
|
Chris@16
|
99 #ifdef BOOST_MSVC
|
Chris@16
|
100 # pragma warning(pop)
|
Chris@16
|
101 #endif
|
Chris@16
|
102 #include <boost/archive/detail/abi_suffix.hpp> // pop pragmas
|
Chris@16
|
103
|
Chris@16
|
104 #endif //BOOST_ARCHIVE_CODECVT_NULL_HPP
|