Chris@16: /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 Chris@16: // text_iarchive_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: ////////////////////////////////////////////////////////////////////// Chris@16: // implementation of basic_text_iprimitive overrides for the combination Chris@16: // of template parameters used to implement a text_iprimitive Chris@16: Chris@16: #include // size_t, NULL 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: #include // RogueWave Chris@16: Chris@16: #include Chris@16: Chris@16: namespace boost { Chris@16: namespace archive { Chris@16: Chris@16: template Chris@16: BOOST_ARCHIVE_DECL(void) Chris@16: text_iarchive_impl::load(char *s) Chris@16: { Chris@16: std::size_t size; Chris@16: * this->This() >> size; Chris@16: // skip separating space Chris@16: is.get(); Chris@16: // Works on all tested platforms Chris@16: is.read(s, size); Chris@16: s[size] = '\0'; Chris@16: } Chris@16: Chris@16: template Chris@16: BOOST_ARCHIVE_DECL(void) Chris@16: text_iarchive_impl::load(std::string &s) Chris@16: { Chris@16: std::size_t size; Chris@16: * this->This() >> size; Chris@16: // skip separating space Chris@16: is.get(); Chris@16: // borland de-allocator fixup Chris@16: #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101)) Chris@16: if(NULL != s.data()) Chris@16: #endif Chris@16: s.resize(size); Chris@16: if(0 < size) Chris@16: is.read(&(*s.begin()), size); 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_iarchive_impl::load(wchar_t *ws) Chris@16: { Chris@16: std::size_t size; Chris@16: * this->This() >> size; Chris@16: // skip separating space Chris@16: is.get(); Chris@16: is.read((char *)ws, size * sizeof(wchar_t)/sizeof(char)); Chris@16: ws[size] = L'\0'; Chris@16: } Chris@16: #endif // BOOST_NO_INTRINSIC_WCHAR_T Chris@16: Chris@16: #ifndef BOOST_NO_STD_WSTRING Chris@16: template Chris@16: BOOST_ARCHIVE_DECL(void) Chris@16: text_iarchive_impl::load(std::wstring &ws) Chris@16: { Chris@16: std::size_t size; Chris@16: * this->This() >> size; Chris@16: // borland de-allocator fixup Chris@16: #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101)) Chris@16: if(NULL != ws.data()) Chris@16: #endif Chris@16: ws.resize(size); Chris@16: // skip separating space Chris@16: is.get(); Chris@16: is.read((char *)ws.data(), size * sizeof(wchar_t)/sizeof(char)); Chris@16: } Chris@16: Chris@16: #endif // BOOST_NO_STD_WSTRING Chris@16: #endif // BOOST_NO_CWCHAR Chris@16: Chris@16: template Chris@16: BOOST_ARCHIVE_DECL(void) Chris@16: text_iarchive_impl::load_override(class_name_type & t, int){ Chris@16: basic_text_iarchive::load_override(t, 0); Chris@16: } Chris@16: Chris@16: template Chris@16: BOOST_ARCHIVE_DECL(void) Chris@16: text_iarchive_impl::init(){ Chris@16: basic_text_iarchive::init(); Chris@16: } Chris@16: Chris@16: template Chris@16: BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) Chris@16: text_iarchive_impl::text_iarchive_impl( Chris@16: std::istream & is, Chris@16: unsigned int flags Chris@16: ) : Chris@16: basic_text_iprimitive( Chris@16: is, Chris@16: 0 != (flags & no_codecvt) Chris@16: ), Chris@16: basic_text_iarchive(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_iarchive::init(); Chris@16: #endif Chris@16: } Chris@16: Chris@16: } // namespace archive Chris@16: } // namespace boost