diff --git a/doc/contents.html b/doc/contents.html index b3a87fec..124d20bb 100644 --- a/doc/contents.html +++ b/doc/contents.html @@ -302,7 +302,7 @@ function initialize() {
Motivation
Features -
Class Interfac' +
Class Interface
Requirements
Examples
Multi-Threading diff --git a/src/basic_archive.cpp b/src/basic_archive.cpp index 38dc6075..8d0fd7b1 100644 --- a/src/basic_archive.cpp +++ b/src/basic_archive.cpp @@ -59,9 +59,9 @@ BOOST_ARCHIVE_SIGNATURE(){ // types caused backwards compatibility breaking change in 1.35 // 6 - Boost 1.41, serializing collection sizes as std::size_t -BOOST_ARCHIVE_DECL(unsigned char) +BOOST_ARCHIVE_DECL(version_type) BOOST_ARCHIVE_VERSION(){ - return 6; + return version_type(6); } } // namespace archive diff --git a/src/basic_iarchive.cpp b/src/basic_iarchive.cpp index 662ee64e..3b8ab64e 100644 --- a/src/basic_iarchive.cpp +++ b/src/basic_iarchive.cpp @@ -23,7 +23,7 @@ namespace std{ } // namespace std #endif -#include +#include #include #include #include @@ -93,18 +93,18 @@ class basic_iarchive_impl { // used by load object to look up class id given basic_serializer struct cobject_type { - const basic_iserializer * bis; - const class_id_type class_id; + const basic_iserializer * m_bis; + const class_id_type m_class_id; cobject_type( - class_id_type class_id_, - const basic_iserializer & bis_ + std::size_t class_id, + const basic_iserializer & bis ) : - bis(& bis_), - class_id(class_id_) + m_bis(& bis), + m_class_id(class_id) {} cobject_type(const cobject_type & rhs) : - bis(rhs.bis), - class_id(rhs.class_id) + m_bis(rhs.m_bis), + m_class_id(rhs.m_class_id) {} // the following cannot be defined because of the const // member. This will generate a link error if an attempt @@ -112,7 +112,7 @@ class basic_iarchive_impl { cobject_type & operator=(const cobject_type & rhs); bool operator<(const cobject_type &rhs) const { - return *bis < *(rhs.bis); + return *m_bis < *(rhs.m_bis); } }; typedef std::set cobject_info_set_type; @@ -174,7 +174,7 @@ class basic_iarchive_impl { pending_version(0) {} ~basic_iarchive_impl(){} - void set_library_version(unsigned int archive_library_version){ + void set_library_version(version_type archive_library_version){ m_archive_library_version = archive_library_version; } bool @@ -289,7 +289,14 @@ inline class_id_type basic_iarchive_impl::register_type( const basic_iserializer & bis ){ - class_id_type id(static_cast(cobject_info_set.size())); + assert( + cobject_info_set.size() + <= + boost::integer_traits::const_max + ); + class_id_type id(static_cast( + cobject_info_set.size() + )); cobject_type co(id, bis); std::pair result = cobject_info_set.insert(co); @@ -298,7 +305,7 @@ basic_iarchive_impl::register_type( cobject_id_vector.push_back(cobject_id(bis)); assert(cobject_info_set.size() == cobject_id_vector.size()); } - id = result.first->class_id; + id = result.first->m_class_id; // borland complains without this minor hack const int tid = id; cobject_id & coid = cobject_id_vector[tid]; @@ -405,6 +412,11 @@ basic_iarchive_impl::load_pointer( return bpis_ptr; } + assert( + cobject_info_set.size() + <= + boost::integer_traits::const_max + ); // if its a new class type - i.e. never been registered if(class_id_type(cobject_info_set.size()) <= cid){ // if its either abstract @@ -509,7 +521,7 @@ basic_iarchive::~basic_iarchive() } BOOST_ARCHIVE_DECL(void) -basic_iarchive::set_library_version(unsigned int archive_library_version){ +basic_iarchive::set_library_version(version_type archive_library_version){ pimpl->set_library_version(archive_library_version); } diff --git a/src/basic_oarchive.cpp b/src/basic_oarchive.cpp index d6b25d61..41fa48e9 100644 --- a/src/basic_oarchive.cpp +++ b/src/basic_oarchive.cpp @@ -91,26 +91,28 @@ class basic_oarchive_impl { // keyed on type_info struct cobject_type { - const basic_oserializer * bos_ptr; - const class_id_type class_id; - bool initialized; + const basic_oserializer * m_bos_ptr; + const class_id_type m_class_id; + bool m_initialized; cobject_type( - std::size_t class_id_, - const basic_oserializer & bos_ + std::size_t class_id, + const basic_oserializer & bos ) : - bos_ptr(& bos_), - class_id(class_id_), - initialized(false) + m_bos_ptr(& bos), + m_class_id( + static_cast(class_id) + ), + m_initialized(false) {} - cobject_type(const basic_oserializer & bos_) - : bos_ptr(& bos_) + cobject_type(const basic_oserializer & bos) + : m_bos_ptr(& bos) {} cobject_type( const cobject_type & rhs ) : - bos_ptr(rhs.bos_ptr), - class_id(rhs.class_id), - initialized(rhs.initialized) + m_bos_ptr(rhs.m_bos_ptr), + m_class_id(rhs.m_class_id), + m_initialized(rhs.m_initialized) {} // the following cannot be defined because of the const // member. This will generate a link error if an attempt @@ -118,7 +120,7 @@ class basic_oarchive_impl { // use this only for lookup argument cobject_type & operator=(const cobject_type &rhs); bool operator<(const cobject_type &rhs) const { - return *bos_ptr < *(rhs.bos_ptr); + return *m_bos_ptr < *(rhs.m_bos_ptr); } }; // keyed on type_info @@ -167,9 +169,14 @@ class basic_oarchive_impl { // return NULL if not found inline const basic_oserializer * basic_oarchive_impl::find(const serialization::extended_type_info & ti) const { - class bosarg : public basic_oserializer + #ifdef BOOST_MSVC + # pragma warning(push) + # pragma warning(disable : 4511 4512) + #endif + class bosarg : + public basic_oserializer { - bool class_info() const { + bool class_info() const { assert(false); return false; } @@ -179,9 +186,9 @@ basic_oarchive_impl::find(const serialization::extended_type_info & ti) const { return false; } // returns class version - unsigned int version() const { + version_type version() const { assert(false); - return 0; + return version_type(0); } // returns true if this class is polymorphic bool is_polymorphic() const{ @@ -189,7 +196,7 @@ basic_oarchive_impl::find(const serialization::extended_type_info & ti) const { return false; } void save_object_data( - basic_oarchive & ar, const void * x + basic_oarchive & /*ar*/, const void * /*x*/ ) const { assert(false); } @@ -198,6 +205,9 @@ basic_oarchive_impl::find(const serialization::extended_type_info & ti) const { boost::archive::detail::basic_oserializer(eti) {} }; + #ifdef BOOST_MSVC + #pragma warning(pop) + #endif bosarg bos(ti); cobject_info_set_type::const_iterator cit = cobject_info_set.find(cobject_type(bos)); @@ -209,12 +219,17 @@ basic_oarchive_impl::find(const serialization::extended_type_info & ti) const { return NULL; } // return pointer to the real class - return cit->bos_ptr; + return cit->m_bos_ptr; } inline const basic_oarchive_impl::cobject_type & basic_oarchive_impl::find(const basic_oserializer & bos) { + assert( + cobject_info_set.size() + <= + boost::integer_traits::const_max + ); std::pair cresult = cobject_info_set.insert(cobject_type(cobject_info_set.size(), bos)); return *(cresult.first); @@ -224,6 +239,11 @@ inline const basic_oarchive_impl::cobject_type & basic_oarchive_impl::register_type( const basic_oserializer & bos ){ + assert( + cobject_info_set.size() + <= + boost::integer_traits::const_max + ); cobject_type co(cobject_info_set.size(), bos); std::pair result = cobject_info_set.insert(co); @@ -247,11 +267,11 @@ basic_oarchive_impl::save_object( // get class information for this object const cobject_type & co = register_type(bos); if(bos.class_info()){ - if( ! co.initialized){ - ar.vsave(class_id_optional_type(co.class_id)); + if( ! co.m_initialized){ + ar.vsave(class_id_optional_type(co.m_class_id)); ar.vsave(tracking_type(bos.tracking(m_flags))); ar.vsave(version_type(bos.version())); - (const_cast(co)).initialized = true; + (const_cast(co)).m_initialized = true; } } @@ -267,7 +287,7 @@ basic_oarchive_impl::save_object( // look for an existing object id object_id_type oid(object_set.size()); // lookup to see if this object has already been written to the archive - basic_oarchive_impl::aobject ao(t, co.class_id, oid); + basic_oarchive_impl::aobject ao(t, co.m_class_id, oid); std::pair aresult = object_set.insert(ao); oid = aresult.first->object_id; @@ -306,8 +326,8 @@ basic_oarchive_impl::save_pointer( const basic_oserializer & bos = bpos_ptr->get_basic_serializer(); std::size_t original_count = cobject_info_set.size(); const cobject_type & co = register_type(bos); - if(! co.initialized){ - ar.vsave(co.class_id); + if(! co.m_initialized){ + ar.vsave(co.m_class_id); // if its a previously unregistered class if((cobject_info_set.size() > original_count)){ if(bos.is_polymorphic()){ @@ -335,10 +355,10 @@ basic_oarchive_impl::save_pointer( ar.vsave(tracking_type(bos.tracking(m_flags))); ar.vsave(version_type(bos.version())); } - (const_cast(co)).initialized = true; + (const_cast(co)).m_initialized = true; } else{ - ar.vsave(class_id_reference_type(co.class_id)); + ar.vsave(class_id_reference_type(co.m_class_id)); } // if we're not tracking @@ -355,7 +375,7 @@ basic_oarchive_impl::save_pointer( object_id_type oid(object_set.size()); // lookup to see if this object has already been written to the archive - basic_oarchive_impl::aobject ao(t, co.class_id, oid); + basic_oarchive_impl::aobject ao(t, co.m_class_id, oid); std::pair aresult = object_set.insert(ao); oid = aresult.first->object_id; diff --git a/src/basic_xml_grammar.ipp b/src/basic_xml_grammar.ipp index a2b2cb4b..0d7682bb 100644 --- a/src/basic_xml_grammar.ipp +++ b/src/basic_xml_grammar.ipp @@ -16,11 +16,20 @@ #include #include // BOOST_DEDUCED_TYPENAME +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable : 4511 4512) +#endif + // spirit stuff #include #include #include +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + // for head_iterator test //#include #include @@ -43,6 +52,11 @@ namespace archive { namespace xml { // anonymous +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable : 4511 4512) +#endif + template struct assign_impl { T & t; @@ -67,6 +81,9 @@ struct assign_impl { ++b; } } + assign_impl & operator=( + assign_impl & rhs + ); assign_impl(std::string & t_) : t(t_) {} @@ -150,6 +167,10 @@ struct append_lit { {} }; +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + } // namespace anonymous template @@ -171,10 +192,12 @@ bool basic_xml_grammar::my_parse( CharType val; do{ - val = is.get(); - arg += val; + BOOST_DEDUCED_TYPENAME basic_xml_grammar::IStream::int_type + result = is.get(); if(is.fail()) return false; + val = static_cast(result); + arg += val; } while(val != delimiter); diff --git a/src/extended_type_info.cpp b/src/extended_type_info.cpp index 0c95e1ef..d05fa7e3 100644 --- a/src/extended_type_info.cpp +++ b/src/extended_type_info.cpp @@ -32,6 +32,11 @@ namespace std{ using ::strcmp; } #define BOOST_SERIALIZATION_SOURCE #include +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable : 4511 4512) +#endif + namespace boost { namespace serialization { namespace detail { @@ -63,6 +68,11 @@ struct key_compare typedef std::multiset ktmap; +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable : 4511 4512) +#endif + class extended_type_info_arg : public extended_type_info { virtual bool @@ -87,6 +97,10 @@ public: } }; +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + } // namespace detail BOOST_SERIALIZATION_DECL(void) diff --git a/src/extended_type_info_typeid.cpp b/src/extended_type_info_typeid.cpp index 5b9f0f8c..11557371 100644 --- a/src/extended_type_info_typeid.cpp +++ b/src/extended_type_info_typeid.cpp @@ -51,9 +51,9 @@ extended_type_info_typeid_0::is_less_than( // shortcut for common case if(this == & rhs) return false; - return static_cast(m_ti->before( + return 0 != m_ti->before( *(static_cast(rhs).m_ti) - )); + ); } BOOST_SERIALIZATION_DECL(bool) @@ -63,10 +63,14 @@ extended_type_info_typeid_0::is_equal( // shortcut for common case if(this == & rhs) return true; - return static_cast( + return + // note: std::type_info == operator returns an int !!! + // the following permits conversion to bool without a warning. + ! ( * m_ti - == *(static_cast(rhs).m_ti) - ); + != *(static_cast(rhs).m_ti) + ) + ; } BOOST_SERIALIZATION_DECL(BOOST_PP_EMPTY()) @@ -109,6 +113,11 @@ extended_type_info_typeid_0::type_unregister() m_ti = NULL; } +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable : 4511 4512) +#endif + // this derivation is used for creating search arguments class extended_type_info_typeid_arg : public extended_type_info_typeid_0 @@ -127,6 +136,10 @@ public: } }; +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + BOOST_SERIALIZATION_DECL(const extended_type_info *) extended_type_info_typeid_0::get_extended_type_info( const std::type_info & ti diff --git a/src/void_cast.cpp b/src/void_cast.cpp index 934f5f51..f016b418 100644 --- a/src/void_cast.cpp +++ b/src/void_cast.cpp @@ -67,6 +67,11 @@ struct void_caster_compare { typedef std::set set_type; typedef boost::serialization::singleton void_caster_registry; +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable : 4511 4512) +#endif + // implementation of shortcut void caster class void_caster_shortcut : public void_caster { @@ -113,6 +118,10 @@ public: } }; +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + void const * void_caster_shortcut::vbc_downcast( void const * const t @@ -165,16 +174,21 @@ void_caster_shortcut::vbc_upcast( return NULL; } +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable : 4511 4512) +#endif + // just used as a search key class void_caster_argument : public void_caster { virtual void const * - upcast(void const * const t) const { + upcast(void const * const /*t*/) const { assert(false); return NULL; } virtual void const * - downcast( void const * const t) const { + downcast( void const * const /*t*/) const { assert(false); return NULL; } @@ -188,6 +202,10 @@ public: ~void_caster_argument(){}; }; +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + // implementation of void caster base class BOOST_SERIALIZATION_DECL(void) void_caster::recursive_register(bool includes_virtual_base) const { diff --git a/util/test.jam b/util/test.jam index e9b37b13..67e1853c 100644 --- a/util/test.jam +++ b/util/test.jam @@ -42,7 +42,7 @@ rule run-template ( test-name : sources * : requirements * ) { msvc:_SCL_SECURE_NO_DEPRECATE msvc:_CRT_SECURE_NO_WARNINGS msvc:_CRT_SECURE_NO_DEPRECATE - msvc-8.0:"-wd4996" + msvc:"-wd4996" # toolset optimizations gcc:"-ftemplate-depth-255" msvc:"-Gy" diff --git a/vc7ide/test_iterators.vcproj b/vc7ide/test_iterators.vcproj index 1935d622..82ee2256 100644 --- a/vc7ide/test_iterators.vcproj +++ b/vc7ide/test_iterators.vcproj @@ -29,7 +29,7 @@ TreatWChar_tAsBuiltInType="TRUE" ForceConformanceInForLoopScope="TRUE" RuntimeTypeInfo="TRUE" - WarningLevel="3" + WarningLevel="4" Detect64BitPortabilityProblems="FALSE" DebugInformationFormat="1" CompileAs="0"/> diff --git a/vc7ide/test_polymorphic.vcproj b/vc7ide/test_polymorphic.vcproj index 49002cef..48e792dd 100644 --- a/vc7ide/test_polymorphic.vcproj +++ b/vc7ide/test_polymorphic.vcproj @@ -21,7 +21,7 @@ Optimization="0" ImproveFloatingPointConsistency="TRUE" AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\"" - PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1;BOOST_ARCHIVE_TEST=polymorphic_text_archive.hpp" SmallerTypeCheck="TRUE" RuntimeLibrary="3" BufferSecurityCheck="TRUE" diff --git a/vc7ide/test_simple_class.vcproj b/vc7ide/test_simple_class.vcproj index 281d0932..1934b186 100644 --- a/vc7ide/test_simple_class.vcproj +++ b/vc7ide/test_simple_class.vcproj @@ -29,7 +29,7 @@ TreatWChar_tAsBuiltInType="TRUE" ForceConformanceInForLoopScope="TRUE" RuntimeTypeInfo="TRUE" - WarningLevel="3" + WarningLevel="4" Detect64BitPortabilityProblems="FALSE" DebugInformationFormat="1" CompileAs="0"/>