annotate DEPENDENCIES/generic/include/boost/archive/impl/basic_text_oprimitive.ipp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents c530137014c0
children
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@101 12 #include <algorithm> // std::copy
Chris@16 13 #include <boost/serialization/pfto.hpp>
Chris@16 14
Chris@16 15 #include <boost/archive/basic_text_oprimitive.hpp>
Chris@16 16 #include <boost/archive/codecvt_null.hpp>
Chris@16 17 #include <boost/archive/add_facet.hpp>
Chris@16 18
Chris@16 19 #include <boost/archive/iterators/base64_from_binary.hpp>
Chris@16 20 #include <boost/archive/iterators/insert_linebreaks.hpp>
Chris@16 21 #include <boost/archive/iterators/transform_width.hpp>
Chris@16 22 #include <boost/archive/iterators/ostream_iterator.hpp>
Chris@16 23
Chris@16 24 namespace boost {
Chris@16 25 namespace archive {
Chris@16 26
Chris@16 27 // translate to base64 and copy in to buffer.
Chris@16 28 template<class OStream>
Chris@16 29 BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
Chris@16 30 basic_text_oprimitive<OStream>::save_binary(
Chris@16 31 const void *address,
Chris@16 32 std::size_t count
Chris@16 33 ){
Chris@101 34 typedef typename OStream::char_type CharType;
Chris@16 35
Chris@16 36 if(0 == count)
Chris@16 37 return;
Chris@16 38
Chris@16 39 if(os.fail())
Chris@16 40 boost::serialization::throw_exception(
Chris@16 41 archive_exception(archive_exception::output_stream_error)
Chris@16 42 );
Chris@16 43
Chris@16 44 os.put('\n');
Chris@16 45
Chris@16 46 typedef
Chris@16 47 boost::archive::iterators::insert_linebreaks<
Chris@16 48 boost::archive::iterators::base64_from_binary<
Chris@16 49 boost::archive::iterators::transform_width<
Chris@16 50 const char *,
Chris@16 51 6,
Chris@16 52 8
Chris@16 53 >
Chris@16 54 >
Chris@16 55 ,76
Chris@16 56 ,const char // cwpro8 needs this
Chris@16 57 >
Chris@16 58 base64_text;
Chris@16 59
Chris@16 60 boost::archive::iterators::ostream_iterator<CharType> oi(os);
Chris@16 61 std::copy(
Chris@16 62 base64_text(BOOST_MAKE_PFTO_WRAPPER(static_cast<const char *>(address))),
Chris@16 63 base64_text(
Chris@16 64 BOOST_MAKE_PFTO_WRAPPER(static_cast<const char *>(address) + count)
Chris@16 65 ),
Chris@16 66 oi
Chris@16 67 );
Chris@16 68
Chris@16 69 std::size_t tail = count % 3;
Chris@16 70 if(tail > 0){
Chris@16 71 *oi++ = '=';
Chris@16 72 if(tail < 2)
Chris@16 73 *oi = '=';
Chris@16 74 }
Chris@16 75 }
Chris@16 76
Chris@16 77 template<class OStream>
Chris@16 78 BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
Chris@16 79 basic_text_oprimitive<OStream>::basic_text_oprimitive(
Chris@16 80 OStream & os_,
Chris@16 81 bool no_codecvt
Chris@16 82 ) :
Chris@16 83 #ifndef BOOST_NO_STD_LOCALE
Chris@16 84 os(os_),
Chris@16 85 flags_saver(os_),
Chris@16 86 precision_saver(os_),
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@101 92 std::locale::classic(),
Chris@101 93 new boost::archive::codecvt_null<typename OStream::char_type>
Chris@16 94 )
Chris@16 95 );
Chris@101 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