diff options
Diffstat (limited to '3rdParty/Boost/src/boost/archive')
85 files changed, 869 insertions, 959 deletions
diff --git a/3rdParty/Boost/src/boost/archive/add_facet.hpp b/3rdParty/Boost/src/boost/archive/add_facet.hpp index 6bafe9b..242bdd9 100644 --- a/3rdParty/Boost/src/boost/archive/add_facet.hpp +++ b/3rdParty/Boost/src/boost/archive/add_facet.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_ADD_FACET_HPP #define BOOST_ARCHIVE_ADD_FACET_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // add_facet.hpp diff --git a/3rdParty/Boost/src/boost/archive/archive_exception.hpp b/3rdParty/Boost/src/boost/archive/archive_exception.hpp index b5f33f6..ffb430c 100644 --- a/3rdParty/Boost/src/boost/archive/archive_exception.hpp +++ b/3rdParty/Boost/src/boost/archive/archive_exception.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP #define BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // archive/archive_exception.hpp: @@ -40,55 +40,57 @@ namespace archive { ////////////////////////////////////////////////////////////////////// // exceptions thrown by archives // class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) archive_exception : public virtual std::exception { +protected: + char m_buffer[128]; public: typedef enum { no_exception, // initialized without code other_exception, // any excepton not listed below - unregistered_class, // attempt to serialize a pointer of an + unregistered_class, // attempt to serialize a pointer of // an unregistered class invalid_signature, // first line of archive does not contain // expected string unsupported_version,// archive created with library version // subsequent to this one pointer_conflict, // an attempt has been made to directly // serialize an object which has - // already been serialzed through a pointer. - // Were this permited, the archive load would result + // already been serialized through a pointer. + // Were this permitted, the archive load would result // in the creation of an extra copy of the obect. incompatible_native_format, // attempt to read native binary format // on incompatible platform array_size_too_short,// array being loaded doesn't fit in array allocated input_stream_error, // error on input stream invalid_class_name, // class name greater than the maximum permitted. // most likely a corrupted archive or an attempt // to insert virus via buffer overrun method. unregistered_cast, // base - derived relationship not registered with // void_cast_register unsupported_class_version, // type saved with a version # greater than the - // one used by the program. This indicates that the proggram + // one used by the program. This indicates that the program // needs to be rebuilt. multiple_code_instantiation, // code for implementing serialization for some // type has been instantiated in more than one module. output_stream_error // error on input stream } exception_code; -protected: - std::string m_msg; public: exception_code code; archive_exception( exception_code c, const char * e1 = NULL, const char * e2 = NULL ); - ~archive_exception() throw (); - virtual const char *what( ) const throw(); + virtual ~archive_exception() throw(); + virtual const char *what() const throw(); protected: + unsigned int + append(unsigned int l, const char * a); archive_exception(); }; }// namespace archive }// namespace boost diff --git a/3rdParty/Boost/src/boost/archive/basic_archive.hpp b/3rdParty/Boost/src/boost/archive/basic_archive.hpp index c5ac880..0412112 100644 --- a/3rdParty/Boost/src/boost/archive/basic_archive.hpp +++ b/3rdParty/Boost/src/boost/archive/basic_archive.hpp @@ -1,24 +1,24 @@ #ifndef BOOST_ARCHIVE_BASIC_ARCHIVE_HPP #define BOOST_ARCHIVE_BASIC_ARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_archive.hpp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. - +#include <cstring> // count #include <boost/assert.hpp> #include <boost/config.hpp> #include <boost/cstdint.hpp> // size_t #include <boost/noncopyable.hpp> #include <boost/integer_traits.hpp> @@ -218,12 +218,15 @@ struct class_name_type : operator const char * & () const { return const_cast<const char * &>(t); } operator char * () { return t; } + std::size_t size() const { + return std::strlen(t); + } explicit class_name_type(const char *key_) : t(const_cast<char *>(key_)){} explicit class_name_type(char *key_) : t(key_){} class_name_type & operator=(const class_name_type & rhs){ t = rhs.t; diff --git a/3rdParty/Boost/src/boost/archive/basic_binary_iarchive.hpp b/3rdParty/Boost/src/boost/archive/basic_binary_iarchive.hpp index d851dab..a649d5e 100644 --- a/3rdParty/Boost/src/boost/archive/basic_binary_iarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/basic_binary_iarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BASIC_BINARY_IARCHIVE_HPP #define BOOST_ARCHIVE_BASIC_BINARY_IARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_binary_iarchive.hpp // @@ -41,27 +41,33 @@ #include <boost/archive/detail/abi_prefix.hpp> // must be the last header namespace boost { namespace archive { +namespace detail { + template<class Archive> class interface_iarchive; +} // namespace detail + ///////////////////////////////////////////////////////////////////////// // class basic_binary_iarchive - read serialized objects from a input binary stream template<class Archive> class basic_binary_iarchive : public detail::common_iarchive<Archive> { -protected: -#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) +#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: -#elif defined(BOOST_MSVC) - // for some inexplicable reason insertion of "class" generates compile erro - // on msvc 7.1 - friend detail::interface_iarchive<Archive>; #else - friend class detail::interface_iarchive<Archive>; +protected: + #if BOOST_WORKAROUND(BOOST_MSVC, < 1500) + // for some inexplicable reason insertion of "class" generates compile erro + // on msvc 7.1 + friend detail::interface_iarchive<Archive>; + #else + friend class detail::interface_iarchive<Archive>; + #endif #endif // intermediate level to support override of operators // fot templates in the absence of partial function // template ordering. If we get here pass to base class // note extra nonsense to sneak it pass the borland compiers typedef detail::common_iarchive<Archive> detail_common_iarchive; diff --git a/3rdParty/Boost/src/boost/archive/basic_binary_iprimitive.hpp b/3rdParty/Boost/src/boost/archive/basic_binary_iprimitive.hpp index fc27123..2e72a1c 100644 --- a/3rdParty/Boost/src/boost/archive/basic_binary_iprimitive.hpp +++ b/3rdParty/Boost/src/boost/archive/basic_binary_iprimitive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BINARY_IPRIMITIVE_HPP #define BOOST_ARCHIVE_BINARY_IPRIMITIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif #if defined(_MSC_VER) #pragma warning( disable : 4800 ) #endif @@ -123,13 +123,13 @@ public: // typedef serialization::is_bitwise_serializable<mpl::_1> // use_array_optimization; struct use_array_optimization { template <class T> #if defined(BOOST_NO_DEPENDENT_NESTED_DERIVATIONS) struct apply { - typedef BOOST_DEDUCED_TYPENAME boost::serialization::is_bitwise_serializable< T >::type type; + typedef typename boost::serialization::is_bitwise_serializable< T >::type type; }; #else struct apply : public boost::serialization::is_bitwise_serializable< T > {}; #endif }; @@ -175,13 +175,13 @@ basic_binary_iprimitive<Archive, Elem, Tr>::load_binary( Elem t; scount = m_sb.sgetn(& t, 1); if(scount != 1) boost::serialization::throw_exception( archive_exception(archive_exception::input_stream_error) ); - std::memcpy(static_cast<char*>(address) + (count - s), &t, s); + std::memcpy(static_cast<char*>(address) + (count - s), &t, static_cast<std::size_t>(s)); } } } // namespace archive } // namespace boost diff --git a/3rdParty/Boost/src/boost/archive/basic_binary_oarchive.hpp b/3rdParty/Boost/src/boost/archive/basic_binary_oarchive.hpp index 01622b9..f8b53e9 100644 --- a/3rdParty/Boost/src/boost/archive/basic_binary_oarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/basic_binary_oarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BASIC_BINARY_OARCHIVE_HPP #define BOOST_ARCHIVE_BASIC_BINARY_OARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_binary_oarchive.hpp @@ -43,33 +43,39 @@ # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { +namespace detail { + template<class Archive> class interface_oarchive; +} // namespace detail + ////////////////////////////////////////////////////////////////////// // class basic_binary_oarchive - write serialized objects to a binary output stream // note: this archive has no pretensions to portability. Archive format // may vary across machine architectures and compilers. About the only // guarentee is that an archive created with this code will be readable // by a program built with the same tools for the same machne. This class // does have the virtue of buiding the smalles archive in the minimum amount // of time. So under some circumstances it may be he right choice. template<class Archive> class basic_binary_oarchive : public archive::detail::common_oarchive<Archive> { -protected: -#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) +#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: -#elif defined(BOOST_MSVC) - // for some inexplicable reason insertion of "class" generates compile erro - // on msvc 7.1 - friend detail::interface_oarchive<Archive>; #else - friend class detail::interface_oarchive<Archive>; +protected: + #if BOOST_WORKAROUND(BOOST_MSVC, < 1500) + // for some inexplicable reason insertion of "class" generates compile erro + // on msvc 7.1 + friend detail::interface_oarchive<Archive>; + #else + friend class detail::interface_oarchive<Archive>; + #endif #endif // any datatype not specifed below will be handled by base class typedef detail::common_oarchive<Archive> detail_common_oarchive; template<class T> void save_override(const T & t, BOOST_PFTO int version){ this->detail_common_oarchive::save_override(t, static_cast<int>(version)); diff --git a/3rdParty/Boost/src/boost/archive/basic_binary_oprimitive.hpp b/3rdParty/Boost/src/boost/archive/basic_binary_oprimitive.hpp index 53e44e4..ba070cd 100644 --- a/3rdParty/Boost/src/boost/archive/basic_binary_oprimitive.hpp +++ b/3rdParty/Boost/src/boost/archive/basic_binary_oprimitive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BASIC_BINARY_OPRIMITIVE_HPP #define BOOST_ARCHIVE_BASIC_BINARY_OPRIMITIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_binary_oprimitive.hpp @@ -55,14 +55,13 @@ namespace boost { namespace archive { ///////////////////////////////////////////////////////////////////////// // class basic_binary_oprimitive - binary output of prmitives template<class Archive, class Elem, class Tr> -class basic_binary_oprimitive -{ +class basic_binary_oprimitive { #ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS friend class save_access; protected: #else public: #endif @@ -119,13 +118,13 @@ public: // use_array_optimization; // workaround without using mpl lambdas struct use_array_optimization { template <class T> #if defined(BOOST_NO_DEPENDENT_NESTED_DERIVATIONS) struct apply { - typedef BOOST_DEDUCED_TYPENAME boost::serialization::is_bitwise_serializable< T >::type type; + typedef typename boost::serialization::is_bitwise_serializable< T >::type type; }; #else struct apply : public boost::serialization::is_bitwise_serializable< T > {}; #endif }; @@ -167,13 +166,13 @@ basic_binary_oprimitive<Archive, Elem, Tr>::save_binary( ); if(count != static_cast<std::size_t>(scount)) boost::serialization::throw_exception( archive_exception(archive_exception::output_stream_error) ); //os.write( - // static_cast<const BOOST_DEDUCED_TYPENAME OStream::char_type *>(address), + // static_cast<const typename OStream::char_type *>(address), // count //); //BOOST_ASSERT(os.good()); } } //namespace boost diff --git a/3rdParty/Boost/src/boost/archive/basic_streambuf_locale_saver.hpp b/3rdParty/Boost/src/boost/archive/basic_streambuf_locale_saver.hpp index ca764e1..6bf8f71 100644 --- a/3rdParty/Boost/src/boost/archive/basic_streambuf_locale_saver.hpp +++ b/3rdParty/Boost/src/boost/archive/basic_streambuf_locale_saver.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BASIC_STREAMBUF_LOCALE_SAVER_HPP #define BOOST_ARCHIVE_BASIC_STREAMBUF_LOCALE_SAVER_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_streambuf_local_saver.hpp @@ -47,13 +47,13 @@ class basic_streambuf_locale_saver : public: typedef ::std::basic_streambuf<Ch, Tr> state_type; typedef ::std::locale aspect_type; explicit basic_streambuf_locale_saver( state_type &s ) : s_save_( s ), a_save_( s.getloc() ) {} - basic_streambuf_locale_saver( state_type &s, aspect_type const &a ) + explicit basic_streambuf_locale_saver( state_type &s, aspect_type const &a ) : s_save_( s ), a_save_( s.pubimbue(a) ) {} ~basic_streambuf_locale_saver() { this->restore(); } void restore() { s_save_.pubimbue( a_save_ ); } diff --git a/3rdParty/Boost/src/boost/archive/basic_text_iarchive.hpp b/3rdParty/Boost/src/boost/archive/basic_text_iarchive.hpp index 729d51a..0e78ff6 100644 --- a/3rdParty/Boost/src/boost/archive/basic_text_iarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/basic_text_iarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BASIC_TEXT_IARCHIVE_HPP #define BOOST_ARCHIVE_BASIC_TEXT_IARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_text_iarchive.hpp @@ -37,27 +37,33 @@ # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { +namespace detail { + template<class Archive> class interface_iarchive; +} // namespace detail + ///////////////////////////////////////////////////////////////////////// // class basic_text_iarchive - read serialized objects from a input text stream template<class Archive> class basic_text_iarchive : public detail::common_iarchive<Archive> { -protected: -#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) +#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: -#elif defined(BOOST_MSVC) - // for some inexplicable reason insertion of "class" generates compile erro - // on msvc 7.1 - friend detail::interface_iarchive<Archive>; #else - friend class detail::interface_iarchive<Archive>; +protected: + #if BOOST_WORKAROUND(BOOST_MSVC, < 1500) + // for some inexplicable reason insertion of "class" generates compile erro + // on msvc 7.1 + friend detail::interface_iarchive<Archive>; + #else + friend class detail::interface_iarchive<Archive>; + #endif #endif // intermediate level to support override of operators // fot templates in the absence of partial function // template ordering typedef detail::common_iarchive<Archive> detail_common_iarchive; template<class T> diff --git a/3rdParty/Boost/src/boost/archive/basic_text_iprimitive.hpp b/3rdParty/Boost/src/boost/archive/basic_text_iprimitive.hpp index b927ec9..dabc3c8 100644 --- a/3rdParty/Boost/src/boost/archive/basic_text_iprimitive.hpp +++ b/3rdParty/Boost/src/boost/archive/basic_text_iprimitive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP #define BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_text_iprimitive.hpp @@ -61,38 +61,31 @@ namespace archive { #if defined(_MSC_VER) #pragma warning( push ) #pragma warning( disable : 4244 4267 ) #endif template<class IStream> -class basic_text_iprimitive -{ -#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS +class basic_text_iprimitive { protected: -#else -public: -#endif IStream &is; io::ios_flags_saver flags_saver; io::ios_precision_saver precision_saver; #ifndef BOOST_NO_STD_LOCALE boost::scoped_ptr<std::locale> archive_locale; basic_streambuf_locale_saver< - BOOST_DEDUCED_TYPENAME IStream::char_type, - BOOST_DEDUCED_TYPENAME IStream::traits_type + typename IStream::char_type, + typename IStream::traits_type > locale_saver; #endif template<class T> void load(T & t) { - if(! is.fail()){ - is >> t; + if(is >> t) return; - } boost::serialization::throw_exception( archive_exception(archive_exception::input_stream_error) ); } void load(char & t) diff --git a/3rdParty/Boost/src/boost/archive/basic_text_oarchive.hpp b/3rdParty/Boost/src/boost/archive/basic_text_oarchive.hpp index dd10f65..bed9cd3 100644 --- a/3rdParty/Boost/src/boost/archive/basic_text_oarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/basic_text_oarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BASIC_TEXT_OARCHIVE_HPP #define BOOST_ARCHIVE_BASIC_TEXT_OARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_text_oarchive.hpp @@ -39,29 +39,35 @@ # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { +namespace detail { + template<class Archive> class interface_oarchive; +} // namespace detail + ///////////////////////////////////////////////////////////////////////// // class basic_text_oarchive template<class Archive> class basic_text_oarchive : public detail::common_oarchive<Archive> { -protected: -#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \ -|| BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x560)) +#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: -#elif defined(BOOST_MSVC) - // for some inexplicable reason insertion of "class" generates compile erro - // on msvc 7.1 - friend detail::interface_oarchive<Archive>; #else - friend class detail::interface_oarchive<Archive>; +protected: + #if BOOST_WORKAROUND(BOOST_MSVC, < 1500) + // for some inexplicable reason insertion of "class" generates compile erro + // on msvc 7.1 + friend detail::interface_oarchive<Archive>; + #else + friend class detail::interface_oarchive<Archive>; + #endif #endif + enum { none, eol, space } delimiter; diff --git a/3rdParty/Boost/src/boost/archive/basic_text_oprimitive.hpp b/3rdParty/Boost/src/boost/archive/basic_text_oprimitive.hpp index 06885ad..73a0a62 100644 --- a/3rdParty/Boost/src/boost/archive/basic_text_oprimitive.hpp +++ b/3rdParty/Boost/src/boost/archive/basic_text_oprimitive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BASIC_TEXT_OPRIMITIVE_HPP #define BOOST_ARCHIVE_BASIC_TEXT_OPRIMITIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_text_oprimitive.hpp @@ -23,19 +23,20 @@ // is not a specialization of basic_ostream which in fact is not defined // in such cases. So we can't use basic_ostream<OStream::char_type> but rather // use two template parameters #include <iomanip> #include <locale> -#include <boost/config/no_tr1/cmath.hpp> // isnan #include <boost/assert.hpp> #include <cstddef> // size_t #include <boost/config.hpp> #include <boost/static_assert.hpp> #include <boost/detail/workaround.hpp> +#include <boost/io/ios_state.hpp> + #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) #include <boost/archive/dinkumware.hpp> #endif #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ @@ -43,12 +44,14 @@ namespace std{ #if ! defined(BOOST_DINKUMWARE_STDLIB) && ! defined(__SGI_STL_PORT) using ::locale; #endif } // namespace std #endif +#include <boost/type_traits/is_floating_point.hpp> +#include <boost/mpl/bool.hpp> #include <boost/limits.hpp> #include <boost/integer.hpp> #include <boost/io/ios_state.hpp> #include <boost/scoped_ptr.hpp> #include <boost/serialization/throw_exception.hpp> #include <boost/archive/archive_exception.hpp> @@ -62,39 +65,25 @@ class save_access; ///////////////////////////////////////////////////////////////////////// // class basic_text_oprimitive - output of prmitives to stream template<class OStream> class basic_text_oprimitive { -#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS protected: -#else -public: -#endif OStream &os; io::ios_flags_saver flags_saver; io::ios_precision_saver precision_saver; #ifndef BOOST_NO_STD_LOCALE boost::scoped_ptr<std::locale> archive_locale; basic_streambuf_locale_saver< - BOOST_DEDUCED_TYPENAME OStream::char_type, - BOOST_DEDUCED_TYPENAME OStream::traits_type + typename OStream::char_type, + typename OStream::traits_type > locale_saver; #endif - // default saving of primitives. - template<class T> - void save(const T &t){ - if(os.fail()) - boost::serialization::throw_exception( - archive_exception(archive_exception::output_stream_error) - ); - os << t; - } - ///////////////////////////////////////////////////////// // fundamental types that need special treatment void save(const bool t){ // trap usage of invalid uninitialized boolean which would // otherwise crash on load. BOOST_ASSERT(0 == static_cast<int>(t) || 1 == static_cast<int>(t)); @@ -120,39 +109,83 @@ public: void save(const wchar_t t) { BOOST_STATIC_ASSERT(sizeof(wchar_t) <= sizeof(int)); save(static_cast<int>(t)); } #endif - void save(const float t) - { - // must be a user mistake - can't serialize un-initialized data + + ///////////////////////////////////////////////////////// + // saving of any types not listed above + + template<class T> + void save_impl(const T &t, boost::mpl::bool_<false> &){ if(os.fail()) boost::serialization::throw_exception( archive_exception(archive_exception::output_stream_error) ); - os << std::setprecision(std::numeric_limits<float>::digits10 + 2); os << t; } - void save(const double t) - { + + ///////////////////////////////////////////////////////// + // floating point types need even more special treatment + // the following determines whether the type T is some sort + // of floating point type. Note that we then assume that + // the stream << operator is defined on that type - if not + // we'll get a compile time error. This is meant to automatically + // support synthesized types which support floating point + // operations. Also it should handle compiler dependent types + // such long double. Due to John Maddock. + + template<class T> + struct is_float { + typedef typename mpl::bool_< + boost::is_floating_point<T>::value + || (std::numeric_limits<T>::is_specialized + && !std::numeric_limits<T>::is_integer + && !std::numeric_limits<T>::is_exact + && std::numeric_limits<T>::max_exponent) + >::type type; + }; + + template<class T> + void save_impl(const T &t, boost::mpl::bool_<true> &){ // must be a user mistake - can't serialize un-initialized data if(os.fail()) boost::serialization::throw_exception( archive_exception(archive_exception::output_stream_error) ); - os << std::setprecision(std::numeric_limits<double>::digits10 + 2); - os << t; + // The formulae for the number of decimla digits required is given in + // http://www2.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1822.pdf + // which is derived from Kahan's paper: + // www.eecs.berkeley.edu/~wkahan/ieee754status/ieee754.ps + // const unsigned int digits = (std::numeric_limits<T>::digits * 3010) / 10000; + // note: I've commented out the above because I didn't get good results. e.g. + // in one case I got a difference of 19 units. + #ifndef BOOST_NO_CXX11_NUMERIC_LIMITS + const unsigned int digits = std::numeric_limits<T>::max_digits10; + #else + const unsigned int digits = std::numeric_limits<T>::digits10 + 2; + #endif + os << std::setprecision(digits) << std::scientific << t; } + + template<class T> + void save(const T & t){ + boost::io::ios_flags_saver fs(os); + boost::io::ios_precision_saver ps(os); + typename is_float<T>::type tf; + save_impl(t, tf); + } + BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_text_oprimitive(OStream & os, bool no_codecvt); BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) ~basic_text_oprimitive(); public: // unformatted append of one character - void put(BOOST_DEDUCED_TYPENAME OStream::char_type c){ + void put(typename OStream::char_type c){ if(os.fail()) boost::serialization::throw_exception( archive_exception(archive_exception::output_stream_error) ); os.put(c); } diff --git a/3rdParty/Boost/src/boost/archive/basic_xml_archive.hpp b/3rdParty/Boost/src/boost/archive/basic_xml_archive.hpp index c99d94f..a4ad3a2 100644 --- a/3rdParty/Boost/src/boost/archive/basic_xml_archive.hpp +++ b/3rdParty/Boost/src/boost/archive/basic_xml_archive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BASIC_XML_TEXT_ARCHIVE_HPP #define BOOST_ARCHIVE_BASIC_XML_TEXT_ARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_xml_archive.hpp: diff --git a/3rdParty/Boost/src/boost/archive/basic_xml_iarchive.hpp b/3rdParty/Boost/src/boost/archive/basic_xml_iarchive.hpp index d7b8bfd..5047fef 100644 --- a/3rdParty/Boost/src/boost/archive/basic_xml_iarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/basic_xml_iarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BASIC_XML_IARCHIVE_HPP #define BOOST_ARCHIVE_BASIC_XML_IARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_xml_iarchive.hpp @@ -34,27 +34,33 @@ # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { +namespace detail { + template<class Archive> class interface_iarchive; +} // namespace detail + ///////////////////////////////////////////////////////////////////////// // class xml_iarchive - read serialized objects from a input text stream template<class Archive> class basic_xml_iarchive : public detail::common_iarchive<Archive> { -protected: -#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) +#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: -#elif defined(BOOST_MSVC) - // for some inexplicable reason insertion of "class" generates compile erro - // on msvc 7.1 - friend detail::interface_oarchive<Archive>; #else - friend class detail::interface_oarchive<Archive>; +protected: + #if BOOST_WORKAROUND(BOOST_MSVC, < 1500) + // for some inexplicable reason insertion of "class" generates compile erro + // on msvc 7.1 + friend detail::interface_iarchive<Archive>; + #else + friend class detail::interface_iarchive<Archive>; + #endif #endif unsigned int depth; BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) load_start(const char *name); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) load_end(const char *name); diff --git a/3rdParty/Boost/src/boost/archive/basic_xml_oarchive.hpp b/3rdParty/Boost/src/boost/archive/basic_xml_oarchive.hpp index b571372..c986833 100644 --- a/3rdParty/Boost/src/boost/archive/basic_xml_oarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/basic_xml_oarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BASIC_XML_OARCHIVE_HPP #define BOOST_ARCHIVE_BASIC_XML_OARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_xml_oarchive.hpp @@ -33,30 +33,35 @@ # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { +namespace detail { + template<class Archive> class interface_oarchive; +} // namespace detail + ////////////////////////////////////////////////////////////////////// // class basic_xml_oarchive - write serialized objects to a xml output stream template<class Archive> class basic_xml_oarchive : public detail::common_oarchive<Archive> { -protected: -#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) +#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: -#elif defined(BOOST_MSVC) +#else +protected: +#endif +#if BOOST_WORKAROUND(BOOST_MSVC, < 1500) // for some inexplicable reason insertion of "class" generates compile erro // on msvc 7.1 friend detail::interface_oarchive<Archive>; - friend class save_access; #else friend class detail::interface_oarchive<Archive>; - friend class save_access; #endif + friend class save_access; // special stuff for xml output unsigned int depth; bool indent_next; bool pending_preamble; BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) indent(); diff --git a/3rdParty/Boost/src/boost/archive/binary_iarchive.hpp b/3rdParty/Boost/src/boost/archive/binary_iarchive.hpp index 638d996..ce67cca 100644 --- a/3rdParty/Boost/src/boost/archive/binary_iarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/binary_iarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BINARY_IARCHIVE_HPP #define BOOST_ARCHIVE_BINARY_IARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // binary_iarchive.hpp @@ -22,63 +22,24 @@ #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif -namespace boost { -namespace archive { - -// do not derive from the classes below. If you want to extend this functionality -// via inhertance, derived from text_iarchive_impl instead. This will -// preserve correct static polymorphism. - -// same as binary_iarchive below - without the shared_ptr_helper -class naked_binary_iarchive : - public binary_iarchive_impl< - boost::archive::naked_binary_iarchive, - std::istream::char_type, - std::istream::traits_type - > -{ -public: - naked_binary_iarchive(std::istream & is, unsigned int flags = 0) : - binary_iarchive_impl< - naked_binary_iarchive, std::istream::char_type, std::istream::traits_type - >(is, flags) - {} - naked_binary_iarchive(std::streambuf & bsb, unsigned int flags = 0) : - binary_iarchive_impl< - naked_binary_iarchive, std::istream::char_type, std::istream::traits_type - >(bsb, flags) - {} -}; - -} // namespace archive -} // namespace boost - -// note special treatment of shared_ptr. This type needs a special -// structure associated with every archive. We created a "mix-in" -// class to provide this functionality. Since shared_ptr holds a -// special esteem in the boost library - we included it here by default. -#include <boost/archive/shared_ptr_helper.hpp> - -namespace boost { +namespace boost { namespace archive { // do not derive from this class. If you want to extend this functionality // via inhertance, derived from binary_iarchive_impl instead. This will // preserve correct static polymorphism. class binary_iarchive : public binary_iarchive_impl< boost::archive::binary_iarchive, std::istream::char_type, std::istream::traits_type - >, - public detail::shared_ptr_helper -{ + >{ public: binary_iarchive(std::istream & is, unsigned int flags = 0) : binary_iarchive_impl< binary_iarchive, std::istream::char_type, std::istream::traits_type >(is, flags) {} diff --git a/3rdParty/Boost/src/boost/archive/binary_iarchive_impl.hpp b/3rdParty/Boost/src/boost/archive/binary_iarchive_impl.hpp index 32c476d..a9afe61 100644 --- a/3rdParty/Boost/src/boost/archive/binary_iarchive_impl.hpp +++ b/3rdParty/Boost/src/boost/archive/binary_iarchive_impl.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BINARY_IARCHIVE_IMPL_HPP #define BOOST_ARCHIVE_BINARY_IARCHIVE_IMPL_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // binary_iarchive_impl.hpp @@ -26,24 +26,36 @@ # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { +namespace detail { + template<class Archive> class interface_iarchive; +} // namespace detail + template<class Archive, class Elem, class Tr> class binary_iarchive_impl : public basic_binary_iprimitive<Archive, Elem, Tr>, public basic_binary_iarchive<Archive> { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else - friend class detail::interface_iarchive<Archive>; - friend class basic_binary_iarchive<Archive>; - friend class load_access; protected: + #if BOOST_WORKAROUND(BOOST_MSVC, < 1500) + // for some inexplicable reason insertion of "class" generates compile erro + // on msvc 7.1 + friend detail::interface_iarchive<Archive>; + friend basic_binary_iarchive<Archive>; + friend load_access; + #else + friend class detail::interface_iarchive<Archive>; + friend class basic_binary_iarchive<Archive>; + friend class load_access; + #endif #endif // note: the following should not needed - but one compiler (vc 7.1) // fails to compile one test (test_shared_ptr) without it !!! // make this protected so it can be called from a derived archive template<class T> void load_override(T & t, BOOST_PFTO int){ diff --git a/3rdParty/Boost/src/boost/archive/binary_oarchive.hpp b/3rdParty/Boost/src/boost/archive/binary_oarchive.hpp index 2aac14f..89a86da 100644 --- a/3rdParty/Boost/src/boost/archive/binary_oarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/binary_oarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BINARY_OARCHIVE_HPP #define BOOST_ARCHIVE_BINARY_OARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // binary_oarchive.hpp @@ -47,14 +47,12 @@ public: binary_oarchive_impl< binary_oarchive, std::ostream::char_type, std::ostream::traits_type >(bsb, flags) {} }; -typedef binary_oarchive naked_binary_oarchive; - } // namespace archive } // namespace boost // required by export BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::binary_oarchive) BOOST_SERIALIZATION_USE_ARRAY_OPTIMIZATION(boost::archive::binary_oarchive) diff --git a/3rdParty/Boost/src/boost/archive/binary_oarchive_impl.hpp b/3rdParty/Boost/src/boost/archive/binary_oarchive_impl.hpp index 7ca773b..a8c9733 100644 --- a/3rdParty/Boost/src/boost/archive/binary_oarchive_impl.hpp +++ b/3rdParty/Boost/src/boost/archive/binary_oarchive_impl.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BINARY_OARCHIVE_IMPL_HPP #define BOOST_ARCHIVE_BINARY_OARCHIVE_IMPL_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // binary_oarchive_impl.hpp @@ -27,24 +27,36 @@ # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { +namespace detail { + template<class Archive> class interface_oarchive; +} // namespace detail + template<class Archive, class Elem, class Tr> class binary_oarchive_impl : public basic_binary_oprimitive<Archive, Elem, Tr>, public basic_binary_oarchive<Archive> { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else - friend class detail::interface_oarchive<Archive>; - friend class basic_binary_oarchive<Archive>; - friend class save_access; protected: + #if BOOST_WORKAROUND(BOOST_MSVC, < 1500) + // for some inexplicable reason insertion of "class" generates compile erro + // on msvc 7.1 + friend detail::interface_oarchive<Archive>; + friend basic_binary_oarchive<Archive>; + friend save_access; + #else + friend class detail::interface_oarchive<Archive>; + friend class basic_binary_oarchive<Archive>; + friend class save_access; + #endif #endif // note: the following should not needed - but one compiler (vc 7.1) // fails to compile one test (test_shared_ptr) without it !!! // make this protected so it can be called from a derived archive template<class T> void save_override(T & t, BOOST_PFTO int){ diff --git a/3rdParty/Boost/src/boost/archive/binary_wiarchive.hpp b/3rdParty/Boost/src/boost/archive/binary_wiarchive.hpp index b5f6a71..775d8f8 100644 --- a/3rdParty/Boost/src/boost/archive/binary_wiarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/binary_wiarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BINARY_WIARCHIVE_HPP #define BOOST_ARCHIVE_BINARY_WIARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // binary_wiarchive.hpp @@ -25,49 +25,12 @@ #include <boost/archive/binary_iarchive_impl.hpp> #include <boost/archive/detail/register_archive.hpp> namespace boost { namespace archive { -// same as binary_wiarchive below - without the shared_ptr_helper -class naked_binary_wiarchive : - public binary_iarchive_impl< - boost::archive::naked_binary_wiarchive, - std::wistream::char_type, - std::wistream::traits_type - > -{ -public: - naked_binary_wiarchive(std::wistream & is, unsigned int flags = 0) : - binary_iarchive_impl< - naked_binary_wiarchive, - std::wistream::char_type, - std::wistream::traits_type - >(is, flags) - {} - naked_binary_wiarchive(std::wstreambuf & bsb, unsigned int flags = 0) : - binary_iarchive_impl< - naked_binary_wiarchive, - std::wistream::char_type, - std::wistream::traits_type - >(bsb, flags) - {} -}; - -} // namespace archive -} // namespace boost - -// note special treatment of shared_ptr. This type needs a special -// structure associated with every archive. We created a "mix-in" -// class to provide this functionality. Since shared_ptr holds a -// special esteem in the boost library - we included it here by default. -#include <boost/archive/shared_ptr_helper.hpp> - -namespace boost { -namespace archive { - class binary_wiarchive : public binary_iarchive_impl< binary_wiarchive, std::wistream::char_type, std::wistream::traits_type > { public: diff --git a/3rdParty/Boost/src/boost/archive/binary_woarchive.hpp b/3rdParty/Boost/src/boost/archive/binary_woarchive.hpp index 2075dac..a8817d6 100644 --- a/3rdParty/Boost/src/boost/archive/binary_woarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/binary_woarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BINARY_WOARCHIVE_HPP #define BOOST_ARCHIVE_BINARY_WOARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // binary_woarchive.hpp @@ -46,14 +46,12 @@ public: binary_oarchive_impl< binary_woarchive, std::wostream::char_type, std::wostream::traits_type >(bsb, flags) {} }; -typedef binary_woarchive naked_binary_woarchive; - } // namespace archive } // namespace boost // required by export BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::binary_woarchive) diff --git a/3rdParty/Boost/src/boost/archive/codecvt_null.hpp b/3rdParty/Boost/src/boost/archive/codecvt_null.hpp index 910b261..caeefee 100644 --- a/3rdParty/Boost/src/boost/archive/codecvt_null.hpp +++ b/3rdParty/Boost/src/boost/archive/codecvt_null.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_CODECVT_NULL_HPP #define BOOST_ARCHIVE_CODECVT_NULL_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // codecvt_null.hpp: diff --git a/3rdParty/Boost/src/boost/archive/detail/archive_serializer_map.hpp b/3rdParty/Boost/src/boost/archive/detail/archive_serializer_map.hpp index 6d2eec4..53fcae4 100644 --- a/3rdParty/Boost/src/boost/archive/detail/archive_serializer_map.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/archive_serializer_map.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_SERIALIZER_MAP_HPP #define BOOST_ARCHIVE_SERIALIZER_MAP_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // archive_serializer_map.hpp: extenstion of type_info required for // serialization. diff --git a/3rdParty/Boost/src/boost/archive/detail/auto_link_archive.hpp b/3rdParty/Boost/src/boost/archive/detail/auto_link_archive.hpp index 05956f0..79b0e49 100644 --- a/3rdParty/Boost/src/boost/archive/detail/auto_link_archive.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/auto_link_archive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_DETAIL_AUTO_LINK_ARCHIVE_HPP #define BOOST_ARCHIVE_DETAIL_AUTO_LINK_ARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // auto_link_archive.hpp // diff --git a/3rdParty/Boost/src/boost/archive/detail/auto_link_warchive.hpp b/3rdParty/Boost/src/boost/archive/detail/auto_link_warchive.hpp index 4d4efcd..683d191 100644 --- a/3rdParty/Boost/src/boost/archive/detail/auto_link_warchive.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/auto_link_warchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_DETAIL_AUTO_LINK_WARCHIVE_HPP #define BOOST_ARCHIVE_DETAIL_AUTO_LINK_WARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // auto_link_warchive.hpp // diff --git a/3rdParty/Boost/src/boost/archive/detail/basic_iarchive.hpp b/3rdParty/Boost/src/boost/archive/detail/basic_iarchive.hpp index f62987e..fdafbbf 100644 --- a/3rdParty/Boost/src/boost/archive/detail/basic_iarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/basic_iarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_DETAIL_BASIC_IARCHIVE_HPP #define BOOST_ARCHIVE_DETAIL_BASIC_IARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_iarchive.hpp: @@ -19,16 +19,16 @@ // can't use this - much as I'd like to as borland doesn't support it // #include <boost/scoped_ptr.hpp> #include <boost/config.hpp> #include <boost/noncopyable.hpp> -#include <boost/type_traits/broken_compiler_spec.hpp> #include <boost/serialization/tracking_enum.hpp> #include <boost/archive/basic_archive.hpp> #include <boost/archive/detail/decl.hpp> +#include <boost/archive/detail/helper_collection.hpp> #include <boost/archive/detail/abi_prefix.hpp> // must be the last header namespace boost { namespace serialization { class extended_type_info; } // namespace serialization @@ -39,13 +39,14 @@ namespace detail { class basic_iarchive_impl; class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_iserializer; class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_iserializer; ////////////////////////////////////////////////////////////////////// // class basic_iarchive - read serialized objects from a input stream class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_iarchive : - private boost::noncopyable + private boost::noncopyable, + public boost::archive::detail::helper_collection { friend class basic_iarchive_impl; // hide implementation of this class to minimize header conclusion // in client code. I couldn't used scoped pointer with borland // boost::scoped_ptr<basic_iarchive_impl> pimpl; basic_iarchive_impl * pimpl; @@ -96,15 +97,9 @@ public: }; } // namespace detail } // namespace archive } // namespace boost -// required by smart_cast for compilers not implementing -// partial template specialization -BOOST_TT_BROKEN_COMPILER_SPEC( - boost::archive::detail::basic_iarchive -) - #include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas #endif //BOOST_ARCHIVE_DETAIL_BASIC_IARCHIVE_HPP diff --git a/3rdParty/Boost/src/boost/archive/detail/basic_iserializer.hpp b/3rdParty/Boost/src/boost/archive/detail/basic_iserializer.hpp index 2f4f6d8..3bff3e1 100644 --- a/3rdParty/Boost/src/boost/archive/detail/basic_iserializer.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/basic_iserializer.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_DETAIL_BASIC_ISERIALIZER_HPP #define BOOST_ARCHIVE_DETAIL_BASIC_ISERIALIZER_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_iserializer.hpp: extenstion of type_info required for serialization. diff --git a/3rdParty/Boost/src/boost/archive/detail/basic_oarchive.hpp b/3rdParty/Boost/src/boost/archive/detail/basic_oarchive.hpp index 402e569..f65d110 100644 --- a/3rdParty/Boost/src/boost/archive/detail/basic_oarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/basic_oarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BASIC_OARCHIVE_HPP #define BOOST_ARCHIVE_BASIC_OARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_oarchive.hpp: @@ -17,20 +17,18 @@ // See http://www.boost.org for updates, documentation, and revision history. #include <cstddef> // NULL #include <boost/config.hpp> #include <boost/noncopyable.hpp> -#include <boost/type_traits/broken_compiler_spec.hpp> - // can't use this - much as I'd like to as borland doesn't support it // #include <boost/scoped_ptr.hpp> #include <boost/archive/basic_archive.hpp> #include <boost/serialization/tracking_enum.hpp> - +#include <boost/archive/detail/helper_collection.hpp> #include <boost/archive/detail/abi_prefix.hpp> // must be the last header namespace boost { namespace serialization { class extended_type_info; } // namespace serialization @@ -38,16 +36,18 @@ namespace serialization { namespace archive { namespace detail { class basic_oarchive_impl; class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oserializer; class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_oserializer; + ////////////////////////////////////////////////////////////////////// // class basic_oarchive - write serialized objects to an output stream class BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oarchive : - private boost::noncopyable + private boost::noncopyable, + public boost::archive::detail::helper_collection { friend class basic_oarchive_impl; // hide implementation of this class to minimize header conclusion // in client code. note: borland can't use scoped_ptr //boost::scoped_ptr<basic_oarchive_impl> pimpl; basic_oarchive_impl * pimpl; @@ -92,15 +92,9 @@ public: }; } // namespace detail } // namespace archive } // namespace boost -// required by smart_cast for compilers not implementing -// partial template specialization -BOOST_TT_BROKEN_COMPILER_SPEC( - boost::archive::detail::basic_oarchive -) - #include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas #endif //BOOST_ARCHIVE_BASIC_OARCHIVE_HPP diff --git a/3rdParty/Boost/src/boost/archive/detail/basic_oserializer.hpp b/3rdParty/Boost/src/boost/archive/detail/basic_oserializer.hpp index 74af7e6..6ae063f 100644 --- a/3rdParty/Boost/src/boost/archive/detail/basic_oserializer.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/basic_oserializer.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_SERIALIZATION_BASIC_OSERIALIZER_HPP #define BOOST_SERIALIZATION_BASIC_OSERIALIZER_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_oserializer.hpp: extenstion of type_info required for serialization. diff --git a/3rdParty/Boost/src/boost/archive/detail/basic_pointer_iserializer.hpp b/3rdParty/Boost/src/boost/archive/detail/basic_pointer_iserializer.hpp index d957b83..86badc1 100644 --- a/3rdParty/Boost/src/boost/archive/detail/basic_pointer_iserializer.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/basic_pointer_iserializer.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BASIC_POINTER_ISERIALIZER_HPP #define BOOST_ARCHIVE_BASIC_POINTER_ISERIALIZER_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_pointer_oserializer.hpp: extenstion of type_info required for // serialization. @@ -49,16 +49,17 @@ protected: // account for bogus gcc warning #if defined(__GNUC__) virtual #endif ~basic_pointer_iserializer(); public: + virtual void * heap_allocation() const = 0; virtual const basic_iserializer & get_basic_serializer() const = 0; virtual void load_object_ptr( basic_iarchive & ar, - void * & x, + void * x, const unsigned int file_version ) const = 0; }; } // namespace detail } // namespace archive diff --git a/3rdParty/Boost/src/boost/archive/detail/basic_pointer_oserializer.hpp b/3rdParty/Boost/src/boost/archive/detail/basic_pointer_oserializer.hpp index b0d3fb9..bafc46a 100644 --- a/3rdParty/Boost/src/boost/archive/detail/basic_pointer_oserializer.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/basic_pointer_oserializer.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BASIC_POINTER_OSERIALIZER_HPP #define BOOST_ARCHIVE_BASIC_POINTER_OSERIALIZER_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_pointer_oserializer.hpp: extenstion of type_info required for // serialization. diff --git a/3rdParty/Boost/src/boost/archive/detail/basic_serializer.hpp b/3rdParty/Boost/src/boost/archive/detail/basic_serializer.hpp index 5dbd886..c7d3b4b 100644 --- a/3rdParty/Boost/src/boost/archive/detail/basic_serializer.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/basic_serializer.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BASIC_SERIALIZER_HPP #define BOOST_ARCHIVE_BASIC_SERIALIZER_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_serializer.hpp: extenstion of type_info required for serialization. diff --git a/3rdParty/Boost/src/boost/archive/detail/basic_serializer_map.hpp b/3rdParty/Boost/src/boost/archive/detail/basic_serializer_map.hpp index a991ea1..202c20e 100644 --- a/3rdParty/Boost/src/boost/archive/detail/basic_serializer_map.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/basic_serializer_map.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_SERIALIZER_MAP_HPP #define BOOST_SERIALIZER_MAP_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_serializer_map.hpp: extenstion of type_info required for serialization. diff --git a/3rdParty/Boost/src/boost/archive/detail/check.hpp b/3rdParty/Boost/src/boost/archive/detail/check.hpp index c9cba51..10034e7 100644 --- a/3rdParty/Boost/src/boost/archive/detail/check.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/check.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_DETAIL_CHECK_HPP #define BOOST_ARCHIVE_DETAIL_CHECK_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #pragma inline_depth(511) #pragma inline_recursion(on) #endif #if defined(__MWERKS__) @@ -47,31 +47,31 @@ namespace detail { // checks for objects template<class T> inline void check_object_level(){ typedef - BOOST_DEDUCED_TYPENAME mpl::greater_equal< + typename mpl::greater_equal< serialization::implementation_level< T >, mpl::int_<serialization::primitive_type> >::type typex; // trap attempts to serialize objects marked // not_serializable BOOST_STATIC_ASSERT(typex::value); } template<class T> inline void check_object_versioning(){ typedef - BOOST_DEDUCED_TYPENAME mpl::or_< - BOOST_DEDUCED_TYPENAME mpl::greater< + typename mpl::or_< + typename mpl::greater< serialization::implementation_level< T >, mpl::int_<serialization::object_serializable> >, - BOOST_DEDUCED_TYPENAME mpl::equal_to< + typename mpl::equal_to< serialization::version< T >, mpl::int_<0> > > typex; // trap attempts to serialize with objects that don't // save class information in the archive with versioning. @@ -80,13 +80,13 @@ inline void check_object_versioning(){ template<class T> inline void check_object_tracking(){ // presume it has already been determined that // T is not a const BOOST_STATIC_ASSERT(! boost::is_const< T >::value); - typedef BOOST_DEDUCED_TYPENAME mpl::equal_to< + typedef typename mpl::equal_to< serialization::tracking_level< T >, mpl::int_<serialization::track_never> >::type typex; // saving an non-const object of a type not marked "track_never) // may be an indicator of an error usage of the @@ -102,19 +102,19 @@ inline void check_object_tracking(){ template<class T> inline void check_pointer_level(){ // we should only invoke this once we KNOW that T // has been used as a pointer!! typedef - BOOST_DEDUCED_TYPENAME mpl::or_< - BOOST_DEDUCED_TYPENAME mpl::greater< + typename mpl::or_< + typename mpl::greater< serialization::implementation_level< T >, mpl::int_<serialization::object_serializable> >, - BOOST_DEDUCED_TYPENAME mpl::not_< - BOOST_DEDUCED_TYPENAME mpl::equal_to< + typename mpl::not_< + typename mpl::equal_to< serialization::tracking_level< T >, mpl::int_<serialization::track_selectively> > > > typex; // Address the following when serializing to a pointer: @@ -136,28 +136,28 @@ inline void check_pointer_level(){ // serializing via a pointer. BOOST_STATIC_WARNING(typex::value); } template<class T> void inline check_pointer_tracking(){ - typedef BOOST_DEDUCED_TYPENAME mpl::greater< + typedef typename mpl::greater< serialization::tracking_level< T >, mpl::int_<serialization::track_never> >::type typex; // serializing an object of a type marked "track_never" through a pointer // could result in creating more objects than were saved! BOOST_STATIC_WARNING(typex::value); } template<class T> inline void check_const_loading(){ typedef - BOOST_DEDUCED_TYPENAME mpl::or_< - BOOST_DEDUCED_TYPENAME boost::serialization::is_wrapper< T >, - BOOST_DEDUCED_TYPENAME mpl::not_< - BOOST_DEDUCED_TYPENAME boost::is_const< T > + typename mpl::or_< + typename boost::serialization::is_wrapper< T >, + typename mpl::not_< + typename boost::is_const< T > > >::type typex; // cannot load data into a "const" object unless it's a // wrapper around some other non-const object. BOOST_STATIC_ASSERT(typex::value); } diff --git a/3rdParty/Boost/src/boost/archive/detail/common_iarchive.hpp b/3rdParty/Boost/src/boost/archive/detail/common_iarchive.hpp index 54c07c3..45e6d34 100644 --- a/3rdParty/Boost/src/boost/archive/detail/common_iarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/common_iarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_DETAIL_COMMON_IARCHIVE_HPP #define BOOST_ARCHIVE_DETAIL_COMMON_IARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // common_iarchive.hpp diff --git a/3rdParty/Boost/src/boost/archive/detail/common_oarchive.hpp b/3rdParty/Boost/src/boost/archive/detail/common_oarchive.hpp index 7962063..0d7474b 100644 --- a/3rdParty/Boost/src/boost/archive/detail/common_oarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/common_oarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_DETAIL_COMMON_OARCHIVE_HPP #define BOOST_ARCHIVE_DETAIL_COMMON_OARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // common_oarchive.hpp diff --git a/3rdParty/Boost/src/boost/archive/detail/decl.hpp b/3rdParty/Boost/src/boost/archive/detail/decl.hpp index 9695001..44e22be 100644 --- a/3rdParty/Boost/src/boost/archive/detail/decl.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/decl.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_DETAIL_DECL_HPP #define BOOST_ARCHIVE_DETAIL_DECL_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2///////// 3/////////4/////////5/////////6/////////7/////////8 // decl.hpp // diff --git a/3rdParty/Boost/src/boost/archive/detail/helper_collection.hpp b/3rdParty/Boost/src/boost/archive/detail/helper_collection.hpp new file mode 100644 index 0000000..ba3c60c --- /dev/null +++ b/3rdParty/Boost/src/boost/archive/detail/helper_collection.hpp @@ -0,0 +1,111 @@ +#ifndef BOOST_ARCHIVE_DETAIL_HELPER_COLLECTION_HPP +#define BOOST_ARCHIVE_DETAIL_HELPER_COLLECTION_HPP + +// MS compatible compilers support #pragma once +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// helper_collection.hpp: archive support for run-time helpers + +// (C) Copyright 2002-2008 Robert Ramey and Joaquin M Lopez Munoz +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for updates, documentation, and revision history. + +#include <cstddef> // NULL +#include <typeinfo> +#include <vector> +#include <utility> +#include <memory> +#include <algorithm> + +#include <boost/config.hpp> + +#ifdef BOOST_NO_CXX11_SMART_PTR + #include <boost/smart_ptr/shared_ptr.hpp> + #include <boost/smart_ptr/make_shared.hpp> +#endif + +namespace boost { + +namespace archive { +namespace detail { + +class helper_collection +{ + helper_collection(const helper_collection&); // non-copyable + helper_collection& operator = (const helper_collection&); // non-copyable + + // note: we dont' actually "share" the function object pointer + // we only use shared_ptr to make sure that it get's deleted + + #ifndef BOOST_NO_CXX11_SMART_PTR + typedef std::pair< + const std::type_info *, + std::shared_ptr<void> + > helper_value_type; + template<class T> + std::shared_ptr<void> make_helper_ptr(){ + return std::make_shared<T>(); + } + #else + typedef std::pair< + const std::type_info *, + boost::shared_ptr<void> + > helper_value_type; + template<class T> + boost::shared_ptr<void> make_helper_ptr(){ + return boost::make_shared<T>(); + } + #endif + typedef std::vector<helper_value_type> collection; + collection m_collection; + + struct predicate { + const std::type_info * m_ti; + bool operator()(helper_value_type const &rhs) const { + return *m_ti == *rhs.first; + } + predicate(const std::type_info * ti) : + m_ti(ti) + {} + }; +protected: + helper_collection(){} + ~helper_collection(){} +public: + template<typename Helper> + Helper& get_helper(Helper * = NULL) { + + const std::type_info * eti = & typeid(Helper); + + collection::const_iterator it = + std::find_if( + m_collection.begin(), + m_collection.end(), + predicate(eti) + ); + + void * rval; + if(it == m_collection.end()){ + m_collection.push_back( + std::make_pair(eti, make_helper_ptr<Helper>()) + ); + rval = m_collection.back().second.get(); + } + else{ + rval = it->second.get(); + } + return *static_cast<Helper *>(rval); + } +}; + +} // namespace detail +} // namespace serialization +} // namespace boost + +#endif // BOOST_ARCHIVE_DETAIL_HELPER_COLLECTION_HPP diff --git a/3rdParty/Boost/src/boost/archive/detail/interface_iarchive.hpp b/3rdParty/Boost/src/boost/archive/detail/interface_iarchive.hpp index 0648752..b7bd165 100644 --- a/3rdParty/Boost/src/boost/archive/detail/interface_iarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/interface_iarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_DETAIL_INTERFACE_IARCHIVE_HPP #define BOOST_ARCHIVE_DETAIL_INTERFACE_IARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // interface_iarchive.hpp diff --git a/3rdParty/Boost/src/boost/archive/detail/interface_oarchive.hpp b/3rdParty/Boost/src/boost/archive/detail/interface_oarchive.hpp index e8db7a2..7ae7176 100644 --- a/3rdParty/Boost/src/boost/archive/detail/interface_oarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/interface_oarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_DETAIL_INTERFACE_OARCHIVE_HPP #define BOOST_ARCHIVE_DETAIL_INTERFACE_OARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // interface_oarchive.hpp diff --git a/3rdParty/Boost/src/boost/archive/detail/iserializer.hpp b/3rdParty/Boost/src/boost/archive/detail/iserializer.hpp index 53765af..cf547de 100644 --- a/3rdParty/Boost/src/boost/archive/detail/iserializer.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/iserializer.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_DETAIL_ISERIALIZER_HPP #define BOOST_ARCHIVE_DETAIL_ISERIALIZER_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #pragma inline_depth(511) #pragma inline_recursion(on) #endif #if defined(__MWERKS__) @@ -20,13 +20,12 @@ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include <new> // for placement new -#include <memory> // for auto_ptr #include <cstddef> // size_t, NULL #include <boost/config.hpp> #include <boost/detail/workaround.hpp> #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ @@ -56,20 +55,17 @@ namespace std{ #include <boost/type_traits/remove_const.hpp> #include <boost/type_traits/remove_extent.hpp> #include <boost/type_traits/is_polymorphic.hpp> #include <boost/serialization/assume_abstract.hpp> -#define DONT_USE_HAS_NEW_OPERATOR ( \ +#if ! ( \ defined(__BORLANDC__) \ || BOOST_WORKAROUND(__IBMCPP__, < 1210) \ - || defined(BOOST_MSVC) && (BOOST_MSVC <= 1300) \ || defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x590) \ ) - -#if ! DONT_USE_HAS_NEW_OPERATOR #include <boost/type_traits/has_new_operator.hpp> #endif #include <boost/serialization/serialization.hpp> #include <boost/serialization/version.hpp> #include <boost/serialization/level.hpp> @@ -124,13 +120,13 @@ private: } protected: // protected constructor since it's always created by singleton explicit iserializer() : basic_iserializer( boost::serialization::singleton< - BOOST_DEDUCED_TYPENAME + typename boost::serialization::type_info_implementation< T >::type >::get_const_instance() ) {} public: virtual BOOST_DLLEXPORT void load_object_data( @@ -194,152 +190,179 @@ BOOST_DLLEXPORT void iserializer<Archive, T>::load_object_data( #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif -template<class Archive, class T> -class pointer_iserializer : - public basic_pointer_iserializer -{ -private: - virtual const basic_iserializer & get_basic_serializer() const { - return boost::serialization::singleton< - iserializer<Archive, T> - >::get_const_instance(); - } - BOOST_DLLEXPORT virtual void load_object_ptr( - basic_iarchive & ar, - void * & x, - const unsigned int file_version - ) const BOOST_USED; -protected: - // this should alway be a singleton so make the constructor protected - pointer_iserializer(); - ~pointer_iserializer(); -}; - -#ifdef BOOST_MSVC -# pragma warning(pop) -#endif - -// note trick to be sure that operator new is using class specific -// version if such exists. Due to Peter Dimov. -// note: the following fails if T has no default constructor. -// otherwise it would have been ideal -//struct heap_allocator : public T -//{ -// T * invoke(){ -// return ::new(sizeof(T)); -// } -//} +// the purpose of this code is to allocate memory for an object +// without requiring the constructor to be called. Presumably +// the allocated object will be subsequently initialized with +// "placement new". +// note: we have the boost type trait has_new_operator but we +// have no corresponding has_delete_operator. So we presume +// that the former being true would imply that the a delete +// operator is also defined for the class T. template<class T> -struct heap_allocator -{ +struct heap_allocation { // boost::has_new_operator< T > doesn't work on these compilers #if DONT_USE_HAS_NEW_OPERATOR // This doesn't handle operator new overload for class T - static T * invoke(){ + static T * invoke_new(){ return static_cast<T *>(operator new(sizeof(T))); } + static viod invoke_delete(){ + (operator delete(sizeof(T))); + } #else + // note: we presume that a true value for has_new_operator + // implies the existence of a class specific delete operator as well + // as a class specific new operator. struct has_new_operator { - static T* invoke() { + static T * invoke_new() { return static_cast<T *>((T::operator new)(sizeof(T))); } + static void invoke_delete(T * t) { + // if compilation fails here, the likely cause that the class + // T has a class specific new operator but no class specific + // delete operator which matches the following signature. Fix + // your program to have this. Note that adding operator delete + // with only one parameter doesn't seem correct to me since + // the standard(3.7.4.2) says " + // "If a class T has a member deallocation function named + // 'operator delete' with exactly one parameter, then that function + // is a usual (non-placement) deallocation function" which I take + // to mean that it will call the destructor of type T which we don't + // want to do here. + // Note: reliance upon automatic conversion from T * to void * here + (T::operator delete)(t, sizeof(T)); + } }; struct doesnt_have_new_operator { - static T* invoke() { + static T* invoke_new() { return static_cast<T *>(operator new(sizeof(T))); } + static void invoke_delete(T * t) { + // Note: I'm reliance upon automatic conversion from T * to void * here + (operator delete)(t); + } }; - static T * invoke() { - typedef BOOST_DEDUCED_TYPENAME + static T * invoke_new() { + typedef typename mpl::eval_if< boost::has_new_operator< T >, mpl::identity<has_new_operator >, mpl::identity<doesnt_have_new_operator > >::type typex; - return typex::invoke(); + return typex::invoke_new(); + } + static void invoke_delete(T *t) { + typedef typename + mpl::eval_if< + boost::has_new_operator< T >, + mpl::identity<has_new_operator >, + mpl::identity<doesnt_have_new_operator > + >::type typex; + typex::invoke_delete(t); } #endif -}; - -// due to Martin Ecker -template <typename T> -class auto_ptr_with_deleter -{ -public: - explicit auto_ptr_with_deleter(T* p) : - m_p(p) - {} - ~auto_ptr_with_deleter(){ - if (m_p) - boost::serialization::access::destroy(m_p); + explicit heap_allocation(){ + m_p = invoke_new(); + } + ~heap_allocation(){ + if (0 != m_p) + invoke_delete(m_p); } T* get() const { return m_p; } T* release() { T* p = m_p; - m_p = NULL; + m_p = 0; return p; } private: T* m_p; }; +template<class Archive, class T> +class pointer_iserializer : + public basic_pointer_iserializer +{ +private: + virtual void * heap_allocation() const { + detail::heap_allocation<T> h; + T * t = h.get(); + h.release(); + return t; + } + virtual const basic_iserializer & get_basic_serializer() const { + return boost::serialization::singleton< + iserializer<Archive, T> + >::get_const_instance(); + } + BOOST_DLLEXPORT virtual void load_object_ptr( + basic_iarchive & ar, + void * x, + const unsigned int file_version + ) const BOOST_USED; +protected: + // this should alway be a singleton so make the constructor protected + pointer_iserializer(); + ~pointer_iserializer(); +}; + +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + // note: BOOST_DLLEXPORT is so that code for polymorphic class // serialized only through base class won't get optimized out template<class Archive, class T> BOOST_DLLEXPORT void pointer_iserializer<Archive, T>::load_object_ptr( basic_iarchive & ar, - void * & x, + void * t, const unsigned int file_version ) const { Archive & ar_impl = boost::serialization::smart_cast_reference<Archive &>(ar); - auto_ptr_with_deleter< T > ap(heap_allocator< T >::invoke()); - if(NULL == ap.get()) - boost::serialization::throw_exception(std::bad_alloc()) ; - - T * t = ap.get(); - x = t; + // note that the above will throw std::bad_alloc if the allocation + // fails so we don't have to address this contingency here. // catch exception during load_construct_data so that we don't // automatically delete the t which is most likely not fully // constructed BOOST_TRY { - // this addresses an obscure situtation that occurs when + // this addresses an obscure situation that occurs when // load_constructor de-serializes something through a pointer. ar.next_object_pointer(t); boost::serialization::load_construct_data_adl<Archive, T>( ar_impl, - t, + static_cast<T *>(t), file_version ); } BOOST_CATCH(...){ - ap.release(); + // if we get here the load_construct failed. The heap_allocation + // will be automatically deleted so we don't have to do anything + // special here. BOOST_RETHROW; } BOOST_CATCH_END - ar_impl >> boost::serialization::make_nvp(NULL, * t); - ap.release(); + ar_impl >> boost::serialization::make_nvp(NULL, * static_cast<T *>(t)); } template<class Archive, class T> pointer_iserializer<Archive, T>::pointer_iserializer() : basic_pointer_iserializer( boost::serialization::singleton< - BOOST_DEDUCED_TYPENAME + typename boost::serialization::type_info_implementation< T >::type >::get_const_instance() ) { boost::serialization::singleton< iserializer<Archive, T> @@ -402,30 +425,30 @@ struct load_non_pointer_type { // load_only::invoke(ar, t); } }; template<class T> static void invoke(Archive & ar, T &t){ - typedef BOOST_DEDUCED_TYPENAME mpl::eval_if< + typedef typename mpl::eval_if< // if its primitive mpl::equal_to< boost::serialization::implementation_level< T >, mpl::int_<boost::serialization::primitive_type> >, mpl::identity<load_primitive>, // else - BOOST_DEDUCED_TYPENAME mpl::eval_if< + typename mpl::eval_if< // class info / version mpl::greater_equal< boost::serialization::implementation_level< T >, mpl::int_<boost::serialization::object_class_info> >, // do standard load mpl::identity<load_standard>, // else - BOOST_DEDUCED_TYPENAME mpl::eval_if< + typename mpl::eval_if< // no tracking mpl::equal_to< boost::serialization::tracking_level< T >, mpl::int_<boost::serialization::track_never> >, // do a fast load @@ -463,13 +486,13 @@ struct load_pointer_type { template<class T> static const basic_pointer_iserializer * register_type(Archive &ar, const T & /*t*/){ // there should never be any need to load an abstract polymorphic // class pointer. Inhibiting code generation for this // permits abstract base classes to be used - note: exception // virtual serialize functions used for plug-ins - typedef BOOST_DEDUCED_TYPENAME + typedef typename mpl::eval_if< boost::serialization::is_abstract<const T>, boost::mpl::identity<abstract>, boost::mpl::identity<non_abstract> >::type typex; return typex::template register_type< T >(ar); @@ -479,24 +502,27 @@ struct load_pointer_type { static T * pointer_tweak( const boost::serialization::extended_type_info & eti, void const * const t, const T & ) { // tweak the pointer back to the base class - return static_cast<T *>( - const_cast<void *>( - boost::serialization::void_upcast( - eti, - boost::serialization::singleton< - BOOST_DEDUCED_TYPENAME - boost::serialization::type_info_implementation< T >::type - >::get_const_instance(), - t - ) + void * upcast = const_cast<void *>( + boost::serialization::void_upcast( + eti, + boost::serialization::singleton< + typename + boost::serialization::type_info_implementation< T >::type + >::get_const_instance(), + t ) ); + if(NULL == upcast) + boost::serialization::throw_exception( + archive_exception(archive_exception::unregistered_class) + ); + return static_cast<T *>(upcast); } template<class T> static void check_load(T & /* t */){ check_pointer_level< T >(); check_pointer_tracking< T >(); @@ -541,13 +567,13 @@ struct load_enum_type { }; template<class Archive> struct load_array_type { template<class T> static void invoke(Archive &ar, T &t){ - typedef BOOST_DEDUCED_TYPENAME remove_extent< T >::type value_type; + typedef typename remove_extent< T >::type value_type; // convert integers to correct enum to load // determine number of elements in the array. Consider the // fact that some machines will align elements on boundries // other than characters. std::size_t current_count = sizeof(t) / ( @@ -573,19 +599,19 @@ inline void load(Archive & ar, T &t){ // if this assertion trips. It means we're trying to load a // const object with a compiler that doesn't have correct // funtion template ordering. On other compilers, this is // handled below. detail::check_const_loading< T >(); typedef - BOOST_DEDUCED_TYPENAME mpl::eval_if<is_pointer< T >, + typename mpl::eval_if<is_pointer< T >, mpl::identity<detail::load_pointer_type<Archive> > ,//else - BOOST_DEDUCED_TYPENAME mpl::eval_if<is_array< T >, + typename mpl::eval_if<is_array< T >, mpl::identity<detail::load_array_type<Archive> > ,//else - BOOST_DEDUCED_TYPENAME mpl::eval_if<is_enum< T >, + typename mpl::eval_if<is_enum< T >, mpl::identity<detail::load_enum_type<Archive> > ,//else mpl::identity<detail::load_non_pointer_type<Archive> > > > >::type typex; diff --git a/3rdParty/Boost/src/boost/archive/detail/oserializer.hpp b/3rdParty/Boost/src/boost/archive/detail/oserializer.hpp index 7d2694d..7a7e239 100644 --- a/3rdParty/Boost/src/boost/archive/detail/oserializer.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/oserializer.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_OSERIALIZER_HPP #define BOOST_ARCHIVE_OSERIALIZER_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #pragma inline_depth(511) #pragma inline_recursion(on) #endif #if defined(__MWERKS__) @@ -103,13 +103,13 @@ private: // private constructor to inhibit any existence other than the // static one public: explicit BOOST_DLLEXPORT oserializer() : basic_oserializer( boost::serialization::singleton< - BOOST_DEDUCED_TYPENAME + typename boost::serialization::type_info_implementation< T >::type >::get_const_instance() ) {} virtual BOOST_DLLEXPORT void save_object_data( basic_oarchive & ar, @@ -202,13 +202,13 @@ BOOST_DLLEXPORT void pointer_oserializer<Archive, T>::save_object_ptr( } template<class Archive, class T> pointer_oserializer<Archive, T>::pointer_oserializer() : basic_pointer_oserializer( boost::serialization::singleton< - BOOST_DEDUCED_TYPENAME + typename boost::serialization::type_info_implementation< T >::type >::get_const_instance() ) { // make sure appropriate member function is instantiated boost::serialization::singleton< @@ -272,30 +272,30 @@ struct save_non_pointer_type { }; template<class T> static void invoke(Archive & ar, const T & t){ typedef - BOOST_DEDUCED_TYPENAME mpl::eval_if< + typename mpl::eval_if< // if its primitive mpl::equal_to< boost::serialization::implementation_level< T >, mpl::int_<boost::serialization::primitive_type> >, mpl::identity<save_primitive>, // else - BOOST_DEDUCED_TYPENAME mpl::eval_if< + typename mpl::eval_if< // class info / version mpl::greater_equal< boost::serialization::implementation_level< T >, mpl::int_<boost::serialization::object_class_info> >, // do standard save mpl::identity<save_standard>, // else - BOOST_DEDUCED_TYPENAME mpl::eval_if< + typename mpl::eval_if< // no tracking mpl::equal_to< boost::serialization::tracking_level< T >, mpl::int_<boost::serialization::track_never> >, // do a fast save @@ -339,13 +339,13 @@ struct save_pointer_type { static const basic_pointer_oserializer * register_type(Archive &ar, T & /*t*/){ // there should never be any need to save an abstract polymorphic // class pointer. Inhibiting code generation for this // permits abstract base classes to be used - note: exception // virtual serialize functions used for plug-ins typedef - BOOST_DEDUCED_TYPENAME mpl::eval_if< + typename mpl::eval_if< boost::serialization::is_abstract< T >, mpl::identity<abstract>, mpl::identity<non_abstract> >::type typex; return typex::template register_type< T >(ar); } @@ -370,16 +370,16 @@ struct save_pointer_type { { template<class T> static void save( Archive &ar, T & t ){ - BOOST_DEDUCED_TYPENAME + typename boost::serialization::type_info_implementation< T >::type const & i = boost::serialization::singleton< - BOOST_DEDUCED_TYPENAME + typename boost::serialization::type_info_implementation< T >::type >::get_const_instance(); boost::serialization::extended_type_info const * const this_type = & i; // retrieve the true type of the object pointed to @@ -449,13 +449,13 @@ struct save_pointer_type { static void save( Archive & ar, const T & t ){ check_pointer_level< T >(); check_pointer_tracking< T >(); - typedef BOOST_DEDUCED_TYPENAME mpl::eval_if< + typedef typename mpl::eval_if< is_polymorphic< T >, mpl::identity<polymorphic>, mpl::identity<non_polymorphic> >::type type; type::save(ar, const_cast<T &>(t)); } @@ -487,13 +487,13 @@ struct save_enum_type template<class Archive> struct save_array_type { template<class T> static void invoke(Archive &ar, const T &t){ - typedef BOOST_DEDUCED_TYPENAME boost::remove_extent< T >::type value_type; + typedef typename boost::remove_extent< T >::type value_type; save_access::end_preamble(ar); // consider alignment std::size_t c = sizeof(t) / ( static_cast<const char *>(static_cast<const void *>(&t[1])) - static_cast<const char *>(static_cast<const void *>(&t[0])) @@ -506,19 +506,19 @@ struct save_array_type } // detail template<class Archive, class T> inline void save(Archive & ar, /*const*/ T &t){ typedef - BOOST_DEDUCED_TYPENAME mpl::eval_if<is_pointer< T >, + typename mpl::eval_if<is_pointer< T >, mpl::identity<detail::save_pointer_type<Archive> >, //else - BOOST_DEDUCED_TYPENAME mpl::eval_if<is_enum< T >, + typename mpl::eval_if<is_enum< T >, mpl::identity<detail::save_enum_type<Archive> >, //else - BOOST_DEDUCED_TYPENAME mpl::eval_if<is_array< T >, + typename mpl::eval_if<is_array< T >, mpl::identity<detail::save_array_type<Archive> >, //else mpl::identity<detail::save_non_pointer_type<Archive> > > > >::type typex; diff --git a/3rdParty/Boost/src/boost/archive/detail/register_archive.hpp b/3rdParty/Boost/src/boost/archive/detail/register_archive.hpp index e31ae46..81a19b9 100644 --- a/3rdParty/Boost/src/boost/archive/detail/register_archive.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/register_archive.hpp @@ -78,13 +78,13 @@ void instantiate_ptr_serialization(Serializable*, int, adl_tag ) {} // Archive and any exported Serializable type. See also: // boost/serialization/export.hpp # define BOOST_SERIALIZATION_REGISTER_ARCHIVE(Archive) \ namespace boost { namespace archive { namespace detail { \ \ template <class Serializable> \ -BOOST_DEDUCED_TYPENAME _ptr_serialization_support<Archive, Serializable>::type \ +typename _ptr_serialization_support<Archive, Serializable>::type \ instantiate_ptr_serialization( Serializable*, Archive*, adl_tag ); \ \ }}} #endif }}} // namespace boost::archive::detail diff --git a/3rdParty/Boost/src/boost/archive/detail/utf8_codecvt_facet.hpp b/3rdParty/Boost/src/boost/archive/detail/utf8_codecvt_facet.hpp index bd859ff..b2430d5 100644 --- a/3rdParty/Boost/src/boost/archive/detail/utf8_codecvt_facet.hpp +++ b/3rdParty/Boost/src/boost/archive/detail/utf8_codecvt_facet.hpp @@ -4,18 +4,20 @@ // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP #define BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP -#define BOOST_UTF8_BEGIN_NAMESPACE \ - namespace boost { namespace archive { namespace detail { -#define BOOST_UTF8_DECL -#define BOOST_UTF8_END_NAMESPACE }}} +#ifdef BOOST_NO_CXX11_HDR_CODECVT + #define BOOST_UTF8_BEGIN_NAMESPACE \ + namespace boost { namespace archive { namespace detail { + #define BOOST_UTF8_DECL + #define BOOST_UTF8_END_NAMESPACE }}} -#include <boost/detail/utf8_codecvt_facet.hpp> - -#undef BOOST_UTF8_END_NAMESPACE -#undef BOOST_UTF8_DECL -#undef BOOST_UTF8_BEGIN_NAMESPACE + #include <boost/detail/utf8_codecvt_facet.hpp> + #undef BOOST_UTF8_END_NAMESPACE + #undef BOOST_UTF8_DECL + #undef BOOST_UTF8_BEGIN_NAMESPACE +#endif // BOOST_NO_CXX11_HDR_CODECVT #endif // BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP + diff --git a/3rdParty/Boost/src/boost/archive/dinkumware.hpp b/3rdParty/Boost/src/boost/archive/dinkumware.hpp index bfa828d..90ba627 100644 --- a/3rdParty/Boost/src/boost/archive/dinkumware.hpp +++ b/3rdParty/Boost/src/boost/archive/dinkumware.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_DINKUMWARE_HPP #define BOOST_ARCHIVE_DINKUMWARE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // dinkumware.hpp: diff --git a/3rdParty/Boost/src/boost/archive/impl/basic_binary_iarchive.ipp b/3rdParty/Boost/src/boost/archive/impl/basic_binary_iarchive.ipp index 8ea39f7..b8e7f45 100644 --- a/3rdParty/Boost/src/boost/archive/impl/basic_binary_iarchive.ipp +++ b/3rdParty/Boost/src/boost/archive/impl/basic_binary_iarchive.ipp @@ -9,13 +9,13 @@ // See http://www.boost.org for updates, documentation, and revision history. #include <string> #include <boost/assert.hpp> #include <algorithm> #include <cstring> -#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME +#include <boost/config.hpp> #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::memcpy; using ::strlen; using ::size_t; } @@ -48,12 +48,14 @@ basic_binary_iarchive<Archive>::load_override(class_name_type & t, int){ template<class Archive> BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_binary_iarchive<Archive>::init(){ // read signature in an archive version independent manner std::string file_signature; + + #if 0 // commented out since it interfers with derivation try { std::size_t l; this->This()->load(l); if(l == std::strlen(BOOST_ARCHIVE_SIGNATURE())) { // borland de-allocator fixup #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101)) @@ -66,12 +68,17 @@ basic_binary_iarchive<Archive>::init(){ } } catch(archive_exception const &) { // catch stream_error archive exceptions // will cause invalid_signature archive exception to be thrown below file_signature = ""; } + #else + // https://svn.boost.org/trac/boost/ticket/7301 + * this->This() >> file_signature; + #endif + if(file_signature != BOOST_ARCHIVE_SIGNATURE()) boost::serialization::throw_exception( archive_exception(archive_exception::invalid_signature) ); // make sure the version of the reading archive library can @@ -110,16 +117,13 @@ basic_binary_iarchive<Archive>::init(){ input_library_version = static_cast<library_version_type>(v); } #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205)) this->set_library_version(input_library_version); #else - #if ! BOOST_WORKAROUND(BOOST_MSVC, <= 1200) - detail:: - #endif - basic_iarchive::set_library_version(input_library_version); + detail::basic_iarchive::set_library_version(input_library_version); #endif if(BOOST_ARCHIVE_VERSION() < input_library_version) boost::serialization::throw_exception( archive_exception(archive_exception::unsupported_version) ); diff --git a/3rdParty/Boost/src/boost/archive/impl/basic_binary_iprimitive.ipp b/3rdParty/Boost/src/boost/archive/impl/basic_binary_iprimitive.ipp index e0f5c2e..9e2340e 100644 --- a/3rdParty/Boost/src/boost/archive/impl/basic_binary_iprimitive.ipp +++ b/3rdParty/Boost/src/boost/archive/impl/basic_binary_iprimitive.ipp @@ -25,12 +25,13 @@ namespace std{ #include <boost/serialization/throw_exception.hpp> #include <boost/scoped_ptr.hpp> #include <boost/archive/archive_exception.hpp> #include <boost/archive/codecvt_null.hpp> #include <boost/archive/add_facet.hpp> +#include <boost/archive/basic_binary_iprimitive.hpp> namespace boost { namespace archive { ////////////////////////////////////////////////////////////////////// // implementation of basic_binary_iprimitive diff --git a/3rdParty/Boost/src/boost/archive/impl/basic_binary_oarchive.ipp b/3rdParty/Boost/src/boost/archive/impl/basic_binary_oarchive.ipp index dec2cd7..467fd6f 100644 --- a/3rdParty/Boost/src/boost/archive/impl/basic_binary_oarchive.ipp +++ b/3rdParty/Boost/src/boost/archive/impl/basic_binary_oarchive.ipp @@ -9,13 +9,13 @@ // See http://www.boost.org for updates, documentation, and revision history. #include <string> #include <boost/assert.hpp> #include <algorithm> #include <cstring> -#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME +#include <boost/config.hpp> #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::memcpy; } #endif diff --git a/3rdParty/Boost/src/boost/archive/impl/basic_binary_oprimitive.ipp b/3rdParty/Boost/src/boost/archive/impl/basic_binary_oprimitive.ipp index 02b5ffa..509decb 100644 --- a/3rdParty/Boost/src/boost/archive/impl/basic_binary_oprimitive.ipp +++ b/3rdParty/Boost/src/boost/archive/impl/basic_binary_oprimitive.ipp @@ -28,12 +28,13 @@ namespace std{ using ::wcslen; } #endif #include <boost/detail/workaround.hpp> #include <boost/archive/add_facet.hpp> #include <boost/archive/codecvt_null.hpp> +#include <boost/archive/basic_binary_oprimitive.hpp> namespace boost { namespace archive { ////////////////////////////////////////////////////////////////////// // implementation of basic_binary_oprimitive diff --git a/3rdParty/Boost/src/boost/archive/impl/basic_text_iarchive.ipp b/3rdParty/Boost/src/boost/archive/impl/basic_text_iarchive.ipp index 0a246b7..8d364f9 100644 --- a/3rdParty/Boost/src/boost/archive/impl/basic_text_iarchive.ipp +++ b/3rdParty/Boost/src/boost/archive/impl/basic_text_iarchive.ipp @@ -8,13 +8,13 @@ // See http://www.boost.org for updates, documentation, and revision history. #include <string> #include <algorithm> #include <cstring> -#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME +#include <boost/config.hpp> #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::memcpy; } #endif @@ -59,16 +59,13 @@ basic_text_iarchive<Archive>::init(void){ library_version_type input_library_version; * this->This() >> input_library_version; #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205)) this->set_library_version(input_library_version); #else - #if ! BOOST_WORKAROUND(BOOST_MSVC, <= 1200) - detail:: - #endif - basic_iarchive::set_library_version(input_library_version); + detail::basic_iarchive::set_library_version(input_library_version); #endif // extra little .t is to get around borland quirk if(BOOST_ARCHIVE_VERSION() < input_library_version) boost::serialization::throw_exception( archive_exception(archive_exception::unsupported_version) diff --git a/3rdParty/Boost/src/boost/archive/impl/basic_text_iprimitive.ipp b/3rdParty/Boost/src/boost/archive/impl/basic_text_iprimitive.ipp index ad6a6d5..d0da284 100644 --- a/3rdParty/Boost/src/boost/archive/impl/basic_text_iprimitive.ipp +++ b/3rdParty/Boost/src/boost/archive/impl/basic_text_iprimitive.ipp @@ -27,16 +27,16 @@ namespace std{ #include <boost/archive/iterators/remove_whitespace.hpp> #include <boost/archive/iterators/istream_iterator.hpp> #include <boost/archive/iterators/binary_from_base64.hpp> #include <boost/archive/iterators/transform_width.hpp> -namespace boost { +namespace boost { namespace archive { -namespace { +namespace detail { template<class CharType> bool is_whitespace(CharType c); template<> bool is_whitespace(char t){ return 0 != std::isspace(t); @@ -45,23 +45,23 @@ namespace { #ifndef BOOST_NO_CWCHAR template<> bool is_whitespace(wchar_t t){ return 0 != std::iswspace(t); } #endif -} +} // detail // translate base64 text into binary and copy into buffer // until buffer is full. template<class IStream> BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_text_iprimitive<IStream>::load_binary( void *address, std::size_t count ){ - typedef BOOST_DEDUCED_TYPENAME IStream::char_type CharType; + typedef typename IStream::char_type CharType; if(0 == count) return; BOOST_ASSERT( static_cast<std::size_t>((std::numeric_limits<std::streamsize>::max)()) @@ -70,52 +70,50 @@ basic_text_iprimitive<IStream>::load_binary( if(is.fail()) boost::serialization::throw_exception( archive_exception(archive_exception::input_stream_error) ); // convert from base64 to binary - typedef BOOST_DEDUCED_TYPENAME + typedef typename iterators::transform_width< iterators::binary_from_base64< iterators::remove_whitespace< iterators::istream_iterator<CharType> > ,CharType > ,8 ,6 ,CharType > binary; - - binary ti_begin = binary( + + binary i = binary( BOOST_MAKE_PFTO_WRAPPER( iterators::istream_iterator<CharType>(is) ) ); - + char * caddr = static_cast<char *>(address); // take care that we don't increment anymore than necessary - while(--count > 0){ - *caddr++ = static_cast<char>(*ti_begin); - ++ti_begin; + while(count-- > 0){ + *caddr++ = static_cast<char>(*i++); } - *caddr++ = static_cast<char>(*ti_begin); - - iterators::istream_iterator<CharType> i; + + // skip over any excess input for(;;){ - BOOST_DEDUCED_TYPENAME IStream::int_type r; + typename IStream::int_type r; r = is.get(); if(is.eof()) break; - if(is_whitespace(static_cast<CharType>(r))) + if(detail::is_whitespace(static_cast<CharType>(r))) break; } } - + template<class IStream> BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_text_iprimitive<IStream>::basic_text_iprimitive( IStream &is_, bool no_codecvt ) : @@ -127,13 +125,13 @@ basic_text_iprimitive<IStream>::basic_text_iprimitive( locale_saver(* is_.rdbuf()) { if(! no_codecvt){ archive_locale.reset( add_facet( std::locale::classic(), - new codecvt_null<BOOST_DEDUCED_TYPENAME IStream::char_type> + new codecvt_null<typename IStream::char_type> ) ); is.imbue(* archive_locale); } is >> std::noboolalpha; } diff --git a/3rdParty/Boost/src/boost/archive/impl/basic_text_oarchive.ipp b/3rdParty/Boost/src/boost/archive/impl/basic_text_oarchive.ipp index 34e6995..4170c97 100644 --- a/3rdParty/Boost/src/boost/archive/impl/basic_text_oarchive.ipp +++ b/3rdParty/Boost/src/boost/archive/impl/basic_text_oarchive.ipp @@ -8,13 +8,13 @@ // See http://www.boost.org for updates, documentation, and revision history. #include <string> #include <boost/assert.hpp> #include <cstring> -#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME +#include <boost/config.hpp> #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::memcpy; } #endif diff --git a/3rdParty/Boost/src/boost/archive/impl/basic_text_oprimitive.ipp b/3rdParty/Boost/src/boost/archive/impl/basic_text_oprimitive.ipp index cacab61..33ab4a8 100644 --- a/3rdParty/Boost/src/boost/archive/impl/basic_text_oprimitive.ipp +++ b/3rdParty/Boost/src/boost/archive/impl/basic_text_oprimitive.ipp @@ -6,12 +6,13 @@ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include <cstddef> // NULL +#include <algorithm> // std::copy #include <boost/serialization/pfto.hpp> #include <boost/archive/basic_text_oprimitive.hpp> #include <boost/archive/codecvt_null.hpp> #include <boost/archive/add_facet.hpp> @@ -27,13 +28,13 @@ namespace archive { template<class OStream> BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_text_oprimitive<OStream>::save_binary( const void *address, std::size_t count ){ - typedef BOOST_DEDUCED_TYPENAME OStream::char_type CharType; + typedef typename OStream::char_type CharType; if(0 == count) return; if(os.fail()) boost::serialization::throw_exception( @@ -48,13 +49,13 @@ basic_text_oprimitive<OStream>::save_binary( boost::archive::iterators::transform_width< const char *, 6, 8 > > - ,72 + ,76 ,const char // cwpro8 needs this > base64_text; boost::archive::iterators::ostream_iterator<CharType> oi(os); std::copy( @@ -87,13 +88,13 @@ basic_text_oprimitive<OStream>::basic_text_oprimitive( locale_saver(* os_.rdbuf()) { if(! no_codecvt){ archive_locale.reset( add_facet( std::locale::classic(), - new codecvt_null<BOOST_DEDUCED_TYPENAME OStream::char_type> + new codecvt_null<typename OStream::char_type> ) ); os.imbue(* archive_locale); } os << std::noboolalpha; } diff --git a/3rdParty/Boost/src/boost/archive/impl/basic_xml_grammar.hpp b/3rdParty/Boost/src/boost/archive/impl/basic_xml_grammar.hpp index 807ed07..66ca1f0 100644 --- a/3rdParty/Boost/src/boost/archive/impl/basic_xml_grammar.hpp +++ b/3rdParty/Boost/src/boost/archive/impl/basic_xml_grammar.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_BASIC_XML_GRAMMAR_HPP #define BOOST_ARCHIVE_BASIC_XML_GRAMMAR_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_xml_grammar.hpp @@ -47,17 +47,12 @@ =============================================================================*/ #include <string> #include <boost/config.hpp> #include <boost/detail/workaround.hpp> -// supress noise -#if BOOST_WORKAROUND(BOOST_MSVC, <= 1200) -# pragma warning (disable : 4786) // too long name, harmless warning -#endif - #include <boost/spirit/include/classic_rule.hpp> #include <boost/spirit/include/classic_chset.hpp> #include <boost/archive/basic_archive.hpp> #include <boost/serialization/tracking.hpp> #include <boost/serialization/version.hpp> diff --git a/3rdParty/Boost/src/boost/archive/impl/xml_iarchive_impl.ipp b/3rdParty/Boost/src/boost/archive/impl/xml_iarchive_impl.ipp index c7cbc7f..dc62eed 100644 --- a/3rdParty/Boost/src/boost/archive/impl/xml_iarchive_impl.ipp +++ b/3rdParty/Boost/src/boost/archive/impl/xml_iarchive_impl.ipp @@ -95,15 +95,15 @@ xml_iarchive_impl<Archive>::load(wchar_t * ws){ ); const char * start = s.data(); const char * end = start + s.size(); while(start < end){ wchar_t wc; - int result = std::mbtowc(&wc, start, end - start); - if(0 < result){ - start += result; + int length = std::mbtowc(&wc, start, end - start); + if(0 < length){ + start += length; *ws++ = wc; continue; } boost::serialization::throw_exception( iterators::dataflow_exception( iterators::dataflow_exception::invalid_conversion diff --git a/3rdParty/Boost/src/boost/archive/impl/xml_oarchive_impl.ipp b/3rdParty/Boost/src/boost/archive/impl/xml_oarchive_impl.ipp index 8ab954f..ab1a217 100644 --- a/3rdParty/Boost/src/boost/archive/impl/xml_oarchive_impl.ipp +++ b/3rdParty/Boost/src/boost/archive/impl/xml_oarchive_impl.ipp @@ -5,13 +5,13 @@ // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include <ostream> #include <iomanip> -#include <algorithm> +#include <algorithm> // std::copy #include <string> #include <cstring> // strlen #include <boost/config.hpp> // msvc 6.0 needs this to suppress warnings #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ diff --git a/3rdParty/Boost/src/boost/archive/impl/xml_wiarchive_impl.ipp b/3rdParty/Boost/src/boost/archive/impl/xml_wiarchive_impl.ipp index 9dde66c..a4665ad 100644 --- a/3rdParty/Boost/src/boost/archive/impl/xml_wiarchive_impl.ipp +++ b/3rdParty/Boost/src/boost/archive/impl/xml_wiarchive_impl.ipp @@ -1,45 +1,50 @@ /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 -// xml_wiprimitive.cpp: +// xml_wiarchive_impl.ipp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. -#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME - #include <cstring> #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::memcpy; } //std #endif #include <boost/config.hpp> // msvc 6.0 needs this to suppress warnings #ifndef BOOST_NO_STD_WSTREAMBUF #include <boost/assert.hpp> -#include <algorithm> +#include <algorithm> // std::copy #include <boost/detail/workaround.hpp> // Dinkumware and RogueWave #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) #include <boost/archive/dinkumware.hpp> #endif #include <boost/io/ios_state.hpp> #include <boost/detail/no_exceptions_support.hpp> #include <boost/serialization/pfto.hpp> #include <boost/serialization/string.hpp> #include <boost/archive/add_facet.hpp> -#include <boost/archive/xml_archive_exception.hpp> -#include <boost/archive/detail/utf8_codecvt_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" @@ -164,13 +169,13 @@ xml_wiarchive_impl<Archive>::xml_wiarchive_impl( basic_xml_iarchive<Archive>(flags), gimpl(new xml_wgrammar()) { if(0 == (flags & no_codecvt)){ archive_locale.reset( add_facet( - std::locale::classic(), + is_.getloc(), new boost::archive::detail::utf8_codecvt_facet ) ); is.imbue(* archive_locale); } if(0 == (flags & no_header)){ diff --git a/3rdParty/Boost/src/boost/archive/impl/xml_woarchive_impl.ipp b/3rdParty/Boost/src/boost/archive/impl/xml_woarchive_impl.ipp index 3bf42bd..6092a91 100644 --- a/3rdParty/Boost/src/boost/archive/impl/xml_woarchive_impl.ipp +++ b/3rdParty/Boost/src/boost/archive/impl/xml_woarchive_impl.ipp @@ -8,21 +8,20 @@ #include <boost/config.hpp> #ifndef BOOST_NO_STD_WSTREAMBUF #include <ostream> #include <string> -#include <algorithm> +#include <algorithm> // std::copy #include <locale> -#include <boost/config.hpp> // msvc 6.0 needs this to suppress warnings - // for BOOST_DEDUCED_TYPENAME #include <cstring> // strlen #include <cstdlib> // mbtowc #include <cwchar> // wcslen +#include <boost/config.hpp> #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::strlen; #if ! defined(BOOST_NO_INTRINSIC_WCHAR_T) using ::mbtowc; using ::wcslen; @@ -36,13 +35,20 @@ namespace std{ #include <boost/archive/iterators/xml_escape.hpp> #include <boost/archive/iterators/wchar_from_mb.hpp> #include <boost/archive/iterators/ostream_iterator.hpp> #include <boost/archive/iterators/dataflow_exception.hpp> #include <boost/archive/add_facet.hpp> -#include <boost/archive/detail/utf8_codecvt_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 { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // implemenations of functions specific to wide char archives @@ -125,32 +131,33 @@ xml_woarchive_impl<Archive>::xml_woarchive_impl( basic_xml_oarchive<Archive>(flags) { // Standard behavior is that imbue can be called // a) before output is invoked or // b) after flush has been called. This prevents one-to-many // transforms (such as one to many transforms from getting - // mixed up. 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. + // mixed up. if(0 == (flags & no_codecvt)){ boost::archive::detail::utf8_codecvt_facet *pfacet; #if defined(__SGI_STL_PORT) - static boost::archive::detail::utf8_codecvt_facet + // 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(std::locale::classic(), pfacet)); + archive_locale.reset(add_facet(os_.getloc(), pfacet)); os.imbue(* archive_locale); } if(0 == (flags & no_header)) this->init(); } diff --git a/3rdParty/Boost/src/boost/archive/iterators/base64_from_binary.hpp b/3rdParty/Boost/src/boost/archive/iterators/base64_from_binary.hpp index ecb916a..836d93d 100644 --- a/3rdParty/Boost/src/boost/archive/iterators/base64_from_binary.hpp +++ b/3rdParty/Boost/src/boost/archive/iterators/base64_from_binary.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_ITERATORS_BASE64_FROM_BINARY_HPP #define BOOST_ARCHIVE_ITERATORS_BASE64_FROM_BINARY_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // base64_from_binary.hpp @@ -16,13 +16,12 @@ // See http://www.boost.org for updates, documentation, and revision history. #include <boost/assert.hpp> #include <cstddef> // size_t -#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; } // namespace std #endif @@ -54,38 +53,38 @@ struct from_6_bit { } }; } // namespace detail // note: what we would like to do is -// template<class Base, class CharType = BOOST_DEDUCED_TYPENAME Base::value_type> +// template<class Base, class CharType = typename Base::value_type> // typedef transform_iterator< // from_6_bit<CharType>, // transform_width<Base, 6, sizeof(Base::value_type) * 8, CharType> // > base64_from_binary; // but C++ won't accept this. Rather than using a "type generator" and // using a different syntax, make a derivation which should be equivalent. // // Another issue addressed here is that the transform_iterator doesn't have // a templated constructor. This makes it incompatible with the dataflow // ideal. This is also addressed here. -//template<class Base, class CharType = BOOST_DEDUCED_TYPENAME Base::value_type> +//template<class Base, class CharType = typename Base::value_type> template< class Base, - class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type + class CharType = typename boost::iterator_value<Base>::type > class base64_from_binary : public transform_iterator< detail::from_6_bit<CharType>, Base > { friend class boost::iterator_core_access; typedef transform_iterator< - BOOST_DEDUCED_TYPENAME detail::from_6_bit<CharType>, + typename detail::from_6_bit<CharType>, Base > super_t; public: // make composible buy using templated constructor template<class T> diff --git a/3rdParty/Boost/src/boost/archive/iterators/binary_from_base64.hpp b/3rdParty/Boost/src/boost/archive/iterators/binary_from_base64.hpp index 60f23f3..9d2c87e 100644 --- a/3rdParty/Boost/src/boost/archive/iterators/binary_from_base64.hpp +++ b/3rdParty/Boost/src/boost/archive/iterators/binary_from_base64.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_ITERATORS_BINARY_FROM_BASE64_HPP #define BOOST_ARCHIVE_ITERATORS_BINARY_FROM_BASE64_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // binary_from_base64.hpp @@ -15,13 +15,12 @@ // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include <boost/assert.hpp> -#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME #include <boost/serialization/throw_exception.hpp> #include <boost/serialization/pfto.hpp> #include <boost/static_assert.hpp> #include <boost/iterator/transform_iterator.hpp> #include <boost/archive/iterators/dataflow_exception.hpp> @@ -40,13 +39,13 @@ struct to_6_bit { typedef CharType result_type; CharType operator()(CharType t) const{ const signed char lookup_table[] = { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63, - 52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1, + 52,53,54,55,56,57,58,59,60,61,-1,-1,-1, 0,-1,-1, // render '=' as 0 -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14, 15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1, -1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40, 41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1 }; // metrowerks trips this assertion - how come? @@ -64,13 +63,13 @@ struct to_6_bit { } }; } // namespace detail // note: what we would like to do is -// template<class Base, class CharType = BOOST_DEDUCED_TYPENAME Base::value_type> +// template<class Base, class CharType = typename Base::value_type> // typedef transform_iterator< // from_6_bit<CharType>, // transform_width<Base, 6, sizeof(Base::value_type) * 8, CharType> // > base64_from_binary; // but C++ won't accept this. Rather than using a "type generator" and // using a different syntax, make a derivation which should be equivalent. @@ -78,13 +77,13 @@ struct to_6_bit { // Another issue addressed here is that the transform_iterator doesn't have // a templated constructor. This makes it incompatible with the dataflow // ideal. This is also addressed here. template< class Base, - class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type + class CharType = typename boost::iterator_value<Base>::type > class binary_from_base64 : public transform_iterator< detail::to_6_bit<CharType>, Base > diff --git a/3rdParty/Boost/src/boost/archive/iterators/dataflow_exception.hpp b/3rdParty/Boost/src/boost/archive/iterators/dataflow_exception.hpp index 1d655a1..e3e1860 100644 --- a/3rdParty/Boost/src/boost/archive/iterators/dataflow_exception.hpp +++ b/3rdParty/Boost/src/boost/archive/iterators/dataflow_exception.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_ITERATORS_DATAFLOW_EXCEPTION_HPP #define BOOST_ARCHIVE_ITERATORS_DATAFLOW_EXCEPTION_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // dataflow_exception.hpp: diff --git a/3rdParty/Boost/src/boost/archive/iterators/escape.hpp b/3rdParty/Boost/src/boost/archive/iterators/escape.hpp index bb527d4..a1fee91 100644 --- a/3rdParty/Boost/src/boost/archive/iterators/escape.hpp +++ b/3rdParty/Boost/src/boost/archive/iterators/escape.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_ITERATORS_ESCAPE_HPP #define BOOST_ARCHIVE_ITERATORS_ESCAPE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // escape.hpp @@ -16,13 +16,12 @@ // See http://www.boost.org for updates, documentation, and revision history. #include <boost/assert.hpp> #include <cstddef> // NULL -#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME #include <boost/iterator/iterator_adaptor.hpp> #include <boost/iterator/iterator_traits.hpp> namespace boost { namespace archive { namespace iterators { @@ -32,22 +31,22 @@ namespace iterators { template<class Derived, class Base> class escape : public boost::iterator_adaptor< Derived, Base, - BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type, + typename boost::iterator_value<Base>::type, single_pass_traversal_tag, - BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type + typename boost::iterator_value<Base>::type > { - typedef BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type base_value_type; - typedef BOOST_DEDUCED_TYPENAME boost::iterator_reference<Base>::type reference_type; + typedef typename boost::iterator_value<Base>::type base_value_type; + typedef typename boost::iterator_reference<Base>::type reference_type; friend class boost::iterator_core_access; - typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor< + typedef typename boost::iterator_adaptor< Derived, Base, base_value_type, single_pass_traversal_tag, base_value_type > super_t; diff --git a/3rdParty/Boost/src/boost/archive/iterators/insert_linebreaks.hpp b/3rdParty/Boost/src/boost/archive/iterators/insert_linebreaks.hpp index 5f826ca..7fbc79f 100644 --- a/3rdParty/Boost/src/boost/archive/iterators/insert_linebreaks.hpp +++ b/3rdParty/Boost/src/boost/archive/iterators/insert_linebreaks.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_ITERATORS_INSERT_LINEBREAKS_HPP #define BOOST_ARCHIVE_ITERATORS_INSERT_LINEBREAKS_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // insert_linebreaks.hpp @@ -15,13 +15,13 @@ // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include <boost/assert.hpp> -#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME +#include <boost/config.hpp> #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::memcpy; } #endif #include <boost/serialization/pfto.hpp> @@ -34,13 +34,13 @@ namespace iterators { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // insert line break every N characters template< class Base, int N, - class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type + class CharType = typename boost::iterator_value<Base>::type > class insert_linebreaks : public iterator_adaptor< insert_linebreaks<Base, N, CharType>, Base, CharType, diff --git a/3rdParty/Boost/src/boost/archive/iterators/istream_iterator.hpp b/3rdParty/Boost/src/boost/archive/iterators/istream_iterator.hpp index 1df612d..41aa0be 100644 --- a/3rdParty/Boost/src/boost/archive/iterators/istream_iterator.hpp +++ b/3rdParty/Boost/src/boost/archive/iterators/istream_iterator.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_ITERATORS_ISTREAM_ITERATOR_HPP #define BOOST_ARCHIVE_ITERATORS_ISTREAM_ITERATOR_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // istream_iterator.hpp @@ -38,46 +38,58 @@ class istream_iterator : std::input_iterator_tag, Elem > { friend class boost::iterator_core_access; typedef istream_iterator this_t ; - typedef BOOST_DEDUCED_TYPENAME boost::iterator_facade< + typedef typename boost::iterator_facade< istream_iterator<Elem>, Elem, std::input_iterator_tag, Elem > super_t; - typedef BOOST_DEDUCED_TYPENAME std::basic_istream<Elem> istream_type; + typedef typename std::basic_istream<Elem> istream_type; - //Access the value referred to - Elem dereference() const { - return m_current_value; - } - bool equal(const this_t & rhs) const { // note: only works for comparison against end of stream return m_istream == rhs.m_istream; } +/* + //Access the value referred to + Elem dereference() const { + return m_current_value; + } + void increment(){ if(NULL != m_istream){ m_current_value = static_cast<Elem>(m_istream->get()); if(! m_istream->good()){ const_cast<this_t *>(this)->m_istream = NULL; } } } +*/ + //Access the value referred to + Elem dereference() const { + return m_istream->peek(); + } + + void increment(){ + if(NULL != m_istream){ + m_istream->ignore(1); + } + } istream_type *m_istream; Elem m_current_value; public: istream_iterator(istream_type & is) : m_istream(& is) { - increment(); + //increment(); } istream_iterator() : m_istream(NULL) {} diff --git a/3rdParty/Boost/src/boost/archive/iterators/mb_from_wchar.hpp b/3rdParty/Boost/src/boost/archive/iterators/mb_from_wchar.hpp index d8f8a12..04e7c7e 100644 --- a/3rdParty/Boost/src/boost/archive/iterators/mb_from_wchar.hpp +++ b/3rdParty/Boost/src/boost/archive/iterators/mb_from_wchar.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_ITERATORS_MB_FROM_WCHAR_HPP #define BOOST_ARCHIVE_ITERATORS_MB_FROM_WCHAR_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // mb_from_wchar.hpp @@ -17,13 +17,13 @@ // See http://www.boost.org for updates, documentation, and revision history. #include <boost/assert.hpp> #include <cstddef> // size_t #include <cstdlib> // for wctomb() -#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME +#include <boost/config.hpp> #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; using ::wctomb; } // namespace std #endif @@ -47,13 +47,13 @@ class mb_from_wchar single_pass_traversal_tag, char > { friend class boost::iterator_core_access; - typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor< + typedef typename boost::iterator_adaptor< mb_from_wchar<Base>, Base, wchar_t, single_pass_traversal_tag, char > super_t; diff --git a/3rdParty/Boost/src/boost/archive/iterators/ostream_iterator.hpp b/3rdParty/Boost/src/boost/archive/iterators/ostream_iterator.hpp index 7c3203f..49a9b99 100644 --- a/3rdParty/Boost/src/boost/archive/iterators/ostream_iterator.hpp +++ b/3rdParty/Boost/src/boost/archive/iterators/ostream_iterator.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_ITERATORS_OSTREAM_ITERATOR_HPP #define BOOST_ARCHIVE_ITERATORS_OSTREAM_ITERATOR_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // ostream_iterator.hpp diff --git a/3rdParty/Boost/src/boost/archive/iterators/remove_whitespace.hpp b/3rdParty/Boost/src/boost/archive/iterators/remove_whitespace.hpp index a01049f..4383987 100644 --- a/3rdParty/Boost/src/boost/archive/iterators/remove_whitespace.hpp +++ b/3rdParty/Boost/src/boost/archive/iterators/remove_whitespace.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_ITERATORS_REMOVE_WHITESPACE_HPP #define BOOST_ARCHIVE_ITERATORS_REMOVE_WHITESPACE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // remove_whitespace.hpp @@ -15,23 +15,18 @@ // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include <boost/assert.hpp> -#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME - #include <boost/serialization/pfto.hpp> #include <boost/iterator/iterator_adaptor.hpp> #include <boost/iterator/filter_iterator.hpp> #include <boost/iterator/iterator_traits.hpp> -//#include <boost/detail/workaround.hpp> -//#if ! BOOST_WORKAROUND(BOOST_MSVC, <=1300) - // here is the default standard implementation of the functor used // by the filter iterator to remove spaces. Unfortunately usage // of this implementation in combination with spirit trips a bug // VC 6.5. The only way I can find to work around it is to // implement a special non-standard version for this platform @@ -50,14 +45,12 @@ namespace std{ using ::isspace; } #if defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER) // this is required for the RW STL on Linux and Tru64. #undef isspace #undef iswspace #endif -//#endif // BOOST_WORKAROUND - namespace { // anonymous template<class CharType> struct remove_whitespace_predicate; template<> @@ -97,20 +90,20 @@ class filter_iterator Base, use_default, single_pass_traversal_tag > { friend class boost::iterator_core_access; - typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor< + typedef typename boost::iterator_adaptor< filter_iterator<Predicate, Base>, Base, use_default, single_pass_traversal_tag > super_t; typedef filter_iterator<Predicate, Base> this_t; - typedef BOOST_DEDUCED_TYPENAME super_t::reference reference_type; + typedef typename super_t::reference reference_type; reference_type dereference_impl(){ if(! m_full){ while(! m_predicate(* this->base_reference())) ++(this->base_reference()); m_full = true; @@ -139,23 +132,23 @@ public: }; template<class Base> class remove_whitespace : public filter_iterator< remove_whitespace_predicate< - BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type - //BOOST_DEDUCED_TYPENAME Base::value_type + typename boost::iterator_value<Base>::type + //typename Base::value_type >, Base > { friend class boost::iterator_core_access; typedef filter_iterator< remove_whitespace_predicate< - BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type - //BOOST_DEDUCED_TYPENAME Base::value_type + typename boost::iterator_value<Base>::type + //typename Base::value_type >, Base > super_t; public: // remove_whitespace(){} // why is this needed? // make composible buy using templated constructor diff --git a/3rdParty/Boost/src/boost/archive/iterators/transform_width.hpp b/3rdParty/Boost/src/boost/archive/iterators/transform_width.hpp index 6e2c526..4e11953 100644 --- a/3rdParty/Boost/src/boost/archive/iterators/transform_width.hpp +++ b/3rdParty/Boost/src/boost/archive/iterators/transform_width.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_ITERATORS_TRANSFORM_WIDTH_HPP #define BOOST_ARCHIVE_ITERATORS_TRANSFORM_WIDTH_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // transform_width.hpp @@ -21,149 +21,156 @@ // and vice-versa for implementing base64 encodeing/decoding. Be very careful // when using and end iterator. end is only reliable detected when the input // stream length is some common multiple of x and y. E.G. Base64 6 bit // character and 8 bit bytes. Lowest common multiple is 24 => 4 6 bit characters // or 3 8 bit characters -#include <algorithm> - -#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME & PTFO #include <boost/serialization/pfto.hpp> #include <boost/iterator/iterator_adaptor.hpp> #include <boost/iterator/iterator_traits.hpp> +#include <algorithm> // std::min + namespace boost { namespace archive { namespace iterators { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // class used by text archives to translate char strings to wchar_t // strings of the currently selected locale template< class Base, int BitsOut, int BitsIn, - class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type // output character + class CharType = typename boost::iterator_value<Base>::type // output character > class transform_width : public boost::iterator_adaptor< transform_width<Base, BitsOut, BitsIn, CharType>, Base, CharType, single_pass_traversal_tag, CharType > { friend class boost::iterator_core_access; - typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor< + typedef typename boost::iterator_adaptor< transform_width<Base, BitsOut, BitsIn, CharType>, Base, CharType, single_pass_traversal_tag, CharType > super_t; typedef transform_width<Base, BitsOut, BitsIn, CharType> this_t; - typedef BOOST_DEDUCED_TYPENAME iterator_value<Base>::type base_value_type; + typedef typename iterator_value<Base>::type base_value_type; - CharType fill(); + void fill(); - CharType dereference_impl(){ - if(! m_full){ - m_current_value = fill(); - m_full = true; - } - return m_current_value; + CharType dereference() const { + if(!m_buffer_out_full) + const_cast<this_t *>(this)->fill(); + return m_buffer_out; } - CharType dereference() const { - return const_cast<this_t *>(this)->dereference_impl(); + bool equal_impl(const this_t & rhs){ + if(BitsIn < BitsOut) // discard any left over bits + return this->base_reference() == rhs.base_reference(); + else{ + // BitsIn > BitsOut // zero fill + if(this->base_reference() == rhs.base_reference()){ + m_end_of_sequence = true; + return 0 == m_remaining_bits; + } + return false; + } } - // test for iterator equality + // standard iterator interface bool equal(const this_t & rhs) const { - return - this->base_reference() == rhs.base_reference(); - ; + return const_cast<this_t *>(this)->equal_impl(rhs); } void increment(){ - m_displacement += BitsOut; - - while(m_displacement >= BitsIn){ - m_displacement -= BitsIn; - if(0 == m_displacement) - m_bufferfull = false; - if(! m_bufferfull){ - // note: suspect that this is not invoked for borland - ++(this->base_reference()); - } - } - m_full = false; + m_buffer_out_full = false; } - CharType m_current_value; - // number of bits left in current input character buffer - unsigned int m_displacement; - base_value_type m_buffer; - // flag to current output character is ready - just used to save time - bool m_full; - // flag to indicate that m_buffer has data - bool m_bufferfull; + bool m_buffer_out_full; + CharType m_buffer_out; + + // last read element from input + base_value_type m_buffer_in; + + // number of bits to left in the input buffer. + unsigned int m_remaining_bits; + + // flag to indicate we've reached end of data. + bool m_end_of_sequence; public: // make composible buy using templated constructor template<class T> transform_width(BOOST_PFTO_WRAPPER(T) start) : super_t(Base(BOOST_MAKE_PFTO_WRAPPER(static_cast< T >(start)))), - m_displacement(0), - m_full(false), - m_bufferfull(false) + m_buffer_out_full(false), + // To disable GCC warning, but not truly necessary + //(m_buffer_in will be initialized later before being + //used because m_remaining_bits == 0) + m_buffer_in(0), + m_remaining_bits(0), + m_end_of_sequence(false) {} // intel 7.1 doesn't like default copy constructor transform_width(const transform_width & rhs) : super_t(rhs.base_reference()), - m_current_value(rhs.m_current_value), - m_displacement(rhs.m_displacement), - m_buffer(rhs.m_buffer), - m_full(rhs.m_full), - m_bufferfull(rhs.m_bufferfull) + m_buffer_out_full(rhs.m_buffer_out_full), + m_buffer_in(rhs.m_buffer_in), + m_remaining_bits(rhs.m_remaining_bits), + m_end_of_sequence(false) {} }; -template<class Base, int BitsOut, int BitsIn, class CharType> -CharType transform_width<Base, BitsOut, BitsIn, CharType>::fill(){ - CharType retval = 0; +template< + class Base, + int BitsOut, + int BitsIn, + class CharType +> +void transform_width<Base, BitsOut, BitsIn, CharType>::fill() { unsigned int missing_bits = BitsOut; - for(;;){ - unsigned int bcount; - if(! m_bufferfull){ - m_buffer = * this->base_reference(); - m_bufferfull = true; - bcount = BitsIn; + m_buffer_out = 0; + do{ + if(0 == m_remaining_bits){ + if(m_end_of_sequence){ + m_buffer_in = 0; + m_remaining_bits = missing_bits; + } + else{ + m_buffer_in = * this->base_reference()++; + m_remaining_bits = BitsIn; + } } - else - bcount = BitsIn - m_displacement; - unsigned int i = (std::min)(bcount, missing_bits); + + // append these bits to the next output + // up to the size of the output + unsigned int i = std::min(missing_bits, m_remaining_bits); // shift interesting bits to least significant position - unsigned int j = m_buffer >> (bcount - i); - // strip off uninteresting bits - // (note presumption of two's complement arithmetic) - j &= ~(-(1 << i)); + base_value_type j = m_buffer_in >> (m_remaining_bits - i); + // and mask off the un interesting higher bits + // note presumption of twos complement notation + j &= (1 << i) - 1; // append then interesting bits to the output value - retval <<= i; - retval |= j; + m_buffer_out <<= i; + m_buffer_out |= j; + + // and update counters missing_bits -= i; - if(0 == missing_bits) - break; - // note: suspect that this is not invoked for borland 5.51 - ++(this->base_reference()); - m_bufferfull = false; - } - return retval; + m_remaining_bits -= i; + }while(0 < missing_bits); + m_buffer_out_full = true; } } // namespace iterators } // namespace archive } // namespace boost diff --git a/3rdParty/Boost/src/boost/archive/iterators/unescape.hpp b/3rdParty/Boost/src/boost/archive/iterators/unescape.hpp index 9cbd316..abf6240 100644 --- a/3rdParty/Boost/src/boost/archive/iterators/unescape.hpp +++ b/3rdParty/Boost/src/boost/archive/iterators/unescape.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_ITERATORS_UNESCAPE_HPP #define BOOST_ARCHIVE_ITERATORS_UNESCAPE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // unescape.hpp @@ -15,15 +15,13 @@ // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include <boost/assert.hpp> -#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME #include <boost/iterator/iterator_adaptor.hpp> -//#include <boost/iterator/iterator_traits.hpp> #include <boost/pointee.hpp> namespace boost { namespace archive { namespace iterators { @@ -32,30 +30,30 @@ namespace iterators { // strings of the currently selected locale template<class Derived, class Base> class unescape : public boost::iterator_adaptor< unescape<Derived, Base>, Base, - BOOST_DEDUCED_TYPENAME pointee<Base>::type, + typename pointee<Base>::type, single_pass_traversal_tag, - BOOST_DEDUCED_TYPENAME pointee<Base>::type + typename pointee<Base>::type > { friend class boost::iterator_core_access; - typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor< + typedef typename boost::iterator_adaptor< unescape<Derived, Base>, Base, - BOOST_DEDUCED_TYPENAME pointee<Base>::type, + typename pointee<Base>::type, single_pass_traversal_tag, - BOOST_DEDUCED_TYPENAME pointee<Base>::type + typename pointee<Base>::type > super_t; typedef unescape<Derived, Base> this_t; public: - typedef BOOST_DEDUCED_TYPENAME this_t::value_type value_type; - typedef BOOST_DEDUCED_TYPENAME this_t::reference reference; + typedef typename this_t::value_type value_type; + typedef typename this_t::reference reference; private: value_type dereference_impl() { if(! m_full){ m_current_value = static_cast<Derived *>(this)->drain(); m_full = true; } diff --git a/3rdParty/Boost/src/boost/archive/iterators/wchar_from_mb.hpp b/3rdParty/Boost/src/boost/archive/iterators/wchar_from_mb.hpp index 4da8121..ab81f17 100644 --- a/3rdParty/Boost/src/boost/archive/iterators/wchar_from_mb.hpp +++ b/3rdParty/Boost/src/boost/archive/iterators/wchar_from_mb.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_ITERATORS_WCHAR_FROM_MB_HPP #define BOOST_ARCHIVE_ITERATORS_WCHAR_FROM_MB_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // wchar_from_mb.hpp @@ -18,13 +18,13 @@ #include <boost/assert.hpp> #include <cctype> #include <cstddef> // size_t #include <cstdlib> // mblen -#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME +#include <boost/config.hpp> #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::mblen; using ::mbtowc; } // namespace std #endif @@ -50,13 +50,13 @@ class wchar_from_mb wchar_t, single_pass_traversal_tag, wchar_t > { friend class boost::iterator_core_access; - typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor< + typedef typename boost::iterator_adaptor< wchar_from_mb<Base>, Base, wchar_t, single_pass_traversal_tag, wchar_t > super_t; diff --git a/3rdParty/Boost/src/boost/archive/iterators/xml_escape.hpp b/3rdParty/Boost/src/boost/archive/iterators/xml_escape.hpp index eadb96e..a5d2c51 100644 --- a/3rdParty/Boost/src/boost/archive/iterators/xml_escape.hpp +++ b/3rdParty/Boost/src/boost/archive/iterators/xml_escape.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_ITERATORS_XML_ESCAPE_HPP #define BOOST_ARCHIVE_ITERATORS_XML_ESCAPE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // xml_escape.hpp @@ -14,16 +14,13 @@ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include <boost/assert.hpp> - -#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME #include <boost/serialization/pfto.hpp> - #include <boost/archive/iterators/escape.hpp> namespace boost { namespace archive { namespace iterators { diff --git a/3rdParty/Boost/src/boost/archive/iterators/xml_unescape.hpp b/3rdParty/Boost/src/boost/archive/iterators/xml_unescape.hpp index 3295adb..69438ed 100644 --- a/3rdParty/Boost/src/boost/archive/iterators/xml_unescape.hpp +++ b/3rdParty/Boost/src/boost/archive/iterators/xml_unescape.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_ITERATORS_XML_UNESCAPE_HPP #define BOOST_ARCHIVE_ITERATORS_XML_UNESCAPE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // xml_unescape.hpp @@ -15,14 +15,12 @@ // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include <boost/assert.hpp> -#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME - #include <boost/serialization/throw_exception.hpp> #include <boost/serialization/pfto.hpp> #include <boost/archive/iterators/unescape.hpp> #include <boost/archive/iterators/dataflow_exception.hpp> @@ -36,23 +34,23 @@ template<class Base> class xml_unescape : public unescape<xml_unescape<Base>, Base> { friend class boost::iterator_core_access; typedef xml_unescape<Base> this_t; typedef unescape<this_t, Base> super_t; - typedef BOOST_DEDUCED_TYPENAME boost::iterator_reference<this_t> reference_type; + typedef typename boost::iterator_reference<this_t> reference_type; reference_type dereference() const { return unescape<xml_unescape<Base>, Base>::dereference(); } public: // workaround msvc 7.1 ICU crash #if defined(BOOST_MSVC) typedef int value_type; #else - typedef BOOST_DEDUCED_TYPENAME this_t::value_type value_type; + typedef typename this_t::value_type value_type; #endif void drain_residue(const char *literal); value_type drain(); template<class T> @@ -80,13 +78,13 @@ void xml_unescape<Base>::drain_residue(const char * literal){ // note key constraint on this function is that can't "look ahead" any // more than necessary into base iterator. Doing so would alter the base // iterator refenence which would make subsequent iterator comparisons // incorrect and thereby break the composiblity of iterators. template<class Base> -BOOST_DEDUCED_TYPENAME xml_unescape<Base>::value_type +typename xml_unescape<Base>::value_type //int xml_unescape<Base>::drain(){ value_type retval = * this->base_reference(); if('&' != retval){ return retval; } diff --git a/3rdParty/Boost/src/boost/archive/polymorphic_iarchive.hpp b/3rdParty/Boost/src/boost/archive/polymorphic_iarchive.hpp index 2f76cf2..50488a3 100644 --- a/3rdParty/Boost/src/boost/archive/polymorphic_iarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/polymorphic_iarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_POLYMORPHIC_IARCHIVE_HPP #define BOOST_ARCHIVE_POLYMORPHIC_IARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // polymorphic_iarchive.hpp @@ -36,14 +36,12 @@ namespace std{ #include <boost/archive/detail/register_archive.hpp> #include <boost/archive/detail/decl.hpp> #include <boost/archive/detail/abi_prefix.hpp> // must be the last header namespace boost { -template<class T> -class shared_ptr; namespace serialization { class extended_type_info; } // namespace serialization namespace archive { namespace detail { class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_iarchive; @@ -152,24 +150,17 @@ public: } // namespace archive } // namespace boost #include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas -// note special treatment of shared_ptr. This type needs a special -// structure associated with every archive. We created a "mix-in" -// class to provide this functionality. Since shared_ptr holds a -// special esteem in the boost library - we included it here by default. -#include <boost/archive/shared_ptr_helper.hpp> - -namespace boost { +namespace boost { namespace archive { class polymorphic_iarchive : - public polymorphic_iarchive_impl, - public detail::shared_ptr_helper + public polymorphic_iarchive_impl { public: virtual ~polymorphic_iarchive(){}; }; } // namespace archive diff --git a/3rdParty/Boost/src/boost/archive/polymorphic_oarchive.hpp b/3rdParty/Boost/src/boost/archive/polymorphic_oarchive.hpp index 420029b..1eb9e0b 100644 --- a/3rdParty/Boost/src/boost/archive/polymorphic_oarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/polymorphic_oarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_POLYMORPHIC_OARCHIVE_HPP #define BOOST_ARCHIVE_POLYMORPHIC_OARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // polymorphic_oarchive.hpp @@ -35,14 +35,12 @@ namespace std{ #include <boost/archive/detail/register_archive.hpp> #include <boost/archive/detail/decl.hpp> #include <boost/archive/detail/abi_prefix.hpp> // must be the last header namespace boost { -template<class T> -class shared_ptr; namespace serialization { class extended_type_info; } // namespace serialization namespace archive { namespace detail { class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oarchive; diff --git a/3rdParty/Boost/src/boost/archive/shared_ptr_helper.hpp b/3rdParty/Boost/src/boost/archive/shared_ptr_helper.hpp deleted file mode 100644 index 39e6eb8..0000000 --- a/3rdParty/Boost/src/boost/archive/shared_ptr_helper.hpp +++ /dev/null @@ -1,219 +0,0 @@ -#ifndef BOOST_ARCHIVE_SHARED_PTR_HELPER_HPP -#define BOOST_ARCHIVE_SHARED_PTR_HELPER_HPP - -// MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) -# pragma once -#endif - -/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 -// shared_ptr_helper.hpp: serialization for boost shared pointern - -// (C) Copyright 2004-2009 Robert Ramey, Martin Ecker and Takatoshi Kondo -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// See http://www.boost.org for updates, documentation, and revision history. - -#include <set> -#include <list> -#include <utility> -#include <cstddef> // NULL - -#include <boost/config.hpp> -#include <boost/shared_ptr.hpp> - -#include <boost/type_traits/is_polymorphic.hpp> -#include <boost/serialization/type_info_implementation.hpp> -#include <boost/serialization/shared_ptr_132.hpp> -#include <boost/serialization/throw_exception.hpp> - -#include <boost/archive/archive_exception.hpp> -#include <boost/archive/detail/decl.hpp> - -#include <boost/archive/detail/abi_prefix.hpp> // must be the last headern - -namespace boost_132 { - template<class T> class shared_ptr; -} -namespace boost { - template<class T> class shared_ptr; - namespace serialization { - class extended_type_info; - template<class Archive, class T> - inline void load( - Archive & ar, - boost::shared_ptr< T > &t, - const unsigned int file_version - ); - } -namespace archive{ -namespace detail { - -/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 -// a common class for holding various types of shared pointers - -class shared_ptr_helper { - struct collection_type_compare { - bool operator()( - const shared_ptr<const void> &lhs, - const shared_ptr<const void> &rhs - )const{ - return lhs.get() < rhs.get(); - } - }; - typedef std::set< - boost::shared_ptr<const void>, - collection_type_compare - > collection_type; - typedef collection_type::const_iterator iterator_type; - // list of shared_pointers create accessable by raw pointer. This - // is used to "match up" shared pointers loaded at different - // points in the archive. Note, we delay construction until - // it is actually used since this is by default included as - // a "mix-in" even if shared_ptr isn't used. - collection_type * m_pointers; - - struct null_deleter { - void operator()(void const *) const {} - }; - - struct void_deleter { - const boost::serialization::extended_type_info * m_eti; - void_deleter(const boost::serialization::extended_type_info *eti) : - m_eti(eti) - {} - void operator()(void *vp) const { - m_eti->destroy(vp); - } - }; - -#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS -public: -#else - template<class Archive, class T> - friend inline void boost::serialization::load( - Archive & ar, - boost::shared_ptr< T > &t, - const unsigned int file_version - ); -#endif - -// #ifdef BOOST_SERIALIZATION_SHARED_PTR_132_HPP - // list of loaded pointers. This is used to be sure that the pointers - // stay around long enough to be "matched" with other pointers loaded - // by the same archive. These are created with a "null_deleter" so that - // when this list is destroyed - the underlaying raw pointers are not - // destroyed. This has to be done because the pointers are also held by - // new system which is disjoint from this set. This is implemented - // by a change in load_construct_data below. It makes this file suitable - // only for loading pointers into a 1.33 or later boost system. - std::list<boost_132::shared_ptr<const void> > * m_pointers_132; -// #endif - - // returns pointer to object and an indicator whether this is a - // new entry (true) or a previous one (false) - BOOST_ARCHIVE_DECL(shared_ptr<void>) - get_od( - const void * od, - const boost::serialization::extended_type_info * true_type, - const boost::serialization::extended_type_info * this_type - ); - - BOOST_ARCHIVE_DECL(void) - append(const boost::shared_ptr<const void> &); - - template<class T> - struct non_polymorphic { - static const boost::serialization::extended_type_info * - get_object_identifier(T &){ - return & boost::serialization::singleton< - BOOST_DEDUCED_TYPENAME - boost::serialization::type_info_implementation< T >::type - >::get_const_instance(); - } - }; - template<class T> - struct polymorphic { - static const boost::serialization::extended_type_info * - get_object_identifier(T & t){ - return boost::serialization::singleton< - BOOST_DEDUCED_TYPENAME - boost::serialization::type_info_implementation< T >::type - >::get_const_instance().get_derived_extended_type_info(t); - } - }; -public: - template<class T> - void reset(shared_ptr< T > & s, T * t){ - if(NULL == t){ - s.reset(); - return; - } - const boost::serialization::extended_type_info * this_type - = & boost::serialization::type_info_implementation< T >::type - ::get_const_instance(); - - // get pointer to the most derived object. This is effectively - // the object identifern - typedef BOOST_DEDUCED_TYPENAME mpl::eval_if< - is_polymorphic< T >, - mpl::identity<polymorphic< T > >, - mpl::identity<non_polymorphic< T > > - >::type type; - - const boost::serialization::extended_type_info * true_type - = type::get_object_identifier(*t); - - // note:if this exception is thrown, be sure that derived pointern - // is either registered or exported. - if(NULL == true_type) - boost::serialization::throw_exception( - archive_exception( - archive_exception::unregistered_class, - this_type->get_debug_info() - ) - ); - shared_ptr<void> r = - get_od( - static_cast<const void *>(t), - true_type, - this_type - ); - if(!r){ - s.reset(t); - const void * od = void_downcast( - *true_type, - *this_type, - static_cast<const void *>(t) - ); - shared_ptr<const void> sp(s, od); - append(sp); - } - else{ - s = shared_ptr< T >( - r, - static_cast<T *>(r.get()) - ); - } - } - -// #ifdef BOOST_SERIALIZATION_SHARED_PTR_132_HPP - BOOST_ARCHIVE_DECL(void) - append(const boost_132::shared_ptr<const void> & t); -// #endif -public: - BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) - shared_ptr_helper(); - BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) - ~shared_ptr_helper(); -}; - -} // namespace detail -} // namespace archive -} // namespace boost - -#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas - -#endif // BOOST_ARCHIVE_SHARED_PTR_HELPER_HPP diff --git a/3rdParty/Boost/src/boost/archive/text_iarchive.hpp b/3rdParty/Boost/src/boost/archive/text_iarchive.hpp index 298928b..1fd0f60 100644 --- a/3rdParty/Boost/src/boost/archive/text_iarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/text_iarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_TEXT_IARCHIVE_HPP #define BOOST_ARCHIVE_TEXT_IARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // text_iarchive.hpp @@ -32,24 +32,34 @@ # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { +namespace detail { + template<class Archive> class interface_iarchive; +} // namespace detail + template<class Archive> class text_iarchive_impl : public basic_text_iprimitive<std::istream>, public basic_text_iarchive<Archive> { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else - friend class detail::interface_iarchive<Archive>; - friend class basic_text_iarchive<Archive>; - friend class load_access; protected: + #if BOOST_WORKAROUND(BOOST_MSVC, < 1500) + // for some inexplicable reason insertion of "class" generates compile erro + // on msvc 7.1 + friend detail::interface_iarchive<Archive>; + friend load_access; + #else + friend class detail::interface_iarchive<Archive>; + friend class load_access; + #endif #endif template<class T> void load(T & t){ basic_text_iprimitive<std::istream>::load(t); } void load(version_type & t){ @@ -89,55 +99,31 @@ protected: text_iarchive_impl(std::istream & is, unsigned int flags); // don't import inline definitions! leave this as a reminder. //BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) ~text_iarchive_impl(){}; }; -// do not derive from the classes below. If you want to extend this functionality -// via inhertance, derived from text_iarchive_impl instead. This will -// preserve correct static polymorphism. - -// same as text_iarchive below - without the shared_ptr_helper -class naked_text_iarchive : - public text_iarchive_impl<naked_text_iarchive> -{ -public: - naked_text_iarchive(std::istream & is_, unsigned int flags = 0) : - // note: added _ to suppress useless gcc warning - text_iarchive_impl<naked_text_iarchive>(is_, flags) - {} - ~naked_text_iarchive(){} -}; - } // namespace archive } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas -// note special treatment of shared_ptr. This type needs a special -// structure associated with every archive. We created a "mix-in" -// class to provide this functionality. Since shared_ptr holds a -// special esteem in the boost library - we included it here by default. -#include <boost/archive/shared_ptr_helper.hpp> - #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { class text_iarchive : - public text_iarchive_impl<text_iarchive>, - public detail::shared_ptr_helper -{ + public text_iarchive_impl<text_iarchive>{ public: text_iarchive(std::istream & is_, unsigned int flags = 0) : // note: added _ to suppress useless gcc warning text_iarchive_impl<text_iarchive>(is_, flags) {} ~text_iarchive(){} diff --git a/3rdParty/Boost/src/boost/archive/text_oarchive.hpp b/3rdParty/Boost/src/boost/archive/text_oarchive.hpp index 2100d53..9fd63a9 100644 --- a/3rdParty/Boost/src/boost/archive/text_oarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/text_oarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_TEXT_OARCHIVE_HPP #define BOOST_ARCHIVE_TEXT_OARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // text_oarchive.hpp @@ -39,24 +39,36 @@ namespace std{ # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { +namespace detail { + template<class Archive> class interface_oarchive; +} // namespace detail + template<class Archive> class text_oarchive_impl : /* protected ? */ public basic_text_oprimitive<std::ostream>, public basic_text_oarchive<Archive> { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else - friend class detail::interface_oarchive<Archive>; - friend class basic_text_oarchive<Archive>; - friend class save_access; protected: + #if BOOST_WORKAROUND(BOOST_MSVC, < 1500) + // for some inexplicable reason insertion of "class" generates compile erro + // on msvc 7.1 + friend detail::interface_oarchive<Archive>; + friend basic_text_oarchive<Archive>; + friend save_access; + #else + friend class detail::interface_oarchive<Archive>; + friend class basic_text_oarchive<Archive>; + friend class save_access; + #endif #endif template<class T> void save(const T & t){ this->newtoken(); basic_text_oprimitive<std::ostream>::save(t); } @@ -99,14 +111,12 @@ public: // note: added _ to suppress useless gcc warning text_oarchive_impl<text_oarchive>(os_, flags) {} ~text_oarchive(){} }; -typedef text_oarchive naked_text_oarchive; - } // namespace archive } // namespace boost // required by export BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::text_oarchive) diff --git a/3rdParty/Boost/src/boost/archive/text_wiarchive.hpp b/3rdParty/Boost/src/boost/archive/text_wiarchive.hpp index 7451f3a..5105d35 100644 --- a/3rdParty/Boost/src/boost/archive/text_wiarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/text_wiarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_TEXT_WIARCHIVE_HPP #define BOOST_ARCHIVE_TEXT_WIARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // text_wiarchive.hpp @@ -36,24 +36,34 @@ # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { +namespace detail { + template<class Archive> class interface_iarchive; +} // namespace detail + template<class Archive> class text_wiarchive_impl : public basic_text_iprimitive<std::wistream>, public basic_text_iarchive<Archive> { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else - friend class detail::interface_iarchive<Archive>; - friend class basic_text_iarchive<Archive>; - friend class load_access; protected: + #if BOOST_WORKAROUND(BOOST_MSVC, < 1500) + // for some inexplicable reason insertion of "class" generates compile erro + // on msvc 7.1 + friend detail::interface_iarchive<Archive>; + friend load_access; + #else + friend class detail::interface_iarchive<Archive>; + friend class load_access; + #endif #endif template<class T> void load(T & t){ basic_text_iprimitive<std::wistream>::load(t); } void load(version_type & t){ @@ -86,54 +96,31 @@ protected: } BOOST_WARCHIVE_DECL(BOOST_PP_EMPTY()) text_wiarchive_impl(std::wistream & is, unsigned int flags); ~text_wiarchive_impl(){}; }; -// do not derive from the classes below. If you want to extend this functionality -// via inhertance, derived from text_iarchive_impl instead. This will -// preserve correct static polymorphism. - -// same as text_wiarchive below - without the shared_ptr_helper -class naked_text_wiarchive : - public text_wiarchive_impl<naked_text_wiarchive> -{ -public: - naked_text_wiarchive(std::wistream & is, unsigned int flags = 0) : - text_wiarchive_impl<naked_text_wiarchive>(is, flags) - {} - ~naked_text_wiarchive(){} -}; - } // namespace archive } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas -// note special treatment of shared_ptr. This type needs a special -// structure associated with every archive. We created a "mix-in" -// class to provide this functionality. Since shared_ptr holds a -// special esteem in the boost library - we included it here by default. -#include <boost/archive/shared_ptr_helper.hpp> - #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { class text_wiarchive : - public text_wiarchive_impl<text_wiarchive>, - public detail::shared_ptr_helper -{ + public text_wiarchive_impl<text_wiarchive>{ public: text_wiarchive(std::wistream & is, unsigned int flags = 0) : text_wiarchive_impl<text_wiarchive>(is, flags) {} ~text_wiarchive(){} }; diff --git a/3rdParty/Boost/src/boost/archive/text_woarchive.hpp b/3rdParty/Boost/src/boost/archive/text_woarchive.hpp index 7ed0c82..2f75204 100644 --- a/3rdParty/Boost/src/boost/archive/text_woarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/text_woarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_TEXT_WOARCHIVE_HPP #define BOOST_ARCHIVE_TEXT_WOARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // text_woarchive.hpp @@ -44,24 +44,36 @@ namespace std{ # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { +namespace detail { + template<class Archive> class interface_oarchive; +} // namespace detail + template<class Archive> class text_woarchive_impl : public basic_text_oprimitive<std::wostream>, public basic_text_oarchive<Archive> { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else - friend class detail::interface_oarchive<Archive>; - friend class basic_text_oarchive<Archive>; - friend class save_access; protected: + #if BOOST_WORKAROUND(BOOST_MSVC, < 1500) + // for some inexplicable reason insertion of "class" generates compile erro + // on msvc 7.1 + friend detail::interface_oarchive<Archive>; + friend basic_text_oarchive<Archive>; + friend save_access; + #else + friend class detail::interface_oarchive<Archive>; + friend class basic_text_oarchive<Archive>; + friend class save_access; + #endif #endif template<class T> void save(const T & t){ this->newtoken(); basic_text_oprimitive<std::wostream>::save(t); } @@ -124,14 +136,12 @@ public: text_woarchive(std::wostream & os, unsigned int flags = 0) : text_woarchive_impl<text_woarchive>(os, flags) {} ~text_woarchive(){} }; -typedef text_woarchive naked_text_woarchive; - } // namespace archive } // namespace boost // required by export BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::text_woarchive) diff --git a/3rdParty/Boost/src/boost/archive/wcslen.hpp b/3rdParty/Boost/src/boost/archive/wcslen.hpp index 5c14acf..2a3d635 100644 --- a/3rdParty/Boost/src/boost/archive/wcslen.hpp +++ b/3rdParty/Boost/src/boost/archive/wcslen.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_WCSLEN_HPP #define BOOST_ARCHIVE_WCSLEN_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // wcslen.hpp: diff --git a/3rdParty/Boost/src/boost/archive/xml_archive_exception.hpp b/3rdParty/Boost/src/boost/archive/xml_archive_exception.hpp index 48e6cb3..622cafe 100644 --- a/3rdParty/Boost/src/boost/archive/xml_archive_exception.hpp +++ b/3rdParty/Boost/src/boost/archive/xml_archive_exception.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_XML_ARCHIVE_EXCEPTION_HPP #define BOOST_ARCHIVE_XML_ARCHIVE_EXCEPTION_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // xml_archive_exception.hpp: diff --git a/3rdParty/Boost/src/boost/archive/xml_iarchive.hpp b/3rdParty/Boost/src/boost/archive/xml_iarchive.hpp index be6cfe4..ba50d7c 100644 --- a/3rdParty/Boost/src/boost/archive/xml_iarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/xml_iarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_XML_IARCHIVE_HPP #define BOOST_ARCHIVE_XML_IARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // xml_iarchive.hpp @@ -32,28 +32,40 @@ # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { +namespace detail { + template<class Archive> class interface_iarchive; +} // namespace detail + template<class CharType> class basic_xml_grammar; typedef basic_xml_grammar<char> xml_grammar; template<class Archive> class xml_iarchive_impl : public basic_text_iprimitive<std::istream>, public basic_xml_iarchive<Archive> { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else - friend class detail::interface_iarchive<Archive>; - friend class basic_xml_iarchive<Archive>; - friend class load_access; protected: + #if BOOST_WORKAROUND(BOOST_MSVC, < 1500) + // for some inexplicable reason insertion of "class" generates compile erro + // on msvc 7.1 + friend detail::interface_iarchive<Archive>; + friend basic_xml_iarchive<Archive>; + friend load_access; + #else + friend class detail::interface_iarchive<Archive>; + friend class basic_xml_iarchive<Archive>; + friend class load_access; + #endif #endif // instances of micro xml parser to parse start preambles // scoped_ptr doesn't play nice with borland - so use a naked pointer // scoped_ptr<xml_grammar> gimpl; xml_grammar *gimpl; @@ -99,54 +111,30 @@ protected: BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) xml_iarchive_impl(std::istream & is, unsigned int flags); BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) ~xml_iarchive_impl(); }; -// do not derive from the classes below. If you want to extend this functionality -// via inhertance, derived from text_iarchive_impl instead. This will -// preserve correct static polymorphism. - -// same as xml_iarchive below - without the shared_ptr_helper -class naked_xml_iarchive : - public xml_iarchive_impl<naked_xml_iarchive> -{ -public: - naked_xml_iarchive(std::istream & is, unsigned int flags = 0) : - xml_iarchive_impl<naked_xml_iarchive>(is, flags) - {} - ~naked_xml_iarchive(){} -}; - } // namespace archive } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas - -// note special treatment of shared_ptr. This type needs a special -// structure associated with every archive. We created a "mix-in" -// class to provide this functionality. Since shared_ptr holds a -// special esteem in the boost library - we included it here by default. -#include <boost/archive/shared_ptr_helper.hpp> - #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { class xml_iarchive : - public xml_iarchive_impl<xml_iarchive>, - public detail::shared_ptr_helper -{ + public xml_iarchive_impl<xml_iarchive>{ public: xml_iarchive(std::istream & is, unsigned int flags = 0) : xml_iarchive_impl<xml_iarchive>(is, flags) {} ~xml_iarchive(){}; }; diff --git a/3rdParty/Boost/src/boost/archive/xml_oarchive.hpp b/3rdParty/Boost/src/boost/archive/xml_oarchive.hpp index 167ba09..2ac4ae1 100644 --- a/3rdParty/Boost/src/boost/archive/xml_oarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/xml_oarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_XML_OARCHIVE_HPP #define BOOST_ARCHIVE_XML_OARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // xml_oarchive.hpp @@ -39,24 +39,36 @@ namespace std{ # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { +namespace detail { + template<class Archive> class interface_oarchive; +} // namespace detail + template<class Archive> class xml_oarchive_impl : public basic_text_oprimitive<std::ostream>, public basic_xml_oarchive<Archive> { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else - friend class detail::interface_oarchive<Archive>; - friend class basic_xml_oarchive<Archive>; - friend class save_access; protected: + #if BOOST_WORKAROUND(BOOST_MSVC, < 1500) + // for some inexplicable reason insertion of "class" generates compile erro + // on msvc 7.1 + friend detail::interface_oarchive<Archive>; + friend basic_xml_oarchive<Archive>; + friend save_access; + #else + friend class detail::interface_oarchive<Archive>; + friend class basic_xml_oarchive<Archive>; + friend class save_access; + #endif #endif //void end_preamble(){ // basic_xml_oarchive<Archive>::end_preamble(); //} template<class T> void save(const T & t){ @@ -113,14 +125,12 @@ public: xml_oarchive(std::ostream & os, unsigned int flags = 0) : xml_oarchive_impl<xml_oarchive>(os, flags) {} ~xml_oarchive(){} }; -typedef xml_oarchive naked_xml_oarchive; - } // namespace archive } // namespace boost // required by export BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::xml_oarchive) diff --git a/3rdParty/Boost/src/boost/archive/xml_wiarchive.hpp b/3rdParty/Boost/src/boost/archive/xml_wiarchive.hpp index 59ebbb5..31aff88 100644 --- a/3rdParty/Boost/src/boost/archive/xml_wiarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/xml_wiarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_XML_WIARCHIVE_HPP #define BOOST_ARCHIVE_XML_WIARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // xml_wiarchive.hpp @@ -37,28 +37,40 @@ # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { +namespace detail { + template<class Archive> class interface_iarchive; +} // namespace detail + template<class CharType> class basic_xml_grammar; typedef basic_xml_grammar<wchar_t> xml_wgrammar; template<class Archive> class xml_wiarchive_impl : public basic_text_iprimitive<std::wistream>, public basic_xml_iarchive<Archive> { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else - friend class detail::interface_iarchive<Archive>; - friend class basic_xml_iarchive<Archive>; - friend class load_access; protected: + #if BOOST_WORKAROUND(BOOST_MSVC, < 1500) + // for some inexplicable reason insertion of "class" generates compile erro + // on msvc 7.1 + friend detail::interface_iarchive<Archive>; + friend basic_xml_iarchive<Archive>; + friend load_access; + #else + friend class detail::interface_iarchive<Archive>; + friend class basic_xml_iarchive<Archive>; + friend class load_access; + #endif #endif // instances of micro xml parser to parse start preambles // scoped_ptr doesn't play nice with borland - so use a naked pointer // scoped_ptr<xml_wgrammar> gimpl; xml_wgrammar *gimpl; std::wistream & get_is(){ @@ -104,54 +116,31 @@ protected: BOOST_WARCHIVE_DECL(BOOST_PP_EMPTY()) xml_wiarchive_impl(std::wistream & is, unsigned int flags) ; BOOST_WARCHIVE_DECL(BOOST_PP_EMPTY()) ~xml_wiarchive_impl(); }; -// do not derive from the classes below. If you want to extend this functionality -// via inhertance, derived from xml_wiarchive_impl instead. This will -// preserve correct static polymorphism. - -// same as xml_wiarchive below - without the shared_ptr_helper -class naked_xml_wiarchive : - public xml_wiarchive_impl<naked_xml_wiarchive> -{ -public: - naked_xml_wiarchive(std::wistream & is, unsigned int flags = 0) : - xml_wiarchive_impl<naked_xml_wiarchive>(is, flags) - {} - ~naked_xml_wiarchive(){} -}; - } // namespace archive } // namespace boost #ifdef BOOST_MSVC # pragma warning(pop) #endif #include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas -// note special treatment of shared_ptr. This type needs a special -// structure associated with every archive. We created a "mix-in" -// class to provide this functionality. Since shared_ptr holds a -// special esteem in the boost library - we included it here by default. -#include <boost/archive/shared_ptr_helper.hpp> - #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { class xml_wiarchive : - public xml_wiarchive_impl<xml_wiarchive>, - public detail::shared_ptr_helper -{ + public xml_wiarchive_impl<xml_wiarchive>{ public: xml_wiarchive(std::wistream & is, unsigned int flags = 0) : xml_wiarchive_impl<xml_wiarchive>(is, flags) {} ~xml_wiarchive(){} }; diff --git a/3rdParty/Boost/src/boost/archive/xml_woarchive.hpp b/3rdParty/Boost/src/boost/archive/xml_woarchive.hpp index 08c0fdc..7fcaeb9 100644 --- a/3rdParty/Boost/src/boost/archive/xml_woarchive.hpp +++ b/3rdParty/Boost/src/boost/archive/xml_woarchive.hpp @@ -1,11 +1,11 @@ #ifndef BOOST_ARCHIVE_XML_WOARCHIVE_HPP #define BOOST_ARCHIVE_XML_WOARCHIVE_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // xml_woarchive.hpp @@ -43,25 +43,38 @@ namespace std{ # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { +namespace detail { + template<class Archive> class interface_oarchive; +} // namespace detail + template<class Archive> class xml_woarchive_impl : public basic_text_oprimitive<std::wostream>, public basic_xml_oarchive<Archive> { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else - friend class detail::interface_oarchive<Archive>; - friend class basic_xml_oarchive<Archive>; - friend class save_access; protected: + #if BOOST_WORKAROUND(BOOST_MSVC, < 1500) + // for some inexplicable reason insertion of "class" generates compile erro + // on msvc 7.1 + friend detail::interface_oarchive<Archive>; + friend basic_xml_oarchive<Archive>; + friend save_access; + #else + friend class detail::interface_oarchive<Archive>; + friend class basic_xml_oarchive<Archive>; + friend class save_access; + #endif #endif + //void end_preamble(){ // basic_xml_oarchive<Archive>::end_preamble(); //} template<class T> void save(const T & t){ @@ -119,14 +132,12 @@ public: xml_woarchive(std::wostream & os, unsigned int flags = 0) : xml_woarchive_impl<xml_woarchive>(os, flags) {} ~xml_woarchive(){} }; -typedef xml_woarchive naked_xml_woarchive; - } // namespace archive } // namespace boost // required by export BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::xml_woarchive) |