williamr@2: #ifndef BOOST_ARCHIVE_XML_OARCHIVE_HPP williamr@2: #define BOOST_ARCHIVE_XML_OARCHIVE_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: // xml_oarchive.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 // size_t williamr@2: #include williamr@2: #if defined(BOOST_NO_STDC_NAMESPACE) williamr@2: namespace std{ williamr@2: using ::size_t; williamr@2: } // namespace std williamr@2: #endif 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 xml_oarchive_impl : williamr@2: public basic_text_oprimitive, williamr@2: public basic_xml_oarchive williamr@2: { williamr@2: #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS williamr@2: public: williamr@2: #else williamr@2: friend class detail::interface_oarchive; williamr@2: friend class basic_xml_oarchive; williamr@2: friend class save_access; williamr@2: protected: williamr@2: #endif williamr@2: void end_preamble(){ williamr@2: basic_xml_oarchive::end_preamble(); williamr@2: } williamr@2: template williamr@2: void save(const T & t){ williamr@2: basic_text_oprimitive::save(t); williamr@2: } williamr@2: BOOST_ARCHIVE_DECL(void) williamr@2: save(const char * t); williamr@2: #ifndef BOOST_NO_INTRINSIC_WCHAR_T williamr@2: BOOST_ARCHIVE_DECL(void) williamr@2: save(const wchar_t * t); williamr@2: #endif williamr@2: BOOST_ARCHIVE_DECL(void) williamr@2: save(const std::string &s); williamr@2: #ifndef BOOST_NO_STD_WSTRING williamr@2: BOOST_ARCHIVE_DECL(void) williamr@2: save(const std::wstring &ws); williamr@2: #endif williamr@2: BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) williamr@2: xml_oarchive_impl(std::ostream & os, unsigned int flags); williamr@2: ~xml_oarchive_impl(){} williamr@2: public: williamr@2: void save_binary(const void *address, std::size_t count){ williamr@2: this->end_preamble(); williamr@2: #if ! defined(__MWERKS__) williamr@2: this->basic_text_oprimitive::save_binary( williamr@2: #else williamr@2: this->basic_text_oprimitive::save_binary( williamr@2: #endif williamr@2: address, williamr@2: count williamr@2: ); williamr@2: this->indent_next = true; williamr@2: } williamr@2: }; williamr@2: williamr@2: // we use the following because we can't use williamr@2: // typedef xml_oarchive_impl > xml_oarchive; williamr@2: williamr@2: // do not derive from this class. If you want to extend this functionality williamr@2: // via inhertance, derived from xml_oarchive_impl instead. This will williamr@2: // preserve correct static polymorphism. williamr@2: class xml_oarchive : williamr@2: public xml_oarchive_impl williamr@2: { williamr@2: public: williamr@2: xml_oarchive(std::ostream & os, unsigned int flags = 0) : williamr@2: xml_oarchive_impl(os, flags) williamr@2: {} williamr@2: ~xml_oarchive(){} 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::xml_oarchive) williamr@2: williamr@2: #include // pops abi_suffix.hpp pragmas williamr@2: williamr@2: #endif // BOOST_ARCHIVE_XML_OARCHIVE_HPP