Chris@16: /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 Chris@16: // text_oarchive_impl.ipp: Chris@16: Chris@16: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . Chris@16: // Distributed under the Boost Software License, Version 1.0. (See Chris@16: // accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: // See http://www.boost.org for updates, documentation, and revision history. Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include // size_t Chris@16: Chris@16: #include Chris@16: #if defined(BOOST_NO_STDC_NAMESPACE) Chris@16: namespace std{ Chris@16: using ::size_t; Chris@16: } // namespace std Chris@16: #endif Chris@16: Chris@16: #ifndef BOOST_NO_CWCHAR Chris@16: #include Chris@16: #ifdef BOOST_NO_STDC_NAMESPACE Chris@16: namespace std{ using ::wcslen; } Chris@16: #endif Chris@16: #endif Chris@16: Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { Chris@16: namespace archive { Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////// Chris@16: // implementation of basic_text_oprimitive overrides for the combination Chris@16: // of template parameters used to create a text_oprimitive Chris@16: Chris@16: template Chris@16: BOOST_ARCHIVE_DECL(void) Chris@16: text_oarchive_impl::save(const char * s) Chris@16: { Chris@16: const std::size_t len = std::ostream::traits_type::length(s); Chris@16: *this->This() << len; Chris@16: this->This()->newtoken(); Chris@16: os << s; Chris@16: } Chris@16: Chris@16: template Chris@16: BOOST_ARCHIVE_DECL(void) Chris@16: text_oarchive_impl::save(const std::string &s) Chris@16: { Chris@16: const std::size_t size = s.size(); Chris@16: *this->This() << size; Chris@16: this->This()->newtoken(); Chris@16: os << s; Chris@16: } Chris@16: Chris@16: #ifndef BOOST_NO_CWCHAR Chris@16: #ifndef BOOST_NO_INTRINSIC_WCHAR_T Chris@16: template Chris@16: BOOST_ARCHIVE_DECL(void) Chris@16: text_oarchive_impl::save(const wchar_t * ws) Chris@16: { Chris@16: const std::size_t l = std::wcslen(ws); Chris@16: * this->This() << l; Chris@16: this->This()->newtoken(); Chris@16: os.write((const char *)ws, l * sizeof(wchar_t)/sizeof(char)); Chris@16: } Chris@16: #endif Chris@16: Chris@16: #ifndef BOOST_NO_STD_WSTRING Chris@16: template Chris@16: BOOST_ARCHIVE_DECL(void) Chris@16: text_oarchive_impl::save(const std::wstring &ws) Chris@16: { Chris@16: const std::size_t l = ws.size(); Chris@16: * this->This() << l; Chris@16: this->This()->newtoken(); Chris@16: os.write((const char *)(ws.data()), l * sizeof(wchar_t)/sizeof(char)); Chris@16: } Chris@16: #endif Chris@16: #endif // BOOST_NO_CWCHAR Chris@16: Chris@16: template Chris@16: BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) Chris@16: text_oarchive_impl::text_oarchive_impl( Chris@16: std::ostream & os, Chris@16: unsigned int flags Chris@16: ) : Chris@16: basic_text_oprimitive( Chris@16: os, Chris@16: 0 != (flags & no_codecvt) Chris@16: ), Chris@16: basic_text_oarchive(flags) Chris@16: { Chris@16: if(0 == (flags & no_header)) Chris@16: #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205)) Chris@16: this->init(); Chris@16: #else Chris@16: this->basic_text_oarchive::init(); Chris@16: #endif Chris@16: } Chris@16: Chris@16: template Chris@16: BOOST_ARCHIVE_DECL(void) Chris@16: text_oarchive_impl::save_binary(const void *address, std::size_t count){ Chris@16: put('\n'); Chris@16: this->end_preamble(); Chris@16: #if ! defined(__MWERKS__) Chris@16: this->basic_text_oprimitive::save_binary( Chris@16: #else Chris@16: this->basic_text_oprimitive::save_binary( Chris@16: #endif Chris@16: address, Chris@16: count Chris@16: ); Chris@16: this->delimiter = this->eol; Chris@16: } Chris@16: Chris@16: } // namespace archive Chris@16: } // namespace boost Chris@16: