annotate DEPENDENCIES/generic/include/boost/archive/impl/basic_text_oprimitive.ipp @ 89:3c438d716e83

Update subrepos
author Chris Cannam
date Tue, 24 Mar 2015 11:24:46 +0000
parents 2665513ce2d3
children c530137014c0
rev   line source
Chris@16 1 /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
Chris@16 2 // basic_text_oprimitive.ipp:
Chris@16 3
Chris@16 4 // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
Chris@16 5 // Use, modification and distribution is subject to the Boost Software
Chris@16 6 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 7 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 8
Chris@16 9 // See http://www.boost.org for updates, documentation, and revision history.
Chris@16 10
Chris@16 11 #include <cstddef> // NULL
Chris@16 12 #include <boost/serialization/pfto.hpp>
Chris@16 13
Chris@16 14 #include <boost/archive/basic_text_oprimitive.hpp>
Chris@16 15 #include <boost/archive/codecvt_null.hpp>
Chris@16 16 #include <boost/archive/add_facet.hpp>
Chris@16 17
Chris@16 18 #include <boost/archive/iterators/base64_from_binary.hpp>
Chris@16 19 #include <boost/archive/iterators/insert_linebreaks.hpp>
Chris@16 20 #include <boost/archive/iterators/transform_width.hpp>
Chris@16 21 #include <boost/archive/iterators/ostream_iterator.hpp>
Chris@16 22
Chris@16 23 namespace boost {
Chris@16 24 namespace archive {
Chris@16 25
Chris@16 26 // translate to base64 and copy in to buffer.
Chris@16 27 template<class OStream>
Chris@16 28 BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
Chris@16 29 basic_text_oprimitive<OStream>::save_binary(
Chris@16 30 const void *address,
Chris@16 31 std::size_t count
Chris@16 32 ){
Chris@16 33 typedef BOOST_DEDUCED_TYPENAME OStream::char_type CharType;
Chris@16 34
Chris@16 35 if(0 == count)
Chris@16 36 return;
Chris@16 37
Chris@16 38 if(os.fail())
Chris@16 39 boost::serialization::throw_exception(
Chris@16 40 archive_exception(archive_exception::output_stream_error)
Chris@16 41 );
Chris@16 42
Chris@16 43 os.put('\n');
Chris@16 44
Chris@16 45 typedef
Chris@16 46 boost::archive::iterators::insert_linebreaks<
Chris@16 47 boost::archive::iterators::base64_from_binary<
Chris@16 48 boost::archive::iterators::transform_width<
Chris@16 49 const char *,
Chris@16 50 6,
Chris@16 51 8
Chris@16 52 >
Chris@16 53 >
Chris@16 54 ,76
Chris@16 55 ,const char // cwpro8 needs this
Chris@16 56 >
Chris@16 57 base64_text;
Chris@16 58
Chris@16 59 boost::archive::iterators::ostream_iterator<CharType> oi(os);
Chris@16 60 std::copy(
Chris@16 61 base64_text(BOOST_MAKE_PFTO_WRAPPER(static_cast<const char *>(address))),
Chris@16 62 base64_text(
Chris@16 63 BOOST_MAKE_PFTO_WRAPPER(static_cast<const char *>(address) + count)
Chris@16 64 ),
Chris@16 65 oi
Chris@16 66 );
Chris@16 67
Chris@16 68 std::size_t tail = count % 3;
Chris@16 69 if(tail > 0){
Chris@16 70 *oi++ = '=';
Chris@16 71 if(tail < 2)
Chris@16 72 *oi = '=';
Chris@16 73 }
Chris@16 74 }
Chris@16 75
Chris@16 76 template<class OStream>
Chris@16 77 BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
Chris@16 78 basic_text_oprimitive<OStream>::basic_text_oprimitive(
Chris@16 79 OStream & os_,
Chris@16 80 bool no_codecvt
Chris@16 81 ) :
Chris@16 82 #ifndef BOOST_NO_STD_LOCALE
Chris@16 83 os(os_),
Chris@16 84 flags_saver(os_),
Chris@16 85 precision_saver(os_),
Chris@16 86 archive_locale(NULL),
Chris@16 87 locale_saver(* os_.rdbuf())
Chris@16 88 {
Chris@16 89 if(! no_codecvt){
Chris@16 90 archive_locale.reset(
Chris@16 91 add_facet(
Chris@16 92 std::locale::classic(),
Chris@16 93 new codecvt_null<BOOST_DEDUCED_TYPENAME OStream::char_type>
Chris@16 94 )
Chris@16 95 );
Chris@16 96 os.imbue(* archive_locale);
Chris@16 97 }
Chris@16 98 os << std::noboolalpha;
Chris@16 99 }
Chris@16 100 #else
Chris@16 101 os(os_),
Chris@16 102 flags_saver(os_),
Chris@16 103 precision_saver(os_)
Chris@16 104 {}
Chris@16 105 #endif
Chris@16 106
Chris@16 107 template<class OStream>
Chris@16 108 BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
Chris@16 109 basic_text_oprimitive<OStream>::~basic_text_oprimitive(){
Chris@16 110 os << std::endl;
Chris@16 111 }
Chris@16 112
Chris@16 113 } //namespace boost
Chris@16 114 } //namespace archive