williamr@2: #ifndef BOOST_ARCHIVE_TEXT_IARCHIVE_HPP williamr@2: #define BOOST_ARCHIVE_TEXT_IARCHIVE_HPP williamr@2: williamr@2: // MS compatible compilers support #pragma once williamr@2: #if defined(_MSC_VER) && (_MSC_VER >= 1020) williamr@2: # pragma once williamr@2: #endif williamr@2: williamr@2: /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 williamr@2: // text_iarchive.hpp williamr@2: williamr@2: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . williamr@2: // Use, modification and distribution is subject to the Boost Software williamr@2: // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at williamr@2: // http://www.boost.org/LICENSE_1_0.txt) williamr@2: williamr@2: // See http://www.boost.org for updates, documentation, and revision history. williamr@2: williamr@2: #include williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: #include // must be the last header williamr@2: williamr@2: namespace boost { williamr@2: namespace archive { williamr@2: williamr@2: template williamr@2: class text_iarchive_impl : williamr@2: public basic_text_iprimitive, williamr@2: public basic_text_iarchive williamr@2: { williamr@2: #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS williamr@2: public: williamr@2: #else williamr@2: friend class detail::interface_iarchive; williamr@2: friend class basic_text_iarchive; williamr@2: friend class load_access; williamr@2: protected: williamr@2: #endif williamr@2: template williamr@2: void load(T & t){ williamr@2: basic_text_iprimitive::load(t); williamr@2: } williamr@2: BOOST_ARCHIVE_DECL(void) williamr@2: load(char * t); williamr@2: #ifndef BOOST_NO_INTRINSIC_WCHAR_T williamr@2: BOOST_ARCHIVE_DECL(void) williamr@2: load(wchar_t * t); williamr@2: #endif williamr@2: BOOST_ARCHIVE_DECL(void) williamr@2: load(std::string &s); williamr@2: #ifndef BOOST_NO_STD_WSTRING williamr@2: BOOST_ARCHIVE_DECL(void) williamr@2: load(std::wstring &ws); williamr@2: #endif williamr@2: // note: the following should not needed - but one compiler (vc 7.1) williamr@2: // fails to compile one test (test_shared_ptr) without it !!! williamr@2: // make this protected so it can be called from a derived archive williamr@2: template williamr@2: void load_override(T & t, BOOST_PFTO int){ williamr@2: basic_text_iarchive::load_override(t, 0); williamr@2: } williamr@2: BOOST_ARCHIVE_DECL(void) williamr@2: load_override(class_name_type & t, int); williamr@2: BOOST_ARCHIVE_DECL(void) williamr@2: init(); williamr@2: BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) williamr@2: text_iarchive_impl(std::istream & is, unsigned int flags); williamr@2: BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) williamr@2: ~text_iarchive_impl(){}; williamr@2: }; williamr@2: williamr@2: // do not derive from this class. If you want to extend this functionality williamr@2: // via inhertance, derived from text_iarchive_impl instead. This will williamr@2: // preserve correct static polymorphism. williamr@2: class text_iarchive : williamr@2: public text_iarchive_impl williamr@2: { williamr@2: public: williamr@2: williamr@2: text_iarchive(std::istream & is, unsigned int flags = 0) : williamr@2: text_iarchive_impl(is, flags) williamr@2: {} williamr@2: ~text_iarchive(){} williamr@2: }; williamr@2: williamr@2: } // namespace archive williamr@2: } // namespace boost williamr@2: williamr@2: // required by smart_cast for compilers not implementing williamr@2: // partial template specialization williamr@2: BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(boost::archive::text_iarchive) williamr@2: williamr@2: #include // pops abi_suffix.hpp pragmas williamr@2: williamr@2: #endif // BOOST_ARCHIVE_TEXT_IARCHIVE_HPP