diff options
Diffstat (limited to 'boost/archive/impl')
-rw-r--r-- | boost/archive/impl/basic_binary_iarchive.ipp | 5 | ||||
-rw-r--r-- | boost/archive/impl/basic_binary_iprimitive.ipp | 12 | ||||
-rw-r--r-- | boost/archive/impl/basic_binary_oprimitive.ipp | 11 | ||||
-rw-r--r-- | boost/archive/impl/basic_text_iprimitive.ipp | 7 | ||||
-rw-r--r-- | boost/archive/impl/basic_text_oprimitive.ipp | 7 | ||||
-rw-r--r-- | boost/archive/impl/basic_xml_oarchive.ipp | 2 | ||||
-rw-r--r-- | boost/archive/impl/xml_iarchive_impl.ipp | 17 | ||||
-rw-r--r-- | boost/archive/impl/xml_wiarchive_impl.ipp | 37 | ||||
-rw-r--r-- | boost/archive/impl/xml_woarchive_impl.ipp | 42 |
9 files changed, 48 insertions, 92 deletions
diff --git a/boost/archive/impl/basic_binary_iarchive.ipp b/boost/archive/impl/basic_binary_iarchive.ipp index b8e7f454c5..5067b09819 100644 --- a/boost/archive/impl/basic_binary_iarchive.ipp +++ b/boost/archive/impl/basic_binary_iarchive.ipp @@ -53,7 +53,7 @@ basic_binary_iarchive<Archive>::init(){ std::string file_signature; #if 0 // commented out since it interfers with derivation - try { + BOOST_TRY { std::size_t l; this->This()->load(l); if(l == std::strlen(BOOST_ARCHIVE_SIGNATURE())) { @@ -67,10 +67,11 @@ basic_binary_iarchive<Archive>::init(){ this->This()->load_binary(&(*file_signature.begin()), l); } } - catch(archive_exception const &) { // catch stream_error archive exceptions + BOOST_CATCH(archive_exception const &) { // catch stream_error archive exceptions // will cause invalid_signature archive exception to be thrown below file_signature = ""; } + BOOST_CATCH_END #else // https://svn.boost.org/trac/boost/ticket/7301 * this->This() >> file_signature; diff --git a/boost/archive/impl/basic_binary_iprimitive.ipp b/boost/archive/impl/basic_binary_iprimitive.ipp index 9e2340eb2d..e22c3bd66b 100644 --- a/boost/archive/impl/basic_binary_iprimitive.ipp +++ b/boost/archive/impl/basic_binary_iprimitive.ipp @@ -23,8 +23,8 @@ namespace std{ #include <boost/detail/workaround.hpp> // fixup for RogueWave #include <boost/serialization/throw_exception.hpp> -#include <boost/scoped_ptr.hpp> +#include <boost/core/no_exceptions_support.hpp> #include <boost/archive/archive_exception.hpp> #include <boost/archive/codecvt_null.hpp> #include <boost/archive/add_facet.hpp> @@ -152,17 +152,16 @@ basic_binary_iprimitive<Archive, Elem, Tr>::basic_binary_iprimitive( ) : #ifndef BOOST_NO_STD_LOCALE m_sb(sb), - archive_locale(NULL), locale_saver(m_sb) { if(! no_codecvt){ archive_locale.reset( - boost::archive::add_facet( + add_facet( std::locale::classic(), new codecvt_null<Elem> ) ); - m_sb.pubimbue(* archive_locale); + //m_sb.pubimbue(* archive_locale); } } #else @@ -199,11 +198,12 @@ BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_binary_iprimitive<Archive, Elem, Tr>::~basic_binary_iprimitive(){ // push back unread characters //destructor can't throw ! - try{ + BOOST_TRY{ static_cast<detail::input_streambuf_access<Elem, Tr> &>(m_sb).sync(); } - catch(...){ + BOOST_CATCH(...){ } + BOOST_CATCH_END } } // namespace archive diff --git a/boost/archive/impl/basic_binary_oprimitive.ipp b/boost/archive/impl/basic_binary_oprimitive.ipp index 509decb4e6..238617d5ed 100644 --- a/boost/archive/impl/basic_binary_oprimitive.ipp +++ b/boost/archive/impl/basic_binary_oprimitive.ipp @@ -32,6 +32,7 @@ namespace std{ using ::wcslen; } #include <boost/archive/add_facet.hpp> #include <boost/archive/codecvt_null.hpp> #include <boost/archive/basic_binary_oprimitive.hpp> +#include <boost/core/no_exceptions_support.hpp> namespace boost { namespace archive { @@ -103,17 +104,16 @@ basic_binary_oprimitive<Archive, Elem, Tr>::basic_binary_oprimitive( ) : #ifndef BOOST_NO_STD_LOCALE m_sb(sb), - archive_locale(NULL), locale_saver(m_sb) { if(! no_codecvt){ archive_locale.reset( add_facet( - std::locale::classic(), + std::locale::classic(), new codecvt_null<Elem> ) ); - m_sb.pubimbue(* archive_locale); + //m_sb.pubimbue(* archive_locale); } } #else @@ -150,11 +150,12 @@ BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_binary_oprimitive<Archive, Elem, Tr>::~basic_binary_oprimitive(){ // flush buffer //destructor can't throw - try{ + BOOST_TRY{ static_cast<detail::output_streambuf_access<Elem, Tr> &>(m_sb).sync(); } - catch(...){ + BOOST_CATCH(...){ } + BOOST_CATCH_END } } // namespace archive diff --git a/boost/archive/impl/basic_text_iprimitive.ipp b/boost/archive/impl/basic_text_iprimitive.ipp index ee52edec5a..9b66789698 100644 --- a/boost/archive/impl/basic_text_iprimitive.ipp +++ b/boost/archive/impl/basic_text_iprimitive.ipp @@ -121,17 +121,16 @@ basic_text_iprimitive<IStream>::basic_text_iprimitive( is(is_), flags_saver(is_), precision_saver(is_), - archive_locale(NULL), locale_saver(* is_.rdbuf()) { if(! no_codecvt){ archive_locale.reset( add_facet( - std::locale::classic(), - new codecvt_null<typename IStream::char_type> + std::locale::classic(), + new boost::archive::codecvt_null<typename IStream::char_type> ) ); - is.imbue(* archive_locale); + //is.imbue(* archive_locale); } is >> std::noboolalpha; } diff --git a/boost/archive/impl/basic_text_oprimitive.ipp b/boost/archive/impl/basic_text_oprimitive.ipp index 33ab4a8b65..10e2133840 100644 --- a/boost/archive/impl/basic_text_oprimitive.ipp +++ b/boost/archive/impl/basic_text_oprimitive.ipp @@ -84,17 +84,16 @@ basic_text_oprimitive<OStream>::basic_text_oprimitive( os(os_), flags_saver(os_), precision_saver(os_), - archive_locale(NULL), locale_saver(* os_.rdbuf()) { if(! no_codecvt){ archive_locale.reset( add_facet( - std::locale::classic(), - new codecvt_null<typename OStream::char_type> + std::locale::classic(), + new boost::archive::codecvt_null<typename OStream::char_type> ) ); - os.imbue(* archive_locale); + //os.imbue(* archive_locale); } os << std::noboolalpha; } diff --git a/boost/archive/impl/basic_xml_oarchive.ipp b/boost/archive/impl/basic_xml_oarchive.ipp index e2cc8d4d5e..0c57a12c90 100644 --- a/boost/archive/impl/basic_xml_oarchive.ipp +++ b/boost/archive/impl/basic_xml_oarchive.ipp @@ -20,7 +20,7 @@ namespace std{ #include <boost/archive/basic_xml_archive.hpp> #include <boost/archive/basic_xml_oarchive.hpp> #include <boost/archive/xml_archive_exception.hpp> -#include <boost/detail/no_exceptions_support.hpp> +#include <boost/core/no_exceptions_support.hpp> namespace boost { namespace archive { diff --git a/boost/archive/impl/xml_iarchive_impl.ipp b/boost/archive/impl/xml_iarchive_impl.ipp index dc62eed331..89e09818d8 100644 --- a/boost/archive/impl/xml_iarchive_impl.ipp +++ b/boost/archive/impl/xml_iarchive_impl.ipp @@ -31,7 +31,7 @@ namespace std{ #include <boost/archive/dinkumware.hpp> #endif -#include <boost/detail/no_exceptions_support.hpp> +#include <boost/core/no_exceptions_support.hpp> #include <boost/archive/xml_archive_exception.hpp> #include <boost/archive/iterators/dataflow_exception.hpp> @@ -174,18 +174,8 @@ xml_iarchive_impl<Archive>::xml_iarchive_impl( basic_xml_iarchive<Archive>(flags), gimpl(new xml_grammar()) { - if(0 == (flags & no_header)){ - BOOST_TRY{ - init(); - } - BOOST_CATCH(...){ - delete gimpl; - #ifndef BOOST_NO_EXCEPTIONS - throw; // re-throw - #endif - } - BOOST_CATCH_END - } + if(0 == (flags & no_header)) + init(); } template<class Archive> @@ -198,7 +188,6 @@ xml_iarchive_impl<Archive>::~xml_iarchive_impl(){ BOOST_CATCH(...){} BOOST_CATCH_END } - delete gimpl; } } // namespace archive } // namespace boost diff --git a/boost/archive/impl/xml_wiarchive_impl.ipp b/boost/archive/impl/xml_wiarchive_impl.ipp index a4665ad4ce..257b57590d 100644 --- a/boost/archive/impl/xml_wiarchive_impl.ipp +++ b/boost/archive/impl/xml_wiarchive_impl.ipp @@ -27,26 +27,18 @@ namespace std{ #endif #include <boost/io/ios_state.hpp> -#include <boost/detail/no_exceptions_support.hpp> +#include <boost/core/no_exceptions_support.hpp> #include <boost/serialization/pfto.hpp> - #include <boost/serialization/string.hpp> + +#include <boost/archive/basic_xml_archive.hpp> +#include <boost/archive/xml_wiarchive.hpp> + #include <boost/archive/add_facet.hpp> -#ifndef BOOST_NO_CXX11_HDR_CODECVT - #include <codecvt> - namespace boost { namespace archive { namespace detail { - typedef std::codecvt_utf8<wchar_t> utf8_codecvt_facet; - } } } -#else - #include <boost/archive/detail/utf8_codecvt_facet.hpp> -#endif #include <boost/archive/xml_archive_exception.hpp> #include <boost/archive/iterators/mb_from_wchar.hpp> -#include <boost/archive/basic_xml_archive.hpp> -#include <boost/archive/xml_wiarchive.hpp> - #include "basic_xml_grammar.hpp" namespace boost { @@ -170,26 +162,18 @@ xml_wiarchive_impl<Archive>::xml_wiarchive_impl( gimpl(new xml_wgrammar()) { if(0 == (flags & no_codecvt)){ + // note usage of argument "1" so that the locale isn't + // automatically delete the facet archive_locale.reset( add_facet( is_.getloc(), new boost::archive::detail::utf8_codecvt_facet ) ); - is.imbue(* archive_locale); - } - if(0 == (flags & no_header)){ - BOOST_TRY{ - this->init(); - } - BOOST_CATCH(...){ - delete gimpl; - #ifndef BOOST_NO_EXCEPTIONS - throw; // re-throw - #endif - } - BOOST_CATCH_END + //is.imbue(* archive_locale); } + if(0 == (flags & no_header)) + init(); } template<class Archive> @@ -202,7 +186,6 @@ xml_wiarchive_impl<Archive>::~xml_wiarchive_impl(){ BOOST_CATCH(...){} BOOST_CATCH_END } - delete gimpl; } } // namespace archive diff --git a/boost/archive/impl/xml_woarchive_impl.ipp b/boost/archive/impl/xml_woarchive_impl.ipp index 6092a91524..1e5139bc40 100644 --- a/boost/archive/impl/xml_woarchive_impl.ipp +++ b/boost/archive/impl/xml_woarchive_impl.ipp @@ -29,8 +29,8 @@ namespace std{ } // namespace std #endif +#include <boost/archive/xml_woarchive.hpp> #include <boost/serialization/throw_exception.hpp> -#include <boost/serialization/pfto.hpp> #include <boost/archive/iterators/xml_escape.hpp> #include <boost/archive/iterators/wchar_from_mb.hpp> @@ -38,14 +38,6 @@ namespace std{ #include <boost/archive/iterators/dataflow_exception.hpp> #include <boost/archive/add_facet.hpp> -#ifndef BOOST_NO_CXX11_HDR_CODECVT - #include <codecvt> - namespace boost { namespace archive { namespace detail { - typedef std::codecvt_utf8<wchar_t> utf8_codecvt_facet; - } } } -#else - #include <boost/archive/detail/utf8_codecvt_facet.hpp> -#endif namespace boost { namespace archive { @@ -136,31 +128,23 @@ xml_woarchive_impl<Archive>::xml_woarchive_impl( // transforms (such as one to many transforms from getting // mixed up. if(0 == (flags & no_codecvt)){ - boost::archive::detail::utf8_codecvt_facet *pfacet; - #if defined(__SGI_STL_PORT) - // Unfortunately, STLPort doesn't respect b) above - // so the restoration of the original archive locale done by - // the locale_saver doesn't get processed, - // before the current one is destroyed. - // so the codecvt doesn't get replaced with the orginal - // so closing the stream invokes codecvt::do_unshift - // so it crashes because the corresponding locale that contained - // the codecvt isn't around any more. - // we can hack around this by using a static codecvt that never - // gets destroyed. - static boost::archive::detail::utf8_codecvt_facet - facet(static_cast<size_t>(1)); - pfacet = & facet; - #else - pfacet = new boost::archive::detail::utf8_codecvt_facet; - #endif - archive_locale.reset(add_facet(os_.getloc(), pfacet)); - os.imbue(* archive_locale); + archive_locale.reset( + add_facet( + os_.getloc(), + new boost::archive::detail::utf8_codecvt_facet + ) + ); + //os.imbue(* archive_locale); } if(0 == (flags & no_header)) this->init(); } +template<class Archive> +BOOST_WARCHIVE_DECL(BOOST_PP_EMPTY()) +xml_woarchive_impl<Archive>::~xml_woarchive_impl(){ +} + } // namespace archive } // namespace boost |