summaryrefslogtreecommitdiff
path: root/boost/archive/impl
diff options
context:
space:
mode:
Diffstat (limited to 'boost/archive/impl')
-rw-r--r--boost/archive/impl/basic_binary_iarchive.ipp5
-rw-r--r--boost/archive/impl/basic_binary_iprimitive.ipp12
-rw-r--r--boost/archive/impl/basic_binary_oprimitive.ipp11
-rw-r--r--boost/archive/impl/basic_text_iprimitive.ipp7
-rw-r--r--boost/archive/impl/basic_text_oprimitive.ipp7
-rw-r--r--boost/archive/impl/basic_xml_oarchive.ipp2
-rw-r--r--boost/archive/impl/xml_iarchive_impl.ipp17
-rw-r--r--boost/archive/impl/xml_wiarchive_impl.ipp37
-rw-r--r--boost/archive/impl/xml_woarchive_impl.ipp42
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