annotate DEPENDENCIES/generic/include/boost/archive/impl/xml_oarchive_impl.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 // xml_oarchive_impl.ipp:
Chris@16 3
Chris@16 4 // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
Chris@16 5 // Distributed under the Boost Software License, Version 1.0. (See
Chris@16 6 // 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 #include <ostream>
Chris@16 10 #include <iomanip>
Chris@101 11 #include <algorithm> // std::copy
Chris@16 12 #include <string>
Chris@16 13
Chris@16 14 #include <cstring> // strlen
Chris@16 15 #include <boost/config.hpp> // msvc 6.0 needs this to suppress warnings
Chris@16 16 #if defined(BOOST_NO_STDC_NAMESPACE)
Chris@16 17 namespace std{
Chris@16 18 using ::strlen;
Chris@16 19 } // namespace std
Chris@16 20 #endif
Chris@16 21
Chris@16 22 #include <boost/archive/iterators/xml_escape.hpp>
Chris@16 23 #include <boost/archive/iterators/ostream_iterator.hpp>
Chris@16 24
Chris@16 25 #ifndef BOOST_NO_CWCHAR
Chris@16 26 #include <boost/archive/wcslen.hpp>
Chris@16 27 #include <boost/archive/iterators/mb_from_wchar.hpp>
Chris@16 28 #endif
Chris@16 29
Chris@16 30 namespace boost {
Chris@16 31 namespace archive {
Chris@16 32
Chris@16 33 /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
Chris@16 34 // implemenations of functions specific to char archives
Chris@16 35
Chris@16 36 // wide char stuff used by char archives
Chris@16 37 #ifndef BOOST_NO_CWCHAR
Chris@16 38 // copy chars to output escaping to xml and translating wide chars to mb chars
Chris@16 39 template<class InputIterator>
Chris@16 40 void save_iterator(std::ostream &os, InputIterator begin, InputIterator end){
Chris@16 41 typedef boost::archive::iterators::mb_from_wchar<
Chris@16 42 boost::archive::iterators::xml_escape<InputIterator>
Chris@16 43 > translator;
Chris@16 44 std::copy(
Chris@16 45 translator(BOOST_MAKE_PFTO_WRAPPER(begin)),
Chris@16 46 translator(BOOST_MAKE_PFTO_WRAPPER(end)),
Chris@16 47 boost::archive::iterators::ostream_iterator<char>(os)
Chris@16 48 );
Chris@16 49 }
Chris@16 50
Chris@16 51 #ifndef BOOST_NO_STD_WSTRING
Chris@16 52 template<class Archive>
Chris@16 53 BOOST_ARCHIVE_DECL(void)
Chris@16 54 xml_oarchive_impl<Archive>::save(const std::wstring & ws){
Chris@16 55 // at least one library doesn't typedef value_type for strings
Chris@16 56 // so rather than using string directly make a pointer iterator out of it
Chris@16 57 // save_iterator(os, ws.data(), ws.data() + std::wcslen(ws.data()));
Chris@16 58 save_iterator(os, ws.data(), ws.data() + ws.size());
Chris@16 59 }
Chris@16 60 #endif
Chris@16 61
Chris@16 62 #ifndef BOOST_NO_INTRINSIC_WCHAR_T
Chris@16 63 template<class Archive>
Chris@16 64 BOOST_ARCHIVE_DECL(void)
Chris@16 65 xml_oarchive_impl<Archive>::save(const wchar_t * ws){
Chris@16 66 save_iterator(os, ws, ws + std::wcslen(ws));
Chris@16 67 }
Chris@16 68 #endif
Chris@16 69
Chris@16 70 #endif // BOOST_NO_CWCHAR
Chris@16 71
Chris@16 72 template<class Archive>
Chris@16 73 BOOST_ARCHIVE_DECL(void)
Chris@16 74 xml_oarchive_impl<Archive>::save(const std::string & s){
Chris@16 75 // at least one library doesn't typedef value_type for strings
Chris@16 76 // so rather than using string directly make a pointer iterator out of it
Chris@16 77 typedef boost::archive::iterators::xml_escape<
Chris@16 78 const char *
Chris@16 79 > xml_escape_translator;
Chris@16 80 std::copy(
Chris@16 81 xml_escape_translator(BOOST_MAKE_PFTO_WRAPPER(s.data())),
Chris@16 82 xml_escape_translator(BOOST_MAKE_PFTO_WRAPPER(s.data()+ s.size())),
Chris@16 83 boost::archive::iterators::ostream_iterator<char>(os)
Chris@16 84 );
Chris@16 85 }
Chris@16 86
Chris@16 87 template<class Archive>
Chris@16 88 BOOST_ARCHIVE_DECL(void)
Chris@16 89 xml_oarchive_impl<Archive>::save(const char * s){
Chris@16 90 typedef boost::archive::iterators::xml_escape<
Chris@16 91 const char *
Chris@16 92 > xml_escape_translator;
Chris@16 93 std::copy(
Chris@16 94 xml_escape_translator(BOOST_MAKE_PFTO_WRAPPER(s)),
Chris@16 95 xml_escape_translator(BOOST_MAKE_PFTO_WRAPPER(s + std::strlen(s))),
Chris@16 96 boost::archive::iterators::ostream_iterator<char>(os)
Chris@16 97 );
Chris@16 98 }
Chris@16 99
Chris@16 100 template<class Archive>
Chris@16 101 BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
Chris@16 102 xml_oarchive_impl<Archive>::xml_oarchive_impl(
Chris@16 103 std::ostream & os_,
Chris@16 104 unsigned int flags
Chris@16 105 ) :
Chris@16 106 basic_text_oprimitive<std::ostream>(
Chris@16 107 os_,
Chris@16 108 0 != (flags & no_codecvt)
Chris@16 109 ),
Chris@16 110 basic_xml_oarchive<Archive>(flags)
Chris@16 111 {
Chris@16 112 if(0 == (flags & no_header))
Chris@16 113 this->init();
Chris@16 114 }
Chris@16 115
Chris@16 116 } // namespace archive
Chris@16 117 } // namespace boost