--- /dev/null
+# Boost serialization Library Build Jamfile
+# (C) Copyright Robert Ramey 2002-2004.
+# Use, modification, and distribution are 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/libs/serialization for the library home page.
+
+project boost/serialization
+ : source-location ../src
+ : requirements
+ <conditional>@include-spirit
+;
+
+SPIRIT_ROOT = [ modules.peek : SPIRIT_ROOT ] ;
+rule include-spirit ( properties * )
+{
+ local old-compiler ;
+ if <toolset>borland in $(properties)
+ {
+ if ! <toolset-borland:version>6.1.0 in $(properties)
+ {
+ old-compiler = true ;
+ }
+
+ }
+ else if <toolset>msvc in $(properties)
+ {
+ if <toolset-msvc:version>6.5 in $(properties)
+ || <toolset-msvc:version>7.0 in $(properties)
+ {
+ old-compiler = true ;
+ }
+ }
+
+ local result ;
+ if $(old-compiler)
+ {
+ if $(SPIRIT_ROOT)
+ {
+ # note - we can't use <include>$(SPIRIT_ROOT) because
+ # it puts -I$(SPIRIT_ROOT) AFTER the "../../.." in the command line.
+ # so use these instead
+ result = <cxxflags>-I$(SPIRIT_ROOT) ;
+ }
+ else
+ {
+ echo **** spirit 1.6x required to build library with this compiler **** ;
+ result = <build>no ;
+ }
+ }
+ return $(result) ;
+}
+
+SOURCES =
+ basic_archive
+ basic_iarchive
+ basic_iserializer
+ basic_oarchive
+ basic_oserializer
+ basic_pointer_iserializer
+ basic_pointer_oserializer
+ basic_serializer_map
+ basic_text_iprimitive
+ basic_text_oprimitive
+ basic_xml_archive
+ binary_iarchive
+ binary_oarchive
+ extended_type_info
+ extended_type_info_typeid
+ extended_type_info_no_rtti
+ polymorphic_iarchive
+ polymorphic_oarchive
+ stl_port
+ text_iarchive
+ text_oarchive
+ void_cast
+ archive_exception
+ xml_grammar
+ xml_iarchive
+ xml_oarchive
+ xml_archive_exception
+ shared_ptr_helper
+;
+
+WSOURCES =
+ basic_text_wiprimitive
+ basic_text_woprimitive
+ text_wiarchive
+ text_woarchive
+ utf8_codecvt_facet
+ xml_wgrammar
+ xml_wiarchive
+ xml_woarchive
+ codecvt_null
+;
+
+
+lib boost_serialization
+ : $(SOURCES).cpp
+ :
+ <toolset>msvc:<cxxflags>/Gy
+ <link>shared:<define>BOOST_SERIALIZATION_DYN_LINK=1
+ ;
+
+lib boost_wserialization
+ : $(WSOURCES).cpp boost_serialization
+ :
+ <toolset>msvc:<cxxflags>/Gy
+ <link>shared:<define>BOOST_SERIALIZATION_DYN_LINK=1
+ ;
+
+boost-install boost_serialization boost_wserialization ;
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Acknowledgments</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
+ "header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="http://www.boost.org"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Acknowledgments</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<ul>
+ <li><a href="http://www.autoform.com">AutoForm Engineering GmbH</a> supported
+ development efforts to extend correct serialization to objects stored in DLLS.
+ <li><a href"http://www.cadence.com/il">Cadence Israel</a> supported enhancement
+ and testing of the portable binary archive.
+ <li>David Abrahams improved implementation of "export" functionality. This not
+ only eliminated an annoying header sequencing requirement, but also the need to maintain
+ a list of "known archives".
+ <li>Mattias Troyer enhanced the implementation of native binary archives. This includes
+ enhancement and generalization of the library itself including generalization of
+ the wrapper concept.
+ <li>Markus Schöpflin tracked down issues with TRU64 compiler resulting in 100% passing.
+ <li><a href="mailto::troy@resophonic.com"> Troy D. Straszheim</a> made the initial version of variant serialization.
+ <li>Tonko Juricic helped refine and complete project files for VC 7.1 ide
+ <li><a href="http://www.boost.org/people/rene_rivera.htm">Rene Rivera</a> tracked down several issues related to
+ Code Warrior, toolset configuration and bjam and much else.
+ <li>Martin Ecker detected (and fixed!) a number of sublte errors regarding cyclic
+ pointers, shared pointers. He also built the library as a DLL and raised some issues
+ <li>Pavel Vozenilek invested much effort in review of code and documentation
+ resulting in many improvements. In addition he help a lot with porting to other
+ platforms including VC 6.0, Intel, and especially Borland.
+ <li><a href="http://www.boost.org/people/jens_maurer.htm">Jens Maurer</a> and
+ <a href="http://www.boost.org/people/beman_dawes.html">Beman Dawes</a> who got the boost
+ serialization ball rolling. It was one or both of these two that invented
+ the much beloved <code>&</code> syntax used to implement both save and
+ load in one fuction specification.
+ <li><a href="http://www.boost.org/people/vladimir_prus.htm">Vladimir Prus</a> for evaluating an
+ early draft and contributing the diamond inheritance example.
+ <li><a href="http://www.boost.org/people/william_kempf.htm">William E. Kempf</a>
+ who made the templates for this and other boost manuals. This relieved
+ me of much aggravation.
+ <li><a href="mailto:vahan@unicad.am">Vahan Margaryan</a> and
+ <a href="mailto:fredrik_blomqvist-at-home.se">Fredrik Blomqvist</a> for their contributions
+ to my understanding of the subtle issues of exception safety in this context.
+ <li>all other boost members who responded with feedback during the
+ development of this library. Almost all comments resulted in
+ tangible changes in the library which made it much better.
+ <li>boosters who helped out in porting to other platforms:, Fernando Cacciola (Borland),
+ Jeff Flinn (VC 7.1), Vladimir Prus (gcc 3.3), Christoph Ludwig(gcc 3.4),
+ Rob Lievaart(mingw), Marshal Clow(gcc-darwin) among others.
+ <li>all boost members who participated in the first formal review
+ in November 2002. Many of these members invested quite an effort
+ to evaluate the library and suggest changes. They are
+ Matthias Troyer, Pavel Vozenilek, Vladimir Prus, Fredrik Blomqvist,
+ Jeff Garland, Gennadiy Rozental, Alberto Barbati, Dave Harris.
+ Mr. Rozenthal in particular wrote an incredibly insightful analysis
+ that has driven all subsequent development that has resulted in the
+ current package.
+ <li>Dave Harris proposal and spirited defense of it lead to a re-thinking
+ of the overrides for serialization of pointers. This resulted in a simpler
+ and more effective method of accounting for non-default constructors
+ required by serialization of pointers and STL collections.
+</ul>
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
+
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-10 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - More on Archives</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Archive Class Reference</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<dl class="page-index">
+ <dt><a href="#trivial">Trivial Archive</a>
+ <dt><a href="#implementation">More Useful Archive Classes</a>
+ <dt><a href="#usage">Usage</a>
+ <dt><a href="#testing">Testing</a>
+ <dt><a href="#polymorphic">Polymorphic Archives</a>
+</dl>
+
+<h3><a name="trivial">Trivial Archive</a></h3>
+The <a href="archives.html"><strong>Archive</strong></a> concept specifies the functions that a
+class must implement to in order to be used to serialize
+<a href="serialization.html"><strong>Serializable</strong></a> types.
+
+Our discussion will focus on archives used for saving as the hierarchy is exactly analogous
+for archives used for loading data.
+
+<h4>Minimum Requirments</h4>
+
+The simplest class which will model the <a href="archives.html"><strong>Archive</strong></a> concept specifies the functions that a
+class will look like:
+
+<pre><code>
+#include <cstddef> // std::size_t
+//////////////////////////////////////////////////////////////
+// class trivial_oarchive
+class trivial_oarchive {
+public:
+ //////////////////////////////////////////////////////////
+ // public interface used by programs that use the
+ // serialization library
+ typedef boost::mpl::bool_<true> is_saving;
+ typedef boost::mpl::bool_<false> is_loading;
+ template<class T> register_type(){}
+ template<class T> trivial_oarchive & operator<<(const T & t){
+ return *this;
+ }
+ template<class T> trivial_oarchive & operator&(const T & t){
+ return *this << t;
+ }
+ void save_binary(void *address, std::size_t count){};
+};
+</code></pre>
+The simplest possible input archive class is analogous to the above.
+In the following discussion, only output archives will be addressed.
+Input archives are exactly symmetrical to output archives.
+<p>
+This archive will compile and execute with any types which implement the
+<a href="serialization.html"><strong>Serializable</strong></a> concept.
+For an example see
+<a href="../example/demo_trivial_archive.cpp" target="demo_trivial_archive">
+<code style="white-space: normal">demo_trivial_archive.cpp</code></a>.
+Of course this program won't produce any output as it is. But it provides
+the starting point for a simple class which can be used to log formated
+output. See the implementation of a <a href="simple_log.html">simple
+log archive</a> to how this has been done.
+
+<h3><a name="implementation">More Useful Archive Classes</a></h3>
+The above example is fine as far as it goes. But it doesn't implement
+useful features such as serialization of pointers, class versioning
+and others. This library implements a family of full featuared archive
+classes appropriate for a variety of purposes.
+
+<p>
+Our archives have been factored in to a tree of classes in order to minimize
+repetition of code. This is shown in the accompanying
+<a target="class_diagram" href="class_diagram.html">class diagram</a>.
+
+Any class which fullfills the following requirements will fit into
+this hierarchy and implement all the features we require. Deriving from
+the base class <a href="../../../boost/archive/detail/common_oarchive.hpp" target="common_oarchive_hpp">
+common_oarchive.hpp</a> provides all features we desire which
+are missing from trivial_oarchive above.
+
+<pre><code>
+<a href="../../../boost/archive/detail/common_oarchive.hpp" target="common_oarchive_hpp">
+#include <cstddef> // std::size_t
+#include <boost/archive/detail/common_oarchive.hpp>
+</a>
+/////////////////////////////////////////////////////////////////////////
+// class complete_oarchive
+class complete_oarchive :
+ public boost::archive::detail::common_oarchive<complete_oarchive>
+{
+ // permit serialization system privileged access to permit
+ // implementation of inline templates for maximum speed.
+ friend class boost::archive::save_access;
+
+ // member template for saving primitive types.
+ // Specialize for any types/templates that special treatment
+ template<class T>
+ void save(T & t);
+
+public:
+ //////////////////////////////////////////////////////////
+ // public interface used by programs that use the
+ // serialization library
+
+ // archives are expected to support this function
+ void save_binary(void *address, std::size_t count);
+};
+</code></pre>
+
+Given a suitable definitions of <code style="white-space: normal">save</code>
+and <code style="white-space: normal">save_binary</code>,
+any program using serialization with a conforming C++ compiler should compile
+and run with this archive class.
+
+<h4>Optional Overrides</h4>
+
+The <code style="white-space: normal">detail::common_oarchive</code> class contains
+a number of functions that are used by various parts of the serialization library
+to help render the archive in a particular form.
+
+<dl>
+
+<dt><h4><code>void save_start()</code></h4></dt>
+<dd>
+<strong>Default</strong>:Does nothing.<br>
+<strong>Purpose</strong>:To inject/retrieve an object name into the archive. Used
+by XML archive to inject "<name " before data.
+</dd>
+<p>
+
+<dt><h4><code>void save_end()</code></h4></dt>
+<dd>
+<strong>Default</strong>:Does nothing.<br>
+<strong>Purpose</strong>:To inject/retrieve an object name into the archive. Used
+by XML archive to inject "</name>" after data.
+<dd>
+</dd>
+<p>
+<dt><h4><code>void end_preamble()</code></h4></dt>
+<dd>
+<strong>Default</strong>:Does nothing.<br>
+<strong>Purpose</strong>:Called <strong>each time</strong> user data is saved.
+It's not called when archive bookkeeping data is saved. This is used by XML archives
+to determine when to inject a ">" character at end of XML header. XML output archives
+keep their own internal flag indicating that data being written is header data. This
+internal flag is reset when an object start tag is written. When
+<code style="white-space: normal">void end_preamble()</code> is invoked and this internal flag is set
+a ">" character is appended to the output and the internal flag is reset. The default
+implementation for <code style="white-space: normal">void end_preamble()</code> is a no-op there by permitting it
+to be optimised away for archive classes that don't use it.
+</dd>
+<p>
+<dt><h4><code>
+template<class T>
+void save_override(T & t, int);
+</code></h4></dt>
+<dd>
+<strong>Default</strong>:Invokes <code style="white-space: normal">archive::save(Archive & ar, t)</code><br>
+This is the main entry into the serialization library.<br>
+<strong>Purpose</strong>:This can be specialized in cases where the data is to be written
+to the archive in some special way. For example, XML archives implement special handling for
+name-value pairs by overriding this function template for name-value pairs.
+This replaces the default name-value pair handling, which is just to throw away the name,
+with one appropriate for XML which writes out the start of an XML tag with the correct object name.
+<p>
+The second argument must be part of the function signature even this it is not used.
+Its purpose is to be sure that code is portable to compilers which fail to correctly
+implement partial function template ordering. For more information see
+<a href="implementation.html#functiontemplateordering">this</a>.
+</dd>
+
+</dl>
+
+<h4>Types used by the serialization library</h4>
+The serialization library injects bookkeeping data into the serialization archive.
+This data includes things like object ids, version numbers, class names etc. Each
+of these objects is included in a wrapper so that the archive class can override the
+implementation of <code style="white-space: normal">void save_override(T & t, int);</code>.
+For example, in the XML archive, the override for this type renders an object_id equal to 23 as
+"object_id=_23". The following table lists the types defined in the
+<code style="white-space: normal">boost::archive namespace</code>
+used internally by the serialization library:
+<p>
+<table border>
+<tr><th align=left>type</th><th align=left><code style="white-space: normal">default<br>serialized as</code></th>
+<tr><td><code style="white-space: normal">version_type</code></td><td><code style="white-space: normal">unsigned int</code></td>
+<tr><td><code style="white-space: normal">object_id_type</code></td><td><code style="white-space: normal">unsigned int</code></td>
+<tr><td><code style="white-space: normal">object_id_reference_type</code></td><td><code style="white-space: normal">unsigned int</code></td>
+<tr><td><code style="white-space: normal">class_id_type</code></td><td><code style="white-space: normal">int</code></td>
+<tr><td><code style="white-space: normal">class_id_optional_type</code></td><td><code style="white-space: normal">nothing</code></td>
+<tr><td><code style="white-space: normal">class_id_reference_type</code></td><td><code style="white-space: normal">int</code></td>
+<tr><td><code style="white-space: normal">tracking_type</code></td><td><code style="white-space: normal">bool</code></td>
+<tr><td><code style="white-space: normal">classname_type</code></td><td><code style="white-space: normal">string</code></td>
+</table>
+<p>
+All of these are associated with a default serialization defined in terms of primitive types
+so it isn't a requirement to define <code style="white-space: normal">save_override</code>
+for these types.
+<p>
+These are defined in
+<a href="../../../boost/archive/basic_archive.hpp" target="basic_archive_hpp"><code style="white-space: normal">basic_archive.hpp</code></a>.
+All of these types have been assigned an
+<a target="detail" href="traits.html#level">implementation level</a> of
+<code style="white-space: normal">primitive</code> and are convertible to types such as int, unsigned int, etc.
+so that they have default implementations. This is illustrated by
+<a href="../../../boost/archive/basic_text_iarchive.hpp" target="basic_text_iarchive_hpp"><code style="white-space: normal">basic_text_iarchive.hpp</code></a>.
+which relies upon the default. However, in some cases, overrides will have to be
+explicitly provided for these types. For an example see
+<a href="../../../boost/archive/basic_xml_iarchive.hpp" target="basic_xml_iarchive_hpp"><code style="white-space: normal">basic_xml_iarchive.hpp</code></a>.
+<p>
+In real practice, we probably won't be quite done.
+One or more of the following issues may need to be addressed:
+<ul>
+ <li>Many compilers fail to implement correct partial ordering of
+ function templates. The archives included with this library work around
+ this using argument overloading. This technique is described in
+ <a target="detail" href="implementation.html#functiontemplateordering">
+ another section of this manual</a>
+ <li>Even if we are using a conforming compiler, we might want our new archive class
+ to be portable to non-conforming compilers.
+ <li>Our archive format might require extra information inserted into it. For
+ example, XML archives need <name ... >...</name> surrounding
+ all data objects.
+ <li>Addressing any of the above may generate more issues to be addressed.
+ <li>The archives included with library are all templates which use a
+ <code style="white-space: normal">stream</code> or
+ <code style="white-space: normal">streambuf</code>
+ as a template parameter rather than simple classes.
+ Combined with the above, even more issues arise with non-conforming compilers.
+</ul>
+The attached <a target="class_diagram" href="class_diagram.html">class diagram</a>
+shows the relationships between classes used to implement the serialization library.
+<p>
+A close examination of the archives included with the library illustrate
+what it takes to make a portable archive that covers all data types.
+<h3><a name="usage">Usage</a></h3>
+The newly created archive will usually be stored in its own header module. All
+that is necessary is to include the header and construct an instance of the new archive.
+EXCEPT for one special case.
+<ul>
+ <li>Instances of a derived class are serialized through a base class pointer.
+ <li>Such instances are not "registered" neither implicitly nor explicitly. That
+ is, the macro <code style="white-space: normal">BOOT_CLASS_EXPORT</code> is used
+ to instantiate the serialization code for the included archives.
+</ul>
+
+To make this work, the following should be included after the archive
+class definition.
+<pre><code>
+#define BOOST_SERIALIZATION_REGISTER_ARCHIVE(Archive)
+</code></pre>
+Failure to do this will not inhibit the program from compiling, linking
+and executing properly - except in one case. If an instance of a derived
+class is serialized through a pointer to its base class, the program
+will throw an
+<a href="exceptions.html#unregistered_class"><code style="white-space: normal">unregistered_class</code></a>
+exception.
+<p>
+
+<h4><a name="testing">Testing</h4>
+Exhaustive testing of the library requires testing the different aspects of object
+serialization with each archive. There are 46 different tests that can run with any archive.
+There are 5 "standard archives" included with the system.
+(3 in systems don't support wide charactor i/o).
+<p>
+In addition, there are 28 other tests which aren't related to any particular archive class.
+<p>
+The default <code style="white-space: normal">bjam</code> testing setup will run all
+the above described tests. This will result in as many as 46 archive tests * 5
+standard archives + 28 general tests = 258 tests. Note that a complete test of the
+library would include DLL vs static library, release vs debug so the actual total
+would be closer to 1032 tests.
+<p>
+For each archive there is a header file in the test directory similar to the one below.
+The name of this archive is passed to the test program by setting the
+environmental variable <code style="white-space: normal">BOOST_ARCHIVE_TEST</code>
+to the name of the header. Here is the header file
+<code style="white-space: normal">test_archive.hpp</code> . Test header files for
+other archives are similar.
+<pre><code>
+// text_archive test header
+// include output archive header
+#include <boost/archive/text_oarchive.hpp>
+// set name of test output archive
+typedef boost::archive::text_oarchive test_oarchive;
+// set name of test output stream
+typedef std::ofstream test_ostream;
+
+// repeat the above for input archive
+#include <boost/archive/text_iarchive.hpp>
+typedef boost::archive::text_iarchive test_iarchive;
+typedef std::ifstream test_istream;
+
+// define open mode for streams
+// binary archives should use std::ios_base::binary
+#define TEST_STREAM_FLAGS (std::ios_base::openmode)0
+</code></pre>
+
+To test a new archive, for example, portable binary archives, with the gcc compiler,
+make a header file <code style="white-space: normal">portable_binary_archive.hpp</code>
+and invoke <code style="white-space: normal">bjam</code> with
+<pre><code>
+-sBOOST_ARCHIVE_LIST=portable_binary_archive.hpp
+</code></pre>
+This process in encapsulated in the shell or cmd script
+<code style="white-space: normal">library_test</code> whose command line is
+<pre><code>
+library_test --toolset=gcc -sBOOST_ARCHIVE_LIST=portable_binary_archive.hpp
+</code></pre>
+<h3><a name="polymorphic">Polymorphic Archives</a></h3>
+
+<h4>Motivation</h4>
+
+All archives described so far are implemented as templates. Code to save and load
+data to archives is regenerated for each combination of archive class and data type.
+Under these cirumstances, a good optimizing compiler that can expand
+<code>inline</code> functions to enough depth will generate fast code.
+However:
+<ul>
+<li>Much inline code may be replicated.
+<li>If there are several archive classes, code will be regenerated for each archive class.
+<li>If serialization code is placed in a library, that library must be rebuilt
+each time a new archive class is created.
+<li>If serialization code is placed in a DLL,
+ <ul>
+ <li>The DLL will contain versions of code for each known archive type.
+ This would result in loading of DLLs which contain
+ much code that is not used - basically defeating one of the main motivations
+ for choosing to use a DLL in the first place.
+ <li>If a new archive is created and an application shipped, all DLLs have to be
+ rebuilt, and reshipped along with the application which uses the new archive. Thus
+ the other main motivation for using a DLL is defeated.
+ </ul>
+</ul>
+
+<h4>Implementation</h4>
+The solution is the the pair <code>polymorphic_oarchive</code>
+and <code>polymorphic_iarchive</code>. They present a common interface of virtual
+functions - no templates - that is equivalent to the standard templated one.
+
+This is shown in the accompanying
+<a target="class_diagram" href="class_diagram.html">class diagram</a>
+<p>
+The accompanying demo program in files
+
+<a target=demo_polymorphic_cp href="../example/demo_polymorphic.cpp"><code style="white-space: normal">demo_polymorphic.cpp</code></a>,
+<a target=demo_polymorphic_A_hpp href="../example/demo_polymorphic_A.hpp"><code style="white-space: normal">demo_polymorphic_A.hpp</code></a>, and
+<a target=demo_polymorphic_A_cpp href="../example/demo_polymorphic_A.cpp"><code style="white-space: normal">demo_polymorphic_A</code></a>
+show how polymorphic archives are to be used. Note the following:
+<ul>
+ <li><a target=demo_polymorphic_A_hpp href="../example/demo_polymorphic_A.hpp"><code style="white-space: normal">demo_polymorphic_A.hpp</code></a> and
+<a target=demo_polymorphic_A_cpp href="../example/demo_polymorphic_A.cpp"><code style="white-space: normal">demo_polymorphic_A.cpp</code></a>
+contain no templates and no reference to any specific archive implementation. That is, they will
+only have to be compiled once for all archive implementations. The even applies to archives classes
+created in the future.
+ <li>The main program <a target=demo_polymorphic_cp href="../example/demo_polymorphic.cpp"><code style="white-space: normal">demo_polymorphic.cpp</code></a>
+specifies a specific archive implementation.
+</ul>
+As can be seen in the
+<a target="class_diagram" href="class_diagram.html">class diagram</a>
+and the header files, this implementation is just a composition of the polymorphic
+interface and the standard template driven implementation. This composition is
+accomplished by the templates
+<a target=polymorphic_iarchive_route_hpp href="../../../boost/archive/detail/polymorphic_iarchive_route.hpp"><code style="white-space: normal">polymorphic_iarchive_route.hpp</code></a>
+and
+<a target=polymorphic_oarchive_route_hpp href="../../../boost/archive/detail/polymorphic_oarchive_route.hpp"><code style="white-space: normal">polymorphic_oarchive_route.hpp</code></a>.
+As these contain no code specific to the particular implementation archive, they can be used to create
+a polymorphic archive implementation from any functioning templated archive implementation.
+<p>
+As a convenience, small header files have been included which contain
+<code style="white-space: normal">typedef</code> for polymorphic implementation for each corresponding
+templated one. For example, the headers
+<a target=polymorphic_text_iarchive_hpp href="../../../boost/archive/polymorphic_text_iarchive.hpp"><code style="white-space: normal">polymorphic_text_iarchive.hpp</code></a>
+and
+<a target=polymorphic_text_oarchive_hpp href="../../../boost/archive/polymorphic_text_oarchive.hpp"><code style="white-space: normal">polymorphic_text_oarchive.hpp</code></a>.
+contain the <code style="white-space: normal">typedef</code> for the polymorphic implementation
+of the standard text archive classes
+<a target=text_iarchive_hpp href="../../../boost/archive/text_iarchive.hpp"><code style="white-space: normal">text_iarchive.hpp</code></a>
+and
+<a target=text_oarchive_hpp href="../../../boost/archive/text_oarchive.hpp"><code style="white-space: normal">text_oarchive.hpp</code></a>
+respectively. All included polymorphic archives use the same naming scheme.
+<h4>Usage</h4>
+Polymorphic archives address the issues raised above regarding templated implementation.
+That is, there is no replicated code, and no recompilation for new archives. This will
+result in smaller executables for program which use more than one type of archive, and
+smaller DLLS. There is a
+penalty for calling archive functions through a virtual function dispatch table and there
+is no possibility for a compiler to <code style="white-space: normal">inline</code> archive functions. This will result
+in a detectable degradation in performance for saving and loading archives.
+<p>
+The main utility of polymorphic archives will be to permit the buiding of class DLLs that will
+include serialization code for all present and future archives with no redundant code.
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Archives</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Archive Concepts</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<dl class="page-index">
+ <dt><a href="#saving_interface">Saving Archive Concept</a>
+ <dt><a href="#loading_interface">Loading Archive Concept</a>
+ <dt><a href="#archive_models">Models</a>
+ <dt><a href="#exceptions">Exceptions</a>
+ <dt><a href="#charactersets">Character Sets</a>
+</dl>
+<h4>Notation</h4>
+In the following descriptions
+<ul>
+ <li><code>SA</code> is an type modeling the <a href="#saving_interface">Saving Archive Concept</a>
+ <li><code>sa</code> is an instance of type SA.
+ <li><code>LA</code> is an type modeling the <a href="#loading_interface">Loading Archive Concept</a>
+ <li><code>la</code> is an instance of type LA.
+ <li><code>T</code> is an <a href="serialization.html"><strong>Serializable</strong></a> Type
+ <li><code>x</code> is an instance of type T Type</li>.
+ <li><code>u,v</code> is a pointer to a an instance of type T
+ <li><code>count</code> is an instance of a type that can be converted to <code>std::size_t</code>.
+</ul>
+<h4><a name="saving_interface">Saving Archive Concept</a></h4>
+<h4>Associated Types</h4>
+Intuitively, a type modeling this concept will generate a sequence of bytes
+corresponding to an arbitrary set of C++ data structures. Each type modeling the
+Saving Archive concept (SA) may be associated with another type modeling the
+<a href="#loading_interface">Loading Archive Concept</a>(LA).
+This associated type will perform the inverse operation.
+That is, given a sequence of bytes generated by SA, it will generate a set of
+C++ data structures that is equivalent to the original.
+The notion of equivalence is defined by the implementations of the pair of archives and the
+way the data are rendered <a href="serialization.html">serializable</a>.
+<p>
+<h4>Valid Expressions</h4>
+<dl>
+ <dt><h4><code>
+ SA::is_saving
+ </code></h4></dt>
+ <dd>
+ Returns the Boost MPL Integral Constant type boost::mpl::bool_<true>
+ </dd>
+ <dt><h4><code>
+ SA::is_loading
+ </code></h4></dt>
+ <dd>
+ Returns the Boost MPL Integral Constant type boost::mpl::bool_<false>
+ </dd>
+ <dt><h4><code>
+ sa << x
+ <br>
+ sa & x
+ </code></h4></dt>
+ <dd>
+ These expressions must perform exactly the same function. They append the
+ value of <code style="white-space: normal">x</code> along with other information to <code>sa</code>.
+ This other information is defined by the implementation of the archive.
+ Typically this information is that which is required by a corresponding
+ Loading Archive type to properly restore the value of <code>x</code>.
+ <p>
+ Returns a reference to <code>sa</code>.
+ </dd>
+ <dt><h4><code>
+ sa.save_binary(u, count)
+ </code></h4></dt>
+ <dd>
+ Appends to the archive <code style="white-space: normal">size_t(count)</code> bytes found at
+ <code style="white-space: normal">u</code>.
+ </dd>
+ <dt><h4><code>
+ sa.register_type<T>()
+ <br>
+ sa.register_type(u)
+ </code></h4></dt>
+ <dd>
+ Appends information about class T to the archive. This information is used to
+ construct the correct class when a derived pointer is loaded by a corresponding
+ Loading Archive type.
+ Invocation of this member function is referred to as "class registration".
+ This is explained in detail in
+ <a href="special.html#derivedpointers">Special Considerations - Derived Pointers</a>.
+ The second syntax is included to permit this function to be called on non-conforming
+ compilers when <code style="white-space: normal">sa</code> is a template argument.
+ For more information, see <a target="detail" href="implementation.html#tempatesyntax">Template Invocation syntax</a>
+ </dd>
+ <dt><h4><code>
+ sa.get_library_version()
+ </code></h4></dt>
+ <dd>
+ Returns an unsigned integer containing the current version number of the serialization
+ library. This number will be incremented each time the library is altered in such a
+ way that serialization could be altered for some type. For example, suppose the type
+ used for a count of collection members is changed. The code that loads collections
+ might be conditioned on the library version to make sure that libraries created by
+ previous versions of the library can still be read.
+ </dd>
+</dl>
+
+<h4><a name="loading_interface">Loading Archive Concept</a></h4>
+<h4>Associated Types</h4>
+Each model of this concept presumes the
+existence of a corresponding type modeling the
+<a href="#saving_interface">Saving Archive Concept</a>.
+The purpose of an instance of this concept is to convert a sequence of bytes
+generated by this corresponding type to a set of C++ data structures
+equivalent to the original.
+<h4>Valid Expressions</h4>
+<dl>
+ <dt><h4><code>
+ LA::is_saving
+ </code></h4></dt>
+ <dd>
+ Returns the Boost MPL Integral Constant type boost::mpl::bool_<false>
+ </dd>
+ <dt><h4><code>
+ LA::is_loading
+ </code></h4></dt>
+ <dd>
+ Returns the Boost MPL Integral Constant type boost::mpl::bool_<true>
+ </dd>
+ <dt><h4><code>
+ la >> x
+ <br>
+ la & x
+ </code></h4></dt>
+ <dd>
+ These expressions must perform exactly the same function.
+ Sets <code>x</code> to a value retrieved from <code>la</code>.
+ <p>
+ Returns a reference to <code>la</code>.
+ </dd>
+ <dt><h4><code>
+ la.load_binary(u, count)
+ </code></h4></dt>
+ <dd>
+ Retrieves from <code style="white-space: normal">la</code> <code style="white-space: normal">size_t(count)</code> bytes and stores
+ them in memory starting at <code style="white-space: normal">u</code>.
+ </dd>
+ <dt>
+ <dt><h4><code>
+ la.register_type<T>()
+ <br>
+ la.register_type(u)
+ </code></h4></dt>
+ <dd>
+ Retrieves information about class T from the archive. This information is used to
+ construct the correct class when loading a pointer to a derived class not
+ otherwise referred to in the program by name.
+ Invocation of this member function is referred to as "class registration".
+ This is explained in detail in
+ <a href="special.html#derivedpointers">Special Considerations - Derived Pointers</a>.
+ The second syntax is included to permit this function to be called on non-conforming
+ compilers when <code style="white-space: normal">la</code> is a template argument.
+ For more information, see <a target="detail" href="implementation.html#tempatesyntax">Template Invocation syntax</a>
+ </dd>
+ <dt><h4><code>
+ la.get_library_version()
+ </code></h4></dt>
+ <dd>
+ Returns an unsigned integer containing the version number of the serialization
+ library that created the archive. This number will be incremented each time the
+ library is altered in such a way that serialization could be altered for some type.
+ For example, suppose the type used for a count of collection members is changed.
+ The code that loads collections might be conditioned on the library version to make
+ sure that libraries created by previous versions of the library can still be read.
+ </dd>
+ <dt><h4><code>
+ la.reset_object_address(v, u)
+ </code></h4></dt>
+ <dd>
+ Communicates to the archive that the object originally at address u has been
+ moved to address v.
+ <p>
+ When an object is loaded to a temporary variable and later moved to another location,
+ this function must be called in order communicate this fact. This permits the
+ archive to properly implement object tracking. Object tracking is required in order
+ to correctly implement serialization of pointers to instances of derived classes.
+ </dd>
+ <dt><h4><code>
+ la.delete_created_pointers()
+ </code></h4></dt>
+ <dd>
+ Deletes all objects created by the loading of pointers. This can be used to
+ avoid memory leaks that might otherwise occur if pointers are being loaded
+ and the archive load encounters an exception.
+ </dd>
+</dl>
+
+There are archives based on text, binary and XML file
+formats but all have the above interface. Given that all archives present
+the same public interface, specifcation of serialization is exactly the same
+for all archives. Archive classes have other members not mentioned here.
+However they are related to the internal functioning of the library and
+are not meant to be called by users of an archive. Implementation of new
+archives is discussed in
+<a href="archive_reference.html#implementation">New Archives - Implementation</a>.
+
+<p>
+The existence of the <code style="white-space: normal"><<</code>
+and <code style="white-space: normal">>></code> suggests
+a relationship between archives and C++ i/o streams. <strong>Archives are not
+C++ i/o streams</strong>. All the archives included with this system take a stream
+as an argument in the constructor and that stream is used for output or input.
+However, this is not a requirement of the serialization functions or the
+archive interface. It just turns out that the archives written so far have
+found it useful to base their implementation on streams.
+
+<h3><a name="archive_models">Archive Models</a></h3>
+This library includes various implementations of the Archive concept.
+
+An archive is defined by two complementary classes. One is for saving data while
+the other is for loading it.
+
+This library includes a number of archive implementations that are "ready to go" for the
+most common requirements. These classes implement the archive concept for differing data formats.
+They can be used "as is" or as a basis for developing one's own particular type of archive.
+An archive is defined by two complementary classes. One is for saving data while the other is for loading it.
+
+To invoke serialization using one of
+these archives, one or more of the following header files must be
+included in the code module containing the serialization code.
+<pre><code>
+// a portable text archive</a>
+<a href="../../../boost/archive/text_oarchive.hpp" target="text_oarchive_cpp">boost::archive::text_oarchive</a> // saving
+<a href="../../../boost/archive/text_iarchive.hpp" target="text_iarchive_cpp">boost::archive::text_iarchive</a> // loading
+
+// a portable text archive using a wide character stream</a>
+<a href="../../../boost/archive/text_woarchive.hpp">boost::archive::text_woarchive</a> // saving
+<a href="../../../boost/archive/text_wiarchive.hpp">boost::archive::text_wiarchive</a> // loading
+
+// a portable XML archive</a>
+<a href="../../../boost/archive/xml_oarchive.hpp" target="xml_oarchive_cpp">boost::archive::xml_oarchive</a> // saving
+<a href="../../../boost/archive/xml_iarchive.hpp" target="xml_iarchive_cpp">boost::archive::xml_iarchive</a> // loading
+
+// a portable XML archive which uses wide characters - use for utf-8 output</a>
+<a href="../../../boost/archive/xml_woarchive.hpp" target="xml_woarchive_cpp">boost::archive::xml_woarchive</a> // saving
+<a href="../../../boost/archive/xml_wiarchive.hpp" target="xml_wiarchive_cpp">boost::archive::xml_wiarchive</a> // loading
+
+// a non-portable native binary archive</a>
+<a href="../../../boost/archive/binary_oarchive.hpp" target="binary_oarchive_cpp">boost::archive::binary_oarchive</a> // saving
+<a href="../../../boost/archive/binary_iarchive.hpp" target="binary_iarchive_cpp">boost::archive::binary_iarchive</a> // loading
+
+<!--
+// a non-portable native binary archive which use wide character streams
+<a href="../../../boost/archive/binary_woarchive.hpp">boost::archive::binary_woarchive</a> // saving
+<a href="../../../boost/archive/binary_wiarchive.hpp">boost::archive::binary_wiarchive</a> // loading
+-->
+
+</code></pre>
+
+All of these archives implement the same inteface. Hence, it should suffice to describe only one
+of them in detail. For this purpose we will use the text archive.
+
+
+<pre><code>
+namespace boost {
+namespace archive {
+
+enum archive_flags {
+ no_header = 1, // suppress archive header info
+ no_codecvt = 2, // suppress alteration of codecvt facet
+ no_xml_tag_checking = 4 // suppress checking of xml tags - igored on saving
+};
+
+} // archive
+} // boost
+</code></pre>
+
+<pre><code>
+namespace boost {
+namespace archive {
+
+class text_oarchive : ...
+{
+ ...
+public:
+ ... // implementation of the <strong>Saving Archive</strong> concept
+ text_oarchive(std::ostream & os, unsigned int flags = 0);
+ ~text_oarchive();
+};
+
+} // archive
+} // boost
+</code></pre>
+
+<dl>
+
+<dt><h4><code>
+text_oarchive(std::ostream & os, unsigned int flags = 0);
+</code></h4></dt>
+<dd>
+Constructs an archive given an open <code style="white-space: normal">stream</code> as
+an argument and optional flags. For most applications there will be no need to use flags.
+Flags are defined by <code style="white-space: normal">enum archive_flags</code> enumerator.
+Multiple flags can be combined with the <code style="white-space: normal">|</code> operator.
+
+By default, archives prepend
+output with initial data which helps identify them as archives produced by this system.
+This permits a more graceful handling of the case where an attempt is made to load an archive
+from an invalid file format. In addition to this, each type of archive might have
+its own information. For example, native binary archives include information about
+sizes of native types and endianess to gracefully handle the case where it has been
+erroneously assumed that such an archive is portable across platforms. In some cases,
+where this extra overhead might be considered objectionable, it can be suppressed with the
+<code style="white-space: normal">no_header</code> flag.
+<p>
+In some cases, an archive may alter (and later restore)
+the codecvt facet of the stream locale. To suppress this action,
+include the <code style="white-space: normal">no_codecvt</code> flag.
+<p>
+XML archives contain nested tags signifying the start and end of data fields.
+These tags are normally checked for agreement with the object name when
+data is loaded. If a mismatch occurs an exception is thrown. It's possible
+that this may not be desired behavior. To suppress this checking of XML
+tags, use <code style="white-space: normal">no_xml_tag_checking</code> flag.
+</dd>
+
+<dt><h4><code>
+~text_oarchive();
+</code></h4></dt>
+<dd>
+Destructor for an archive. This should be called before the stream is
+closed. It restores any altered stream facets to their state before the
+archive was opened.
+</dd>
+
+</dl>
+
+<pre><code>
+namespace boost {
+namespace archive {
+
+class text_iarchive : ...
+{
+ ...
+public:
+ ... // implementation of the <strong>Loading Archive</strong> concept
+ text_iarchive(std::istream & is, unsigned int flags = 0);
+ ~text_iarchive();
+};
+
+} //namespace archive
+) //namespace boost
+
+</code></pre>
+
+<dl>
+
+<dt><h4><code>
+text_iarchive(std::istream & is, unsigned int flags = 0);
+</code></h4></dt>
+<dd>
+Contructs an archive given an open <code style="white-space: normal">stream</code> as
+an argument and optional flags. If flags are used, they should be the same
+as those used when the archive was created. Function and usage of flags is described
+above.
+</dd>
+
+<dt><h4><code>
+~text_iarchive();
+</code></h4></dt>
+<dd>
+Destructor for an archive. This should be called before the stream is
+closed. It restores any altered stream facets to thier state before the
+the archive was opened.
+</dd>
+</dl>
+<p>
+The <code style="white-space: normal">binary_oarchive</code> and
+<code style="white-space: normal">binary_iarchive</code> classes are
+implemented in terms of the more basic
+<code style="white-space: normal">std::streambuf</code>. So, in addition
+to the common class interface described above, they include the following
+constructors:
+<dl>
+<dt><h4><code>
+binary_oarchive(std::streambuf & bsb, unsigned int flags = 0);
+</code></h4></dt>
+and
+<dt><h4><code>
+binary_iarchive(std::streambuf & bsb, unsigned int flags = 0);
+</code></h4></dt>
+</dl>
+
+<h3><a name="exceptions">Exceptions</h3>
+All of the archive classes included may throw exceptions. The list of exceptions that might
+be thrown can be found in section <a target="detail" href="exceptions.html">Archive Exceptions</a>
+of this documentation.
+
+<h3><a name="charactersets">Character Sets</h3>
+This library includes two archive classes for XML. The wide character
+version (<code style="white-space: normal">xml_w?archive</code>) renders its output as UTF-8 which can
+handle any wide character without loss of information.
+<code style="white-space: normal">std::string</code> data is converted from multi-byte format to wide
+character format using the current <code style="white-space: normal">
+locale</code>. Hence this version should give a fair rendering of all
+C++ data for all cases. This could result in some unexpected behavior.
+Suppose an <code style="white-space: normal">std::string</code>
+is created with the <code style="white-space: normal">locale</code> character
+set to hebrew characters. On output this is converted to wide characters.
+On input however, there could be a problem if the <code style="white-space: normal">locale</code> is
+not set the same as when the archive is created.
+<p>
+The normal character version (<code style="white-space: normal">xml_?archive</code>) renders
+<code style="white-space: normal">std::string</code> output without any conversion. Though this may work
+fine for serialization, it may create difficulties if the XML archive is used
+for some other purpose.
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Bibliography</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
+ "header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Bibliography</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<ol><a name="1"></a>
+ <li>David Sugar and Daniel Silverstone, "CommonC++ Libraries", <a href=
+ "http://www.gnu.org/software/commoncpp/">http://www.gnu.org/software/commoncpp/</a>
+ <a name="2"></a>
+ <li>Nicola Santi, "Eternity", <a href=
+ "http://www.sourceforge.net/projects/eternity-it/">www.sourceforge.net/projects/eternity-it/</a>
+ <a name="3"></a>
+ <li>Allen Holub, "Roll Your Own Persistence", <u>Microsoft
+ Systems Journal</u> vol 11, no 6 Jun 1996
+ <a name="4"></a>
+ <li>Tasos Kontogiorgos & Michael Kim, "A C++
+ Template-Based Application Architecture", <u>C++ Report</u>
+ <a name="5"></a>
+ <li>Scott Meyers, <u>Effective C++</u>, Addison-Wesley, 1992
+ <a name="6"></a>
+ <li>Bjarne Stroustrup, <u>The C++ Programming Langage</u>, Addison-Wesley, 1997
+ <a name="7"></a>
+ <li>Alexandrescu, Andrei, <u>Modern C++ Design</u>, Addison-Wesley, 2001
+ <a name="8"></a>
+ <li>Jm Hyslop, and Herb Sutter, "Factory Redux, Part2",
+ <u>C/C++ User's Journal</u>, vol 21, No. 8, August 2003
+ <a name="9"></a>
+ <li>David Vandevoorde and Nicolai M. Josuttis,
+ <u>C++ Templates - The Complete Guide</u>, Addison-Wesley, 2003
+ <a name="10"></a>
+ <li>Herb Sutter, "Pimples--Beauty Marks You Can Depend On",
+ <u>C++ Report</u>, from <u>More C++ Gems</u>, Cambridge University Press, 2000
+ <a name="11"></a>
+ <li>James Coplien, "Curiously Recurring Template Patterns",
+ <u>C++ Report</u>, from <u>C++ Gems</u>, Cambridge University Press, 1998
+ <a name="12"></a>
+ <li>Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides,
+ <u>Design Patterns</u>, Addison-Wesley Publishing Company, 1995
+ <a name="13"></a>
+ <li>Stephan Beal, "s11n serialization library", <a href="http://www.s11n.net">www.s11n.net</a>
+ <a name="14"></a>
+ <li>Vandervoorde and Josuttis, <b>C++ Templates - A Complete Guide</b>, Addison-Wesley, 2003</a>
+</ol>
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
+
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+(C) Copyright 2002-4 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)
+-->
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Archive Class Diagram</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Text Archive Class Diagram</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+
+<pre><code>
+
+
+basic_oarchive <a href="../../../boost/archive/detail/basic_oarchive.hpp">-></a>
+ |
+ |
+ | interface_oarchive<text_oarchive> <a href="../../../boost/archive/detail/interface_oarchive.hpp">-></a>
+ | /
+ | /
+ | _________/
+ | /
+ | /
+ | /
+common_oarchive<text_oarchive> <a href="../../../boost/archive/detail/common_oarchive.hpp">-></a>
+ |
+ |
+<font color="blue">basic_text_oarchive<text_oarchive></font> <a href="../../../boost/archive/basic_text_oarchive.hpp">-></a>
+ |
+ |
+ | <font color="blue">basic_text_oprimitive<basic_ostream></font> <a href="../../../boost/archive/basic_text_oprimitive.hpp">-></a>
+ | /
+ | /
+ | _________/ interface_oarchive<polymorphic_oarchive> <a href="../../../boost/archive/detail/interface_oarchive.hpp">-></a>
+ | / |
+ | / |
+ | / |
+<font color="blue">text_oarchive_impl<text_oarchive></font> <a href="../../../boost/archive/text_oarchive.hpp">-></a> polymorphic_oarchive_impl <a href="../../../boost/archive/polymorphic_oarchive.hpp">-></a>
+ | \ |
+ | \ |
+ | \_____________________________________ <font color="red">polymorphic_oarchive</font> <a href="../../../boost/archive/polymorphic_oarchive.hpp">-></a>
+ | \ /
+ | \ /
+ | \ /
+<font color="red">text_oarchive</font> <a href="../../../boost/archive/text_oarchive.hpp">-></a> polymorphic_oarchive_route<text_oarchive_impl<text_oarchive> > <a href="../../../boost/archive/detail/polymorphic_oarchive_route.hpp">-></a>
+ |
+ |
+ |
+ <font color="red">polymorphic_text_oarchive</font> <a href="../../../boost/archive/polymorphic_text_oarchive.hpp">-></a>
+
+
+</code></pre>
+This diagram shows the relationship between the various classes that implement saving (output
+serialization) for text archives. The hierachy and organization is similar for loading and for
+other types of archives as well. In the diagram, classes written in <font color="blue">blue</font>
+implement saving for a given archive type. (in this case its text archives).
+Users include classes in <font color="red">red</font> to save their data from a partcular
+type of archive. Other classes whose names are in black implement the library and should
+never change. They are in <code>namespace boost::archive::detail</code>
+<dl>
+ <dt><code>
+ <a href="../../../boost/archive/detail/basic_oarchive.hpp">basic_oarchive</a>
+ </code></dt>
+ <dd>
+ Implements the core library functions for class export, versioning, and object tracking. It is compiled
+ into the library as it has no template parameters.
+ </dd>
+ <p><dt><code>
+ <a href="../../../boost/archive/detail/interface_oarchive.hpp">interface_oarchive<text_oarchive></a>
+ </code></dt>
+ <dd>
+ A class that declares the standard archive interface. This has been factored out so that it
+ can be used as a base class for <code style="white-space: normal">polymorphic_oarchive</code>
+ as well as for archive implementations.
+
+ <p><dt><code>
+ <a href="../../../boost/archive/detail/common_oarchive.hpp">common_oarchive<text_oarchive></a>
+ </code></dt>
+ <dd>
+ The function of this class is to make the connection between the virtual function
+ interface used by <code>basic_oarchive</code> and the template interface used by archive
+ class implementations.
+
+ <p><dt><code>
+ <a href="../../../boost/archive/basic_text_oarchive.hpp">basic_text_oarchive<text_oarchive></a>
+ </code></dt>
+ <dd>
+ Implements the basic functionality for simple text archives. The primitive save functions have been
+ factored out so it can be used in other text based archives like XML archives.
+
+ <p><dt><code>
+ <a href="../../../boost/archive/basic_text_oprimitive.hpp">basic_text_oprimitive<basic_ostream></a>
+ </code></dt>
+ <dd>
+ Implements the save oversaves for all primitive types. This is a template with a parameter
+ which describes the stream.
+
+ <p><dt><code>
+ <a href="../../../boost/archive/text_oarchive.hpp">text_oarchive_impl<text_oarchive></a>
+ </code></dt>
+ <dd>
+ Inherits from the above two classes to implement text archives.
+ </dd>
+
+ <p><dt><code>
+ <a href="../../../boost/archive/text_oarchive.hpp">text_oarchive</a>
+ </code></dt>
+ <dd>
+ This is just a short hand for <code style="white-space: normal">text_oarchive_impl<text_oarchive></code> .
+ We can't use <code style="white-space: normal">typedef</code> because a
+ <code style="white-space: normal">typedef</code> can't refer to it self in its definition.
+ This is the class name that is used to serialize to a text archive.
+ </dd>
+
+ <p><dt><code>
+ <a href="../../../boost/archive/detail/interface_oarchive.hpp">interface_oarchive<polymorphic_oarchive></a>
+ </code></dt>
+ <dd>
+ Same template as above. However, this time the Archive parameter refers to the polymorphic archive
+ with a virtual function interface rather than that the template interface that
+ <code style="white-space: normal">common_oarchive</code> uses.
+
+ <p><dt><code>
+ <a href="../../../boost/archive/polymorphic_oarchive.hpp">polymorphic_oarchive</a>
+ </code></dt>
+ <dd>
+ A class with a list of virtual <code style="white-space: normal">save(T &t)</code>
+ for all primitive types T. This is the class that is used to do pre-compile serialization of classes
+ for all archives present and future.
+
+ <p><dt><code>
+ <a href="../../../boost/archive/detail/polymorphic_oarchive_route.hpp">polymorphic_oarchive_route<text_oarchive_impl<text_oarchive> ></a>
+ </code></dt>
+ <dd><p>
+ This class implements the <code style="white-space: normal">polymorphic_oarchive</code> in terms of a specific
+ concrete class. Virtual function calls are routed to the implementing class. In this example,
+ that implementing class would be text_oarchive_impl.
+
+ <p><dt><code>
+ <a href="../../../boost/archive/polymorphic_text_oarchive.hpp">polymorphic_text_oarchive</a>
+ </code></dt>
+ <dd>
+ this is just a typedef so we can write polymorphic_text_archive rather than
+ <code style="white-space: normal">polymorphic_oarchive_route<text_oarchive_impl&'t;text_oarchive> ></code>
+
+</dl>
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+ == Copyright (c) 2001 Ronald Garcia
+ ==
+ == Permission to use, copy, modify, distribute and sell this software
+ == and its documentation for any purpose is hereby granted without fee,
+ == provided that the above copyright notice appears in all copies and
+ == that both that copyright notice and this permission notice appear
+ == in supporting documentation. Ronald Garcia makes no
+ == representations about the suitability of this software for any
+ == purpose. It is provided "as is" without express or implied warranty.
+ -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<head>
+<title>UTF-8 Codecvt Facet</title>
+
+</head>
+
+<body bgcolor="#ffffff" link="#0000ee" text="#000000"
+ vlink="#551a8b" alink="#ff0000">
+<img src="../../../boost.png" alt="C++ Boost"
+width="277" height="86"> <br clear="all">
+
+
+<a name="sec:utf8-codecvt-facet-class"></a>
+
+
+<h1><code>utf8_codecvt_facet</code></h1>
+
+
+<pre>
+template<
+ typename InternType = wchar_t,
+ typename ExternType = char
+> utf8_codecvt_facet
+</pre>
+
+
+<h2>Rationale</h2>
+
+
+ UTF-8 is a method of encoding Unicode text in environments where
+ where data is stored as 8-bit characters and some ascii characters
+ are considered special (i.e. Unix filesystem filenames) and tend
+ to appear more commonly than other characters. While
+ UTF-8 is convenient and efficient for storing data on filesystems,
+ it was not meant to be manipulated in memory by
+ applications. While some applications (such as Unix's 'cat') can
+ simply ignore the encoding of data, others should convert
+ from UTF-8 to UCS-4 (the more canonical representation of Unicode)
+ on reading from file, and reversing the process on writing out to
+ file.
+
+ <p>The C++ Standard IOStreams provides the <tt>std::codecvt</tt>
+ facet to handle specifically these cases. On reading from or
+ writing to a file, the <tt>std::basic_filebuf</tt> can call out to
+ the codecvt facet to convert data representations from external
+ format (ie. UTF-8) to internal format (ie. UCS-4) and
+ vice-versa. <tt>utf8_codecvt_facet</tt> is a specialization of
+ <tt>std::codecvt</tt> specifically designed to handle the case
+ of translating between UTF-8 and UCS-4.
+
+
+<h2>Template Parameters</h2>
+
+<table border summary="template parameters">
+<tr>
+<th>Parameter</th><th>Description</th><th>Default</th>
+</tr>
+
+<tr>
+<td><tt>InternType</tt></td>
+<td>The internal type used to represent UCS-4 characters.</td>
+<td><tt>wchar_t</tt></td>
+</tr>
+
+<tr>
+<td><tt>ExternType</tt></td>
+<td>The external type used to represent UTF-8 octets.</td>
+<td><tt>char_t</tt></td>
+</tr>
+</table>
+
+
+<h2>Requirements</h2>
+
+ <tt>utf8_codecvt_facet</tt> defaults to using <tt>char</tt> as
+ it's external data type and <tt>wchar_t</tt> as it's internal
+ datatype, but on some architectures <tt>wchar_t</tt> is
+ not large enough to hold UCS-4 characters. In order to use
+ another internal type.You must also specialize <tt>std::codecvt</tt>
+ to handle your internal and external types.
+ (<tt>std::codecvt<char,wchar_t,std::mbstate_t></tt> is required to be
+ supplied by any standard-conforming compiler).
+
+
+<h2>Example Use</h2>
+ The following is a simple example of using this facet:
+
+<pre>
+ //...
+ // My encoding type
+ typedef wchar_t ucs4_t;
+
+ std::locale old_locale;
+ std::locale utf8_locale(old_locale,new utf8_codecvt_facet<ucs4_t>);
+
+ // Set a New global locale
+ std::locale::global(utf8_locale);
+
+ // Send the UCS-4 data out, converting to UTF-8
+ {
+ std::wofstream ofs("data.ucd");
+ ofs.imbue(utf8_locale);
+ std::copy(ucs4_data.begin(),ucs4_data.end(),
+ std::ostream_iterator<ucs4_t,ucs4_t>(ofs));
+ }
+
+ // Read the UTF-8 data back in, converting to UCS-4 on the way in
+ std::vector<ucs4_t> from_file;
+ {
+ std::wifstream ifs("data.ucd");
+ ifs.imbue(utf8_locale);
+ ucs4_t item = 0;
+ while (ifs >> item) from_file.push_back(item);
+ }
+ //...
+</pre>
+
+
+<h2>History</h2>
+
+ This code was originally written as an iterator adaptor over
+ containers for use with UTF-8 encoded strings in memory.
+ Dietmar Kuehl suggested that it would be better provided as a
+ codecvt facet.
+
+<h2>Resources</h2>
+
+<ul>
+<li> <a href="http://www.unicode.org">Unicode Homepage</a>
+<li> <a href="http://home.CameloT.de/langer/iostreams.htm">Standard
+ C++ IOStreams and Locales</a>
+<li> <a href="http://www.research.att.com/~bs/3rd.html">The C++
+ Programming Language Special Edition, Appendix D.</a>
+</ul>
+
+<br>
+<hr>
+<table summary="Copyright information">
+<tr valign="top">
+<td nowrap>Copyright © 2001</td>
+<td><a href="http://www.osl.iu.edu/~garcia">Ronald Garcia</a>,
+Indiana University
+(<a href="mailto:garcia@cs.indiana.edu">garcia@osl.iu.edu</a>)<br>
+<a href="http://www.osl.iu.edu/~lums">Andrew Lumsdaine</a>,
+Indiana University
+(<a href="mailto:lums@osl.iu.edu">lums@osl.iu.edu</a>)</td>
+</tr>
+</table>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
+
+
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Configuration</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<title>Serialization</title>
+
+<!-- Expanding Menu Script Starts Here -->
+<script language="JavaScript">
+//<--!
+// netscape version
+
+function toggle(element) {
+ if (null == element){
+ return;
+ }
+ var targetId = element.id + "_detail";
+ targetElement = document.getElementById(targetId);
+ if (null != targetElement){
+ if (targetElement.style.display == "none") {
+ targetElement.style.display = "";
+ element.src="minus.gif";
+ }
+ else{
+ targetElement.style.display = "none";
+ element.src="plus.gif";
+ }
+ }
+}
+
+function clickHandlerNS(e) {
+ toggle(e.target);
+}
+
+// explorer version
+function clickHandlerIE() {
+ toggle(window.event.srcElement);
+}
+
+function collapse_all() {
+ var l = document.images;
+ var i = l.length;
+ while(i > 0){
+ i = i - 1;
+ var image = l[i];
+ image.style.display = "";
+ toggle(image);
+ }
+}
+
+
+function initialize() {
+ if(navigator.appName.indexOf("Netscape") != -1){
+ document.onclick = clickHandlerNS;
+ collapse_all();
+ }
+ else
+ if(navigator.appName.indexOf("Microsoft") != -1){
+ document.onclick = clickHandlerIE;
+ collapse_all();
+ }
+ else
+ if (navigator.appnName.indexOf("Konqueror") >= 0){
+ document.onclick = clickHandlerIE;
+ collapse_all();
+ }
+}
+
+//-->
+</script>
+
+</head>
+<body onload="initialize()">
+<h2>Contents</h2>
+<small>
+<!--
+<img src="dot.gif" onclick="collapse_all()">Collapse All
+-->
+<p>
+<dl class="page-index">
+ <dt><img style="display:none" src="plus.gif" id="release_notes"><a target="detail" href="release.html">Release Notes</a></dt>
+ <dd><div id="release_notes_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="release.html#difference_1_41">Differences from version 1.41</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="release.html#difference_1_40">Differences from version 1.40</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="release.html#difference_1_39">Differences from version 1.39</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="release.html#difference_1_37">Differences from version 1.37</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="release.html#difference_1_35">Differences from version 1.35</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="release.html#difference_1_34">Differences from version 1.34</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="release.html#difference_1_33">Differences from version 1.33</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="release.html#difference_1_32">Differences from version 1.32</a></dt>
+
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="release.html#todo">Pending Issues</a></dt>
+ </dl></div></dd>
+ <dt><img style="display:none" src="plus.gif" id="overview"><a target="detail" href="overview.html">Overview</a></dt>
+ <dd><div id="overview_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="overview.html#Requirements">Requirements</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="overview.html#Otherimplementations">Other Implementations</a></dt>
+ </dl></div></dd>
+ <dt><img style="display:none" src="plus.gif" id="tutorial"><a target="detail" href="tutorial.html">Tutorial</a></dt>
+ <dd><div id="tutorial_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="tutorial.html#simplecase">A Very Simple Case</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="tutorial.html#nonintrusiveversion">Non Intrusive Version</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="tutorial.html#serializablemembers">Serializable Members</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="tutorial.html#derivedclasses">Derived Classes</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="tutorial.html#pointers">Pointers</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="tutorial.html#arrays">Arrays</a>
+
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="tutorial.html#stl">STL Collections</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="tutorial.html#versioning">Class Versioning</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="tutorial.html#splitting">Splitting <code>serialize</code> into <code>save/load</code></a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="tutorial.html#archives">Archives</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="tutorial.html#examples">List of Examples</a>
+ </dl></div></dd>
+
+ <dt><img style="display:none" src="plus.gif" id="reference"><a target="detail" href="reference.html">Reference</a></dt>
+ <dd><div id="reference_detail"><dl class="page-index">
+ <dt><img style="display:none" src="plus.gif" id="archive_concept"><a target="detail" href="archives.html">Archive Concepts</a>
+ <dd><div id="archive_concept_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="archives.html#saving_interface">Saving Archive Concept</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="archives.html#loading_interface">Loading Archive Concept</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="archives.html#archive_models">Archive Models</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="archives.html#exceptions">Exceptions</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="archives.html#charactersets">Character Sets</a>
+ </dl></div></dd>
+ <dt><img style="display:none" src="plus.gif" id="serialization"><a target="detail" href="serialization.html">Serializable Concept</a>
+ <dd><div id="serialization_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="serialization.html#primitiveoperators">Primitive Types</a>
+ <dt><img style="display:none" src="dot.gif" id="class"><a target="detail" href="serialization.html#classoperators">Class Types</a>
+ <dd><div id="class_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="serialization.html#member">Member Function</a>
+ <dt><img style="display:none" src="plus.gif" id="splitfree"><a target="detail" href="serialization.html#free">Free Function</a>
+ <dd><div id="splitfree_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="serialization.html#namespaces">Namespaces for Free Function Overrides</a>
+ </dl></div></dd>
+ <dt><img style="display:none" src="plus.gif" id="members"><a target="detail" href="serialization.html#classmembers">Class Members</a>
+ <dd><div id="members_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="serialization.html#base">Base Classes</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="serialization.html#const"><code>const</code> Members</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="serialization.html#templates">Templates</a>
+ </dl></div></dd>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="serialization.html#versioning">Versioning</a>
+ <dt><img style="display:none" s'c="dot.gif"><a target="detail" href="serialization.html#splitting">Splitting <code>serialize</code> into <code>save/load</code></a>
+ </dl></div></dd>
+ <dt><img style="display:none" src="plus.gif" id="pointers"><a target="detail" href="serialization.html#pointeroperators">Pointers</a>
+ <dd><div id="pointers_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="serialization.html#constructors">Non-Default Constructors</a>
+ <dt><img style="display:none" src="plus.gif" id="derivedpointers"><a target="detail" href="serialization.html#derivedpointers">Pointers to Objects of Derived Classes</a>
+ <dd><div id="derivedpointers_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="serialization.html#registration">Registration</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="serialization.html#export">Export</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="serialization.html#instantiation">Instantiation</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="serialization.html#selectivetracking">Selective Tracking</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="serialization.html#runtimecasting">Runtime Casting</a>
+ </dl></div></dd>
+ </dl></div></dd>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="serialization.html#references">References</a>
+ <dt><img style="display:none" src="plus.gif" id="traits"><a target="detail" href="traits.html">Class Serialization Traits</a>
+ <dd><div id="traits_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="traits.html#version">Version</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="traits.html#level">Implementation Level</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="traits.html#tracking">Object Tracking</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="traits.html#export">Export Key</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="traits.html#Abstract">Abstract</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="traits.html#typeinfo">Type Information Implementation</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="traits.html#wrappers">Wrappers</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="traits.html#bitwise">Bitwise Serialization</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="traits.html#templates">Template Serialization Traits</a>
+
+ <dt><img style="display:none" src="plus.gif" id="compiletimemessages"><a target="detail" href="traits.html#compiletime_messages">Compile Time Warnings and Errors</a>
+ <dd><div id="compiletimemessages_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="traits.html#object_level">object_level</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="traits.html#object_versioning">object_versioning</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="traits.html#object_tracking">object_tracking</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="traits.html#pointer_level">pointer_level</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="traits.html#pointer_tracking">pointer_tracking</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="traits.html#const_loading">const_loading</a>
+ </dl></div></dd>
+
+
+
+ </dl></div></dd>
+ <dt><img style="display:none" src="plus.gif" id="wrappers"><a target="detail" href="wrappers.html">Serialization Wrappers</a>
+ <dd><div id="wrappers_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="wrappers.html#binaryobjects">Binary Objects</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="wrappers.html#arrays">Arrays</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="wrappers.html#strong_type"><code style="white-space: normal">strong_type</code></a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="wrappers.html#collection_size_type">Collection Sizes</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="wrappers.html#nvp">Name-Value Pairs</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="wrappers.html#composition">Composition</a>
+ </dl></div></dd>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="serialization.html#models">Models - Serialization Implementations Included in the Library</a>
+ </dl></div></dd>
+ <dt><img style="display:none" src="plus.gif" id="special"><a target="detail" 'ref="special.html">Special Considerations</a>
+ <dd><div id="special_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="special.html#objecttracking">Object Tracking</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="special.html#classinfo">Class Information</a>
+ <dt><img style="display:none" src="plus.gif" id="portability"><a target="detail" href="special.html#portability">Archive Portability</a>
+ <dd><div id="portability_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="special.html#numerics">Numerics</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="special.html#traits">Traits</a>
+ </dl></div></dd>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="special.html#binary_archives">Binary Archives</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="special.html#xml_archives">XML Archives</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="special.html#export">Exporting Class Serialization</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="special.html#static_libraries">Static Libraries and Serialization</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="special.html#dlls">DLLS - Serialization and Runtime Linking</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="special.html#plugins">Plugins</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="special.html#multi_threading">Multi-Threading</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="special.html#optimizations">Optimzations</a>
+ <dt><img style="display:none" src="plus.gif" id="exceptions"><a target="detail" href="exceptions.html">Archive Exceptions</a>
+ <dd><div id="exceptions_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="exceptions.html#unregistered_class"><code>unregistered_class</code></a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="exceptions.html#invalid_signature"><code>invalid_signature</code></a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="exceptions.html#unsupported_version"><code>unsupported_version</code></a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="exceptions.html#pointer_conflict"><code>pointer_conflict</code></a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="exceptions.html#incompatible_native_format"><code>incompatible_format</code></a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="exceptions.html#array_size_too_short"><code>array_size_too_short</code></a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="exceptions.html#stream_error"><code>stream_error</code></a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="exceptions.html#invalid_class_name"><code>invalid_class_name</code></a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="exceptions.html#unregistered_cast"><code>unregistered_cast</code></a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="exceptions.html#xml_archive_parsing_error"><code>xml_archive_parsing_error</code></a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="exceptions.html#xml_archive_tag_mismatch"><code>xml_archive_tag_mismatch</code></a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="exceptions.html#xml_archive_tag_name_error"><code>xml_archive_tag_name_error</code></a>
+ </dl></div></dd>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="exception_safety.html">Exception Safety</a>
+ </dl></div></dd>
+ <dt><img style="display:none" src="plus.gif" id="archive_reference"><a target="detail" href="archive_reference.html">Archive Class Reference</a>
+ <dd><div id="archive_reference_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="archive_reference.html#trivial">Trivial Archive</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="archive_reference.html#implementation">More Useful Archive Classes</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="archive_reference.html#usage">Usage</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="archive_reference.html#testing">Testing</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="archive_reference.html#polymorphic">Polymorphic Archives</a>
+ </dl></div></dd>
+ </dl></div></dd>
+ <dt><img style="display:none" src="plus.gif" id="implementation"><a target="detail" href="implementation.html">Implementation Notes</a>
+ <dd><div id="implementation_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="implementation.html#functiontemplateordering">Partial Function Template Ordering</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="implementation.html#charencoding">Character Encoding</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="implementation.html#tempatesyntax">Template Invocation syntax</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="implementation.html#partialtemplatespecialization">Partial Template Specialization</a>
+ <dt><img style="display:none" src="plus.gif" id="othercompilerissues"><a target="detail" href="implementation.html#othercompilerissues">Specific Compiler/Library Issues</a>
+ <dd><div id="othercompilerissues_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="implementation.html#gcc3x">GCC 3.X,4.X</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="implementation.html#gcc295">GCC 2.95</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="implementation.html#intel80">Intel 8.0</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="implementation.html#vc80">Visual C++ 8.0</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="implementation.html#vc71">Visual C++ 7.1</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="implementation.html#vc70">Visual C++ 7.0</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="implementation.html#vc6">Visual C++ 6.0</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="implementation.html#borland">Borland 5.64 and 5.51</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="implementation.html#comeau">Comeau 4.3.3</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="implementation.html#codewarrior">Code Warrior 8.3</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="implementation.html#tru64">TRU64</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="implementation.html#dinkumware">Dinkumware Library</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="implementation.html#stlport">STLPort 4.5.3</a>
+ </dl></div></dd>
+ <dt><img style="display:none" src="plus.gif" id="headers"><a target="detail" href="headers.html">Code Structure</a>
+ <dd><div id="headers_detail"><dl class="page-index">
+ <dt><img style="display:none" src="plus.gif" id="userincludes"><a target="detail" href="headers.html#userincludes">Files Included by User Programs</a>
+ <dd><div id="userincludes_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="headers.html#archiveimplementations">Archive Implementations</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="headers.html#serializationdeclarations">Serialization Declarations</a>
+ <dt><img style="display:none" 'rc="dot.gif"><a target="detail" href="headers.html#serializationimplementations">Serialization Implementations</a>
+ </dl></div>
+ <dt><img style="display:none" src="plus.gif" id="libraryimplementation"><a target="detail" href="headers.html#libraryimplementation">Files Which Implement the Library</a>
+ <dd><div id="libraryimplementation_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="headers.html#archivedevelopment">Archive Development</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="headers.html#archiveinternals">Archive Internals</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="headers.html#codemodules">Archive Library Code Modules</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="headers.html#dataflowiterators">Dataflow Iterators</a>
+ </dl></div></dd>
+ </dl></div></dd>
+ </dl></div></dd>
+ <dt><img style="display:none" src="plus.gif" id="case_studies">Case Studies
+ <dd><div id="case_studies_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="shared_ptr.html">Template serialization - <code>shared_ptr<class T></code></a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="shared_ptr2.html"><code>shared_ptr<class T></code>Revisited</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="pimpl.html">PIMPL</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="simple_log.html">A Simple Logging Archive Class</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="derivation.html">Derivation from an Existing Archive Class</a>
+ </dl></div></dd>
+ <dt><img style="display:none" src="plus.gif" id="otherclasses">Other Classes
+ <dd><div id="otherclasses_detail"><dl class="page-index">
+ <dt><img style="display:none" src="plus.gif" id="extended_type_info"><a target="detail" href="extended_type_info.html"><code>extended_type_info</code></a>
+ <dd><div id="extended_type_info_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="extended_type_info.html#motivation">Motivation</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="extended_type_info.html#runtime">Runtime Interface</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="extended_type_info.html#requirements">Requirements</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="extended_type_info.html#models">Models</a>
+ </dl></div></dd>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="void_cast.html"><code>void_cast</code></a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="codecvt.html"><code>utf8_codecvt_facet</code></a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="strong_typedef.html"><code>BOOST_STRONG_TYPEDEF</code></a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="state_saver.html"><code>state_saver</code></a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="dataflow.html">Dataflow Iterators</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="smart_cast.html"><code>smart_cast</code></a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="static_warning.html"><code>BOOST_STATIC_WARNING</code></a>
+ <dt><img style="display:none" src="plus.gif" id="singleton"><a target="detail" href="singleton.html"><code>singleton</code></a>
+ <dd><div id="singleton_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="singleton.html#motivation">Motivation</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="singleton.html#features">Features</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="singleton.html#classinterface">Class Interface</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="singleton.html#requirements">Requirements</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="singleton.html#examples">Examples</a>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="singleton.html#multithreading">Multi-Threading</a>
+ </dl></div></dd>
+ </dl></div></dd>
+ <!--
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="configuration.html">Configuration Information</a></dt>
+ -->
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="faq.html">Tips and Tricks</a>
+ <dt><img style="display:none" src="plus.gif" id="rationale"><a target="detail" href="rationale.html">Rationale</a></dt>
+ <dd><div id="rationale_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="rationale.html#serialization">The term "serialization" is preferred to "persistence"</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="rationale.html#archives">Archives are not streams</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="rationale.html#typeid"><code style="white-space: normal">typeid</code> information is not included in archives</a></dt>
+ </dl></div></dd>
+
+ <dt><img style="display:none" src="plus.gif" id="todo"><a target="detail" href="todo.html">To Do</a></dt>
+ <dd><div id="todo_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="todo.html#portablebinaryarchive">Portable Binary Archive</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="todo.html#performancetesting">Performance Testing and Profiling</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="todo.html#backversioning">Back Versioning</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="todo.html#nortti">Environments without RTTI</a></dt>
+
+ <dt><img style="display:none" src="plus.gif" id="newcasestudies"><a target="detail" href="new_case_studies.html">Proposed Case Studies</a></dt>
+ <dd><div id="newcasestudies_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="new_case_studies.html#functionobject">Serializing a Function Object</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="new_case_studies.html#archiveadaptor">Archive Adaptors</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="new_case_studies.html#archivehelper">Archive Helpers</a></dt>
+ </dl></div></dd>
+
+ </dl></div></dd>
+
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="history.html">History</a>
+ <!--
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="definitions.html">Definitions</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="faq.html">Frequently Asked Questions (FAQs)</a></dt>
+ -->
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="bibliography.html">Bibliography</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="acknowledgments.html">Acknowledgments</a></dt>
+</dl></div>
+</small>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Dataflow Iterators</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Dataflow Iterators</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<h3>Motivation</h3>
+Consider the problem of translating an arbitrary length sequence of 8 bit bytes
+to base64 text. Such a process can be summarized as:
+<p>
+source => 8 bit bytes => 6 bit integers => encode to base64 characters => insert line breaks => destination
+<p>
+We would prefer the solution that is:
+<ul>
+ <li>Decomposable. so we can code, test, verify and use each (simple) stage of the conversion
+ independently.
+ <li>Composable. so we can used this composite as a new component somewhere else.
+ <li>Efficient, so we're not required to re-implement it again.
+ <li>Scalable, so that it works well for short and arbitrarily long sequences.
+</ul>
+The approach that comes closest to meeting these requirements is that described
+and implemented with <a href="../../iterator/doc/index.html">Iterator Adaptors</a>.
+The fundamental feature of an Iterator Adaptor template that makes in interesting to
+us is that it takes as a parameter a base iterator from which it derives its
+input. This suggests that something like the following might be possible.
+<pre><code>
+typedef
+ insert_linebreaks< // insert line breaks every 72 characters
+ base64_from_binary< // convert binary values ot base64 characters
+ transform_width< // retrieve 6 bit integers from a sequence of 8 bit bytes
+ const char *,
+ 6,
+ 8
+ >
+ >
+ ,72
+ >
+ base64_text; // compose all the above operations in to a new iterator
+
+std::copy(
+ base64_text(address),
+ base64_text(address + count),
+ ostream_iterator<CharType>(os)
+);
+</code></pre>
+Indeed, this seems to be exactly the kind of problem that iterator adaptors are
+intended to address. The Iterator Adaptor library already includes
+modules which can be configured to implement some of the operations above. For example,
+included is <a target="transform_iterator" href="../../iterator/doc/transform_iterator.html">
+transform_iterator</a>, which can be used to implement 6 bit integer => base64 code.
+
+<h3>Dataflow Iterators</h3>
+Unfortunately, not all iterators which inherit from Iterator Adaptors are guarenteed
+to meet the composability goals stated above. To accomplish this purpose, they have
+to be written with some additional considerations in mind.
+
+We define a Dataflow Iterator as an class inherited from <code style="white-space: normal">iterator_adaptor</code> which
+fulfills as a small set of additional requirements.
+
+<h4>Templated Constructors</h4>
+<p>
+Templated constructor have the form:
+<pre><code>
+template<class T>
+dataflow_iterator(T start) :
+ iterator_adaptor(Base(start))
+{}
+</code></pre>
+When these constructors are applied to our example of above, the following code is generated:
+<pre><code>
+std::copy(
+ insert_linebreaks(
+ base64_from_binary(
+ transform_width(
+ address
+ ),
+ )
+ ),
+ insert_linebreaks(
+ base64_from_binary(
+ transform_width(
+ address + count
+ )
+ )
+ )
+ ostream_iterator<char>(os)
+);
+</code></pre>
+The recursive application of this template is what automatically generates the
+constructor <code style="white-space: normal">base64_text(const char *)</code> in our example above. The original
+Iterator Adaptors include a <code style="white-space: normal">make_xxx_iterator</code> to fulfill this function.
+However, I believe these are unwieldy to use compared to the above solution usiing
+Templated constructors.
+<p>
+Unfortunately, some systems which fail to properly support partial function template
+ordering cannot support the concept of a templated constructor as implemented above.
+A special"wrapper" macro has been created to work around this problem. With this "wrapper"
+the above example is modified to:
+<pre><code>
+std::copy(
+ base64_text(BOOST_MAKE_PFTO_WRAPPER(address)),
+ base64_text(BOOST_MAKE_PFTO_WRAPPER(address + count)),
+ ostream_iterator<char>(os)
+);
+</code></pre>
+This macro is defined in <a target="pfto" href="../../../boost/serialization/pfto.hpp"><boost/serialization/pfto.hpp></a>.
+For more information about this topic, check the source.
+
+<h4>Dereferencing</h4>
+Dereferencing some iterators can cause problems. For example, a natural
+way to write a <code style="white-space: normal">remove_whitespace</code> iterator is to increment past the initial
+whitespaces when the iterator is constructed. This will fail if the iterator passed to the
+constructor "points" to the end of a string. The
+<a target="filter_iterator" href="../../iterator/doc/filter_iterator.html">
+<code style="white-space: normal">filter_iterator</code></a> is implemented
+in this way so it can't be used in our context. So, for implementation of this iterator,
+space removal is deferred until the iterator actually is dereferenced.
+
+<h4>Comparison</h4>
+The default implementation of iterator equality of <code style="white-space: normal">iterator_adaptor</code> just
+invokes the equality operator on the base iterators. Generally this is satisfactory.
+However, this implies that other operations (E. G. dereference) do not prematurely
+increment the base iterator. Avoiding this can be surprisingly tricky in some cases.
+(E.G. transform_width)
+
+<p>
+Iterators which fulfill the above requirements should be composable and the above sample
+code should implement our binary to base64 conversion.
+
+<h3>Iterators Included in the Library</h3>
+Dataflow iterators for the serialization library are all defined in the hamespace
+<code style="white-space: normal">boost::archive::iterators</code> included here are:
+<dl class="index">
+ <dt><a target="base64_from_binary" href="../../../boost/archive/iterators/base64_from_binary.hpp">
+ base64_from_binary</a></dt>
+ <dd>transforms a sequence of integers to base64 text</dd>
+
+ <dt><a target="base64_from_binary" href="../../../boost/archive/iterators/binary_from_base64.hpp">
+ binary_from_base64</a></dt>
+ <dd>transforms a sequence of base64 characters to a sequence of integers</dd>
+
+ <dt><a target="insert_linebreaks" href="../../../boost/archive/iterators/insert_linebreaks.hpp">
+ insert_linebreaks</a></dt>
+ <dd>given a sequence, creates a sequence with newline characters inserted</dd>
+
+ <dt><a target="mb_from_wchar" href="../../../boost/archive/iterators/mb_from_wchar.hpp">
+ mb_from_wchar</a></dt>
+ <dd>transforms a sequence of wide characters to a sequence of multi-byte characters</dd>
+
+ <dt><a target="remove_whitespace" href="../../../boost/archive/iterators/remove_whitespace.hpp">
+ remove_whitespace</a></dt>
+ <dd>given a sequence of characters, returns a sequence with the white characters
+ removed. This is a derivation from the <code style="white-space: normal">boost::filter_iterator</code></dd>
+
+ <dt><a target="transform_width" href="../../../boost/archive/iterators/transform_width.hpp">
+ transform_width</a></dt>
+ <dd>transforms a sequence of x bit elements into a sequence of y bit elements. This
+ is a key component in iterators which translate to and from base64 text.</dd>
+
+ <dt><a target="wchar_from_mb" href="../../../boost/archive/iterators/wchar_from_mb.hpp">
+ wchar_from_mb</a></dt>
+ <dd>transform a sequence of multi-byte characters in the current locale to wide characters.</dd>
+
+ <dt><a target="xml_escape" href="../../../boost/archive/iterators/xml_escape.hpp">
+ xml_escape</a></dt>
+ <dd>escapes xml meta-characters from xml text</dd>
+
+ <dt><a target="xml_unescape" href="../../../boost/archive/iterators/xml_unescape.hpp">
+ xml_unescape</a></dt>
+ <dd>unescapes xml escape sequences to create a sequence of normal text<dd>
+</dl>
+<p>
+The standard stream iterators don't quite work for us. On systems which implement <code style="white-space: normal">wchar_t</code>
+as unsigned short integers (E.G. VC 6) they didn't function as I expected. I also made some
+adjustments to be consistent with our concept of Dataflow Iterators. Like the rest of our
+iterators, they are found in the namespace <code style="white-space: normal">boost::archive::interators</code> to avoid
+conflict the standard library version.
+<dl class = "index">
+ <dt><a target="istream_iterator" href="../../../boost/archive/iterators/istream_iterator.hpp">
+ istream_iterator</a></dt>
+ <dt><a target="ostream_iterator" href="../../../boost/archive/iterators/ostream_iterator.hpp">
+ ostream_iterator</a></dt>
+</dl>
+
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Definitions</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Derivation from an Existing Archive</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Derivation from an Existing Archive</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<dl class="page-index">
+</dl>
+
+<h3>Log Archive</h3>
+It may happen that one wants to create a new archive class by derivation from one
+of the included ones. Included is a sample program that shows how to derive a
+new archive from one of the ones included with the library. The first example is
+<a href="../example/demo_log.cpp" target="demo_log_cpp">
+demo_log.cpp</a>.
+<p>
+This derivation from the xml archive writes output in xml without the extra
+information required to read the data back into the application. It might be
+used to export one's data as simple xml for other applications or for logging
+data while debugging.
+<p>
+To this end it is derived from the included xml archive and the save functions for
+some types are specialized for this application.
+<p>
+The serialization library is
+implemented using the <b>C</b>uriously <b>R</b>ecurring <b>T</b>emplate
+<b>P</b>attern (<b>CRTP</b>). Also, all common code is factored out into
+separate modules to minimize code repetition. This makes derivation from
+an existing archive less straight forward than it would otherwise be.
+<p>
+This example illustrates several issues that have to be addressed when doing
+something like this
+<ol>
+ <li><i>It is derived from</i> <code style="white-space: normal">xml_oarchive_impl<log_archive></code>
+ <b>NOT</b> <code style="white-space: normal">xml_oarchive</code> <br>
+As described in the comments in
+<a href="../../../boost/archive/xml_oarchive.hpp" target="xml_oarchive_hpp">xml_oarchive.hpp</a>.
+<code style="white-space: normal">xml_oarchive</code> really a shorthand name for
+<code style="white-space: normal">xml_oarchive_impl<xml_oarchive></code>. So we should derive
+from <code style="white-space: normal">xml_oarchive_impl<log_archive></code> rather
+than <code style="white-space: normal">xml_oarchive</code>.
+<pre><code>
+class log_archive :
+ // don't derive from xml_oarchive !!!
+ public xml_oarchive_impl<log_archive>
+{
+...
+</code></pre>
+ <li><i>Note the</i> <code style="white-space: normal">log_archive</code> <i>between the</i> <>
+This is required so that base classes can downcast their <code style="white-space: normal">this</code> pointer
+to the most derived class. This is referred to as <b>C</b>uriously <b>R</b>ecurring
+<b>T</b>emplate <b>P</b>attern (<b>CRTP</b>) <a href="bibliography.html#11">[11]</a>.
+It is used to implement static polymorphism.
+ <li><i>Base classes need to be explicitly given access to the derived class.</i>
+This can be done by making members public or by including friend declarations for
+the base classes.
+<pre><code>
+ friend class detail::common_oarchive<log_archive>;
+ friend class basic_xml_oarchive<log_archive>;
+ friend class boost::serialization::save_access;
+</code></pre>
+
+ <li><i></i>Reread <a target="detail" href="headers.html#archiveinternals">Archive Internals</a>.
+This describes the class hierarchy so that you know what to override.
+ <li><i>Note the usage of PFTO.</i> Some compilers fail to provide support for
+partial function template ordering. The serialization library works around by
+using <a target="detail" href="implementation.html#functiontemplateordering">
+<b>P</b>artial <b>F</b>unction <b>T</b>emplate <b>O</b>rdering</a> in several places.
+In archive classes, this takes
+. This is done
+in several places, including the archive classes themselves.
+ <li><i>Base class functions will usually need to be explicitly invoked</i>
+We commonly specialize the function name <code style="white-space: normal">save_override</code>
+for saving primitives. Usage of a function name in a derived class
+"hides" similarly named functions of the base class. That is,
+function name overloading doesn't automatically
+include base classes. To address this, we can use:
+<pre><code>
+ using xml_oarchive_impl<derived_t>::save;
+ void save(const unsigned int t);
+ ...
+</code></pre>
+which should work on conforming compilers. However, I have found
+that the following equivalent works on more compilers.
+<pre><code>
+ // default fall through for any types not specified here
+ template<class T>
+ void save(const T & t){
+ xml_oarchive_impl<derived_t>::save(t);
+ }
+ void save(const unsigned int t);
+ ...
+</code></pre>
+so it's what I use.
+ <li><i>Template definitions of base classes may have to be explicitly instantiated.</i>
+ The demo includes
+<pre><code>
+// explicitly instantiate for this type of binary stream
+#include <boost/archive/basic_binary_oprimitive.ipp>
+</code></pre>
+for just this purpose. Failure to include required template definitions
+will result in undefined symbol errors when the program is linked.
+ <li><i>Without alteration, this class cannot be further derived from</i><br>
+Base classes using <b>CRTP</b> must be templates with a parameter corresponding to
+the most derived class. As presented here, this class doesn't qualify, so
+it cannot be used as a base class. In order to derive further from this class,
+it would have to be reorganized along the lines of the original <code style="white-space: normal">xml_oarchive</code>.
+Specifically, it would look something like:
+<pre><code>
+template<class Archive>
+class log_archive_impl :
+ // don't derive from xml_oarchive !!!
+ public xml_oarchive_impl<Archive>
+{
+ ...
+);
+
+// do not derived from this class !!!
+class log_archive :
+ public log_archive_impl<log_archive>
+{
+public:
+ log_archive(std::ostream & os, unsigned int flags = 0) :
+ log_archive_impl<xml_oarchive>(os, flags)
+ {}
+};
+</code></pre>
+
+</ol>
+
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Reference</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Exception Safety</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+The process of loading an archive may result in the creation of new objects. That
+same process may throw an exception at some point. In order to prevent memory leaks
+and invalid pointers, these situations must be considered. Unfortunately, there is
+no simple universal solution to this problem. The manner of addressing this must
+depend on the design of the data structures to be serialized. Below, we discuss
+varying scenarios in increasing order of difficulty. This discussion presumes that
+the class member functions are exception safe before considering serialization.
+That is, the destructor could be called at anytime without referencing
+an invalid pointer, or creating a memory leak.
+<ol>
+ <li><h4>class contains no pointers</h4>
+ No problem here.
+ <p>
+ <li><h4>class contains only <i>owned</i> pointers</h4>
+ From here on, we have to make a distinction between pointers used
+ to manage heap storage (<i>owned</i> pointers) and pointers used to refer
+ to related objects (<i>referenced</i> pointers). Programs containing <i>owned</i>
+ pointers must contain code for deleting these objects and returning the
+ deallocated storage to the heap. Programs containing <i>referenced</i> pointers
+ must be designed to ensure that no such <i>referenced</i> pointers are de-referenced
+ after the object pointed to has been destroyed and its storage returned
+ to the heap. If a pointer is stored in only one place, it must be an <i>owned</i>
+ pointer.
+ <p>
+ The load function traps any exceptions that occur between the time an object
+ is created and its pointer is stored. Should an exception occur while
+ reading an archive, the created object is deleted and the de-serialized
+ pointer is set to NULL. This ensures that there are no memory leaks.
+ The fact that there are no other copies of this pointer ensures that
+ no pointers are left invalid. The object's destructor should
+ be able to delete any other existing objects in the normal manner
+ without problem.
+ <a href="../test/test_delete_pointer.cpp" target="test_delete_pointer.cpp">test_delete_pointer.cpp</a>
+ illustrates this case.
+ <p>
+ <li><h4>class contains one or more <i>referenced</i> pointers</h4>
+ This situation can be further subdivided into two cases
+ <p>
+ <ol>
+ <li><h4><i>owned</i> pointers are always serialized before <i>referenced</i> pointers</h4>
+ Object tracking will ensure that no new objects will be created
+ by the loading of a <i>referenced</i> pointer.
+ If an exception occurs, <i>referenced</i> pointers will not need to be deleted
+ so there will be no memory leaks. The destructor of this class won't attempt to
+ delete these pointers so there will be no problem with dangling references.
+ <i>owned</i> pointers are handled exactly as described above.
+ <p>
+ <li><h4>class contains <i>referenced</i> pointers which might be created by load</h4>
+ If a <i>referenced</i> pointer is loaded before its corresponding <i>owned</i>
+ pointer, the object will be allocated on the heap. In certain cases
+ it cannot be known which pointers were created by their owners and which
+ were created by the load function. To address this:
+ <ul>
+ <li>Trap exceptions with a <code style="white-space: normal">try/catch</code> block.
+ <li>Within the catch part, invoke the archive function
+ <code style="white-space: normal">delete_created_pointers()</code> to delete any pointers
+ created by the class load. Without out other action, objects created in
+ this way would end up as memory leaks as they are not considered <i>owned</i>
+ pointers and hence aren't destroyed.
+ <li>The object's destructor won't try
+ to delete <i>referenced</i> pointers so any dangling references will
+ cause no harm.
+ </ul>
+ <a href="../example/demo_exception.cpp" target="demo_exception.cpp">demo_exception.cpp</a>
+ is a program that illustrates this case.
+ <p>
+ </ol>
+ <p>
+ <li><h4>Other cases</h4>
+ Situations not covered above are pointers for which the classifications of
+ <i>referenced</i> and <i>owned</i> are not applicable. This might occur where
+ pointers are created by one class but consumed and deleted by another. These
+ may be addressed with an ad hoc analysis similar to the above. As the
+ situation becomes more complex this becomes more difficult and error prone.
+ Eventually, it will be have to addressed by building heap management into the
+ pointer itself - that is into <code style="white-space: normal">boost::shared_ptr</code>.
+ The library includes serialization of <code style="white-space: normal">boost::shared_ptr</code>. As
+ previously mentioned, this required a tiny alteration in one of the
+ <code style="white-space: normal">boost::shared_ptr</code> implementation files in order to permit
+ access by the serialization system.
+</ol>
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Archive Exceptions</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Archive Exceptions</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<dl class="page-index">
+ <dt><a href="#unregistered_class"><code style="white-space: normal">unregistered_class</code></a>
+ <dt><a href="#invalid_signature"><code style="white-space: normal">invalid_signature</code></a>
+ <dt><a href="#unsupported_version"><code style="white-space: normal">unsupported_version</code></a>
+ <dt><a href="#unsupported_class_version"><code style="white-space: normal">unsupported_class_version</code></a>
+ <dt><a href="#pointer_conflict"><code style="white-space: normal">pointer_conflict</code></a>
+ <dt><a href="#incompatible_native_format"><code style="white-space: normal">incompatible_native_format</code></a>
+ <dt><a href="#array_size_too_short"><code style="white-space: normal">array_size_too_short</code></a>
+ <dt><a href="#stream_error"><code style="white-space: normal">stream_error</code></a>
+ <dt><a href="#invalid_class_name"><code style="white-space: normal">invalid_class_name</code></a>
+ <dt><a href="#unregistered_class"><code style="white-space: normal">unregistered_class</code></a>
+ <dt><a href="#multiple_code_instantiation"><code style="white-space: normal">multiple_code_instantiation</code></a>
+ <dt><a href="#xml_archive_parsing_error"><code style="white-space: normal">xml_archive_parsing_error</code></a>
+ <dt><a href="#xml_archive_tag_mismatch"><code style="white-space: normal">xml_archive_tag_mismatch</code></a>
+ <dt><a href="#xml_archive_tag_name_error"><code style="white-space: normal">xml_archive_tag_name_error</code></a>
+</dl>
+
+Archive operators can throw a <code style="white-space: normal">boost::archive_exception</code>
+object which can be caught by an application program. These exceptions are defined
+in the files <a target="archive_exception_hpp" href="../../../boost/archive/archive_exception.hpp">
+archive_exception.hpp</a>
+and <a target="basic_xml_archive_hpp" href="../../../boost/archive/basic_xml_archive.hpp">
+basic_xml_archive.hpp</a>.
+<pre><code>
+namespace boost {
+namespace archive {
+
+class archive_exception : public std::exception
+{
+public:
+ typedef enum {
+ unregistered_class, // attempt to serialize a pointer of an
+ // 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 after having already serialized the same
+ // object through a pointer. Were this permitted,
+ // it the archive load would result in the creation
+ // of extraneous object.
+ 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
+ stream_error // i/o error on 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
+ // needs to be rebuilt.
+ multiple_code_instantiation // code for implementing serialization for some
+ // type has been instantiated in more than one module.
+ } exception_code;
+ exception_code code;
+ archive_exception(exception_code c) : code(c) {}
+ virtual const char *what( ) const throw();
+};
+
+class xml_archive_exception : public virtual archive_exception
+{
+public:
+ typedef enum {
+ xml_archive_parsing_error, // archive doesn't contain expected data
+ xml_archive_tag_mismatch, // start/end tag in archive doesn't match program
+ xml_archive_tag_name_error // tag name contains invalid characters
+
+ } exception_code;
+ xml_archive_exception(exception_code c){}
+ virtual const char *what( ) const throw();
+};
+
+} // archive
+} // boost
+</code></pre>
+<p>
+<h3><a name="unregistered_class"><code style="white-space: normal">unregistered_class</code></a></h3>
+An attempt has been made to serialize a polymorphic class through a pointer
+without either registering it or associating it with an export key. This can also occur
+when using a new archive how class name has not been added to the system with the
+<code style="white-space: normal">BOOST_ARCHIVE_CUSTOM_ARCHIVE_TYPES</code> macro.
+
+<h3><a name="invalid_signature"><code style="white-space: normal">invalid_signature</code></a></h3>
+Archives are initiated with a known string. If this string is not found when
+the archive is opened, It is presumed that this file is not a valid archive and this
+exception is thrown.
+
+<h3><a name="unsupported_version"><code style="white-space: normal">unsupported_version</code></a></h3>
+This system assigns a version number of 3 to all archives created. Note that this is in
+no way related to version number of classes used by application programs. This refers
+to the version of the serialization system used to create the archive. Future versions
+of this serialization system will be able to identify archives created under previous
+(i.e. this) system and alter the loading procedure accordingly. Hence, future enhancements
+to this serialization system should not obsolete any existing archive files. It is only
+necessary to increment this version number when the newer system creates archives
+incompatible in format with the current one.
+<p>Should it ever occur that an older program attempts to read newer archives whose
+format has changed, this exception is thrown.
+
+<h3><a name="unsupported_class_version"><code style="white-space: normal">unsupported_class_version</code></a></h3>
+An attempt has been made to load a class whose version has been incremented since the
+program was written. Suppose that a class has been assigned version number 3 and the program
+has been built and sent to third parties. Now suppose that the definition of that class
+has been altered, the version number has been incremented to 4 and new archives have been
+built. If one attempts to load these new archives with the original program, this
+exception will be thrown.
+
+<h3><a name="pointer_conflict"><code style="white-space: normal">pointer_conflict</code></a></h3>
+To understand what this exception means consider the following scenario
+<pre><code>
+template<class Archive>
+void T::save(Archive &ar) const
+{
+ const A * aptr = &a;
+ ar << aptr; // save an instance of object of class A through a pointer
+ ...
+ ar << a; // save an instance of an object of class A
+ assert(aptr == &a); // this must be true
+}
+
+template<class Archive>
+void T::load(Archive &ar)
+{
+ A * aptr;
+ ar >> aptr; // create and initialize a new instance of class A
+ ...
+ ar >> a; // restore state of on object of class A
+ assert(aptr == &a); // this won't be true
+}
+</pre></code>
+An object is saved first through a pointer then directly. Upon loading back
+in the same sequence, we first create an new object and load in its data. Then
+we load the data into another existing object. Where we started with one
+object during save, we have two objects after restore. In a more realistic
+situation, it could be very difficult to find this error. Fortunately,
+these situations can be detected when the archive is created. When
+this occurs, this exception is thrown.
+
+<h3><a name = "incompatible_native_format"><code style="white-space: normal">incompatible_native_format</code></a></h3>
+The library currently supports char text, wide char text and native binary
+archive files. At the beginning of every archive, a signature is written indicating
+the type of archive. This exception is thrown when an attempt is made to read
+an archive written in a different format.
+
+<h3><a name="array_size_too_short"><code style="white-space: normal">array_size_too_short</code></a></h3>
+An attempt has been made to read an array that is larger than the array size.
+This should only occur when the size of an array in code is reduced after an
+archive has already been created.
+
+<h3><a name="stream_error"><code style="white-space: normal">stream_error</code></a></h3>
+An error has occured during stream input or ouput. Aside from the common
+situations such as a corrupted or truncated input file, there are
+several less obvious ones that sometimes occur.
+<p>
+This includes
+an attempt to read past the end of the file. Text files need a terminating
+new line character at the end of the file which is appended when the
+archive destructor is invoked. Be sure that an output archive on a stream
+is destroyed before opening an input archive on that same stream. That is,
+rather than using something like:
+<pre><code>
+std::stringstream ss;
+std::vector<V> v;
+boost::archive::text_oarchive oa(ss);
+oa << v;
+boost::archive::text_iarchive ia(ss);
+ia >> v;
+</code></pre>
+use
+<pre><code>
+std::stringstream ss;
+std::vector<V> v;
+{
+ boost::archive::text_oarchive oa(ss);
+ oa << v;
+}
+{
+ boost::archive::text_iarchive ia(ss);
+ ia >> v;
+}
+</code></pre>
+<p>
+Another one is the passing of uninitialized data. In general, the behavior
+of the serialization library when passed uninitialized data is undefined.
+If it can be detected, it will invoke an assertion in debug builds.
+Otherwise, depending on the type of archive, it may pass through without
+incident or it may result in an archive with unexpected data in it.
+This, in turn, can result in the throwing of this exception.
+
+<h3><a name="invalid_class_name"><code style="white-space: normal">invalid_class_name</code></a></h3>
+Class name length greater than the maximum permitted. Most likely cause is a corrupted
+archive or an attempt to insert virus via buffer overrun method.
+
+<h3><a name="unregistered_cast"><code style="white-space: normal">unregistered_cast</code></a></h3>
+In order to support casting between pointers of base and derived classes
+at runtime, a collection of legitimate conversions is maintained by the system.
+Normally this collection is maintained without any explicit action
+on the part of the user of the library. However, there are special cases
+where this might have to be done explicitly and could be overlooked. This
+is described in <a href="serialization.html#runtimecasting">Runtime Casting</a>.
+This exception is thrown if an attempt is made to convert between two pointers
+whose relationship has not been registered,
+
+<h3><a name="multiple_code_instantiation"><code style="white-space: normal">multiple_code_instantiation</code></a></h3>
+This exception is thrown when it is detected that the serialization of the same type
+has been instantiated more that once. This might occur when
+serialization code is instantiated in both the mainline and one or more DLLS.
+
+<h3><a name="xml_archive_parsing_error"><code style="white-space: normal">xml_archive_parsing_error</code></a></h3>
+The XML generated by the serialization process is intimately coupled to the
+C++ class structure, relationships between objects and the serialization
+specifications. If these become out of sync in any way, the XML may not map
+to the loading serialization and this exception might be thrown. This might
+occur for one of the following reasons:
+<ul>
+ <li>The archive has been edited outside the serialization system. This might
+be possible if only the data is changed and not the XML attributes and nesting
+structure is left unaltered. But any other editing is likely to render the
+archive unreadable by the serialization library.
+ <li>The serialization has been altered and an archive generated by the old
+code is being read. That is, versioning has not been properly employed to
+properly deserialize previously created archives.
+</ul>
+
+<h3><a name="xml_archive_tag_mismatch"><code style="white-space: normal">xml_archive_tag_mismatch</code></a></h3>
+This exception will be thrown if the start or end tag of and XML element doesn't match
+the name specified for the object in the program.
+
+<h3><a name="xml_archive_tag_name_error"><code style="white-space: normal">xml_archive_tag_name_error</code></a></h3>
+This exception will be thrown if the tag name contains invalid characters. Valid characters
+for an XML tag are: upper and lower case letters, digits, and the following punctuation: .(period),
+_(underscore), :(colon), and -(hyphen).
+
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - extended_type_info</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center"><code style="white-space: normal">extended_type_info</code></h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<dl class="page-index">
+ <dt><a href="#motivation">Motivation</a>
+ <dt><a href="#runtime">Runtime Interface</a>
+ <dt><a href="#requirements">Requirements</a>
+ <dt><a href="#models">Models</a>
+ <dt><a href="#example">Example</a>
+</dl>
+
+<h3><a name="motivation">Motivation</a></h3>
+The serialization library needs a system like
+<code style="white-space: normal">type_info/typeid()</code> to perform
+the following functions
+<ol>
+ <li>
+ given a pointer to a type T discover the true type pointed to.
+ <li>
+ given an "external" key - determine what type of object to create.
+</ol>
+<h3>The problem with <code style="white-space: normal">std::type_info</code></h3>
+<ul>
+ <li>
+ The main function we require - <code style="white-space: normal">std::typeid()</code>
+ is not available in all environments. Support for this function depends upon
+ runtime typing(RTTI) support from the compiler. This may be non-existent
+ or not enabled for reasons such as a percieved inefficiency.
+ <li>
+ <code style="white-space: normal">std::type_info</code> includes a string
+ containing type name. This would seem to satisfy 2) above.
+ But the format of this string is not consistent accross compilers, libraries,
+ and operating systems. This makes it unusable for support of portable archives.
+ <li>
+ Even if the type name string could somehow be made portable, there is no
+ guarentee that class headers would be included in the same name space accross
+ different applications. In fact, including different headers in different
+ name spaces is an accepted method used to avoid name space conflicts.
+ Thus the namespace::class_name can't be used as a key.
+ <li>
+ There exists the possibility that different classes use different type id
+ mechanism. The class header might include this information. If we want to
+ import class headers accross applications, its convenient that the type id
+ mechanism support inter-operability accross different type id systems.
+</ul>
+<h3>Features</h3>
+<code style="white-space: normal"><a target="extended_type_info.hpp" href = "../../../boost/serialization/extended_type_info.hpp">
+extended_type_info</a></code> is an implementation
+of <code style="white-space: normal">std::type_info</code> functionality with the
+following features:
+<ul>
+ <li>
+ Builds a set of <a target="extended_type_info.hpp" href = "../../../boost/serialization/extended_type_info.hpp">
+ <code style="white-space: normal">extended_type_info</a></code> records - one for each type
+ serialized.
+ <li>
+ permits association of an arbitrary string key with a type. Often this key would
+ be the class name - but it doesn't have to be. This key is referred to as
+ a GUID - Globally Unique IDentifier. Presumably it should be unique in the universe.
+ Typically this GUID would be in header files and be used to match type accross
+ applications. The macro BOOST_CLASS_EXPORT can be invoked to associate a string
+ key with any known type. We'll refer to these types as "exported types"
+ <li>
+ permits the "mixing" of type info systems. For example, one class might use
+ <code style="white-space: normal">typeid()</code> to find the external identifier
+ of a class while another might not.
+</ul>
+
+Exported types are maintained in a global table so that given a string key, the
+corresponding type can be found. This facility is used by the serialization library
+in order to construct types serialized through a base class pointer.
+
+<h3><a name="runtime">Runtime Interface</a></h3>
+<pre><code">
+namespace boost {
+namespace serialization {
+
+class extended_type_info
+{
+protected:
+ // this class can't be used as is. It's just the
+ // common functionality for all type_info replacement
+ // systems. Hence, make these protected
+ extended_type_info(
+ const unsigned int type_info_key,
+ const char * key
+ );
+ ~extended_type_info();
+ void key_register();
+ void key_unregister();
+public:
+ const char * get_key() const;
+ bool operator<(const extended_type_info &rhs) const;
+ bool operator==(const extended_type_info &rhs) const;
+ bool operator!=(const extended_type_info &rhs) const {
+ return !(operator==(rhs));
+ }
+ // for plugins
+ virtual void * construct(unsigned int count = 0, ...) const;
+ virtual void destroy(void const * const p) const;
+ static const extended_type_info * find(const char *key);
+};
+
+} // namespace serialization
+} // namespace boost
+</code></pre>
+<p>
+Generally, there will be one and only one
+<code style="white-space: normal"><a target="extended_type_info.hpp" href = "../../../boost/serialization/extended_type_info.hpp">extended_type_info</a></code>
+instance created for each type. However, this is enforced only at the executable
+module level. That is, if a program includes some shared libraries or DLLS,
+there may be more than one instance of this class correponding to a particular type.
+For this reason the comparison functions below can't just compare the addresses of
+this instance but rather must be programmed to compare the the actual information
+the instances contain.
+<dl>
+
+<dt><h4><pre><code>
+extended_type_info(unsigned int type_info_key, const char *key);
+</code></pre></h4></dt>
+<dd>
+This constructor should be called by all derived classes.
+The first argument should be the particular implementation.
+For this default implementation base on typeid(), this is the
+value 1. Each system must have its own integer. This value
+is used to permit the inter-operability of different typeinfo
+systems.
+<p>
+The second argument is a const string which is the external
+name of the type to which this record corresponds.
+It may sometimes be referred to as a GUID - a <b>G</b>lobal <b>U</b>nique <b>ID</b>entifier.
+It is passed through archives from one program invocation to
+another to uniquely identify the types that the archive contains.
+If the "export" facility is not going to be used,
+this value may be NULL.
+</dd>
+
+<dt><h4><pre><code>
+void key_register();
+void key_unregister();
+</code></pre></h4></dt>
+<dd>
+This system maintains a global table which relates
+external strings to
+<code style="white-space: normal">extended_type_info</code> records.
+This table is used when loading pointers to objects serialized
+through a base class pointer. In this case, the archive
+contains a string which is looked up in this table to
+determine which <code style="white-space: normal">extended_type_info</code>
+to use for creating a new object.
+<p>
+These functions are called by constructors and
+destructors of classes which implement
+<code style="white-space: normal">extended_type_info</code>
+to add and remove entries from this table.
+</dd>
+
+<dt><h4><pre><code>
+const char *get_key() const;
+</code></pre></h4></dt>
+<dd>
+Retrieves the key for <code style="white-space: normal"><a target="extended_type_info.hpp" href = "../../../boost/serialization/extended_type_info.hpp">extended_type_info</a></code>
+instance. If no key has been associated with the instance, then a NULL is returned.
+</dd>
+
+<dt><h4><pre><code>
+bool operator<(const extended_type_info & rhs) const;
+bool operator==(const extended_type_info & rhs) const;
+bool operator!=(const extended_type_info & rhs) const;
+</code></pre></h4></dt>
+<dd>
+These functions are used to compare 'wo
+<a target="extended_type_info.hpp" href = "../../../boost/serialization/extended_type_info.hpp">
+<code style="white-space: normal">
+extended_type_info
+</code>
+</a>
+objects. They impose a strict total ordering on all
+<code style="white-space: normal">extended_type_info</code> records.
+</dd>
+
+<dt><h4><pre><code>
+virtual void * construct(unsigned int count = 0, ...) const;
+</code></pre></h4></dt>
+<dd>
+Construct a new instance of the type to which this
+<a target="extended_type_info.hpp" href = "../../../boost/serialization/extended_type_info.hpp">
+<code style="white-space: normal">
+extended_type_info
+</code>
+</a>
+record corresponds. This function takes variable list of up to 4 arguments
+of any type. These arguments are passed to the type's constructor
+at runtime. In order to use the facility,
+one must declare a type sequence for the constructor arguments.
+Arguments for this function must match in number and type
+with those specified when the type was exported.
+This function permits one to create instances of
+any exported type given only the exported <strong>GUID</strong> assigned
+with BOOST_CLASS_EXPORT.
+If these types are defined in DLLS or shared libraries. When these modules
+are loaded at runtime, these constructor can be called until the module
+is unloaded. These modules are referred to as <b>plugin</b>.
+</code>
+</dd>
+
+<dt><h4><pre><code>
+virtual void destroy(void const * const p) const;
+</code></pre></h4></dt>
+<dd>
+Destroy an instance created by the above constructor.
+</dd>
+
+<dt><h4><pre><code>
+static const extended_type_info * find(const char *key);
+</code></pre></h4></dt>
+<dd>
+Given a character string key or <strong>GUID</strong>, return the address of a
+corresponding <code style="white-space: normal"><a target="extended_type_info.hpp" href = "../../../boost/serialization/extended_type_info.hpp">extended_type_info</a></code>
+object.
+
+</dl>
+
+<h3><a name="requirements">Requirements for and Implementation</a></h3>
+In order to be used by the serialization library, an implementation of
+<code style="white-space: normal">extended_type_info</code>,
+(referred to as ETI here), must be derived from
+<a target="extended_type_info.hpp" href = "../../../boost/serialization/extended_type_info.hpp">
+<code style="white-space: normal">
+extended_type_info
+</code>
+</a>
+and also implement the following:
+
+<dl>
+
+<dt><h4><code style="white-space: normal"><pre>
+template<class ETI>
+const extended_type_info *
+ETI::get_derived_extended_type_info(const T & t) const;
+</pre></code></h4></dt>
+<dd>
+Return a pointer to the
+<code style="white-space: normal">extended_type_info</code>
+instance that corresponds to
+the "true type" of the type T. The "true type" is the lowest type in the
+hierarchy of classes. The type T can always be cast to the "true type" with
+a static cast. Implemention of this function will vary among type id systems
+and sometimes will make presumptions about the type T than can be identified
+with a particular <code style="white-space: normal">extended_type_info</code> implementation.
+</dd>
+
+<dt><h4><code style="white-space: normal"><pre>
+virtual bool ETI::is_less_than(const extended_type_info &rhs) const;
+</pre></code></h4></dt>
+<dd>
+Compare this instance to another one using the same
+<code style="white-space: normal">extended_type_info</code> implementation.
+</dd>
+
+<dt><h4><code style="white-space: normal"><pre>
+virtual bool ETI::is_equal(const extended_type_info &rhs) const;
+</pre></code></h4></dt>
+<dd>
+Compare this instance to another one using the same
+<code style="white-space: normal">extended_type_info</code> implementation.
+Return <code style="white-space: normal">true</code> if the types referred
+to are the same. Otherwise return
+<code style="white-space: normal">false</code>
+</dd>
+
+<dt><h4><code style="white-space: normal"><pre>
+const char ETI::get_key() const;
+</pre></code></h4></dt>
+<dd>
+Retrieve the external key (aka GUID) for this class.
+</dd>
+
+<dt><h4><code style="white-space: normal"><pre>
+virtual void * construct(unsigned int count, ...) const;
+</pre></code></h4></dt>
+<dd>
+Construct an instance of the corresponding type
+with the include argument list.
+</dd>
+
+<dt><h4><code style="white-space: normal"><pre>
+virtual void * destroy(void const * const ptr ) ) const;
+</pre></code></h4></dt>
+<dd>
+Destroy an instance of this type. This calls the
+proper destructor and recovers allocated memory.
+</dd>
+
+</dl>
+
+<h3><a name="models">Models</a></h3>
+The serialization library includes two distinct
+<code style="white-space: normal"><a target="extended_type_info.hpp" href="../../../boost/serialization/extended_type_info.hpp">extended_type_info</a></code>
+implementatio's.
+<p>
+<code style="white-space: normal"><h4><a target="extended_type_info_typeid.hpp" href = "../../../boost/serialization/extended_type_info_typeid.hpp">
+extended_type_info_typeid</a></h4></code>is implemented in terms of the standard typeid(). It presumes that RTTI support is enabled
+by the compiler.
+<p>
+<code style="white-space: normal"><h4><a target="extended_type_info_no_rtti.hpp" href="../../../boost/serialization/extended_type_info_no_rtti.hpp">
+extended_type_info_no_rtti</a></h4></code>
+is implemented in a way that doesn't rely on the existence RTTI.
+Instead, it requires that all polymorphic types be explictly exported.
+In addition, if the export facility is to be used to serialize types
+through base class pointers, those types are required to implement
+a virtual function with the signature:
+
+<code><pre>
+virtual const char * get_key();
+</pre></code>
+which returns a unique string the most derived object this class.
+This function must be virtual in order to implement the functionality required by
+<code style="white-space: normal">ETI::get_derived_extended_type_info</code>
+as described above.
+
+<h3><a name="example">Example</a></h3>
+The test program <code style="white-space: normal"><a target="test_no_rtti" href="../test/test_no_rtti.cpp">test_no_rtti</a></code>
+implements this function in terms of the <code style="white-space: normal"><a target="extended_type_info_no_rtti.hpp" href="../../../boost/serialization/extended_type_info_no_rtti.hpp">
+extended_type_info</a></code> API above to return the export key associated with the class.
+This requires that non-abstract types be exported. It also demonstrates the
+inter-operability with between two different implementations of
+<code style="white-space: normal">extended_type_info</code>.
+
+<h3><a name="type_requirements">Requirements for Each Type</a></h3>
+Each type to be managed by the system must be
+"registered" individually. This is accomplished by instantiating
+templates. For example, if the type T is to use the type_info system
+one would include the following code:
+
+<code style="white-space: normal"><pre>
+namespace boost {
+namespace serialization {
+template
+struct extended_type_info_typeid>T>;
+template
+struct extended_type_info_typeid>const T>;
+} // serialization
+} // boost
+</pre></code>
+
+For those using the serialization library, this step can be skipped
+as it is done automatically. The serialization library includes
+the macro:
+
+<code style="white-space: normal"><pre>
+BOOST_CLASS_TYPE_INFO(
+ my_type,
+ extended_type_info_typeid>my_class>
+)
+</pre></code>
+
+which is used to specify which <code>extended_type_info</code> system is to
+be used for a given type.
+<p>
+<code>extended_type_info</code> includes a facility for constructing
+instances of types without knowing what the exact types are. This is done
+with the function
+<code>
+virtual void * extended_type_info::construct(unsigned int count = 0, ...) const;
+</code>
+. For example:
+<br>
+<code><pre>
+struct base {
+...
+};
+struct derived : public base {
+...
+};
+...
+extended_type_info *eti = extended_type_info::find("my_class")
+base * b = eti->construct(...);
+</pre></code>
+<br>
+The <code>construct</code> takes an argument count and up to
+four parameters of any type. The arguments are passed to the
+constructor of "my_class".
+
+
+A complete example of this can be found
+<a target="test_plugin.cpp" href="test_plugin.cpp">here</a>
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2005-2009.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <link rel="stylesheet" type="text/css" href="../../../boost.css">
+ <link rel="stylesheet" type="text/css" href="style.css">
+ <title>Serialization - Tips and Tricks</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+ <table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3>
+ <a href="../../../index.htm">
+ <img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">
+ Serialization</h1>
+ <h2 align="center">
+ Tips and Tricks</h2>
+ </td>
+ </tr>
+ </table>
+ <hr>
+This section will be used to list answers to questions raise in the mailing
+lists. Most of these are due to subtle aspects of the library which are
+overlooked even though they might be described in the documenation. Often,
+these issues are very easy to address - but can be excruciating difficult to
+find. Should you have such an experience, feel free to vent your frustration
+in a constructive way by adding in your own item. The best way to do this
+is to create a <a href="http://svn.boost.org/trac/boost/browser">"TRAK" item</a>
+which includes the text you want to add to this list.
+
+ <ul>
+ <li><h4>
+ <a name="differences_1_37"></a>Differences from Boost 1.37</h2>
+ </h4></li>
+ </ul>
+ <hr>
+ <p>
+ <i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2009. 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) </i>
+ </p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Code Structure</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Code Structure</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+
+<dl class="page-index">
+ <dt><a href="#userincludes">Files Included by User Programs</a>
+ <dl class="page-index">
+ <dt><a href="#archiveimplementations">Archive Implementations</a>
+ <dt><a href="#serializationdeclarations">Serialization Declarations</a>
+ <dt><a href="#serializationimplementations">Serialization Implementations</a>
+ </dl>
+ <dt><a href="#libraryimplementation">Files Which Implement the Library</a>
+ <dl class="page-index">
+ <dt><a href="#archivedevelopment">Archive Development</a>
+ <dt><a href="#archiveinternals">Archive Internals</a>
+ <dt><a href="#codemodules">Archive Library Code Modules</a>
+ <dt><a href="#dataflowiterators">Dataflow Iterators</a>
+ </dl>
+</dl>
+
+This library includes a large number of files. The are organized and classified
+according to purpose listed in the above index.
+<p>
+<code style="white-space: normal">namespace</code> of a classes and templates is syncronized
+with the directory in which the file is found. For example, the class declaration
+<pre><code>
+boost::archive::text_oarchive
+</code></pre>
+is included with the following declaration
+<pre><code>
+#include <boost/archive/text_oarchive.hpp>
+</code></pre>
+
+<a name="userincludes">
+<h3>Files Included by User Programs</h3>
+Using this library entails including headers listed in this section.
+It should not be necessary to explictly include any other header files.
+
+<a name="archiveimplementations">
+<h4>Archive Implementations</h4>
+These header files contain declarations used to save and restore data to each type
+of archive. Include the archives according to the facilities the code module requires.
+
+<dl>
+
+<dt><a target="archive_exception" href="../../../boost/archive/archive_exception.hpp">
+boost/archive/archive_exception.hpp
+</a>
+<dd>Exceptions which might be invoked by the library.</dd>
+
+<dt><a target="binary_iarchive" href="../../../boost/archive/binary_iarchive.hpp">
+boost/archive/binary_iarchive.hpp
+</a>
+<dd>native binary input archive used for loading.</dd>
+
+<dt><a target="binary_oarchive" href="../../../boost/archive/binary_oarchive.hpp">
+boost/archive/binary_oarchive.hpp
+</a>
+<dd>native binary output archive used for saving.</dd>
+
+<dt><a target="text_iarchive" href="../../../boost/archive/text_iarchive.hpp">
+boost/archive/text_iarchive.hpp
+</a>
+<dd>text input archive used for loading.</dd>
+
+<dt><a target="text_oarchive" href="../../../boost/archive/text_oarchive.hpp">
+boost/archive/text_oarchive.hpp
+</a>
+<dd>text output archive used for saving.</dd>
+
+<dt><a target="text_wiarchive" href="../../../boost/archive/text_wiarchive.hpp">
+boost/archive/text_wiarchive.hpp
+</a>
+<dd>wide character text input archive used forloading.</dd>
+
+<dt><a target="text_woarchive" href="../../../boost/archive/text_woarchive.hpp">
+boost/archive/text_woarchive.hpp
+</a>
+<dd>wide character text input archive used for saving.</dd>
+
+<dt><a target="xml_iarchive" href="../../../boost/archive/xml_iarchive.hpp">
+boost/archive/xml_iarchive.hpp
+</a>
+<dd>xml input archive used for loading.</dd>
+
+<dt><a target="text_oarchive" href="../../../boost/archive/xml_oarchive.hpp">
+boost/archive/xml_oarchive.hpp
+</a>
+<dd>xml output archive used for saving.</dd>
+
+<dt><a target="text_wiarchive" href="../../../boost/archive/xml_wiarchive.hpp">
+boost/archive/xml_wiarchive.hpp
+</a>
+<dd>wide character xml input archive used for loading.</dd>
+
+<dt><a target="text_woarchive" href="../../../boost/archive/xml_woarchive.hpp">
+boost/archive/xml_woarchive.hpp
+</a>
+<dd>wide character xml output archive used for saving.</dd>
+
+</dl>
+
+<a name="serializationdeclarations">
+<h4>Serialization Declarations</h4>
+To specify how a type is serialized, one codes templates for serialization functions.
+In the simplest cases, this does not require the inclusion of any header files for this purpose.
+In most cases one or more of the following header files will have to be included in order
+to complete or refine the description of the serializaition implementation for a given class.
+
+<dl>
+
+<dt><a target="base_object" href="../../../boost/serialization/base_object.hpp">
+boost/serialization/base_object.hpp
+</a>
+<dd>For serialization of base classes.</dd>
+
+<dt><a target="nvp" href="../../../boost/serialization/nvp.hpp">
+boost/serialization/nvp.hpp
+</a>
+<dd>To associate a name tag with a serializable object. This is necessary to
+properly render an xml archive which includes the object name.</dd>
+
+<dt><a target="split_free" href="../../../boost/serialization/split_free.hpp">
+boost/serialization/split_free.hpp
+</a>
+<dd>To divide implementation of <em>non-intrusive</em> serialization into separate
+save and load functions.</dd>
+
+<dt><a target="split_member" href="../../../boost/serialization/split_member.hpp">
+boost/serialization/split_member.hpp
+</a>
+<dd>To divide implementation of <em>intrusive</em> serialization into separate
+save and load functions.</dd>
+
+<dt><a target="export" href="../../../boost/serialization/export.hpp">
+boost/serialization/export.hpp
+</a>
+<dd>For serialization of pointers to derived classes via key export.</dd>
+
+<dt><a target="assume_abstract" href="../../../boost/serialization/assume_abstract.hpp">
+boost/serialization/assume_abstract.hpp
+</a>
+<dd>This is just a thin wrapper which permits one to explicitly specify that a
+particular type is an abstract base class. It is necessary to use this
+for compilers which don't support the boost type traits implementation of
+is_abstact.
+</dd>
+
+</dl>
+
+This group will be required less frequently. The are used to override aspects of
+the default implementation of the serialization process for specified types.
+
+<dl>
+
+<dt><a target="version" href="../../../boost/serialization/version.hpp">
+boost/serialization/version.hpp
+</a>
+<dd>To override the default version index (0) assigned to a class.</dd>
+
+<dt><a target="level" href="../../../boost/serialization/level.hpp">
+boost/serialization/level.hpp
+</a>
+<dd>To override the default implementaton level trait for a type.</dd>
+
+<dt><a target="tracking" href="../../../boost/serialization/tracking.hpp">
+boost/serialization/tracking.hpp
+</a>
+<dd>To override the default tracking trait for a type.</dd>
+
+<dt><a target="type_info_implementation" href="../../../boost/serialization/type_info_implementation.hpp">
+boost/serialization/type_info_implementation.hpp
+</a>
+<dd>By default, the library uses RTTI, to identify types at runtime. In some cases, E.G.
+such as a platform which doesn't implement RTTI, this header can be included to permit
+the override of the default runtime type identification system.</dd>
+
+</dl>
+
+<a name="serializationimplementations">
+<h4>Serialization Implementations</h4>
+This group of headers includes templates which implement serialization for Standard
+Library or Boost Library templates. Any program which uses these templates can
+invoke serialization of objects of these types just by including the corresponding header.
+<p>
+By convention' these header files are named:
+
+boost/serialization/xxx.hpp
+
+where xxx is the name of the header file which contains the type to be serialized.
+For example, the declaration
+<pre><code>
+#include <boost/serialization/list.hpp>
+</code></pre>
+
+includes the code to implement serialization of the STL
+<code style="white-space: normal">std::list</code> type. While
+
+<pre><code>
+#include <boost/serialization/shared_ptr.hpp>
+</code></pre>
+
+includes code to implement serialization of the BOOST <code style="white-space: normal">boost::shared_ptr</code> type.
+
+Note that including the serialization header for a type automatically includes the
+appropriate header of the type to be serialized.
+
+As of this writing, the library includes templates of all STL library templates as well
+as templates for <code style="white-space: normal">boost::optional</code>,
+<code style="white-space: normal">boost::shared_ptr</code>, and
+<code style="white-space: normal">boost::scoped_ptr</code>.
+Presumably, this list will expand with the passage of time.
+
+<a name="libraryimplementation">
+<h3>Files Which Implement the Library</h3>
+
+<a name="archivedevelopment">
+<h4>Archive Development</h4>
+These header files contain declarations for basic types used to create
+concrete archive types that are made available to users above. Users wishing
+to make their own type of archive may want to examine these headers to
+see how the archives included with the libary have been constructed.
+
+<dl>
+
+<dt><a target="basic_archive" href="../../../boost/archive/basic_archive.hpp">
+boost/archive/basic_archive.hpp
+</a>
+</dt>
+<dd>
+This file includes declarations for certain types that have to be accounted
+for in all archive implementations. The serialization system relies on
+certain special types such as <code style="white-space: normal">class_id_type</code> and others to
+record information in archives that is required to reconstruct the original
+data structure. These are handled exactly as any other serializable type.
+That is, the can be handled as simple primitives such as they are in simple
+text files, or with special code as they are in xml archives.
+</dd>
+
+<dt><a target="basic_text_oprimitive" href="../../../boost/archive/basic_text_oprimitive.hpp">
+boost/archive/basic_text_oprimitive.hpp
+</a>
+<dt><a target="basic_text_iprimitive" href="../../../boost/archive/basic_text_iprimitive.hpp">
+boost/archive/basic_text_iprimitive.hpp
+</a>
+</dt>
+<dd>
+Implementation of serialization of primitive types in terms of an character
+or wide character text streams. This is used in the implementation of text and
+xml archives. Presumably this would be useful for implementations of other variations
+of text archives such as user friendly text or windows ini files.
+</dd>
+
+<dt><a target="basic_binary_oprimitive" href="../../../boost/archive/basic_binary_oprimitive.hpp">
+boost/archive/basic_binary_oprimitive.hpp
+</a>
+<dt><a target="basic_binary_iprimitive" href="../../../boost/archive/basic_binary_iprimitive.hpp">
+boost/archive/basic_binary_iprimitive.hpp
+</a>
+</dt>
+<dd>
+Implementation of serialization of primitive types in terms of an character
+or wide character binary streams.
+</dd>
+
+<dt><a target="basic_binary_oarchive" href="../../../boost/archive/basic_binary_oarchive.hpp">
+boost/archive/basic_binary_oarchive.hpp
+</a>
+<dt><a target="basic_binary_iarchive" href="../../../boost/archive/basic_binary_iarchive.hpp">
+boost/archive/basic_binary_iarchive.hpp
+</a>
+<dd>
+Implementation of serialization of all types in terms of an character
+or wide character binary streams. This is factored out separately from the
+implementation of binary primitives above. This may facilitate the creation of
+other types of binary archives in the future. It also preserves analogy and symetry with
+the rest of the library which aids in understanding.
+</dd>
+<dt><a target="basic_text_oarchive" href="../../../boost/archive/basic_text_oarchive.hpp">
+boost/archive/basic_text_oarchive.hpp
+</a>
+<dt><a target="basic_te't_iarchive" href="../../../boost/archive/basic_text_iarchive.hpp">
+boost/archive/basic_text_iarchive.hpp
+</a>
+</dt>
+<dt><a target="basic_xml_oarchive" href="../../../boost/archive/basic_xml_oarchive.hpp">
+boost/archive/basic_xml_oarchive.hpp
+</a>
+<dt><a target="basic_xml_iarchive" href="../../../boost/archive/basic_xml_iarchive.hpp">
+boost/archive/basic_xml_iarchive.hpp
+</a>
+</dt>
+<dd>
+Implementation of serialization of all types in terms of an character
+or wide character text streams. These classes specify archive type specific
+behavior on a type by type basis. For example, <code style="white-space: normal">basic_xml_oarchive.hpp</code>
+includes code to guarentee that any object not attached to a name will
+trap during compile time. On the other hand, <code style="white-space: normal">basic_text_oarchive.hpp</code>
+contains code to strip out and ingore any names attached to objects.
+<p>
+<dt><a target="common_iarchive" href="../../../boost/archive/detail/common_iarchive.hpp">
+boost/archive/detail/common_iarchive.hpp
+</a>
+<dt><a target="common_oarchive" href="../../../boost/archive/detail/common_oarchive.hpp">
+boost/archive/detail/common_oarchive.hpp
+</a>
+<dd>
+All archive implementations are derived from these header files. They provide
+the interface to the internal implementation details of the library.
+</dd>
+
+</dl>
+
+<a name="archiveinternals">
+<h4>Archive Internals</h4>
+
+The interface (see <a target="detail" href="archives.html">Archive Concepts</a>)
+and implementation are factored out into separate classes to minimize code duplication.
+
+These files are found in the directory
+<a target="boost_archive_detail" href="../../../boost/archive/detail">boost/archive/detail</a>.
+These are included as necessary by the archive class implemenations listed above.
+This has the unfortunate side effect of making the implementation less transparent.
+of the library in order to implement either a class serialization or a new
+archive type. Users should never find it necessary to change these files.
+<p>
+The following discussion is based on the
+<a target="class_diagram" href="class_diagram.html">class diagram</a>.
+<p>
+<dt><a target="interface_iarchive" href="../../../boost/archive/detail/interface_iarchive.hpp">
+boost/archive/detail/interface_iarchive.hpp</a>
+<dt><a target="interface_iarchive" href="../../../boost/archive/detail/interface_iarchive.hpp">
+boost/archive/detail/interface_iarchive.hpp</a>
+<dd>
+Here are the declarations and definitions which for the
+<a href="archives.html">archive_concept</a>. This class redirects calls to the
+archive interface to a function named <code>save_override</code> in the most derived
+archive class.
+</dd>
+<code>save_override</code> is declared and implemented in each class in
+the archive hierarchy.
+
+<pre><code>
+template<class T>
+void save_override(T & t, BOOST_PFTO int){
+ // All for otherwise unhandled types are forwarded to the base class.
+ // This emulates behavior for function overloading.
+ this->base::save_override(t, 0);
+}
+void save_override(const some_type & t, int){
+ // any special handling for some type
+ // this will usually entail forwarding some other operation
+ // in the most derived class.
+ this->This()->...
+ // or in one of its parents basic_text_oprimitive
+ this->This()->save(static_cast<int>(t));
+}
+... // other special type handling
+</code></pre>
+
+Note the usage of
+<a target="detail" href="implementation.html#functiontemplateordering">Partial Function Template Ordering</a>
+to permit the correct save implementation to be selected.
+</dd>
+
+<a name="codemodules">
+<h4>Archive Library Code Modules</h4>
+Parts of the library are implemented as library code. All of this code is to be found in
+<a target="src" href="../../../libs/serialization/src">libs/serialization/src</a>.
+in the form of *.cpp. The directory
+<a target="src" href="../../../boost/archive/impl">boost/archive/impl</a>
+contains *.ipp files which implement templates. These templates are instantiated
+only by archive implementation so are generally not included in user code modules.
+<p>
+The trade offs related to library implementation via pre-compiled code and templated
+headers are well known. This library uses both. It uses templated headers
+to generate code to serialize user and primitive types and it uses pre-compiled
+library code for that part of the code which only depends upon the archive type.
+Building of the library generates and compiles code for all archives implemented.
+
+<ul>
+ <li>Serialization of user and primitive types runs a top speed. This is a noticiable
+ difference with a previous version of the library which did not use templates for archives.
+ <li>Library implementation code that never changes need only be compiled once
+ rather than each time a user's program is recompiled. This can save much
+ development time.
+ <li>Headers which solely related to implementation need only be included
+ in the library code modules. This prevents a user program from accidently
+ depending on an implementation feature of the serialization library.
+ <li>In building the library I came to the conclusions that there can arise
+ situations regarding static code/data instantiation that could not be
+ satisfactorily addressed without a code module. Unfortunately, I've forgotten
+ the circumstances which led me to this conclusion.
+</ul>
+An example of this is the usage of the spirit library in the library.
+It takes a long time to compile and includes lots of other files. Having this
+only in the library is much more convenient that having to include in every
+program which uses xml serialization.
+
+<a name="dataflowiterators">
+<h4>Dataflow Iterators</h4>
+In the course of developing this library, it became convenient to make a set
+of composable iterator adaptors for handling archive text. Applications include
+escaping and unescaping xml text, implementi'g to/from base64 conversion among
+others.
+<p>
+This is a ripe topic in itself. Its touched upon by the
+<a href="../../../libs/iterator/doc/index.html">boost iterator</a> libraries,
+<a href="http://www.zib.de/weiser/vtl/index.html">View Template Library</a>, and others.
+<p>
+The code for these iterators is really independent of this library. But since it
+hasn't been and probably won't be reviewed outside of this context. I've left in a directory
+local to the serialization library:
+<a target="archiveiterators" href="../../../boost/archive/iterators">boost/archive/iterators</a>.
+These iterators are described in
+<a href="dataflow.html">Dataflow Iterators</a>.
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - History</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">History</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<ol>
+ <li>26 Feb 2002 initial version uploaded to boost
+ <li>27 Feb 2002
+ <ul>
+ <li>divide interface from implementation for class
+ serialization to permit compiliation on gcc
+ <li>improved template instantanciation for type templates
+ </ul>
+ <li>18 Mar 2002 - draft #2 uploaded to boost
+ <ul>
+ <li>elminated locale effects on archives
+ <li>added signature and library version to archive header
+ <li>improved detection of errors when objects are serializationed
+ as pointers and subsequently serializationed as objects
+ <li>permit non-portable binary archives
+ <li>implement work around for systems such as MSVC 6.0 that
+ don'tsupport partial ordering
+ </ul>
+ <li>16 May 2002 - draft #3 uploaded to boost
+ <ul>
+ <li>Ability to specify serialization of other templates in a
+ non-intrusive way.
+ <li>Included and example which uses boost::shared_ptr.
+ <li>improved documentation
+ <li>More test cases
+ <li>More testing and documentation of obscure situtations
+ <li>Better code organization for transparency
+ <li>Wide character support implemented and tested with unicode.
+ </ul>
+ <li>28 Jun 2002 - #4 library submission
+ <ul>
+ <li>minor corrections
+ <li>replaced erroneous shared_ptr example with std::auto_ptr example
+ <li>prevention of memory leaks when exceptions are invoked
+ </ul>
+ <li>30 Aug 2002 - #5 library submission
+ <ul>
+ <li>minor corrections
+ <li>Additions to documentation to explicitly address issues of
+ exception safety.
+ <li>More test cases/demos to illustrate handlling of the above issues.
+ <li>Additions to documentation to include rationale for not depending
+ on type_id
+ <li>Implementation of serialization of boost::shared_ptr.
+ This is included as a demo as it depends upon a minor alteration
+ of boost::shared_count.
+ </ul>
+ <li>08 Nov 2002 - #6 library submission
+ <ul>
+ <li>minor corrections
+ <li>corrected error which manifested itself when serializing
+ polymorphic pointers to obects derived from multiple
+ base classes
+ <li>minor adjustments to support plug-ins via virtual
+ save/load/version functions
+ <li>test cases to support the above
+ </ul>
+ <li>08 September 2003- version # 12 library submission
+ <ul>
+ <li>attempts to address all issues raised during the November 2002 review
+ </ul>
+ <li>November 2003 - draft #13 uploaded
+ <ul>
+ <li>corrections, enhancements, change in api for pointer overload
+ </ul>
+ <li>28 December 2003
+ <ul>
+ <li>implementation of save/loadbinary
+ <li>enhancements included archives to permit derivation
+ </ul>
+ <li>1 March 2004 - draft # 17 upload
+ <ul>
+ <li>portability to intel 8.0, and VC 6.0
+ <li>Alter archive implementation to permit derivation. Make tests.
+ <li>Implement serialize/save/load binary for text and XML archives
+ using <code>base64</code> character encoding.
+ <li>Added documentation and test for serialization of large binary objects.
+ <li>Added "Derivation from an Existing Archive Class" to documentation along
+ with example program.
+ <li>Added PIMPL example
+ <li>certain special situations are now detected and addressed at
+ compile time to generate all in-line code. For example, for types
+ serialized without class information, and without memory tracking,
+ the serialization process can be reduced to a minimal amount of inline
+ code.
+ <li>All tests have been run in release as well as debug mode
+ <li>Many improvements in code and documentation to improve accuracy and completeness.
+ </ul>
+ <li>11 April 2004 - draft # 18 upload
+ <ul>
+ <li>Reorganization of header and template files.
+ <li>Enhanced documentation to help explain implementation issues.
+ <li>Adjustments to improve support for less conformant compilers.
+ <li>A few bug fixes.
+ </ul>
+ <li>31 May 2004 - draft # 20 upload
+ <ul>
+ <li>Polymorphic archives.
+ <li>A few bug fixes.
+ </ul>
+ <li>1 November 2004 - final changes for first boost official release 1.32 .
+ <ul>
+ <li>Adjustments to address make package compatible with two-phase lookup.
+ <li>Many small adjustments to accomdate quirks of various compilers.
+ <li>A few bug fixes.
+ </ul>
+</ol>
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Implementation Notes</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Implementation Notes</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<dl class="page-index">
+ <dt><a href="#functiontemplateordering">Partial Function Template Ordering</a>
+ <dt><a href="#charencoding">Character Encoding</a>
+ <dt><a href="#tempatesyntax">Template Invocation syntax</a>
+ <dt><a href="#partialtemplatespecialization">Partial Template Specialization</a>
+ <dt><a href="#othercompilerissues">Specific Compiler/Library Issues</a>
+ <dl class="page-index">
+ <dt><a href="#gcc3x">GCC 3.X, 4.X</a>
+ <dt><a href="#gcc295">GCC 2.95</a>
+ <dt><a href="#intel80">Intel 8.0</a>
+ <dt><a href="#vc80">Visual C++ 8.0</a>
+ <dt><a href="#vc71">Visual C++ 7.1</a>
+ <dt><a href="#vc70">Visual C++ 7.0</a>
+ <dt><a href="#vc6">Visual C++ 6.0</a>
+ <dt><a href="#borland">Borland 5.64 and 5.51</a>
+ <dt><a href="#comeau">Comeau 4.3.3</a>
+ <dt><a href="#codewarrior9">Code Warrior 9.x</a>
+ <dt><a href="#codewarrior">Code Warrior 8.3</a>
+ <dt><a href="#tru64">TRU64</a>
+ <dt><a href="#dinkumware">Dinkumware Library</a>
+ <dt><a href="#stlport">STLPort 4.5.3</a>
+ </dl>
+</dl>
+
+<h3><a name="functiontemplateordering">Partial Function Template Ordering</a></h3>
+Not all C++ compilers correctly support partial function template ordering (PFTO).
+For these compilers, the following code will fail to compile:
+<pre><code>
+template<class Archive, class T>
+void serialize(
+ Archive & ar,
+ T & t,
+ const unsigned int file_version
+){
+ ...
+}
+
+template<class Archive, class T>
+void serialize(
+ Archive & ar,
+ my_template<T> & t,
+ const unsigned int file_version
+){
+ ...
+}
+</pre></code>
+The serialization library works around this issue by using a different
+default definition of the first template:
+<pre><code>
+template<class Archive, class T>
+void serialize(
+ Archive & ar,
+ T & t,
+ const unsigned long int file_version // Note: change to long
+){
+ ...
+}
+</pre></code>
+Now, the second template is not matched with the first one so there
+is no PFTO and no compile error. When the serialization library invokes
+<pre><code>
+serialize(ar, t, 0);
+</pre></code>
+the function declaration is first matched against templates with
+an integer for the third argument. If there is a match, the matching
+template is instantiated and later invoked. If there is no match,
+an attempt is made to match other templates by converting arguments to other types.
+In this case the third argument can be converted to long to match
+the first template - which is the default. So in this case, the first
+template will be instantiated and later invoked. We have managed to
+use function overloading to achieve the same effect as PFTO
+were it correctly implemented.
+<p>
+This depends upon undefined behavior of a compiler already
+determined to be non-conforming. In other words, there is no
+guarantee that this will work on all compilers. If a compiler does not
+correctly support PFTO and this method cannot be used to workaround
+it, non-intrusive serialization cannot be supported for that compiler.
+As of this writing, such a compiler has not been encountered.
+<p>
+It turns out that using this "trick" can create problems with
+compilers that DO correctly support PFTO. For this reason we
+define a macro <code style="white-space: normal">BOOST_PTFO</code> which
+is defined to be <code style="white-space: normal">long</code>
+for non-conforming compilers and nothing for conforming ones. So
+the default definition is really:
+The serialization library works around this issue by using a different
+default definition of the first template:
+<pre><code>
+template<class Archive, class T>
+void serialize(
+ Archive & ar,
+ T & t,
+ const unsigned BOOST_PFTO int file_version // Note: change to BOOST_PFTO
+){
+ ...
+}
+</pre></code>
+
+<h3><a name="charencoding">Character Encoding</a></h3>
+The whole question of character encoding combined with wide characters
+is much more complicated than it would seem to be. The current library
+defines in 3 formats (text, binary, and XML), wide and narrow characters,
+an attempts to be portable between compiler libraries. The results of
+a rather long consideration of all these factors has been to set
+default encoding according to the following rules.
+<ul>
+ <li>All text archives (i.e. <code style="white-space: normal">text_?archive</code>) will produce
+ text output in the current stream <code style="white-space: normal">locale</code>. Generally this will
+ produce no changes in string data.
+ <li>To produce binary output with Microsoft compilers, the stream
+ will have to be opened with mode <code style="white-space: normal">ios::binary</code>.
+ Failure to do so will result in 0x0d characters (carriage-return)
+ characters being removed from the input stream if they are followed
+ by a 0x0a character (line-feed). This could corrupt the input
+ and make the file unreadable. On UNIX systems the <code style="white-space: normal">ios::binary</code>
+ is not required and is ignored if used.
+ <li>character XML archives (i.e. xml_oarchive) will produce XML output
+ with characters encoded according to the current stream <code style="white-space: normal">locale</code>.
+ <li>wide character XML archives (i.e. xml_woarchive) will produce
+ files encoded in UTF-8.
+</ul>
+This character encoding is implemented by changing the <code style="white-space: normal">locale</code> of the
+i/o stream used by an archive when the archive is constructed, the stream
+local is changed back to its original value. This action can be overridden
+by specifying <code style="white-space: normal">boost::archive::no_codecvt</code>
+when the archive is opened. In this case, the stream <code style="white-space: normal">locale</code> will
+not be changed by the serialization library.
+<p>
+Note that the code conversion included for wide character text and XML
+archives could alter <code style="white-space: normal">std::string</code> data stored in archives.
+Suppose a normal (multi-byte) character string
+is written to a wide character stream. Our system uses the current <code style="white-space: normal">locale</code>
+to translate it to a wide character string before writing it out.
+Upon reading, it is translated back to a (multi-byte)string.
+If the <code style="white-space: normal">locale</code> on the platform that reads the archive is different than
+the <code style="white-space: normal">locale</code> on the platform that wrote the stream, the actual string data
+may be altered by the serialization process. To avoid this, either
+avoid usage of <code style="white-space: normal">locale</code> dependent multi-byte strings or be sure that
+the <code style="white-space: normal">locale</code> is set correctly before reading the archive.
+<p>
+To produce wide character text output (i.e. 16 bit characters on Win32 systems),
+do the following.
+<ul>
+ <li>Open a wide character stream.
+ <li>Alter the stream <code style="white-space: normal">locale</code> to use
+ <code style="white-space: normal">boost::archive::codecvt_null<OStream::char_type></code>
+ <li>Create the archive with the flag <code style="white-space: normal">no_codecvt</code>.
+</ul>
+Naturally, the input process has to be symmetrical.
+<h3><a name="partialtemplatespecialization">Partial Template Specialization</a></h3>
+Compilers which fail to support partial template specialization will fail to compile
+the following code. To make this compiler, the <code style="white-space: normal">const</code> has to be removed.
+<pre><code>
+void f(A const* a, text_oarchive& oa)
+{
+ oa << a;
+}
+</code></pre>
+<h3><a name="tempatesyntax">Template Invocation syntax</a></h3>
+Some compilers may not recognize the syntax:
+<pre><code>
+ar.template register_type<T>();
+</code></pre>
+for "registering" derived pointers of polymorphic classes. The actual
+function prototype is:
+<pre><code>
+template<T>
+void register_type(T * t = NULL);
+</code></pre>
+so that one may write <code style="white-space: normal">ar.register_type(static_cast<T *>(NULL))</code> instead of
+the syntax described above.
+</ul>
+<h3><a name="othercompilerissues">Specific Compiler/Library Issues</a></h3>
+
+<h4><a name="gcc3x">GCC 3.X, 4.X</a></h4>
+<ul>
+ <li>GCC versions for Cygwin and MinGW fail to support wide character I/O.
+ So all tests using wide char I/O fail. Note that if wide character I/O support
+ is added with STLPort, all tests complete successfully.
+ <li>This compiler generates long warning messages related to the usage of
+ non virtual destructors in polymorphic classes. These warnings have been
+ carefully considered and the code that generates these warning has been
+ unchanged. In this case the warning should should be ignored as in certain
+ usages of the library, making the destructors virtual could lead to problems.
+ As an alternative, base class destructors have been made "protected" to
+ address the concerns that motivate these warning messages. When building
+ the serialization library and tests with bjam, these warnings are suppressed.
+ When building one's own applications, these warnings can be suppressed by
+ adding the following to the compiler command line:
+ <pre><code>
+ -Wno-non-virtual-dtor
+ -Wno-ctor-dtor-privacy
+ </code></pre>
+</ul>
+<h4><a name="gcc295">GCC 2.95</a></h4>
+All of the above plus:<br>
+<ul>
+ <li>The serialization library depends on the templated stream
+ implementation to function properly.
+ to function properly. So STLPort must be used to build the library.
+ <li>Polymorphic archive tests fail.
+ <li>XML serialization only works with version 1.6x of spirit. In order to build
+ and use this library with this compiler, one must use version 1.6x rather than the
+ latest version shipped with boost. See <a href="release.html">Release Notes</a>.
+</ul>
+<h4><a name="intel80">Intel C++ 8.0</a></h4>
+No known issues. All tests compile and run in debug and release modes.
+
+<h4><a name="vc80">Visual C++ 8.0</a></h4>
+This compiler emits warnings for calls to functions from the standard
+library which are deemed security risks. The serialization depends upon
+making some of these calls so programs which use the serialization library
+will get warning messages. These messages can be suppressed from the command
+line by including the following switch:
+ <pre><code>
+ /wd4996
+ </code></pre>
+
+<h4><a name="vc71">Visual C++ 7.1</a></h4>
+Derivation from an archive class defined in a DLL as described in ... will not work.
+This is due to the way that VC++ handles templated code with __decl(dllexport) and
+__decl(dllimport) specifications. Basically, this compiler requires that all the
+instantiations have the same specification - even though they have different
+template arguments. The example <code style="white-space: normal">
+demo_portable_iarchive.cpp</code> would have to reformulated as a library or dll
+similar to the pre-defined archives in order to function.
+<p>
+This compiler does not have RTTI or exception handling turned on by default. Although
+they are not strictly necessary to use the serialization package, the example and test
+program presume that they are enabled. So be sure your command line or IDE settings
+enable these features if you want to build and run these programs.
+<p>
+This compiler can treat <code style="white-space: normal">wchar_t</code> as either
+a short integer or an intrinsic type.
+If <code style="white-space: normal">/Zc:wchar_t</code> is specified on the
+compile command line, <code style="white-space: normal">wchar_t</code> will be
+considered an intrinsic type - otherwise
+it will be treated as a synonym for a 16 bit integer. The library can be used
+either way - <strong>BUT</strong> - both the libray <strong>AND</strong> the application
+must be compiled with the same switch settings. Note that <code style="white-space: normal">BJAM</code>
+includes this switch by default. So if want to use the libraries that
+<code style="white-space: normal">BJAM</code> builds, you should include this switch
+when you compile your own applications.
+<h5>Using the Visual C++ IDE</h5>
+The library includes a VC++ 7.1 "Solution" - <code style="white-space: normal">BoostSerializationLibrary</code>
+along with of a set of project files - one for each demo and test. Consider the following if you
+decided to use these configurations.
+<ul>
+ <li>The projects assume that the tests have been built with bjam using the default
+ locations. This will result in a <code style="white-space: normal">bin</code> subdirectory
+ within one's main boost directory. Below this there is a whole structure which maintains
+ object and library files according to the type of build. The easiest way to build this is to
+ invoke the runtest script which uses bjam. (see below) If the libraries are not in these locations,
+ the projects will have to be modified accordingly.
+ <li>There are project configurations for all the combinations of build variants that boost
+ supports. That is for release, debug, static, static multi-threading, etc..
+ <li>If you want to use/debug the DLL versions of libraries and corresponding tests, alter
+ the project file to define <code style="white-space: normal">BOOST_ALL_DYN_LINK=1</code>.
+ Note that for the executables to run, the <code style="white-space: normal">PATH</code>
+ environmental variable will have to include the directories that contain the DLL versions of
+ the boost libraries.
+ <li>If you have difficulties building your own projects and linking with the boost libraries,
+ compare the project settings of your own projects with the ones here. VC sometimes requires
+ consistent settings between projects and the libraries they use in order to link properly.
+ In particular, check support for exceptions, runtime typing(RTTI), and intrinsic support for
+ wide characters. The standard version of this library presumes that these facilities are
+ enabled. Projects generated by the IDE wizard do not have these features enabled by default.
+ <li>Frequently when trying to build a project or view project properties, one is presented with
+ a message box with the message "unspecified error". This seems to occur when one changes the
+ build configuration selection. It turns out this can be "fixed" by going to the "Build"
+ menu item, selecting "Configuration Manager" and selecting a build configuration for the project
+ you're working with.
+ <li>To test that boost libraries are built correctly, one can build and test them the way we do.
+ This entails:
+ <ol>
+ <li>downloading a copy of bjam.exe
+ <li>building process_jam_log
+ <li>building compiler_status
+ <li>invoking runtest.bat
+ </ol>
+ This will build the serialization library and run the tests on your system. If there are more than a
+ a couple of test failures, you likely won't be able to get your own projects working. If most of the
+ tests pass, you can be confident that your own projects will work once you get your project settings
+ in sync with those included here.
+</ul>
+
+<h4><a name="vc70">Visual C++ 7.0</a></h4>
+<ul>
+ <li>The "pimpl" demo fails to link. Cause and workaround for this is unknown
+ <li>XML serialization only works with version 1.6x of spirit. In order to build and use this
+ library with this compiler, one must use version 1.6x rather than the latest version
+ shipped with boost. See <a href="release.html">Release Notes</a>.
+ <li>This compiler does not support partial template specialization.
+ The implementation of the new <code>shared_ptr</code> serialization depends upon
+ compiler support for partial template specialization. This compiler doesn't implement this
+ feature. In order to serialize <code style="white-space: normal">shared_ptr<A></code>,
+ invoke the macro <code style="white-space: normal">BOOST_SERIALIZATION_SHARED_PTR(A)</code>
+ in the header code.
+ <li>Lack of support for partial template specialization also creates problems for
+ serialization of <code style="white-space: normal">std::map</code>. In order to serialize
+ instances of this type include the invocation of BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION
+ for the key type of the map.
+</ul>
+<h4><a name="vc6">Visual C++ 6.5</a></h4>
+all the above issues for Visual C++ 7.0 plus:
+<ul>
+ <li>Out of line template definitions are not recognized and fail with a confusing
+ error message. To function save/load/serialize member function templates must be defined
+ within the class definition. This feature is essential to <code style="white-space: normal">demo_pimpl</code>. Hence,
+ this program will fail to compile. In this case the problem can't be worked around and
+ still demonstrate this facility.
+ <li>This compiler does not support <code style="white-space: normal">wchar_t</code> as a separate type. It defines
+ <code style="white-space: normal">wchar_t</code> as an alias for <code style="white-space: normal">short int</code>. In general things will still
+ function. However certain customization, such as overloading archive operators for
+ saving/loading wide character arrays would produce surprises in this environment.
+ <li>Under certain circumstances, a program will fail to link with the message:
+ LIN1179 - "invalid or corrupt file: duplicate comdat". According
+ to <a href="http://groups.google.com/groups?th=8a05c82c4ffee280">
+ http://groups.google.com/groups?th=8a05c82c4ffee280
+ </a> (look for P78)
+ A LNK1179 error occurs when:
+ <ul>
+ <li>The template class takes at least two arguments.
+ <li>The template is used at least two times with identical first
+ and different second arguments.
+ <li>The static member variable is of an object type with at least one
+ base class. (In another scenario it also occurred using a member
+ without a base class.)
+ </ul>
+ Working around this in the implementation of the library for this compiler
+ entailed a ridiculous amount of effort. Even so, the effort wasn't entirely successful.
+ With this compiler, this message will still appear under the following conditions:
+ <ul>
+ <li>When serializing a class with multiple base classes. This problem causes two
+ failure in the test suite. I have been unable to devise a way to work around this.
+ <li>Using more than one kind of archive in the same code module. This should be easy
+ to work around in practice.
+ </ul>
+ <li>Code modules exceeding some undetermined size that use the library will fail with
+ <i>fatal error C1204: compiler limit : internal structure overflow</i>. This can be addressed
+ by dividing the module into smaller ones.
+</ul>
+<h4><a name="borland">Borland 5.64 and 5.51</a></h4>
+<ul>
+ <li><code style="white-space: normal">enum</code> data members cannot be serialized.
+ Conversion to/from integers will work around the problem.
+ <li>If class serialize functions are not accessible either by making them public or by
+ including <code style="white-space: normal">friend</code> declarations as described in
+ <a href="serialization.html#member">Class Serialization - Member Function</a>, the
+ will compile but fail at runtime.
+ <li>Tests using custom extended type which doesn't use RTTI fails. (5.64 only !).
+ <li>Tests built in release mode fail. This seems to be an issue with the boost test system
+ with this compiler.
+ <li>XML serialization only works with version 1.6x of spirit. In order to build
+ and use this library with this compiler, one must use version 1.6x rather than the
+ latest version shipped with boost. See <a href="release.html">Release Notes</a>.
+</ul>
+<h4><a name="comeau">Comeau 4.3.3</a></h4>
+<ul>
+ <li>This compiler fails to make a DLL with export under windows.
+ <li>The associated library - libcomo fails when using a codecvt facet.
+ This generates a failure with all wide character archives.
+ <li>the test_set fails by going into an infinite memory leak.
+</ul>
+
+<h4><a name="codewarrior9">Code Warrior 9.x</a></h4>
+<ul>
+ <li>Some tests and demos demos fail - still under investigation
+</ul>
+
+<h4><a name="codewarrior">Code Warrior 8.3</a></h4>
+all the above issues for Code Warrior 9.x plus:
+<ul>
+ <li>This compiler only supports templated streams with the static library version.
+ <li>The above inhibits the build of DLL versions of the library.
+ <li>Some demos fail - still under investigation
+</ul>
+
+<h4><a name="tru64">TRU64</a></h4>
+All tests and demos pass except for test_variant. Boost Variant doesn't function
+wih this compiler
+
+<h4><a name="dinkumware">Dinkumware Library</a></h4>
+Several compilers, including Visual C++ 6.0, use an older dinkumware library.
+These platforms have several issues:
+<ul>
+ <li>The dinkumware library shipped with this compiler does not change the locale facet
+ of an i/o stream unless the <code style="white-space: normal">imbue</code> function is called before the the
+ stream is opened. In order to use this library with this environment to generate UTF-8
+ files, one cannot depend on the "automatic" setting of locale that archives implement. The
+ stream locale must be set explicitly on the stream before an archive is opened on it. The
+ archive should be opened with the <code style="white-space: normal">no_codecvt</code> flag. Note this problem will
+ occur on all compilers shipped with this library.
+ <li>Other issues have been worked around in the file.
+ <a href="../../../boost/archive/dinkumware.hpp" target="dinkumware_hpp">dinkumware.hpp</a>
+</ul>
+
+<h4><a name="stlport">STLPort 4.5.3</a></h4>
+<ul>
+ <li>when built to use dynamic linking versions of C++ runtime code (<runtime-link>dynamic)
+ all tests fail to link. This is due to a missing symbol in the stlport library related
+ to custom codecvt facets.
+ <li>the test_set fails to run correctly. It seems the hashed set iterator doesn't
+ implement the ++ operator correctly. This causes the test to fail by consuming all available
+ memory. Given this, this test is commented out.
+</ul>
+
+<hr>
+<p>Revised 1 November, 2004
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
+ "http://www.w3.org/TR/html4/frameset.dtd"><html>
+<head>
+<!--
+Revised 1 November, 2004
+© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<title>Serialization</title>
+</head>
+<frameset cols="30%, 70%">
+ <frame name="contents" src="contents.html" scrolling = "yes">
+ <frame name="detail" src="overview.html" scrolling = "yes">
+ <noframes><a href="overview.html"</a></noframes>
+</frameset>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Proposed Case Studies</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Proposed Case Studies</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<dl class="index">
+ <dt><a href="#functionobject">Serializing a Function Object</a></dt>
+ <dt><a href="#archiveadaptor">Archive Adaptors</a></dt>
+ <dt><a href="#archivehelper">Archive Helpers</a></dt>
+</dl>
+
+These are not part of the library itself, but rather
+techiques on how to use the library to address specific situations.
+
+<h2><a name="functionobject"></a>Serializing a Function Object</h2>
+An example on how to serialize a function object. I believe this
+could be done by serializing pointer to the object in question. Since
+the Serialization library resurrects pointer of the correct type
+this should be easily implementable.
+<p>
+If a group of function objects were all derived from the
+same polymorphic base class - perhaps via multiple inheritance,
+the the function object effectively becomes a "variable" which
+encapsulates code.
+<p>
+This case study would show how to do this.
+
+<h2><a name="archiveadaptor"></a>Archive Adaptors</h2>
+
+Often users want to add their own special functionality to an
+existing archive. Examples of this are performance enhancements
+for specific types, Adjustment of output syntax for xml archives,
+and logging/debug output as archives are written and/or read.
+If this functionalty is implemented as an "adaptor" template
+which takes the base class as a template argument, such functionality
+appended to any archive for which that funtionality makes sense.
+For example, an adaptor for generating an xml schema could be
+appended to both wide narrow character versions of xml archives.
+<p>
+This case study would show how to make a useful archive adaptor.
+
+<h2><a name="archivehelper"></a>Archive Helpers</h2>
+Some types are not serializable as they stand. That is - they
+do not fullfill the requirements of the "Serializable Concept".
+The iconic example of this is boost::shared_ptr. Sometimes
+these types could be made serializable by adding code inside
+the library. Of course, doing that would create a lifetime
+of unpaid employment for the library author. Rather than
+adding a bunch of special code to the library itself, this
+code can packaged as a "helper" or "mix-in" class. Then
+a new archive is derived from both the "base" archive class
+AND the "helper" class. This is how boost::shared_ptr
+has been implemented.
+<p>
+It would also be possible to make a "generic runtime helper"
+which would effectively extend the API of the library. Previously
+the library included such a helper class. It was removed
+in favor of the current implementation. But this functionality
+should be added back in with another adaptor which would
+become part of the library.
+
+<hr>
+<p>Revised 1 November, 2008
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2008.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Overview</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Overview</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<dl class="index">
+ <dt><a href="#Requirements">Requirements</a></dt>
+ <dt><a href="#otherimplementations">Other Implementations</a></dt>
+</dl>
+<p>Here, we use the term <strong>"serialization"</strong> to mean
+the reversible deconstruction of an arbitrary set of C++ data structures
+to a sequence of bytes. Such a system can be used to reconstitute
+an equivalent structure in another program context. Depending on
+the context, this might used implement object persistence, remote
+parameter passing or other facility. In this system we use the term
+<strong>"archive"</strong> to refer to a specific rendering of this
+stream of bytes. This could be a file of binary data, text data,
+XML, or some other created by the user of this library.
+<h2><a name="Requirements"></a>Our goals for such a system are:</h2>
+ <ol>
+ <li>Code portability - depend only on ANSI C++ facilities.
+
+ <li>Code economy - exploit features of C++ such as RTTI,
+ templates, and multiple inheritance, etc. where appropriate to
+ make code shorter and simpler to use.
+
+ <li>Independent versioning for each class definition. That
+ is, when a class definition changed, older files can still be
+ imported to the new version of the class.
+
+ <li>Deep pointer save and restore. That is, save and restore
+ of pointers saves and restores the data pointed to.
+
+ <li>Proper restoration of pointers to shared data.
+
+ <li>Serialization of STL containers and other commonly used
+ templates.
+
+ <li>Data Portability - Streams of bytes created on one platform
+ should be readable on any other.
+
+ <li>Orthogonal specification of class serialization and archive format.
+ That is, any file format should be able to store serialization
+ of any arbitrary set of C++ data structures without having to
+ alter the serialization of any class.
+
+ <li>Non-intrusive. Permit serialization to be applied to
+ unaltered classes. That is, don't require that classes to be
+ serialized be derived from a specific base class or implement
+ specified member functions. This is necessary to easily
+ permit serialization to be applied to classes from class
+ libraries that we cannot or don't want to have to alter.
+
+ <li> The <strong>archive</strong> interface must be simple
+ enough to easily permit creation of a new type of archive.
+
+ <li> The <strong>archive</strong> interface must be rich
+ enough to permit the creation of an <strong>archive</strong>
+ that presents serialized data as XML in a useful manner.
+ </ol>
+
+<h2><a name="otherimplementations"></a>Other implementations</h2>
+ Before getting started I searched around for current
+ implementations. I found several.
+
+ <ul>
+ <li><u>MFC</u> This is the one that I am very familiar with.
+ I have used it for several years and have found it very useful.
+ However it fails requirements 1, 2, 3, 6, 7, and 9. In spite
+ of all the requirements not fulfilled, this is the most
+ useful implementation I've found. It turns out that class
+ versioning - partially implemented in MFC - really is
+ indispensable for my applications. Inevitably, version 1.x of
+ a shipping program needs to store more information in files
+ than was originally provided for. MFC is the only one of these
+ implementations that supports this - though only for the most
+ derived class. Still it's better than nothing and does the
+ job. MFC doesn't implement serialization of STL collections.
+ Though it does so for MFC collections.
+
+ <li><u>CommonC++ libraries</u> <a href="bibliography.html#1">[1]</a>
+ As far as I can tell, this
+ closely follows the MFC implementation but does address a few
+ of the issues. It is portable and creates portable archives but
+ skips versioning. It does support proper and complete
+ restoration of pointers and STL collections. It does address
+ compression though not in the way that I would prefer. The
+ package would also benefit from having better documentation.
+ So it fails to address 2, 3, 7, 8, and 9.
+
+ <li><u>Eternity</u> <a href="bibliography.html#2">[2]</a>
+ This is a bare bones package. It
+ seems well coded but it really needs documentation and
+ examples. It's not obvious how to use it without time
+ consuming study of the source code. Recent versions do support
+ files in XML format. This Fails 3, 6, 7?, 8, and 9.
+
+ <li><u>Holub's implementation</u> <a href="bibliography.html#3">[3]</a> This is the article that
+ first got me thinking about my own requirements for
+ a serialization implementation. Interesting and worth
+ the read if you can overlook the arrogant tone of the prose.
+ This implementation fails 2, 3, 4, 5, and 6.
+
+ <li><u>s11n</u> <a href="bibliography.html#13">[13]</a>
+ This library has similar goals to this one. Some aspects of the
+ implemenation are also similar. As of this writing, it would seem that:
+ <ul>
+ <li>Portability(1) is guarenteed only for recent versions of GCC.
+ <li>Versioning(3) of class definitions is not explicitly supported by
+ the library.
+ <li>it doesn't seem to automatically account for shared pointers(5).
+ I concluded this from the documentation as well as the statement that
+ serialization of graph like structures is not supported.
+ </ul>
+ Its has lots of differences - and lots in common with this implementation.
+ </ul>
+<hr>
+<p>Revised 1 November, 2004
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+<title>Boost Library Status Automatic Test</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<table border="0">
+<tr>
+<td><img border="0" src="../../../boost.png" width="277" height="86"></td>
+<td>
+<h1>Library Status: serialization</h1>
+<b>Run Date:</b> 02:42:48 UTC, Tuesday 10 June 2008
+</td>
+</table>
+<br>
+<table border="1" cellspacing="0" cellpadding="5">
+<tr>
+<td rowspan="2">Test Name</td>
+<td align="center" >gcc-3.4.4</td>
+</tr><tr>
+<td align="center" >profile</td>
+</tr><tr><td>peformance_array_binary_archive</a></td><td align="right">Pass <a href="profile1.txt"><i>Profile</i></a></td></tr>
+<tr><td>peformance_array_text_archive</a></td><td align="right">Pass <a href="profile1.txt"><i>Profile</i></a></td></tr>
+<tr><td>peformance_array_text_warchive</a></td><td align="right"><i>Missing</i></td></tr>
+<tr><td>peformance_array_xml_archive</a></td><td align="right">Pass <a href="profile1.txt"><i>Profile</i></a></td></tr>
+<tr><td>peformance_array_xml_warchive</a></td><td align="right"><i>Missing</i></td></tr>
+<tr><td>performance_iterators</a></td><td align="right">Pass <a href="profile2.txt"><i>Profile</i></a></td></tr>
+<tr><td>performance_iterators_base64</a></td><td align="right">Pass <a href="profile3.txt"><i>Profile</i></a></td></tr>
+</table>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - PIMPL</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">PIMPL</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+PIMPL is a C++ programming idiom described by Herb Sutter <a href="bibliography.html#10">[10]</a>
+which stands for "Private Implementation". It is also referred to as
+the "Handle Body Idiom". Included in this library is a program called
+<a href="../example/demo_pimpl.cpp" target="demo_impl_cpp">demo_pimpl.cpp</a>
+which illustrates how this is used. The file
+<a href="../example/demo_pimpl_A.cpp" target="demo_impl__Acpp">demo_pimpl_A.hpp</a>
+contains the declaration of the a class that hides its implementation
+by including a pointer to struct B that is only defined as a pointer.
+<pre><code>
+// class whose declaration is hidden by a pointer
+struct B;
+
+struct A {
+ // class a contains a pointer to a "hidden" declaration
+ B *pimpl;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int file_version);
+ A();
+};
+</code></pre>
+Serialization of A requires access to the definition of B in order so it
+is defined in the separately compiled module:
+<a href="../example/demo_pimpl_A.cpp" target="demo_impl_A_cpp">demo_pimpl_A.cpp</a>
+by:
+<pre><code>
+#include "demo_pimpl_A.hpp"
+
+// "hidden" definition of class B
+struct B {
+ int b;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int file_version){
+ ar & b;
+ }
+};
+
+A::A() :
+ pimpl(new B)
+{}
+
+A::~A(){
+ delete pimpl;
+}
+
+// now we can define the serialization for class A
+template<class Archive>
+void A::serialize(Archive & ar, const unsigned int file_version){
+ ar & pimpl;
+}
+</code></pre>
+As described in <a href="bibliography.html#10">[10]</a> this brings the
+following advantages:
+<ul>
+ <li>type "B" can be used without using its header.
+ <li>implementation of B can be changed without generating a
+ cascade of recompilations.
+</ul>
+So, we compile the modules and everything is fine. However when we
+link, we get an error. Two symbols are undefined:
+<pre><code>
+void A::serialize(boost::archive::text_oarchive & ar, const unsigned int file_version);
+void A::serialize(boost::archive::text_iarchive & ar, const unsigned int file_version);
+</code></pre>
+The problem is that when compiling the above code,
+there is no instantiation of the <code style="white-space: normal">serialize</code> template.
+There can't be as its not "known" what types of archives
+the serialization is going to be used with. So these functions are "missing"
+when an attempt to link is made. The solution is to explicitly instantiate
+serialization code for those archives which are going to be used. In this
+example, including the the following code in any *.cpp file does just that:
+<pre></code>
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/text_oarchive.hpp>
+
+template void A::serialize<boost::archive::text_iarchive>(
+ boost::archive::text_iarchive & ar,
+ const unsigned int file_version
+);
+template void A::serialize<boost::archive::text_oarchive>(
+ boost::archive::text_oarchive & ar,
+ const unsigned int file_version
+);
+</code></pre>
+The program should now link as well as compile.
+<p>
+The downside of this is that one has to know which archives are going
+to be used with hidden serializations. This is an effect of using template
+driven code. One can invoke explicity instantiation for all known templates and
+presume that the linker will exclude unreferenced code. This should
+work but is platform dependent.
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+Flat profile:
+
+Each sample counts as 0.01 seconds.
+ no time accumulated
+
+ % cumulative self self total
+ time seconds seconds calls Ts/call Ts/call name
+ 0.00 0.00 0.00 200 0.00 0.00 void accumulate<unsigned long>(unsigned int&, unsigned long const&)
+ 0.00 0.00 0.00 150 0.00 0.00 _pei386_runtime_relocator
+ 0.00 0.00 0.00 1 0.00 0.00 std::ostream::operator<<(void const*)
+ 0.00 0.00 0.00 1 0.00 0.00 __divdi3
+
+ % the percentage of the total running time of the
+time program used by this function.
+
+cumulative a running sum of the number of seconds accounted
+ seconds for by this function and those listed above it.
+
+ self the number of seconds accounted for by this
+seconds function alone. This is the major sort for this
+ listing.
+
+calls the number of times this function was invoked, if
+ this function is profiled, else blank.
+
+ self the average number of milliseconds spent in this
+ms/call function per call, if this function is profiled,
+ else blank.
+
+ total the average number of milliseconds spent in this
+ms/call function and its descendents per call, if this
+ function is profiled, else blank.
+
+name the name of the function. This is the minor sort
+ for this listing. The index shows the location of
+ the function in the gprof listing. If the index is
+ in parenthesis it shows where it would appear in
+ the gprof listing if it were to be printed.
+\f
+ Call graph (explanation follows)
+
+
+granularity: each sample hit covers 4 byte(s) no time propagated
+
+index % time self children called name
+ 0.00 0.00 200/200 setvbuf [1286]
+[4] 0.0 0.00 0.00 200 void accumulate<unsigned long>(unsigned int&, unsigned long const&) [4]
+-----------------------------------------------
+ 0.00 0.00 150/150 _cygwin_crt0_common@8 [1230]
+[5] 0.0 0.00 0.00 150 _pei386_runtime_relocator [5]
+-----------------------------------------------
+ 0.00 0.00 1/1 _lseek64 [1234]
+[6] 0.0 0.00 0.00 1 std::ostream::operator<<(void const*) [6]
+-----------------------------------------------
+ 0.00 0.00 1/1 __tcf_1 [1221]
+[7] 0.0 0.00 0.00 1 __divdi3 [7]
+-----------------------------------------------
+ 2 main [1263]
+[1263] 0.0 0.00 0.00 0+2 main [1263]
+ 2 main [1263]
+-----------------------------------------------
+
+ This table describes the call tree of the program, and was sorted by
+ the total amount of time spent in each function and its children.
+
+ Each entry in this table consists of several lines. The line with the
+ index number at the left hand margin lists the current function.
+ The lines above it list the functions that called this function,
+ and the lines below it list the functions this one called.
+ This line lists:
+ index A unique number given to each element of the table.
+ Index numbers are sorted numerically.
+ The index number is printed next to every function name so
+ it is easier to look up where the function in the table.
+
+ % time This is the percentage of the `total' time that was spent
+ in this function and its children. Note that due to
+ different viewpoints, functions excluded by options, etc,
+ these numbers will NOT add up to 100%.
+
+ self This is the total amount of time spent in this function.
+
+ children This is the total amount of time propagated into this
+ function by its children.
+
+ called This is the number of times the function was called.
+ If the function called itself recursively, the number
+ only includes non-recursive calls, and is followed by
+ a `+' and the number of recursive calls.
+
+ name The name of the current function. The index number is
+ printed after it. If the function is a member of a
+ cycle, the cycle number is printed between the
+ function's name and the index number.
+
+
+ For the function's parents, the fields have the following meanings:
+
+ self This is the amount of time that was propagated directly
+ from the function into this parent.
+
+ children This is the amount of time that was propagated from
+ the function's children into this parent.
+
+ called This is the number of times this parent called the
+ function `/' the total number of times the function
+ was called. Recursive calls to the function are not
+ included in the number after the `/'.
+
+ name This is the name of the parent. The parent's index
+ number is printed after it. If the parent is a
+ member of a cycle, the cycle number is printed between
+ the name and the index number.
+
+ If the parents of the function cannot be determined, the word
+ `<spontaneous>' is printed in the `name' field, and all the other
+ fields are blank.
+
+ For the function's children, the fields have the following meanings:
+
+ self This is the amount of time that was propagated directly
+ from the child into the function.
+
+ children This is the amount of time that was propagated from the
+ child's children to the function.
+
+ called This is the number of times the function called
+ this child `/' the total number of times the child
+ was called. Recursive calls by the child are not
+ listed in the number after the `/'.
+
+ name This is the name of the child. The child's index
+ number is printed after it. If the child is a
+ member of a cycle, the cycle number is printed
+ between the name and the index number.
+
+ If there are any cycles (circles) in the call graph, there is an
+ entry for the cycle-as-a-whole. This entry shows who called the
+ cycle (as parents) and the members of the cycle (as children.)
+ The `+' recursive calls entry shows the number of function calls that
+ were internal to the cycle, and the calls entry for each member shows,
+ for that member, how many times it was called from other members of
+ the cycle.
+
+\f
+Index by function name
+
+ [4] void accumulate<unsigned long>(unsigned int&, unsigned long const&) [7] __divdi3
+ [6] std::ostream::operator<<(void const*) [5] _pei386_runtime_relocator
--- /dev/null
+Flat profile:
+
+Each sample counts as 0.01 seconds.
+ % cumulative self self total
+ time seconds seconds calls Ts/call Ts/call name
+100.00 0.01 0.01 __gnu_cxx::__atomic_add(int volatile*, int)
+ 0.00 0.01 0.00 51 0.00 0.00 boost::archive::iterators::transform_width<char*, 6, 8, char>::fill()
+ 0.00 0.01 0.00 36 0.00 0.00 boost::archive::iterators::transform_width<__gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >, 8, 6, char>::fill()
+ 0.00 0.01 0.00 30 0.00 0.00 std::vector<char, std::allocator<char> >::_M_insert_aux(__gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >, char const&)
+ 0.00 0.01 0.00 11 0.00 0.00 boost::archive::iterators::xml_escape<char const*>::fill(char const*&, char const*&)
+ 0.00 0.01 0.00 9 0.00 0.00 void test_transform_width<6, 8>(unsigned int)
+ 0.00 0.01 0.00 9 0.00 0.00 boost::archive::iterators::xml_unescape<char const*>::drain()
+ 0.00 0.01 0.00 5 0.00 0.00 boost::archive::iterators::xml_unescape<char const*>::drain_residue(char const*)
+ 0.00 0.01 0.00 2 0.00 0.00 __static_initialization_and_destruction_0(int, int)
+ 0.00 0.01 0.00 1 0.00 0.00 void test_xml_escape<char const>(char const*, char const*, unsigned int)
+ 0.00 0.01 0.00 1 0.00 0.00 void test_xml_unescape<char const>(char const*, char const*, unsigned int)
+ 0.00 0.01 0.00 1 0.00 0.00 void test_stream_iterators<char>(char const*, unsigned int)
+ 0.00 0.01 0.00 1 0.00 0.00 test_main(int, char**)
+ 0.00 0.01 0.00 1 0.00 0.00 char* std::string::_S_construct<char*>(char*, char*, std::allocator<char> const&, std::forward_iterator_tag)
+ 0.00 0.01 0.00 1 0.00 0.00 std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string<char*>(char*, char*, std::allocator<char> const&)
+
+ % the percentage of the total running time of the
+time program used by this function.
+
+cumulative a running sum of the number of seconds accounted
+ seconds for by this function and those listed above it.
+
+ self the number of seconds accounted for by this
+seconds function alone. This is the major sort for this
+ listing.
+
+calls the number of times this function was invoked, if
+ this function is profiled, else blank.
+
+ self the average number of milliseconds spent in this
+ms/call function per call, if this function is profiled,
+ else blank.
+
+ total the average number of milliseconds spent in this
+ms/call function and its descendents per call, if this
+ function is profiled, else blank.
+
+name the name of the function. This is the minor sort
+ for this listing. The index shows the location of
+ the function in the gprof listing. If the index is
+ in parenthesis it shows where it would appear in
+ the gprof listing if it were to be printed.
+\f
+ Call graph (explanation follows)
+
+
+granularity: each sample hit covers 4 byte(s) for 100.00% of 0.01 seconds
+
+index % time self children called name
+ <spontaneous>
+[1] 100.0 0.01 0.00 __gnu_cxx::__atomic_add(int volatile*, int) [1]
+-----------------------------------------------
+ 0.00 0.00 51/51 void test_transform_width<6, 8>(unsigned int) [9]
+[5] 0.0 0.00 0.00 51 boost::archive::iterators::transform_width<char*, 6, 8, char>::fill() [5]
+-----------------------------------------------
+ 0.00 0.00 36/36 void test_transform_width<6, 8>(unsigned int) [9]
+[6] 0.0 0.00 0.00 36 boost::archive::iterators::transform_width<__gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >, 8, 6, char>::fill() [6]
+-----------------------------------------------
+ 0.00 0.00 30/30 void test_transform_width<6, 8>(unsigned int) [9]
+[7] 0.0 0.00 0.00 30 std::vector<char, std::allocator<char> >::_M_insert_aux(__gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >, char const&) [7]
+-----------------------------------------------
+ 0.00 0.00 11/11 void test_xml_escape<char const>(char const*, char const*, unsigned int) [13]
+[8] 0.0 0.00 0.00 11 boost::archive::iterators::xml_escape<char const*>::fill(char const*&, char const*&) [8]
+-----------------------------------------------
+ 0.00 0.00 9/9 test_main(int, char**) [16]
+[9] 0.0 0.00 0.00 9 void test_transform_width<6, 8>(unsigned int) [9]
+ 0.00 0.00 51/51 boost::archive::iterators::transform_width<char*, 6, 8, char>::fill() [5]
+ 0.00 0.00 36/36 boost::archive::iterators::transform_width<__gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >, 8, 6, char>::fill() [6]
+ 0.00 0.00 30/30 std::vector<char, std::allocator<char> >::_M_insert_aux(__gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >, char const&) [7]
+-----------------------------------------------
+ 0.00 0.00 9/9 void test_xml_unescape<char const>(char const*, char const*, unsigned int) [14]
+[10] 0.0 0.00 0.00 9 boost::archive::iterators::xml_unescape<char const*>::drain() [10]
+ 0.00 0.00 5/5 boost::archive::iterators::xml_unescape<char const*>::drain_residue(char const*) [11]
+-----------------------------------------------
+ 0.00 0.00 5/5 boost::archive::iterators::xml_unescape<char const*>::drain() [10]
+[11] 0.0 0.00 0.00 5 boost::archive::iterators::xml_unescape<char const*>::drain_residue(char const*) [11]
+-----------------------------------------------
+ 0.00 0.00 1/2 global constructors keyed to main [38]
+ 0.00 0.00 1/2 global destructors keyed to main [35]
+[12] 0.0 0.00 0.00 2 __static_initialization_and_destruction_0(int, int) [12]
+-----------------------------------------------
+ 0.00 0.00 1/1 test_main(int, char**) [16]
+[13] 0.0 0.00 0.00 1 void test_xml_escape<char const>(char const*, char const*, unsigned int) [13]
+ 0.00 0.00 11/11 boost::archive::iterators::xml_escape<char const*>::fill(char const*&, char const*&) [8]
+-----------------------------------------------
+ 0.00 0.00 1/1 test_main(int, char**) [16]
+[14] 0.0 0.00 0.00 1 void test_xml_unescape<char const>(char const*, char const*, unsigned int) [14]
+ 0.00 0.00 9/9 boost::archive::iterators::xml_unescape<char const*>::drain() [10]
+-----------------------------------------------
+ 0.00 0.00 1/1 test_main(int, char**) [16]
+[15] 0.0 0.00 0.00 1 void test_stream_iterators<char>(char const*, unsigned int) [15]
+ 0.00 0.00 1/1 std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string<char*>(char*, char*, std::allocator<char> const&) [18]
+-----------------------------------------------
+ 0.00 0.00 1/1 main [1211]
+[16] 0.0 0.00 0.00 1 test_main(int, char**) [16]
+ 0.00 0.00 9/9 void test_transform_width<6, 8>(unsigned int) [9]
+ 0.00 0.00 1/1 void test_xml_escape<char const>(char const*, char const*, unsigned int) [13]
+ 0.00 0.00 1/1 void test_xml_unescape<char const>(char const*, char const*, unsigned int) [14]
+ 0.00 0.00 1/1 void test_stream_iterators<char>(char const*, unsigned int) [15]
+-----------------------------------------------
+ 0.00 0.00 1/1 std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string<char*>(char*, char*, std::allocator<char> const&) [18]
+[17] 0.0 0.00 0.00 1 char* std::string::_S_construct<char*>(char*, char*, std::allocator<char> const&, std::forward_iterator_tag) [17]
+-----------------------------------------------
+ 0.00 0.00 1/1 void test_stream_iterators<char>(char const*, unsigned int) [15]
+[18] 0.0 0.00 0.00 1 std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string<char*>(char*, char*, std::allocator<char> const&) [18]
+ 0.00 0.00 1/1 char* std::string::_S_construct<char*>(char*, char*, std::allocator<char> const&, std::forward_iterator_tag) [17]
+-----------------------------------------------
+
+ This table describes the call tree of the program, and was sorted by
+ the total amount of time spent in each function and its children.
+
+ Each entry in this table consists of several lines. The line with the
+ index number at the left hand margin lists the current function.
+ The lines above it list the functions that called this function,
+ and the lines below it list the functions this one called.
+ This line lists:
+ index A unique number given to each element of the table.
+ Index numbers are sorted numerically.
+ The index number is printed next to every function name so
+ it is easier to look up where the function in the table.
+
+ % time This is the percentage of the `total' time that was spent
+ in this function and its children. Note that due to
+ different viewpoints, functions excluded by options, etc,
+ these numbers will NOT add up to 100%.
+
+ self This is the total amount of time spent in this function.
+
+ children This is the total amount of time propagated into this
+ function by its children.
+
+ called This is the number of times the function was called.
+ If the function called itself recursively, the number
+ only includes non-recursive calls, and is followed by
+ a `+' and the number of recursive calls.
+
+ name The name of the current function. The index number is
+ printed after it. If the function is a member of a
+ cycle, the cycle number is printed between the
+ function's name and the index number.
+
+
+ For the function's parents, the fields have the following meanings:
+
+ self This is the amount of time that was propagated directly
+ from the function into this parent.
+
+ children This is the amount of time that was propagated from
+ the function's children into this parent.
+
+ called This is the number of times this parent called the
+ function `/' the total number of times the function
+ was called. Recursive calls to the function are not
+ included in the number after the `/'.
+
+ name This is the name of the parent. The parent's index
+ number is printed after it. If the parent is a
+ member of a cycle, the cycle number is printed between
+ the name and the index number.
+
+ If the parents of the function cannot be determined, the word
+ `<spontaneous>' is printed in the `name' field, and all the other
+ fields are blank.
+
+ For the function's children, the fields have the following meanings:
+
+ self This is the amount of time that was propagated directly
+ from the child into the function.
+
+ children This is the amount of time that was propagated from the
+ child's children to the function.
+
+ called This is the number of times the function called
+ this child `/' the total number of times the child
+ was called. Recursive calls by the child are not
+ listed in the number after the `/'.
+
+ name This is the name of the child. The child's index
+ number is printed after it. If the child is a
+ member of a cycle, the cycle number is printed
+ between the name and the index number.
+
+ If there are any cycles (circles) in the call graph, there is an
+ entry for the cycle-as-a-whole. This entry shows who called the
+ cycle (as parents) and the members of the cycle (as children.)
+ The `+' recursive calls entry shows the number of function calls that
+ were internal to the cycle, and the calls entry for each member shows,
+ for that member, how many times it was called from other members of
+ the cycle.
+
+\f
+Index by function name
+
+ [13] void test_xml_escape<char const>(char const*, char const*, unsigned int) [16] test_main(int, char**) [5] boost::archive::iterators::transform_width<char*, 6, 8, char>::fill()
+ [14] void test_xml_unescape<char const>(char const*, char const*, unsigned int) [8] boost::archive::iterators::xml_escape<char const*>::fill(char const*&, char const*&) [1] __gnu_cxx::__atomic_add(int volatile*, int)
+ [9] void test_transform_width<6, 8>(unsigned int) [11] boost::archive::iterators::xml_unescape<char const*>::drain_residue(char const*) [17] char* std::string::_S_construct<char*>(char*, char*, std::allocator<char> const&, std::forward_iterator_tag)
+ [15] void test_stream_iterators<char>(char const*, unsigned int) [10] boost::archive::iterators::xml_unescape<char const*>::drain() [18] std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string<char*>(char*, char*, std::allocator<char> const&)
+ [12] __static_initialization_and_destruction_0(int, int) (performance_iterators.cpp) [6] boost::archive::iterators::transform_width<__gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >, 8, 6, char>::fill() [7] std::vector<char, std::allocator<char> >::_M_insert_aux(__gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >, char const&)
--- /dev/null
+Flat profile:
+
+Each sample counts as 0.01 seconds.
+ no time accumulated
+
+ % cumulative self self total
+ time seconds seconds calls Ts/call Ts/call name
+ 0.00 0.00 0.00 200 0.00 0.00 boost::archive::iterators::transform_width<char*, 6, 8, char>::fill()
+ 0.00 0.00 0.00 150 0.00 0.00 boost::archive::iterators::transform_width<boost::archive::iterators::binary_from_base64<boost::archive::iterators::remove_whitespace<std::_List_iterator<char> >, char>, 8, 6, char>::fill()
+ 0.00 0.00 0.00 2 0.00 0.00 __static_initialization_and_destruction_0(int, int)
+ 0.00 0.00 0.00 1 0.00 0.00 void test_base64<char>()
+ 0.00 0.00 0.00 1 0.00 0.00 std::_List_base<char, std::allocator<char> >::_M_clear()
+
+ % the percentage of the total running time of the
+time program used by this function.
+
+cumulative a running sum of the number of seconds accounted
+ seconds for by this function and those listed above it.
+
+ self the number of seconds accounted for by this
+seconds function alone. This is the major sort for this
+ listing.
+
+calls the number of times this function was invoked, if
+ this function is profiled, else blank.
+
+ self the average number of milliseconds spent in this
+ms/call function per call, if this function is profiled,
+ else blank.
+
+ total the average number of milliseconds spent in this
+ms/call function and its descendents per call, if this
+ function is profiled, else blank.
+
+name the name of the function. This is the minor sort
+ for this listing. The index shows the location of
+ the function in the gprof listing. If the index is
+ in parenthesis it shows where it would appear in
+ the gprof listing if it were to be printed.
+\f
+ Call graph (explanation follows)
+
+
+granularity: each sample hit covers 4 byte(s) no time propagated
+
+index % time self children called name
+ 0.00 0.00 200/200 void test_base64<char>() [7]
+[4] 0.0 0.00 0.00 200 boost::archive::iterators::transform_width<char*, 6, 8, char>::fill() [4]
+-----------------------------------------------
+ 0.00 0.00 150/150 void test_base64<char>() [7]
+[5] 0.0 0.00 0.00 150 boost::archive::iterators::transform_width<boost::archive::iterators::binary_from_base64<boost::archive::iterators::remove_whitespace<std::_List_iterator<char> >, char>, 8, 6, char>::fill() [5]
+-----------------------------------------------
+ 0.00 0.00 1/2 global constructors keyed to main [27]
+ 0.00 0.00 1/2 global destructors keyed to main [24]
+[6] 0.0 0.00 0.00 2 __static_initialization_and_destruction_0(int, int) [6]
+-----------------------------------------------
+ 0.00 0.00 1/1 main [1156]
+[7] 0.0 0.00 0.00 1 void test_base64<char>() [7]
+ 0.00 0.00 200/200 boost::archive::iterators::transform_width<char*, 6, 8, char>::fill() [4]
+ 0.00 0.00 150/150 boost::archive::iterators::transform_width<boost::archive::iterators::binary_from_base64<boost::archive::iterators::remove_whitespace<std::_List_iterator<char> >, char>, 8, 6, char>::fill() [5]
+ 0.00 0.00 1/1 std::_List_base<char, std::allocator<char> >::_M_clear() [8]
+-----------------------------------------------
+ 0.00 0.00 1/1 void test_base64<char>() [7]
+[8] 0.0 0.00 0.00 1 std::_List_base<char, std::allocator<char> >::_M_clear() [8]
+-----------------------------------------------
+
+ This table describes the call tree of the program, and was sorted by
+ the total amount of time spent in each function and its children.
+
+ Each entry in this table consists of several lines. The line with the
+ index number at the left hand margin lists the current function.
+ The lines above it list the functions that called this function,
+ and the lines below it list the functions this one called.
+ This line lists:
+ index A unique number given to each element of the table.
+ Index numbers are sorted numerically.
+ The index number is printed next to every function name so
+ it is easier to look up where the function in the table.
+
+ % time This is the percentage of the `total' time that was spent
+ in this function and its children. Note that due to
+ different viewpoints, functions excluded by options, etc,
+ these numbers will NOT add up to 100%.
+
+ self This is the total amount of time spent in this function.
+
+ children This is the total amount of time propagated into this
+ function by its children.
+
+ called This is the number of times the function was called.
+ If the function called itself recursively, the number
+ only includes non-recursive calls, and is followed by
+ a `+' and the number of recursive calls.
+
+ name The name of the current function. The index number is
+ printed after it. If the function is a member of a
+ cycle, the cycle number is printed between the
+ function's name and the index number.
+
+
+ For the function's parents, the fields have the following meanings:
+
+ self This is the amount of time that was propagated directly
+ from the function into this parent.
+
+ children This is the amount of time that was propagated from
+ the function's children into this parent.
+
+ called This is the number of times this parent called the
+ function `/' the total number of times the function
+ was called. Recursive calls to the function are not
+ included in the number after the `/'.
+
+ name This is the name of the parent. The parent's index
+ number is printed after it. If the parent is a
+ member of a cycle, the cycle number is printed between
+ the name and the index number.
+
+ If the parents of the function cannot be determined, the word
+ `<spontaneous>' is printed in the `name' field, and all the other
+ fields are blank.
+
+ For the function's children, the fields have the following meanings:
+
+ self This is the amount of time that was propagated directly
+ from the child into the function.
+
+ children This is the amount of time that was propagated from the
+ child's children to the function.
+
+ called This is the number of times the function called
+ this child `/' the total number of times the child
+ was called. Recursive calls by the child are not
+ listed in the number after the `/'.
+
+ name This is the name of the child. The child's index
+ number is printed after it. If the child is a
+ member of a cycle, the cycle number is printed
+ between the name and the index number.
+
+ If there are any cycles (circles) in the call graph, there is an
+ entry for the cycle-as-a-whole. This entry shows who called the
+ cycle (as parents) and the members of the cycle (as children.)
+ The `+' recursive calls entry shows the number of function calls that
+ were internal to the cycle, and the calls entry for each member shows,
+ for that member, how many times it was called from other members of
+ the cycle.
+
+\f
+Index by function name
+
+ [7] void test_base64<char>() [5] boost::archive::iterators::transform_width<boost::archive::iterators::binary_from_base64<boost::archive::iterators::remove_whitespace<std::_List_iterator<char> >, char>, 8, 6, char>::fill() [8] std::_List_base<char, std::allocator<char> >::_M_clear()
+ [6] __static_initialization_and_destruction_0(int, int) (performance_iterators_base64.cpp) [4] boost::archive::iterators::transform_width<char*, 6, 8, char>::fill()
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Seriealization - Rationale</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
+ "header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="http://www.boost.org"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Rationale</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<dl class="index">
+ <dt><a href="#serialization">The term "serialization" is preferred to "persistence"</a></dt>
+ <dt><a href="#archives">Archives are not streams</a></dt>
+ <dt><a href="#strings">Strings are treated specially in text archives</a></dt>
+ <dt><a href="#typeid"><code style="white-space: normal">typeid</code> information is not included in archives</a></dt>
+ <!--
+ <dt><a href="#footnotes">Footnotes</a></dt>
+ -->
+</dl>
+<h2><a name="serialization"></a>The term "serialization" is preferred to "persistence"</h2>
+<p>
+I found that persistence is often used to refer
+to something quite different. Examples are storage of class
+instances (objects) in database schema <a href="bibliography.html#4">[4]</a>
+This library will be useful in other contexts besides implementing persistence. The
+most obvious case is that of marshalling data for transmission to another system.
+<h2><a name="archives"></a>Archives are not streams</h2>
+<p>
+Archive classes are <strong>NOT</strong> derived from
+streams even though they have similar syntax rules.
+<ul>
+ <li>Archive classes are not kinds of streams though they
+ are implemented in terms of streams. This
+ distinction is addressed in <a href="bibliography.html#5">[5]</a> item number item 41 .
+ <li>We don't want users to insert/extract data
+ directly into/from the stream . This could
+ create a corrupted archive. Were archives
+ derived from streams, it would possible to
+ accidentally do this. So archive classes
+ only define operations which are safe and necessary.
+ <li>The usage of streams to implement the archive classes that
+ are included in the library is merely convenient - not necessary.
+ Library users may well want to define their own archive format
+ which doesn't use streams at all.
+</ul>
+<h2><a name="primitives"></a>Archive Members are Templates
+Rather than Virtual Functions</h2>
+The previous version of this library defined virtual functions for all
+primitive types. These were overridden by each archive class. There were
+two issues related to this:
+</ul>
+ <li>Some disliked virtual functions because of the added execution time
+ overhead.
+ <li>This caused implementation difficulties since the set of primitive
+ data types varies between platforms. Attempting to define the correct
+ set of virtual functions, (think <code style="white-space: normal">long long</code>,
+ <code style="white-space: normal">__int64</code>,
+ etc.) resulted in messy and fragile code. Replacing this with templates
+ and letting the compiler generate the code for the primitive types actually
+ used, resolved this problem. Of course, the ripple effects of this design
+ change were significant, but in the end led to smaller, faster, more
+ maintainable code.
+</ul>
+<h2><a name="strings"></a><code style="white-space: normal">std::strings</code> are treated specially in text files</h2>
+<p>
+Treating strings as STL vectors would result in minimal code size. This was
+not done because:
+<ul>
+ <li>In text archives it is convenient to be able to view strings. Our text
+ implementation stores single characters as integers. Storing strings
+ as a vector of characters would waste space and render the archives
+ inconvenient for debugging.
+ <li>Stream implementations have special functions for <code style="white-space: normal">std::string</code>
+ and <code style="white-space: normal">std::wstring</code>.
+ Presumably they optimize appropriately.
+ <li>Other specializations of <code style="white-space: normal">std::basic_string</code> are in fact handled
+ as vectors of the element type.
+</ul>
+</p>
+<h2><a name="typeid"></a><code style="white-space: normal">typeid</code> information is not included in archives</h2>
+<p>
+I originally thought that I had to save the name of the class specified by <code style="white-space: normal">std::type_of::name()</code>
+in the archive. This created difficulties as <code style="white-space: normal">std::type_of::name()</code> is not portable and
+not guaranteed to return the class name. This makes it almost useless for implementing
+archive portability. This topic is explained in much more detail in
+<a href="bibliography.html#6">[7] page 206</a>. It turned out that it was not necessary.
+As long as objects are loaded in the exact sequence as they were saved, the type
+is available when loading. The only exception to this is the case of polymorphic
+pointers never before loaded/saved. This is addressed with the <code style="white-space: normal">register_type()</code>
+and/or <code style="white-space: normal">export</code> facilities described in the reference.
+In effect, <code style="white-space: normal">export</code> generates a portable equivalent to
+<code style="white-space: normal">typeid</code> information.
+
+<!--
+<h2><a name="footnotes"></a>Footnotes</h2>
+<dl>
+ <dt><a name="footnote1" class="footnote">(1)</a> {{text}}</dt>
+ <dt><a name="footnote2" class="footnote">(2)</a> {{text}}</dt>
+</dl>
+-->
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Serialization of Classes</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Serializable Concept</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<dl class="page-index">
+ <dt><a href="archives.html">Archive Concepts</a>
+ <dt><a href="serialization.html">Serializable Concept</a>
+ <dt><a href="special.html">Special Considerations</a>
+ <dt><a href="archive_reference.html">Archive Class Reference</a>
+ <dt><a href="implementation.html">Implementation Notes</a>
+</dl>
+
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+ <link rel="stylesheet" type="text/css" href="style.css">
+ <title>Serialization - Release Notes</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3>
+ <a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">
+ Serialization</h1>
+ <h2 align="center">
+ Release Notes</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<dl class="index">
+ <dt><a href="#differences_1_42">Differences from version 1.42</a></dt>
+ <dt><a href="#differences_1_41">Differences from version 1.41</a></dt>
+ <dt><a href="#differences_1_40">Differences from version 1.40</a></dt>
+ <dt><a href="#differences_1_39">Differences from version 1.39</a></dt>
+ <dt><a href="#differences_1_37">Differences from version 1.37</a></dt>
+ <dt><a href="#differences_1_35">Differences from version 1.35</a></dt>
+ <dt><a href="#differences_1_34">Differences from version 1.34</a></dt>
+ <dt><a href="#differences_1_33">Differences from version 1.33</a></dt>
+ <dt><a href="#differences_1_32">Differences from version 1.32</a></dt>
+ <dt><a href="#todo">Pending Issues</a></dt>
+</dl>
+As of this writing, there are no known bugs. However, due to compiler/library
+quirks and or bugs, some tests fail with some combinations of compilers and
+libraries.
+<h2><a name="differences_1_42"></a>Differences from Boost 1.42</h2>
+<ul>
+ <li>fixed failure of shared_ptr serialization when serializing pointers
+created from enable_shared_from_this.
+ <li>added example for a simple archive which can be used as a debug log.
+This example illustrates the implemenation of the archive concept to aid
+understanding required to create one's own archive classes. The resulting
+archive is useful for debugging in that it only 160 lines of code and is
+header only - that is, it doesn't required linking to the serialization library.
+ <li>replaced example used to show how to derive from an existing archive.
+This example creates an XML archive class which doesn't include serialization
+traits such as class_id, class_version, etc. It might be useful for exporting
+one's class information to osme XML processor and/or debugging programs.
+ <li>compile time warnings have been implemented to detect practices which
+ though correct, will result in operation or side effects different than
+ a user probably intends.
+ <li>Some memory leaks associated with void_cast have been fixed.
+</ul>
+<h2><a name="differences_1_41"></a>Differences from Boost 1.41</h2>
+<ul>
+ <li>adjustments have been made to minimize compile time warnings.
+ <li>compile time warnings have been implemented to detect practices which
+ though correct, will result in operation or side effects different than
+ a user probably intends.
+ <li>Some memory leaks associated with void_cast have been fixed.
+</ul>
+<h2><a name="differences_1_40"></a>Differences from Boost 1.40</h2>
+This library has been tested against Boost version 1.39 and 1.40.
+<p>
+ Changes have been made to archive classes included with the library. Users who
+ have used these a guide to making their own archive classes will find that
+ these will likely no longer compile. This can be remedied by making the
+ following changes in the code which instantiates these archive classes.
+</p>
+Old Code:<br>
+<code><pre>
+...
+#include <boost/archive/impl/archive_pointer_iserializer.ipp>
+...
+template class detail::archive_pointer_iserializer<naked_text_iarchive> ;
+...
+template class detail::archive_pointer_iserializer<text_iarchive> ;
+</pre></code>should be replaced with this new code: <code><pre>
+#include <boost/archive/impl/archive_serializer_map.ipp>
+...
+template class detail::archive_serializer_map<naked_text_iarchive> ;
+...
+template class detail::archive_serializer_map<text_iarchive> ;
+</pre></code>
+<!--
+<p>
+The serialization library uses the boost spirit package to load XML archives.
+We have found that all tests pass using spirit 1.6x. Spirit 1.8 and higher does not work with
+older compilers - specifically MSVC 6, Borland and GCC < 3.0.
+If you are using one of these compilers, you may download a version
+of spirit 1.6 <a href="http://spirit.sourceforge.net/index.php?doc=download/index.html">here</a>.
+To use this downloaded version rather than the one included with boost,
+set an environmental variable SPIRIT_ROOT to be equal to the root
+directory where the downloaded copy of spirit has been placed. E. G.
+<pre><code>
+set SPIRIT_ROOT=c:/spirit16
+</code></pre>
+If you're not using bjam and the Jamfile to build the library, be sure that
+the directory which contains the version of spirit you plan to use is placed
+at the front of the list of include paths.
+-->
+<h2><a name="differences_1_39"></a>Differences from Boost 1.39</h2>
+<ul>
+ <li>
+ It is now possible to serialize an object through a pointer to a class which
+ implements its own <code style="white-space: normal">new/delete</code>
+ operators. This functionaly is not available on some compilers.
+ <li>
+ serialization of polymorphic objects has been sped up considerably.
+</ul>
+As of this writing, all bug reports filed as TRAK tickets have been addressed.
+There are some TRAK tickets pending which would best be described as feature
+requests. See <a href="#todo">Pending Issues</a>.
+<h2><a name="differences_1_37"></a>Differences from Boost 1.37</h2>
+There are no new features in this version. As of this writing, all bug reports
+filed as TRAK tickets have been addressed. There are some TRAK tickets pending
+which would best be described as feature requests. See <a href="#todo">Pending
+ Issues</a>.
+<h2><a name="differences_1_36"></a>Differences from Boost 1.36</h2>
+There are no new features in this version. As of this writing, all bug reports
+filed as TRAK tickets have been addressed.
+<h2><a name="differences_1_35"></a>Differences from Boost 1.35</h2>
+<ul>
+ <li>
+ The library is now thread safe. That is, multiple archives can be open in
+ different threads. This has been implmented with a lock-free algorithm to avoid
+ any performance bottlenecks.
+ <li>
+ Serialization of types defined in shared libraries is now supported. shared
+ libraries (DLLS) can be loaded/unloaded dynamically at runtime. This includes
+ the serialization of instances of abstract base classes so that a program can
+ be written so as to be compatible with as yet undefined and un-implemented
+ code.
+ <li>
+ The extended type info system has been enhanced to in order to implement the
+ above. It is now a general purpose system for creating and casting of types
+ about which is only known a string ID and an abstract base class.
+ <li>
+ All bug reports filed as TRAK tickets have been addressed.
+ <li>
+ As of this writing, the library will fail build on older compilers such as MSVC
+ before version 7.1 and older versions of Borland compilers. This might or might
+ not change in the future.
+</ul>
+<h2><a name="differences_1_34"></a>Differences from Boost 1.34</h2>
+<ul>
+ <li>
+ Enhanced support for fast serialization for native binary archives. By Mattias
+ Troyer.
+ <li>
+ Improved implementation of "export" functionality. Removes header ordering
+ requirement and eliminates the maintenance of a pre-determined list of "known
+ archives" By David Abrahams.
+ <li>
+ Improved support for STLPort.
+</ul>
+<h2><a name="differences_1_33"></a>Differences from Boost 1.33</h2>
+<ul>
+ <li>
+ Native Binary archives use the <code style="white-space: normal">std::streambuf</code>
+ interface. This should result in noticeably faster execution in many cases.
+</ul>
+<h2><a name="differences_1_32"></a>Differences from Boost 1.32</h2>
+<ul>
+ <li>
+ Dynamic Linking Library (DLLs and shared libraries) for platforms which support
+ them. See <a href="../../../more/getting_started/windows.html#auto-linking">Automatic
+ Linking on Windows</a>.
+ <li>
+ Implementation of auto-link for compilers which can support this.
+ <li>
+ Better support for <em>Argument Dependent Lookup</em>
+ and two-phase lookup. This results in simpler rules regarding the placing of
+ serialization specializations namespaces.
+ <li>
+ Enhanced documentation to help explain usage of the above.
+ <li>
+ Adjustments to improve support for less conformant compilers.
+ <li>
+ Improved <code>const</code> correctness for save/load operators. Note that this
+ may produce compile time errors in code which compiled without problem in
+ earlier boost releases. In most cases the fix is trivial. In other cases, code
+ should be scrutinized to be sure that it doesn't use the serialization system
+ in a way which may introduce subtle bugs in to the program. A fuller
+ explanation of this issue can be found <a target="detail" href="traits.html#tracking">
+ here</a>.
+ <li>
+ A new implementation of serialization for <code style="white-space: normal">shared_ptr<T></code>.
+ This is compatible with public interface of <code style="white-space: normal">shared_ptr<T></code>
+ so it should be more robust and not have to change in the future. The
+ implementation optionally includes code to load <code style="white-space: normal">shared_ptr<T></code>
+ stored in archives created with boost 1.32. This code is stored in 'he header: <code style="white-space: normal">
+ boost/serialization/shared_ptr_132.hpp</code>. If your application needs to
+ load archives created with boost 1.32 libraries, include the above header
+ before each inclusion of <code style="white-space: normal">boost/serialization/shared_ptr.hpp</code>.
+ <li>
+ More compilers tested and supported.
+ <li>
+ Miscellaneous bug fixes.
+</ul>
+<h2><a name="todo"></a>Pending issues</h2>
+<ul>
+ <li>
+ Rvalues cannot be serialized. It would be possible to implement this for
+ untracked types, but this has not been done.
+ <li>
+ Pointers to pointers cannot currently be serialized
+ <li>
+ Its possible that <code style="white-space: normal">std::string</code> and <code style="white-space: normal">
+ std::wstring</code>
+ contain characters such as '\0' and -1 (EOF) which cannot be rendered in text
+ and XML archives without an escape mechanism. Currently there is no such escape
+ mechanism implemented.
+ <li>
+ A subtle error in the implementation of serializaton of <code style="white-space: normal">
+ std::map</code> is fixed in this version. Unfortunately, the fix breaks
+ serialization of <code style="white-space: normal">std::map</code>
+ for those compilers which do not support partial template specialization. Also,
+ types which contain pointers or tracked types might not work correctly.
+</ul>
+<p>
+ Aside from the above, there are a number of issues related to specific
+ platforms. These are listed in <a href="implementation.html#othercompilerissues">Specific
+ Compiler/Library Issues</a>.
+ <hr>
+<p>
+ <i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2009.
+ 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) </i>
+</p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Serialization of Classes</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Serializable Concept</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<dl class="page-index">
+ <dt><a href="#primitiveoperators">Primitive Types</a>
+ <dt><a href="#classoperators">Class Types</a>
+ <dl class="page-index">
+ <dt><a href="#member">Member Function</a>
+ <dt><a href="#free">Free Function</a>
+ <dl class="page-index">
+ <dt><a href="#namespaces">Namespaces for Free Function Overrides</a>
+ </dl>
+ <dt><a href="#classmembers">Class Members</a>
+ <dl class="page-index">
+ <dt><a href="#base">Base Classes</a>
+ <dt><a href="#const"><code style="white-space: normal">const</code> Members</a>
+ <dt><a href="#templates">Templates</a>
+ </dl>
+ <dt><a href="#versioning">Versioning</a>
+ <dt><a href="#splitting">Splitting <code style="white-space: normal">serialize</code> into
+ <code style="white-space: normal">save/load</code></a>
+ <dl class="page-index">
+ <dt><a href="#splittingmemberfunctions">Member Functions</a>
+ <dt><a href="#splittingfreefunctions">Free Functions</a>
+ </dl>
+ </dl>
+ <dt><a href="#pointeroperators">Pointers</a>
+ <dl class="page-index">
+ <dt><a href="#constructors">Non-Default Constructors</a>
+ <dt><a href="#derivedpointers">Pointers to Objects of Derived Classes</a>
+ <dl class="page-index">
+ <dt><a href="#registration">Registration</a>
+ <dt><a href="#export">Export</a>
+ <dt><a href="#instantiation">Instantiation</a>
+ <dt><a href="#selectivetracking">Selective Tracking</a>
+ <dt><a href="#runtimecasting">Runtime Casting</a>
+ </dl>
+ </dl>
+ <dt><a href="#references">References</a>
+ <dt><a href="#arrays">Arrays</a>
+ <dt><a href="traits.html">Class Serialization Traits</a>
+ <dt><a href="wrappers.html">Serialization Wrappers</a>
+ <dt><a href="#models">Models - Serialization Implementations Included in the Library</a>
+</dl>
+
+A type <code style="white-space: normal">T</code> is <strong>Serializable</strong>
+if and only if one of the following is true:
+<ul>
+ <li>it is a primitive type.<br>
+ In this document, we use the term primitive type to mean
+ types whose data is simply saved/loaded to/from an archive
+ with no further processing. Arithmetic (including characters),
+ bool, enum and stl::string and stl::wstring types are primitive types. Using
+ <a target="detail" href="traits.html#Traits">serialization traits</a>,
+ any user type can also be designated as "primitive"
+ so that it is handled in this way.
+ <li>It is a class type and one of the following has been declared according
+ to the prototypes detailed below:
+ <ul>
+ <li>a class member function <code style="white-space: normal">serialize</code>
+ <li>a global function <code style="white-space: normal">serialize</code>
+ </ul>
+ <li>it is a pointer to a <strong>Serializable</strong> type.
+ <li>it is a reference to a <strong>Serializable</strong> type.
+ <li>it is a native C++ Array of <strong>Serializable</strong> type.
+</ul>
+
+<h2><a name="primitiveoperators">Primitive Types</a></h2>
+The template operators &, <<, and >> of the archive classes
+described above will generate code to save/load all primitive types
+to/from an archive. This code will usually just add the
+data to the archive according to the archive format.
+For example, a four byte integer is appended to a binary archive
+as 4 binary bytes while a to a text archive it would be
+rendered as a space followed by a string representation.
+
+<h2><a name="classoperators">Class Types</a></h2>
+For class/struct types, the template operators &, <<, and >>
+will generate code that invokes the programmer's serialization code for the
+particular data type. There is no default. An attempt to serialize a
+class/struct for which no serialization has been explicitly specified
+will result in a compile time error. The serialiation of a class can
+be specified via either a class member function or a free funcation which
+takes a reference to an instance of the class as an argument.
+
+<h3><a name="member">Member Function</a></h3>
+The serialization library invokes the following code to save or load a class instance
+to/from and archive.
+<pre><code>
+template<class Archive, class T>
+inline void serialize(
+ Archive & ar,
+ T & t,
+ const unsigned int file_version
+){
+ // invoke member function for class T
+ t.serialize(ar, file_version);
+}
+</code></pre>
+That is, the default definition of template <code style="white-space: normal">serialize</code>
+presumes the existence of a class member function template of the following
+signature:
+<pre><code>
+template<class Archive>
+void serialize(Archive &ar, const unsigned int version){
+ ...
+}
+</code></pre>
+If such a member function is not declared, a compile time error will occur. In order
+that the member function generated by this template can be called to
+append the data to an archive, it either must be public or the class must
+be made accessible to the serialization library by including:
+<pre><code>
+friend class boost::serialization::access;
+</code></pre>
+in the class definition. This latter method should be preferred over the option
+of making member function public. This will prevent serialization functions from
+being called from outside the library. This is almost certainly an error. Unfortunately,
+it may appear to function but fail in a way that is very difficult to find.
+<p>
+It may not be immediately obvious how this one template serves for both
+saving data to an archive as well as loading data from the archive.
+The key is that the <code style="white-space: normal">&</code> operator is
+defined as <code style="white-space: normal"><<</code>
+for output archives and as <code style="white-space: normal">>></code> input archives. The
+"polymorphic" behavior of the <code style="white-space: normal">&</code> permits the same template
+to be used for both save and load operations. This is very convenient in that it
+saves a lot of typing and guarantees that the saving and loading of class
+data members are always in sync. This is the key to the whole serialization
+system.
+
+<h3><a name="free">Free Function</a></h3>
+Of course we're not restricted to using the default implementation described
+above. We can override the default one with our own. Doing this will
+permit us to implement serialization of a class without altering
+the class definition itself. We call this <strong>non-intrusive</strong>
+serialization. Suppose our class is named <code style="white-space: normal">my_class</code>, the
+override would be specified as:
+<pre><code>
+// namespace selection
+
+template<class Archive>
+inline void serialize(
+ Archive & ar,
+ my_class & t,
+ const unsigned int file_version
+){
+ ...
+}
+</code></pre>
+
+Note that we have called this override "non-intrusive". This is slightly
+inaccurate. It does not require that the class have special functions, that
+it be derived from some common base class or any other fundamental design changes.
+However, it will require access to the class members that are to
+be saved and loaded. If these members are <code style="white-space: normal">private</code>, it won't be
+possible to serialize them. So in some instances, minor modifications to the
+class to be serialized will be necessary even when using this "non-intrusive"
+method. In practice this may not be such a problem as many libraries
+(E.G. STL) expose enough information to permit implementation of non-intrusive
+serialization with absolutly no changes to the library.
+
+<h4><a name="namespaces">Namespaces for Free Function Overrides</a></h4>
+For maximum portability, include any free functions templates and definitions in the
+namespace <code style="white-space: normal">boost::serialization</code>. If portability is not a concern and the
+compiler being used supports ADL (Argument Dependent Lookup) the free functions and
+templates can be in any of the following namespaces:
+<ul>
+<li><code style="white-space: normal">boost::serialization</code>
+<li>namespace of the archive class
+<li>namespace of the type being serialized
+</ul>
+<p>
+Note that, at first glance, this suggestion may seem to be wrong for compilers which implement
+two phase lookup. In fact, the serialization library used a perhaps overly clever
+method to support this rule even for such compilers. Those with an interest in studying
+this furter will find more information in
+<a target=serialization_hpp href="../../../boost/serialization/serialization.hpp">serialization.hpp</a>
+
+<h3><a name="classmembers">Serialization of Class Members</a></h3>
+Regardless of which of the above methods is used, the body of the serialize function must
+specify the data to be saved/loaded by sequential application of the archive
+<code style="white-space: normal">operator &</code> to all the data members of the class.
+<pre><code>
+{
+ // save/load class member variables
+ ar & member1;
+ ar & member2;
+}
+</code></pre>
+
+<h4><a name="base">Base Classes</a></h4>
+The header file
+<a href="../../../boost/serialization/base_object.hpp" target="base_object_hpp">
+base_object.hpp
+</a>
+includes the template:
+<pre><code>
+template<class Base, class Derived>
+Base & base_object(Derived &d);
+</code></pre>
+which should be used to create a reference to an object of the base
+which can be used as an argument to the archive serialization operators.
+So for a class of <strong>Serializable</strong> type
+<code style="white-space: normal">T</code> the base class state should be
+serialized like this:
+<pre><code>
+{
+ // invoke serialization of the base class
+ ar & boost::serialization::base_object<base_class_of_T>(*this);
+ // save/load class member variables
+ ar & member1;
+ ar & member2;
+}
+</code></pre>
+Resist the temptation to just cast <code style="white-space: normal">*this</code> to the base class.
+This might seem to work but may fail to invoke code necessary for
+proper serialization.
+<p>
+Note that this is <strong>NOT</strong> the same as calling the <code style="white-space: normal">serialize</code>
+function of the base class. This might seem to work but will circumvent
+certain code used for tracking of objects, and registering base-derived
+relationships and other bookkeeping that is required for the serialization
+system to function as designed. For this reason, all <code style="white-space: normal">serialize</code>
+member functions should be <code style="white-space: normal">private</code>.
+
+<h4><a name="const"><code style="white-space: normal">const</code> Members</a></h4>
+Saving <code style="white-space: normal">const</code> members to an archive
+requires no special considerations.
+Loading <code style="white-space: normal">const</code> members can be addressed by using a
+<code style="white-space: normal">const_cast</code>:
+<pre><code>
+ ar & const_cast<T &>(t);
+</code></pre>
+Note that this violates the spirit and intention of the <code style="white-space: normal">const</code>
+keyword. <code style="white-space: normal">const</code> members are intialized when a class instance
+is constructed and not changed thereafter. However, this may
+be most appropriate in many cases. Ultimately, it comes down to
+the question about what <code style="white-space: normal">const</code> means in the context
+of serialization.
+
+<h4><a name="templates"></a>Templates</h4>
+Implementation serialization for templates is exactly the same process
+as for normal classes and requires no additional considerations. Among
+other things, this implies that serialization of compositions of templates
+are automatically generated when required if serialization of the
+component templates is defined. For example, this library includes
+definition of serialization for <code style="white-space: normal">boost::shared_ptr<T></code> and for
+<code style="white-space: normal">std::list<T></code>. If I have defined serialization for my own
+class <code style="white-space: normal">my_t</code>, then serialization for
+<code style="white-space: normal">std::list< boost::shared_ptr< my_t> ></code> is already available
+for use.
+<p>
+See for an example that shows how this idea might be implemented for your own
+class templates, see
+<a href="../example/demo_auto_ptr.cpp" target="demo_auto_ptr.cpp">
+demo_auto_ptr.cpp</a>.
+This shows how non-intrusive serialization
+for the template <code style="white-space: normal">auto_ptr</code> from the standard library
+can be implemented.
+<p>
+A somewhat trickier addition of serialization to a standard template
+can be found in the example
+<a href="../../../boost/serialization/shared_ptr.hpp" target="shared_ptr_hpp">
+shared_ptr.hpp
+</a>
+<!--
+Only the most minimal change to
+<code>shared_count.hpp</code>
+(to gain access to some private members) was necessary to achieve this.
+This should demonstrate how easy it is to non-intrusively
+implement serialization to any data type or template.
+-->
+<p>
+In the specification of serialization for templates, its common
+to split <code style="white-space: normal">serialize</code>
+into a <code style="white-space: normal">load/save</code> pair.
+Note that the convenience macro described
+<a href="#BOOST_SERIALIZATION_SPLIT_FREE">above</a>
+isn't helpful in these cases as the number and kind of
+template class arguments won't match those used when splitting
+<code style="white-space: normal">serialize</code> for a simple class. Use the override
+syntax instead.
+
+<h3><a name="versioning">Versioning</a></h3>
+It will eventually occur that class definitions change after archives have
+been created. When a class instance is saved, the current version
+in included in the class information stored in the archive. When the class instance
+is loaded from the archive, the original version number is passed as an
+argument to the loading function. This permits the load function to include
+logic to accommodate older definitions for the class and reconcile them
+with latest version. Save functions always save the current version. So this
+results in automatically converting older format archives to the newest versions.
+Version numbers are maintained independently for each class. This results in
+a simple system for permitting access to older files and conversion of same.
+The current version of the class is assigned as a
+<a href="traits.html">Class Serialization Trait</a> described later in this manual.
+<pre><code>
+{
+ // invoke serialization of the base class
+ ar & boost::serialization::base_object<base_class_of_T>(*this);
+ // save/load class member variables
+ ar & member1;
+ ar & member2;
+ // if its a recent version of the class
+ if(1 < file_version)
+ // save load recently added class members
+ ar & member3;
+}
+</code></pre>
+
+<h3><a name="splitting">Splitting <code style="white-space: normal">serialize</code> into Save/Load</a></h3>
+There are times when it is inconvenient to use the same
+template for both save and load functions. For example, this might occur if versioning
+gets complex.
+
+<h4><a name="splittingmemberfunctions">Splitting Member Functions</a></h4>
+For member functions this can be addressed by including
+the header file <a href="../../../boost/serialization/split_member.hpp" target="split_member_hpp">
+boost/serialization/split_member.hpp</a> including code like this in the class:
+<pre><code>
+template<class Archive>
+void save(Archive & ar, const unsigned int version) const
+{
+ // invoke serialization of the base class
+ ar << boost::serialization::base_object<const base_class_of_T>(*this);
+ ar << member1;
+ ar << member2;
+ ar << member3;
+}
+
+template<class Archive>
+void load(Archive & ar, const unsigned int version)
+{
+ // invoke serialization of the base class
+ ar >> boost::serialization::base_object<base_class_of_T>(*this);
+ ar >> member1;
+ ar >> member2;
+ if(version > 0)
+ ar >> member3;
+}
+
+template<class Archive>
+void serialize(
+ Archive & ar,
+ const unsigned int file_version
+){
+ boost::serialization::split_member(ar, *this, file_version);
+}
+</code></pre>
+This splits the serialization into two separate functions <code style="white-space: normal">save</code>
+and <code style="white-space: normal">load</code>. Since the new <code style="white-space: normal">serialize</code> template
+is always the same it can be generated by invoking the macro
+BOOST_SERIALIZATION_SPLIT_MEMBER() defined in the header file
+<a href="../../../boost/serialization/split_member.hpp" target="split_member_hpp">
+boost/serialization/split_member.hpp
+</a>.
+So the entire <code style="white-space: normal">serialize</code> function above can be replaced with:
+<pre><code>
+BOOST_SERIALIZATION_SPLIT_MEMBER()
+</code></pre>
+<h4><a name="splittingfreefunctions">Splitting Free Functions</a></h4>
+The situation is same for non-intrusive serialization with the free
+<code style="white-space: normal">serialize</code> function template.
+
+<a name="BOOST_SERIALIZATION_SPLIT_FREE">
+To use <code style="white-space: normal">save</code> and
+<code style="white-space: normal">load</code> function templates rather than
+<code style="white-space: normal">serialize</code>:
+<pre><code>
+namespace boost { namespace serialization {
+template<class Archive>
+void save(Archive & ar, const my_class & t, unsigned int version)
+{
+ ...
+}
+template<class Archive>
+void load(Archive & ar, my_class & t, unsigned int version)
+{
+ ...
+}
+}}
+</code></pre>
+include the header file
+<a href="../../../boost/serialization/split_free.hpp" target="split_free_hpp">
+boost/serialization/split_free.hpp
+</a>.
+and override the free <code style="white-space: normal">serialize</code> function template:
+<pre><code>
+namespace boost { namespace serialization {
+template<class Archive>
+inline void serialize(
+ Archive & ar,
+ my_class & t,
+ const unsigned int file_version
+){
+ split_free(ar, t, file_version);
+}
+}}
+</code></pre>
+To shorten typing, the above template can be replaced with
+the macro:
+<pre><code>
+BOOST_SERIALIZATION_SPLIT_FREE(my_class)
+</code></pre>
+
+Note that although the functionality to split the <code style="white-space: normal">
+serialize</code> function into <code style="white-space: normal">save/load</code>
+has been provided, the usage of the <code style="white-space: normal">serialize</code>
+function with the corresponding <code style="white-space: normal">&</code> operator
+is preferred. The key to the serialization implementation is that objects are saved
+and loaded in exactly the same sequence. Using the <code style="white-space: normal">&</code>
+operator and <code style="white-space: normal">serialize</code>
+function guarantees that this is always the case and will minimize the
+occurence of hard to find errors related to synchronization of
+<code style="white-space: normal">save</code> and <code style="white-space: normal">load</code>
+functions.
+<p>
+Also note that <code style="white-space: normal">BOOST_SERIALIZATION_SPLIT_FREE</code>
+must be used outside of any namespace.
+
+<h2><a name="pointeroperators">Pointers</a></h2>
+A pointer to any class instance can be serialized with any of the archive
+save/load operators.
+<p>
+To properly save and restore an object through a pointer the
+following situations must be addressed:
+<ol>
+ <li>If the same object is saved multiple times through different
+ pointers, only one copy of the object need be saved.
+ <li>If an object is loaded multiple times through different pointers,
+ only one new object should be created and all returned pointers
+ should point to it.
+ <li>The system must detect the case where an object is first
+ saved through a pointer then the object itself is saved.
+ Without taking extra precautions, loading would result in the
+ creation of multiple copies of the original object. This system detects
+ this case when saving and throws an exception - see below.
+ <li>An object of a derived class may be stored through a
+ pointer to the base class. The true type of the object must
+ be determined and saved. Upon restoration the correct type
+ must be created and its address correctly cast to the base
+ class. That is, polymorphic pointers have to be considered.
+ <li>NULL pointers must be dectected when saved and restored
+ to NULL when deserialized.
+</ol>
+
+This serialization library addresses all of the above
+considerations. The process of saving and loading an object
+through a pointer is non-trivial. It can be summarized as
+follows:
+<p>Saving a pointer:
+<ol>
+ <li>determine the true type of the object being pointed to.
+ <li>write a special tag to the archive
+ <li>if the object pointed to has not already been written
+ to the archive, do so now
+</ol>
+Loading a pointer:
+<ol>
+ <li>read a tag from the archive.
+ <li>determine the type of object to be created
+ <li>if the object has already been loaded, return it's address.
+ <li>otherwise, create a new instance of the object
+ <li>read the data back in using the operators described above
+ <li>return the address of the newly created object.
+</ol>
+
+Given that class instances are saved/loaded to/from the archive
+only once, regardless of how many times they are serialized with
+the <code style="white-space: normal"><<</code>
+and <code style="white-space: normal">>></code> operators
+<ul>
+ <li>Loading the same pointer object multiple times
+ results in only one object being created, thereby replicating
+ the original pointer configuration.
+ <li>Structures such as collections of polymorphic pointers,
+ are handled with no special effort on the part of users of this library.
+</ul>
+Serialization of pointers of derived types through a pointer to the
+base class may require a little extra "help". Also, the programmer
+may desire to modify the process described above for his own reasons.
+For example, it might be desired to suppress the tracking of objects
+as it is known a priori that the application in question can never
+create duplicate objects. Serialization of pointers can be "fine tuned"
+via the specification of <a target="detail" href="traits.html#Traits">Class Serialization Traits</a>
+as described in
+<a target="detail" href="special.html#derivedpointers">
+another section of this manual
+</a>
+
+<h3><a name="constructors">Non-Default Constructors</a></h3>
+Serialization of pointers is implemented in the library with code
+similar to the following:
+<pre><code>
+// load data required for construction and invoke constructor in place
+template<class Archive, class T>
+inline void load_construct_data(
+ Archive & ar, T * t, const unsigned int file_version
+){
+ // default just uses the default constructor to initialize
+ // previously allocated memory.
+ ::new(t)T();
+}
+</code></pre>
+The default <code style="white-space: normal">load_construct_data</code> invokes the
+default constructor "in-place" to initialize the memory.
+<p>
+If there is no such default constructor, the function templates
+<code style="white-space: normal">load_construct_data</code> and
+perhaps <code style="white-space: normal">save_construct_data</code>
+will have to be overridden. Here is a simple example:
+<pre><code>
+class my_class {
+private:
+ friend class boost::serialization::access;
+ const int m_attribute; // some immutable aspect of the instance
+ int m_state; // mutable state of this instance
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int file_version){
+ ar & m_state;
+ }
+public:
+ // no default construct guarentees that no invalid object
+ // ever exists
+ my_class(int attribute) :
+ m_attribute(attribute),
+ m_state(0)
+ {}
+};
+</code></pre>
+the overrides would be:
+<pre><code>
+namespace boost { namespace serialization {
+template<class Archive>
+inline void save_construct_data(
+ Archive & ar, const my_class * t, const unsigned int file_version
+){
+ // save data required to construct instance
+ ar << t->m_attribute;
+}
+
+template<class Archive>
+inline void load_construct_data(
+ Archive & ar, my_class * t, const unsigned int file_version
+){
+ // retrieve data from archive required to construct new instance
+ int attribute;
+ ar >> attribute;
+ // invoke inplace constructor to initialize instance of my_class
+ ::new(t)my_class(attribute);
+}
+}} // namespace ...
+</code></pre>
+In addition to the deserialization of pointers, these overrides are used
+in the deserialization of STL containers whose element type has no default
+constructor.
+
+<h3><a name="derivedpointers">Pointers to Objects of Derived Classes</a></h3>
+<h4><a name="registration">Registration</a></h4>
+Consider the following:
+<pre><code>
+class base {
+ ...
+};
+class derived_one : public base {
+ ...
+};
+class derived_two : public base {
+ ...
+};
+main(){
+ ...
+ base *b;
+ ...
+ ar & b;
+}
+</code></pre>
+When saving <code style="white-space: normal">b</code> what kind of object should be saved?
+When loading <code style="white-space: normal">b</code> what kind of object should be created?
+Should it be an object of class <code style="white-space: normal">derived_one</code>,
+<code style="white-space: normal">derived_two</code>, or maybe <code style="white-space: normal">base</code>?
+<p>
+It turns out that the kind of object serialized depends upon whether the base class
+(<code style="white-space: normal">base</code> in this case) is polymophic or not.
+If <code style="white-space: normal">base</code> is not polymorphic, that is if it has no
+virtual functions, then an object of the type <code style="white-space: normal">base</code>
+will be serialized. Information in any derived classes will be lost. If this is what is desired
+(it usually isn't) then no other effort is required.
+<p>
+
+If the base class is polymorphic, an object of the most derived type
+(<code style="white-space: normal">derived_one</code>
+or <code style="white-space: normal">derived_two</code>
+in this case) will be serialized. The question of which type of object is to be
+serialized is (almost) automatically handled by the library.
+<p>
+The system "registers" each class in an archive the first time an object of that
+class it is serialized and assigns a sequential number to it. Next time an
+object of that class is serialized in that same archive, this number is written
+in the archive. So every class is identified uniquely within the archive.
+When the archive is read back in, each new sequence number is re-associated with
+the class being read. Note that this implies that "registration" has to occur
+during both save and load so that the class-integer table built on load
+is identical to the class-integer table built on save. In fact, the key to
+whole serialization system is that things are always saved and loaded in
+the same sequence. This includes "registration".
+<p>
+Expanding our previous example:
+<pre><code>
+main(){
+ derived_one d1;
+ derived_two d2:
+ ...
+ ar & d1;
+ ar & d2;
+ // A side effect of serialization of objects d1 and d2 is that
+ // the classes derived_one and derived_two become known to the archive.
+ // So subsequent serialization of those classes by base pointer works
+ // without any special considerations.
+ base *b;
+ ...
+ ar & b;
+}
+</code></pre>
+When <code style="white-space: normal">b</code> is read it is
+preceded by a unique (to the archive) class identifier which
+has previously been related to class <code style="white-space: normal">derived_one</code> or
+<code style="white-space: normal">derived_two</code>.
+<p>
+If a derived class has NOT been automatically "registered" as described
+above, an <a target="detail" href="exceptions.html#unregistered_class">
+<code style="white-space: normal">unregistered_class</code></a> exception
+will be thrown when serialization is invoked.
+<p>
+This can be addressed by registering the derived class explicitly. All archives are
+derived from a base class which implements the following template:
+<pre><code>
+template<class T>
+register_type();
+</code></pre>
+So our problem could just as well be addressed by writing:
+<pre><code>
+main(){
+ ...
+ ar.template register_type<derived_one>();
+ ar.template register_type<derived_two>();
+ base *b;
+ ...
+ ar & b;
+}
+</code></pre>
+Note that if the serialization function is split between save and load, both
+functions must include the registration. This is required to keep the save
+and corresponding load in syncronization.
+
+<h4><a name="export">Export</a></h4>
+The above will work but may be inconvenient. We don't always know which derived
+classes we are going to serialize when we write the code to serialize through
+a base class pointer. Every time a new derived class is written we have to
+go back to all the places where the base class is serialized and update the
+code.
+<p>
+So we have another method:
+<pre><code>
+#include <boost/serialization/export.hpp>
+...
+BOOST_CLASS_EXPORT_GUID(derived_one, "derived_one")
+BOOST_CLASS_EXPORT_GUID(derived_two, "derived_two")
+
+main(){
+ ...
+ base *b;
+ ...
+ ar & b;
+}
+</code></pre>
+The macro <code style="white-space: normal">BOOST_CLASS_EXPORT_GUID</code> associates a string literal
+with a class. In the above example we've used a string rendering
+of the class name. If a object of such an "exported" class is serialized
+through a pointer and is otherwise unregistered, the "export" string is
+included in the archive. When the archive
+is later read, the string literal is used to find the class which
+should be created by the serialization library.
+This permits each class to be in a separate header file along with its
+string identifier. There is no need to maintain a separate "pre-registration"
+of derived classes that might be serialized. This method of
+registration is referred to as "key export". More information on this
+topic is found in the section Class Traits -
+<a target="detail" href="traits.html#export">Export Key</a>.
+<p>
+<h4><a name="instantiation">Instantiation</a></h4>
+Registration by means of any of the above methods fulfill another role
+whose importance might not be obvious. This system relies on templated
+functions of the form <code style="white-space: normal">template<class Archive, class T></code>.
+This means that serialization code must be instantiated for each
+combination of archive and data type that is serialized in the program.
+<p>
+Polymorphic pointers of derived classes may never be referred to
+explictly by the program so normally code to serialize such classes
+would never be instantiated. So in addition to including export key
+strings in an archive, <code style="white-space: normal">BOOST_CLASS_EXPORT_GUID</code> explicitly
+instantiates the class serialization code for all archive classes used
+by the program.
+
+<h4><a name="selectivetracking">Selective Tracking</a></h4>
+Whether or not an object is tracked is determined by its
+<a target="detail" href="traits.html#tracking">object tracking trait</a>.
+The default setting for user defined types is <code style="white-space: normal">track_selectively</code>.
+That is, track objects if and only if they are serialized through pointers anywhere
+in the program. Any objects that are "registered" by any of the above means are presumed
+to be serialized through pointers somewhere in the program and therefore
+would be tracked. In certain situations this could lead to an inefficiency.
+Suppose we have a class module used by multiple programs. Because
+some programs serializes polymorphic pointers to objects of this class, we
+<a target="detail" href="traits.html#export">export</a> a class
+identifier by specifying <code style="white-space: normal">BOOST_CLASS_EXPORT</code> in the
+class header. When this module is included by another program,
+objects of this class will always be tracked even though it
+may not be necessary. This situation could be addressed by using
+<a target="detail" href="traits.html#tracking"><code style="white-space: normal">track_never</code></a>
+in those programs.
+<p>
+It could also occur that even though a program serializes through
+a pointer, we are more concerned with efficiency than avoiding the
+the possibility of creating duplicate objects. It could be
+that we happen to know that there will be no duplicates. It could
+also be that the creation of a few duplicates is benign and not
+worth avoiding given the runtime cost of tracking duplicates.
+Again, <a target="detail" href="traits.html#tracking"><code style="white-space: normal">track_never</code></a>
+can be used.
+<h4><a name="runtimecasting">Runtime Casting</a></h4>
+In order to properly translate between base and derived pointers
+at runtime, the system requires each base/derived pair be found
+in a table. A side effect of serializing a base object with
+<code style="white-space: normal">boost::serialization::base_object<Base>(Derived &)</code>
+is to ensure that the base/derived pair is added to the table
+before the <code style="white-space: normal">main</code> function is entered.
+This is very convenient and results in a clean syntax. The only
+problem is that it can occur where a derived class serialized
+through a pointer has no need to invoke the serialization of
+its base class. In such a case, there are two choices. The obvious
+one is to invoke the base class serialization with <code style="white-space: normal">base_object</code>
+and specify an empty function for the base class serialization.
+The alternative is to "register" the Base/Derived relationship
+explicitly by invoking the template
+<code style="white-space: normal">void_cast_register<Derived, Base>();</code>.
+Note that this usage of the term "register" is not related
+to its usage in the previous section. Here is an example of how this is done:
+<pre><code>
+#include <sstream>
+#include <boost/serialization/serialization.hpp>
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/serialization/export.hpp>
+
+class base {
+ friend class boost::serialization::access;
+ //...
+ // only required when using method 1 below
+ // no real serialization required - specify a vestigial one
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int file_version){}
+};
+
+class derived : public base {
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int file_version){
+ // method 1 : invoke base class serialization
+ boost::serialization::base_object<base>(*this);
+ // method 2 : explicitly register base/derived relationship
+ boost::serialization::void_cast_register<derived, base>(
+ static_cast<derived *>=NULL),
+ static_cast<base *>(NULL)
+ )
+ }
+};
+
+BOOST_CLASS_EXPORT_GUID(derived, "derived")
+
+main(){
+ //...
+ std::stringstream ss;
+ boost::archive::text_iarchive ar(ss);
+ base *b;
+ ar >> b;
+}
+</code></pre>
+<p>
+
+In order for this template to be invoked in code compiled by non-conforming
+compilers, the following syntax may be used:
+<pre><code>
+boost::serialization::void_cast_register(
+ static_cast<Derived *>(NULL),
+ static_cast<Base *>(NULL)
+);
+</code></pre>
+For more information, see <a target="detail" href="implementation.html#tempatesyntax">Template Invocation syntax</a>
+
+<h3><a name="references"></a>References</h3>
+Classes that contain reference members will generally require
+non-default constructors as references can only be set when
+an instance is constructed. The example of the previous section
+is slightly more complex if the class has reference members.
+This raises the question of how and where the objects being
+referred to are stored and how are they created. Also there is the question about
+references to polymorphic base classes. Basically, these
+are the same questions that arise regarding pointers. This is
+no surprise as references are really a special kind of pointer.
+We address these questions by serializing references as though
+they were pointers.
+<pre><code>
+class object;
+class my_class {
+private:
+ friend class boost::serialization::access;
+ int member1;
+ object & member2;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int file_version);
+public:
+ my_class(int m, object & o) :
+ member1(m),
+ member2(o)
+ {}
+};
+</code></pre>
+the overrides would be:
+<pre><code>
+namespace boost { namespace serialization {
+template<class Archive>
+inline void save_construct_data(
+ Archive & ar, const my_class * t, const unsigned int file_version
+){
+ // save data required to construct instance
+ ar << t.member1;
+ // serialize reference to object as a pointer
+ ar << & t.member2;
+}
+
+template<class Archive>
+inline void load_construct_data(
+ Archive & ar, my_class * t, const unsigned int file_version
+){
+ // retrieve data from archive required to construct new instance
+ int m;
+ ar >> m;
+ // create and load data through pointer to object
+ // tracking handles issues of duplicates.
+ object * optr;
+ ar >> optr;
+ // invoke inplace constructor to initialize instance of my_class
+ ::new(t)my_class(m, *optr);
+}
+}} // namespace ...
+</code></pre>
+
+<h3><a name="arrays"></a>Arrays</h3>
+If <code style="white-space: normal">T</code> is a serializable type,
+then any native C++ array of type T is a serializable type.
+That is, if <code style="white-space: normal">T</code>
+is a serializable type, then the following
+is automatically available and will function as expected:
+<pre><code>
+T t[4];
+ar << t;
+ ...
+ar >> t;
+</code></pre>
+
+<h2><a href="traits.html">Class Serialization Traits</a></h2>
+
+<h2><a href="wrappers.html">Serialization Wrappers</a></h2>
+
+<h2><a name="models"></a>Models - Serialization Implementations Included in the Library</h2>
+The facilities described above are sufficient to implement
+serialization for all STL containers. In fact, this has been done
+and has been included in the library. For example, in order to use
+the included serialization code for <code style="white-space: normal">std::list</code>, use:
+<pre><code>
+#include <boost/serialization/list.hpp>
+</code></pre>
+rather than
+<pre><code>
+#include <list>
+</code></pre>
+Since the former includes the latter, this all that is necessary.
+The same holds true for all STL collections as well as templates
+required to support them (e.g. <code style="white-space: normal">std::pair</code>).
+<p>
+As of this writing, the library contains serialization of the following boost clases:
+<ul>
+ <li>optional
+ <li>variant
+ <li>scoped_ptr
+ <li>shared_ptr
+ <li>auto_ptr (demo)
+</ul>
+Others are being added to the list so check the boost files section and headers for
+new implementations!
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Template serialization - shared_ptr</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Template serialization - <code style="white-space: normal">shared_ptr<class T></code></h2>
+ </td>
+ </tr>
+</table>
+<hr>
+All the code snippets included below are defined within the
+<code style="white-space: normal">boost::serialization</code> namespace.
+<p>
+<code style="white-space: normal">shared_ptr<T></code> is defined in
+<a href="../../../boost/shared_ptr.hpp" target=shared_ptr.hpp>shared_ptr.hpp</a>.
+<p>
+The general class outline for a <code style="white-space: normal">shared_ptr<T></code> is:
+<dl>
+ <dt><code style="white-space: normal">shared_ptr<T></code> contains:
+ <dl>
+ <dt><code style="white-space: normal">T *px;</code>
+ <dt><code style="white-space: normal">shared_count pn;</code> which contains a pointer to:
+ <dl>
+ <dt><code style="white-space: normal">sp_counted_base_impl<T, ...></code> which is
+derived from the polymorphic abstract class
+ <dl>
+ <dt><code style="white-space: normal">sp_counted_base</code>
+ </dl>
+ </dl>
+ </dl>
+</dl>
+The serialization process proceeds down the tree above.
+<p>
+The first cut at implementing serialization for <code style="white-space: normal">shared_ptr</code>
+just serializes the relevant members of <code style="white-space: normal">shared_ptr</code>.
+It's almost trivial:
+<pre><code>
+template<class Archive, class T>
+inline void serialize(
+ Archive & ar,
+ shared_ptr<T> & t,
+ const unsigned int file_version,
+ int
+){
+ ar & t.px; // save the raw pointer
+ ar & t.pn; // save the shared reference count
+}
+</code></pre>
+So far so good. Now for the serialization of <code style="white-space: normal">shared_count</code>:
+<pre><code>
+template<class Archive>
+inline void save(
+ Archive & ar,
+ const boost::detail::shared_count & t,
+ const unsigned int file_version
+){
+ ar << t.pi_;
+}
+
+template<class Archive>
+inline void load(
+ Archive & ar,
+ boost::detail::shared_count & t,
+ const unsigned int file_version
+){
+ ar >> t.pi_;
+}
+</code></pre>
+A key feature of this library is the ability to specify serialization
+of a class or template without changing the class or template declaration
+or definition. This is referred to as <i>non-intrusive</i> serialization.
+<p>
+The <code style="white-space: normal">pi_</code>member of shared count is a pointer to an
+instance of <code style="white-space: normal">sp_counted_base_impl<T, ...></code>. Since this class
+doesn't have a default constructor, serialization requires
+specification of the following overload:
+<pre><code>
+template<class Archive, class P, class D>
+inline void save_construct_data(
+ Archive & ar,
+ const boost::detail::sp_counted_base_impl<P, D> * t,
+ const unsigned int file_version
+){
+ // variables used for construction
+ ar << t->ptr;
+ ar << *t;
+}
+
+template<class Archive, class P, class D>
+inline void load_construct_data(
+ Archive & ar,
+ boost::detail::sp_counted_base_impl<P, D> * t,
+ const unsigned int file_version
+){
+ P ptr_;
+ ar >> ptr_;
+ // placement new
+ ::new(t)boost::detail::sp_counted_base_impl<P, D>(ptr_, D());
+ ar >>; *t;
+}
+</code></pre>
+The statement <code style="white-space: normal">ar >> ptr_</code> is key. This deserializes
+the same pointer deserialzed above. Default object tracking will ensure
+that no more than one instance of the object is created and that the
+pointer returned by multiple deserializations are all the same. Hence,
+regardless of how many instances of <code style="white-space: normal">shared_ptr/shared_count</code>
+corresponding to a particular object are created, the will all point
+to the same object.
+<p>
+Since <code style="white-space: normal">sp_counted_base_impl<P, D></code> is derived from
+<code style="white-space: normal">sp_counted_base</code>, the following is needed:
+
+<pre><code>
+template<class Archive, class P, class D>
+inline void serialize(
+ Archive & ar,
+ boost::detail::sp_counted_base_impl<P, D> & t,
+ const unsigned int file_version,
+ int
+){
+ ar & boost::serialization::base_object<
+ boost::detail::sp_counted_base
+ >(*this);
+}
+</code></pre>
+which will in turn require serialization of its base class:
+<pre><code>
+inline void serialize(
+ Archive & ar,
+ boost::detail::sp_counted & t,
+ const unsigned int file_version,
+ int
+){
+}
+</code></pre>
+It would seem we're done, running the test program,
+<a href="../example/demo_shared_ptr.cpp" target="demo_shared_ptr_cpp">
+demo_shared_ptr.cpp
+</a>,
+with this code produces the following output.
+<pre><code>
+a = 0x003017A0 use count = 2
+a1 = 0x003017A0 use count = 2
+unique element count = 1
+a = 0x00000000 use count = 0
+a1 = 0x00000000 use count = 0
+unique element count = 0
+a = 0x00303060 use count = 1
+a1 = 0x00303060 use count = 1
+unique element count = 1
+</code></pre>
+This indicates that we're not quite done. Due to default object
+tracking, <code style="white-space: normal">sp_counted_base_impl<P, D></code> is only
+created once regardless of how many shared pointers point to the
+same object. Of course, it has to be this way. The reference
+count starts at 1 and is never incrememented. Code must be added
+to the serialization functions to maintain the proper reference
+count.
+<p>
+The process of serialization of an empty base class -
+<code style="white-space: normal">sp_counted_base</code> - seems like additional overhead.
+Examination of code in
+<a href="../../../boost/serialization/base_object.hpp" target="base_object_hpp">
+base_object.hpp
+</a>
+reveals that <code style="white-space: normal">base_object.hpp</code> provides two functions:
+<ul>
+ <li>invokes serialization of the base class data
+ <li>as a side effect, "registers" the fact base/derived relationship
+so that conversions of pointers between base and derived classes can be
+made at runtime.
+</ul>
+In this case we need only the latter function so we can replace the
+base object serialization with:
+<pre><code>
+// register the relationship between each derived class
+// its polymorphic base
+void_cast_register<
+ boost::detail::sp_counted_base_impl<P, D>
+ boost::detail::sp_counted_base,
+>();
+</code></pre>
+and we don't have to include a trival serializer for <code style="white-space: normal">sp_counted_base</code>
+<p>
+Finally we need to specify name-value pair wrappers if we want to be able
+to use this serialization with XML archives.
+<p>
+Actually, even this is really just a start. Among the issues not addressed in
+this implementation are:
+<ul>
+ <li><code style="white-space: normal">weak_ptr</code> is not addressed. I haven't even looked into this.
+ <li>Other smart pointers that might interact with <code style="white-space: normal">shared_ptr</code>
+ haven't been addressed at all. To be confident that the implementation is
+ complete and correct, all these should be addressed as well.
+ <li>Exception handling hasn't been exhaustively considered.
+ <li>Other issues yet to be discovered.
+</ul>
+One thing that has been considered is export of shared_ptr. The header which
+declares shared pointer serialization includes some special macros for exporting
+shared pointers:
+<code><pre>
+BOOST_SHARED_POINTER_EXPORT(T)
+BOOST_SHARED_POINTER_EXPORT_GUID(T, K)
+</pre></code>
+These are specialize versions of the macros used for exporting classes serialized through raw pointers.
+<p>
+Clearly, complete, correct and exception safe serialization of smart pointers is going to
+be a challenge. I hope that this implementation provides a useful
+starting point for such an effort.
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Template serialization - shared_ptr</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center"><code style="white-space: normal">shared_ptr<class T></code> Revisited</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+The previously described serialization of <code style="white-space: normal">shared_ptr</code>
+illustrates the straightforward way of serializing a moderately complicated class structure.
+Unfortunately, this way of doing it suffered from some undesirable features
+<ul>
+ <li>It was dependent on the Boost implementation of <code style="white-space: normal">shared_ptr</code>.
+ The <code style="white-space: normal">shared_ptr</code> interface has been included
+ in <code style="white-space: normal">std::tr1</code> and may someday be included in the standard
+ C++ library. An implementation which depends only on the public interface can be guaranteed to
+ function with any other future implementation of <code style="white-space: normal">shared_ptr</code>.
+ <li>It required extra macros for export.
+</ul>
+
+<pre><code>
+template<class Archive, class T>
+inline void save(
+ Archive & ar,
+ const boost::shared_ptr<T> &t,
+ const unsigned int /* file_version */
+){
+ const T * t_ptr = t.get();
+ // just serialize the underlying raw pointer
+ ar <<: boost::serialization::make_nvp("px", t_ptr);
+}
+
+template<class Archive, class T>
+inline void load(
+ Archive & ar,
+ boost::shared_ptr<T> &t,
+ const unsigned int file_version
+){
+ T* r;
+ // recover the underlying raw pointer
+ ar >> boost::serialization::make_nvp("px", r);
+
+ // To Do - match up with other shared pointers which
+ // use this same raw pointer.
+ ...
+}
+</code></pre>
+
+In principle, this is very much simpler than the original implementation. Completion of
+this code requires:
+
+<ol>
+ <li>Filling in the "To Do". This required making an extra map for
+ <code style="white-space: normal">shared_ptr</code> instances.
+ <li>A method for identifying pointers to the same objects from pointers to their base classes.
+ <li>Backward compatibility with pointers serialized by the previous method. This exploits
+ the serialization class versioning.
+ <li>Proper handling of <code style="white-space: normal">weak_ptr</code>.
+</ol>
+
+The result of this effort can be found in
+<a target = serialization_shared_ptr href="../../../boost/serialization/shared_ptr.hpp">
+<code style="white-space: normal">boost::serialization::shared_ptr.hpp</code>
+</a>
+<p>
+Note that if your code needs to read archives created under boost version 1.32, you will
+have to include the following
+
+<pre><code>
+#include <boost/serialization/shared_ptr_132.hpp>
+#include <boost/serialization/shared_ptr.hpp>
+</code></pre>
+rather than just
+<pre><code>
+#include <boost/serialization/shared_ptr.hpp>
+</code></pre>
+
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-10 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Derivation from an Existing Archive</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">A Simple Logging Archive Class</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+The purpose of this example help clarify the usage of the
+<a href="archives.html"><strong>Archive Concept</strong></a>
+so that one can implement his own archive classes.
+<a href="../example/simple_log_archive.hpp" target="simple_archive_hpp">
+<code>simple_log_archive.hpp</code></a> implements a simple but useful
+archive class. This class can be used to send any serializable types
+on an output text stream in a readable format. Usage of this facility
+is trivially easy:
+
+<pre><code>
+#include "simple_log_archive.hpp"
+...
+// display the complete schedule
+simple_log_archive log(std::cout);
+log << schedule;
+</code></pre>
+
+and it produces the following output
+
+<pre><code>
+schedule
+ count 6
+ item
+ first
+ driver bob
+ hour 6
+ minute 24
+ second ->
+ stops
+ count 3
+ item ->
+ latitude
+ degrees 34
+ minutes 135
+ seconds 52.56
+ longitude
+ degrees 134
+ minutes 22
+ seconds 78.3
+...
+</code></pre>
+
+The complete example is <a href="../example/demo_simple_log.cpp" target="demo_simple_log_cpp">
+<code>demo_simple_log.cpp</code></a>. Look at
+<a href="archive_reference.html#trivial">Trivial Archive</a> to get a
+better understanding of how this works.
+
+Also, note the following:
+<ul>
+ <li>Only 160 lines of code.
+ <li>Header only - linking with the serialization library not required.
+ <li>Displays ALL <a href="serialization.html"><strong>Serializable</strong></a> types.
+ <li>Lacks some features.
+ <ul>
+ <li>it will not display the data from the derived type given the pointer to a
+ polymorphic base class. That is, only displays the information of the base class.
+ To add that see the next example.
+ <li>doesn't display information serialized as binary data
+ </ul>
+</ul>
+
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2010.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - singleton</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center"><code style="white-space: normal">singleton</code></h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<dl class="page-index">
+ <dt><a href="#motivation">Motivation</a>
+ <dt><a href="#features">Features</a>
+ <dt><a href="#classinterface">Class Interface</a>
+ <dt><a href="#requirements">Requirements</a>
+ <dt><a href="#example">Examples</a>
+ <dt><a href="#multithreading">Multi-Threading</a>
+</dl>
+
+<h3><a name="motivation">Motivation</a></h3>
+The serialization library relies on the existence of a number
+of static variables and tables to store information related
+to runtime types. Examples are tables which relate exported
+names to types and tables which relate base classes to derived
+classes. Construction, destruction and usage of these variables
+requires consideration of the following issues:
+<ul>
+ <li>Some static data variables and constants entries refer to others.
+ The sequence of initialization cannot be arbitrary but must be in proper
+ sequence.</li>
+ <li>A number of static variables aren't referred explicitly and, without
+ special precautions, will be stripped by most code optimizers</li>
+ <li>Many of these variables are created by templates and special care must
+ be taken to be sure that they are instantiated</li>
+ <li>In a multi-threading system, its possible that these static variables
+ will be accessed concurrently by separate threads. This would create a
+ race condition with unpredictabe behavior</li>
+</ul>
+This singleton class addresses all of the above issues.
+
+<h3><a name="features">Features</a></h3>
+This singleton implementation has the following features:
+<ul>
+ <li>
+ Any instance will be constructed before any attempt is made to access it.</li>
+ <li>
+ Any instance created with a template is guarenteed to be instantiated.
+ <li>
+ Regardless of whether or not an instance has been explicitly
+ referred to, it will not be stripped by the optimizer when the
+ executable is built in release mode.
+ <li>
+ All instances are constructed before
+ <code style="white-space: normal">main</code> is called
+ regardless of where they might be referenced within the program.
+ In a multi-tasking system, this guarentees that there will be no
+ race conditions during the construction of any instance. No
+ thread locking is required to guarentee this.
+ <li>
+ The above implies that any <code style="white-space: normal">const</code>
+ instances are thread-safe during the whole program. Again, no
+ thread locking is required.
+ <li>
+ If a mutable instance is created, and such an instance is modified
+ after main is called in a mult-threading system, there exists
+ the possibility that a race condition will occur. The serialization
+ library takes care that in the few places where a mutable
+ singleton is required, it is not altered after
+ <code style="white-space: normal">main</code> is called.
+ For a more general purpose usage, thread locking on this
+ singleton could easily be implemented. But as the serialization
+ library didn't require it, it wasn't implemented.
+</ul>
+
+<h3><a name="classinterface">Class Interface</a></h3>
+<pre><code>
+namespace boost {
+namespace serialization {
+
+template <class T>
+class singleton : public boost::noncopyable
+{
+public:
+ static const T & get_const_instance();
+ static T & get_mutable_instance();
+ static bool is_destroyed();
+};
+
+} // namespace serialization
+} // namespace boost
+</code></pre>
+
+<dl>
+
+<dt><h4><pre><code>
+static const T & get_const_instance();
+</code></pre></h4></dt>
+<dd>
+Retrieve a constant reference to the singleton for this type.
+</dd>
+
+<dt><h4><pre><code>
+static T & get_mutable_instance();
+</code></pre></h4></dt>
+<dd>
+Retrieve a mutable reference to the singleton for this type.
+</dd>
+
+<dt><h4><pre><code>
+static bool is_destroyed();
+</code></pre></h4></dt>
+<dd>
+Return <code>true</code> if the destructor on this singleton has been
+called. Otherwise, return <code>false</code>.
+</dd>
+
+</dl>
+
+<h3><a name="requirements">Requirements</a></h3>
+In order to be used as
+<a target="singleton.hpp" href = "../../../boost/serialization/singleton.hpp">
+<code style="white-space: normal">
+singleton<T>
+</code>
+</a>
+, the type T must be default constructable.
+It doesn't require static variables - though it may have them.
+Since the library guarentees that only one instance of
+<a target="singleton.hpp" href = "../../../boost/serialization/singleton.hpp">
+<code style="white-space: normal">
+singleton<T>
+</code>
+</a>
+and all accesss is through the above static interface
+functions, common member functions of T become
+the functional equivalent of
+<code style="white-space: normal">static</code> functions.
+
+<h3><a name="example">Examples</a></h3>
+There are at least two different ways to use this class template.
+Both are used in the serialization library.
+<p>
+The first way is illustrated by and excerpt from the file
+<code style="white-space: normal"><a target="extended_type_info" href="../src/extended_type_info.cpp">extended_type_info.cpp</a></code>.
+which contains the following code:
+
+<pre><code>
+typedef std::set<const extended_type_info *, key_compare> ktmap;
+...
+void
+extended_type_info::key_register(const char *key) {
+ ...
+ result = singleton<ktmap>::get_mutable_instance().insert(this);
+ ...
+}
+</code></pre>
+Just by referring to the singleton instance anywhere in the program
+will guarentee that one and only one instance for the specified
+type (<code style="white-space: normal">ktmap</code> in this example)
+will exist throughout the program. There is no need for anyother
+declaration or definition.
+<p>
+A second way is to use
+<a target="singleton.hpp" href = "../../../boost/serialization/singleton.hpp">
+<code style="white-space: normal">
+singleton<T>
+</code>
+</a>
+as one of the base classes of the type. This is illustrated by a simplified
+excerpt from
+<a target="extended_type_info_typeid.hpp" href = "../../../boost/serialization/extended_type_info_typeid.hpp">
+<code style="white-space: normal">
+extended_type_info_typeid.hpp
+</code>
+</a>
+
+<pre><code>
+template<class T>
+class extended_type_info_typeid :
+ public detail::extended_type_info_typeid_0,
+ public singleton<extended_type_info_typeid<const T> >
+{
+ friend class singleton<extended_type_info_typeid<const T> >;
+private:
+ // private constructor to inhibit any existence other than the
+ // static one. Note: not all compilers support this !!!
+ extended_type_info_typeid() :
+ detail::extended_type_info_typeid_0()
+ {
+ type_register(typeid(T));
+ }
+ ~extended_type_info_typeid(){}
+ ...
+};
+</code></pre>
+
+This usage will permit a more natural syntax to be used:
+<pre><code>
+extended_type_info_typeid<T>::get_const_instance()
+</code></pre>
+
+Again, including one or more of the above statements anywhere
+in the program will guarentee that one and only one instance
+is created and referred to.
+
+<h3><a name="multithreading">Multi-Threading</a></h3>
+This singleton CAN be safely used in multi-threading applications if one
+is careful follow a simple rule:
+<p>
+<b>Do not call get_mutable_instance when more than one thread is running!</b>
+<'>
+All singletons used in the serialization library follow this rule.
+In order to help detect accidental violations of this rule there
+exists an singleton lock/unlock functions.
+<pre><code>
+void boost::serialization::singleton_module::lock();
+void boost::serialization::singleton_module::unlock();
+bool boost::serialization::singleton_module::is_locked();
+</code></pre>
+In a program compiled for debug, any invocation of
+<code style="white-space: normal">get_mutable_instance()</code>
+while the library is in a "locked" state will trap in an assertion.
+The singleton module lock state is initialized as "unlocked" to permit
+alteration of static variables before
+<code style="white-space: normal">main</code> is called.
+The <code style="white-space: normal">lock()</code> and
+<code style="white-space: normal">unlock()</code> are "global"
+in they affect ALL the singletons defined by this template.
+All serialization tests invoke <code style="white-space: normal">lock()</code>
+at the start of the progam. For programs compiled in release
+mode these functions have no effect.
+
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2007.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - BOOST_STATIC_WARNING</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center"><code>smart_cast</code></h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<h3>Motivation</h3>
+To cast from one type to another related type, C++ provides the following
+operators:
+
+<dl>
+ <dt><code>static_cast<T *<>(U *)<br>static_cast<T &<>(U &)</code></dt>
+ <dd>
+ <ul>
+ <li>required if neither T nor U are not polymorphic
+ <li>permitted in other cases.
+ <li>fails to detect erroneas casts of polymophic pointers/references at runtime.
+ <li>does not permit "cross casting"
+ <li>inline function calls can be optimized away during compile time.
+ </ul>
+ </dd>
+ <p>
+ <dt><code>dynamic_cast<T *<>(U *)<br>dynamic_cast<T &<>(U &)</code></dt>
+ <dd>
+ <ul>
+ <li>permitted if either T or U are polymorphic
+ <li>prohibited in other cases.
+ <li>throws exception on detecting erroneas casts of polymorphic pointers/references
+ at runtime.
+ <li>permits "cross casting"
+ <li>cannot optimise inline virtual functions at compile time.
+ </ul>
+ </dd>
+</dl>
+
+These rules can make it difficult to use casting with a function template argument.
+Consider the following example:
+
+<pre><code>
+#include <boost/serialization/smart_cast.hpp>
+
+struct top {
+};
+
+struct base1 : public top {
+ bool is_storable() const {
+ return true;
+ }
+ virtual ~base1();
+};
+
+struct base2 {
+ virtual ~base2();
+};
+
+struct derived1 :
+ public base1
+{
+ derived1();
+};
+
+struct derived2 :
+ public base1,
+ public base2
+{
+ derived2();
+};
+
+template<class T>
+bool is_storable(T &t){
+ // what type of cast to use here?
+
+ // this fails at compiler time when T == base2
+ // return static_cast<base1 &>(t).is_storable();
+
+ // this fails at compiler time when T == top
+ // otherwise it works but cannot optimize inline function call
+ // return dynamic_cast<base1 &>(t).is_storable();
+
+ // this always works - and is guarenteed to generate the fastest code !
+ return (boost::smart_cast_reference<base1 &>(t)).is_storable();
+}
+
+int main(){
+ derived1 d1;
+ top & t1 = d1;
+ derived2 d2;
+ base2 & b2 = d2;
+
+ bool result;
+ result = is_storable(d1);
+ result = is_storable(d2);
+ result = is_storable(b2);
+ result = is_storable(b2);
+ result = is_storable(t1);
+ return 0;
+}
+</code></pre>
+The serialization library includes a mix of classes which use
+both static polymorphism (<strong>CRTP</strong>) and dynamic
+polymorphism via virtual functions. <code style="white-space: normal">smart_cast</code>
+was written to address the more problematic manifestations of the
+situation exmplified above.
+
+<h3>Usage</h3>
+The following syntax is supported:
+<pre><code>
+smart_cast<Target *, Source *>(Source * s);
+smart_cast<Target *>(Source * s);
+smart_cast<Target &, Source &>(Source & s);
+</code></pre>
+Note that the above syntax doesn't include
+<pre><code>
+smart_cast<Target & >(Source & s)
+</code></pre>
+but the same functionality is supported the the following special syntax
+<pre><code>
+smart_cast_reference<Target &>(Source & s)
+</code></pre>
+
+<h3>Requirements</h3>
+<code style="white-space: normal">smart_cast</code> can be used only on compilers that support partial
+template specialization or on types for which have be specified with the
+macro <code style="white-space: normal">
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(<type>)</code>
+has been applied.
+
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Special Considerations</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Special Considerations</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<dl class="page-index">
+ <dt><a href="#objecttracking">Object Tracking</a>
+ <dt><a href="#classinfo">Class Information</a>
+ <dt><a href="#portability">Archive Portability</a>
+ <dl class="page-index">
+ <dt><a href="#numerics">Numerics</a>
+ <dt><a href="#traits">Traits</a>
+ </dl>
+ <dt><a href="#binary_archives">Binary Archives</a>
+ <dt><a href="#xml_archives">XML Archives</a>
+ <dt><a href="#export">Exporting Class Serialization</a>
+ <dt><a href="#static_libraries">Static Libraries and Serialization</a>
+ <dt><a href="#dlls">DLLS - Serialization and Runtime Linking</a>
+ <dt><a href="#plugins">Plugins</a>
+ <dt><a href="#multi_threading">Multi-Threading</a>
+ <dt><a href="#optimizations">Optimizations</a>
+ <dt><a href="exceptions.html">Archive Exceptions</a>
+ <dt><a href="exception_safety.html">Exception Safety</a>
+</dl>
+
+<h3><a name="objecttracking">Object Tracking</a></h3>
+Depending on how the class is used and other factors, serialized objects
+may be tracked by memory address. This prevents the same object from being
+written to or read from an archive multiple times. These stored addresses
+can also be used to delete objects created during a loading process
+that has been interrupted by throwing of an exception.
+<p>
+This could cause problems in
+progams where the copies of different objects are saved from the same address.
+<pre><code>
+template<class Archive>
+void save(boost::basic_oarchive & ar, const unsigned int version) const
+{
+ for(int i = 0; i < 10; ++i){
+ A x = a[i];
+ ar << x;
+ }
+}
+</code></pre>
+In this case, the data to be saved exists on the stack. Each iteration
+of the loop updates the value on the stack. So although the data changes
+each iteration, the address of the data doesn't. If a[i] is an array of
+objects being tracked by memory address, the library will skip storing
+objects after the first as it will be assumed that objects at the same address
+are really the same object.
+<p>
+To help detect such cases, output archive operators expect to be passed
+<code style="white-space: normal">const</code> reference arguments.
+<p>
+Given this, the above code will invoke a compile time assertion.
+The obvious fix in this example is to use
+<pre><code>
+template<class Archive>
+void save(boost::basic_oarchive & ar, const unsigned int version) const
+{
+ for(int i = 0; i < 10; ++i){
+ ar << a[i];
+ }
+}
+</code></pre>
+which will compile and run without problem.
+The usage of <code style="white-space: normal">const</code> by the output archive operators
+will ensure that the process of serialization doesn't
+change the state of the objects being serialized. An attempt to do this
+would constitute augmentation of the concept of saving of state with
+some sort of non-obvious side effect. This would almost surely be a mistake
+and a likely source of very subtle bugs.
+<p>
+Unfortunately, implementation issues currently prevent the detection of this kind of
+error when the data item is wrapped as a name-value pair.
+<p>
+A similar problem can occur when different objects are loaded to and address
+which is different from the final location:
+<pre><code>
+template<class Archive>
+void load(boost::basic_oarchive & ar, const unsigned int version) const
+{
+ for(int i = 0; i < 10; ++i){
+ A x;
+ ar >> x;
+ std::m_set.insert(x);
+ }
+}
+</code></pre>
+In this case, the address of <code>x</code> is the one that is tracked rather than
+the address of the new item added to the set. Left unaddressed
+this will break the features that depend on tracking such as loading object through a pointer.
+Subtle bugs will be introduced into the program. This can be
+addressed by altering the above code thusly:
+
+<pre><code>
+template<class Archive>
+void load(boost::basic_iarchive & ar, const unsigned int version) const
+{
+ for(int i = 0; i < 10; ++i){
+ A x;
+ ar >> x;
+ std::pair<std::set::const_iterator, bool> result;
+ result = std::m_set.insert(x);
+ ar.reset_object_address(& (*result.first), &x);
+ }
+}
+</code></pre>
+This will adjust the tracking information to reflect the final resting place of
+the moved variable and thereby rectify the above problem.
+<p>
+If it is known a priori that no pointer
+values are duplicated, overhead associated with object tracking can
+be eliminated by setting the object tracking class serialization trait
+appropriately.
+<p>
+By default, data types designated primitive by
+<a target="detail" href="traits.html#level">Implementation Level</a>
+class serialization trait are never tracked. If it is desired to
+track a shared primitive object through a pointer (e.g. a
+<code style="white-space: normal">long</code> used as a reference count), It should be wrapped
+in a class/struct so that it is an identifiable type.
+The alternative of changing the implementation level of a <code style="white-space: normal">long</code>
+would affect all <code style="white-space: normal">long</code>s serialized in the whole
+program - probably not what one would intend.
+<p>
+It is possible that we may want to track addresses even though
+the object is never serialized through a pointer. For example,
+a virtual base class need be saved/loaded only once. By setting
+this serialization trait to <code style="white-space: normal">track_always</code>, we can suppress
+redundant save/load operations.
+<pre><code>
+BOOST_CLASS_TRACKING(my_virtual_base_class, boost::serialization::track_always)
+</code></pre>
+
+<h3><a name="classinfo">Class Information</a></h3>
+By default, for each class serialized, class information is written to the archive.
+This information includes version number, implementation level and tracking
+behavior. This is necessary so that the archive can be correctly
+deserialized even if a subsequent version of the program changes
+some of the current trait values for a class. The space overhead for
+this data is minimal. There is a little bit of runtime overhead
+since each class has to be checked to see if it has already had its
+class information included in the archive. In some cases, even this
+might be considered too much. This extra overhead can be eliminated
+by setting the
+<a target="detail" href="traits.html#level">implementation level</a>
+class trait to: <code style="white-space: normal">boost::serialization::object_serializable</code>.
+<p>
+<i>Turning off tracking and class information serialization will result
+in pure template inline code that in principle could be optimised down
+to a simple stream write/read.</i> Elimination of all serialization overhead
+in this manner comes at a cost. Once archives are released to users, the
+class serialization traits cannot be changed without invalidating the old
+archives. Including the class information in the archive assures us
+that they will be readable in the future even if the class definition
+is revised. A light weight structure such as display pixel might be
+declared in a header like this:
+
+<pre><code>
+#include <boost/serialization/serialization.hpp>
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/tracking.hpp>
+
+// a pixel is a light weight struct which is used in great numbers.
+struct pixel
+{
+ unsigned char red, green, blue;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* version */){
+ ar << red << green << blue;
+ }
+};
+
+// elminate serialization overhead at the cost of
+// never being able to increase the version.
+BOOST_CLASS_IMPLEMENTATION(pixel, boost::serialization::object_serializable);
+
+// eliminate object tracking (even if serialized through a pointer)
+// at the risk of a programming error creating duplicate objects.
+BOOST_CLASS_TRACKING(pixel, boost::serialization::track_never)
+</code></pre>
+
+<h3><a name="portability">Archive Portability</a></h3>
+Several archive classes create their data in the form of text or portable a binary format.
+It should be possible to save such an of such a class on one platform and load it on another.
+This is subject to a couple of conditions.
+<h4><a name="numerics">Numerics</a></h4>
+The architecture of the machine reading the archive must be able hold the data
+saved. For example, the gcc compiler reserves 4 bytes to store a variable of type
+<code style="white-space: normal">wchar_t</code> while other compilers reserve only 2 bytes.
+So its possible that a value could be written that couldn't be represented by the loading program. This is a
+fairly obvious situation and easily handled by using the numeric types in
+<a target="cstding" href="../../../boost/cstdint.hpp"><boost/cstdint.hpp></a>
+<P>
+A special integral type is <code>std::size_t</code> which is a typedef
+of an integral types guaranteed to be large enough
+to hold the size of any collection, but its actual size can differ depending
+on the platform. The
+<a href="wrappers.html#collection_size_type"><code>collection_size_type</code></a>
+wrapper exists to enable a portable serialization of collection sizes by an archive.
+Recommended choices for a portable serialization of collection sizes are to
+use either 64-bit or variable length integer representation.
+
+
+<h4><a name="traits">Traits</a></h4>
+Another potential problem is illustrated by the following example:
+<pre><code>
+template<class T>
+struct my_wrapper {
+ template<class Archive>
+ Archive & serialize ...
+};
+
+...
+
+class my_class {
+ wchar_t a;
+ short unsigned b;
+ template<class Archive>
+ Archive & serialize(Archive & ar, unsigned int version){
+ ar & my_wrapper(a);
+ ar & my_wrapper(b);
+ }
+};
+</code></pre>
+If <code style="white-space: normal">my_wrapper</code> uses default serialization
+traits there could be a problem. With the default traits, each time a new type is
+added to the archive, bookkeeping information is added. So in this example, the
+archive would include such bookkeeping information for
+<code style="white-space: normal">my_wrapper<wchar_t></code> and for
+<code style="white-space: normal">my_wrapper<short_unsigned></code>.
+Or would it? What about compilers that treat
+<code style="white-space: normal">wchar_t</code> as a
+synonym for <code style="white-space: normal">unsigned short</code>?
+In this case there is only one distinct type - not two. If archives are passed between
+programs with compilers that differ in their treatment
+of <code style="white-space: normal">wchar_t</code> the load operation will fail
+in a catastrophic way.
+<p>
+One remedy for this is to assign serialization traits to the template
+<code style="white-space: normal">my_template</code> such that class
+information for instantiations of this template is never serialized. This
+process is described <a target="detail" href="traits.html#templates">above</a> and
+has been used for <a target="detail" href="wrappers.html#nvp"><strong>Name-Value Pairs</strong></a>.
+Wrappers would typically be assigned such traits.
+<p>
+Another way to avoid this problem is to assign serialization traits
+to all specializations of the template <code style="white-space: normal">my_wrapper</code>
+for all primitive types so that class information is never saved. This is what has
+been done for our implementation of serializations for STL collections.
+
+<h3><a name="binary_archives">Binary Archives</a></h3>
+Standard stream i/o on some systems will expand linefeed characters to carriage-return/linefeed
+on output. This creates a problem for binary archives. The easiest way to handle this is to
+open streams for binary archives in "binary mode" by using the flag
+<code style="white-space: normal">ios::binary</code>. If this is not done, the archive generated
+will be unreadable.
+<p>
+Unfortunately, no way has been found to detect this error before loading the archive. Debug builds
+will assert when this is detected so that may be helpful in catching this error.
+
+<h3><a name="xml_archives">XML Archives</a></h3>
+XML archives present a somewhat special case.
+XML format has a nested structure that maps well to the "recursive class member visitor" pattern
+used by the serialization system. However, XML differs from other formats in that it
+requires a name for each data member. Our goal is to add this information to the
+class serialization specification while still permiting the the serialization code to be
+used with any archive. This is achived by requiring that all data serialized to an XML archive
+be serialized as a <a target="detail" href="wrappers.html#nvp">name-value pair</a>.
+The first member is the name to be used as the XML tag for the
+data item while the second is a reference to the data item itself. Any attempt to serialize data
+not wrapped in a in a <a target="detail" href="wrappers.html#nvp">name-value pair</a> will
+be trapped at compile time. The system is implemented in such a way that for other archive classes,
+just the value portion of the data is serialized. The name portion is discarded during compilation.
+So by always using <a target="detail" href="wrappers.html#nvp">name-value pairs</a>, it will
+be guarenteed that all data can be serialized to all archive classes with maximum efficiency.
+
+<h3><a name="export">Exporting Class Serialization</a></h3>
+<a target="detail" href="traits.html#export">Elsewhere</a> in this manual, we have described
+<code style="white-space: normal">BOOST_CLASS_EXPORT</code>.
+Export implies two things:
+<ul>
+<li>Instantiates code which is not otherwise referred to.
+<li>Associates an external identifier with the class to be serialized.
+The fact that the class isn't explicitly referred to implies this
+requirement.
+</ul>
+In C++, usage of code not explicitly referred to is implemented via
+virtual functions. Hence, the need for export is implied by the
+usage of a derived class that is manipulated via a pointer or
+reference to it's base class.
+
+<p>
+<code style="white-space: normal">BOOST_CLASS_EXPORT</code> in the same
+source module that includes any of the archive class headers will
+instantiate code required to serialize polymorphic pointers of
+the indicated type to the all those archive classes. If no
+archive class headers are included, then no code will be instantiated.
+
+<p>
+Note that the implemenation of this functionality requires
+that the <code style="white-space: normal">BOOST_CLASS_EXPORT</code>
+macro appear <b>after</b> and the inclusion of any archive
+class headers for which code is to be instantiated.
+So, code that uses <code style="white-space: normal">BOOST_CLASS_EXPORT</code>
+will look like the following:
+<pre><code>
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_oarchive.hpp>
+... // other archives
+
+#include "a.hpp" // header declaration for class a
+BOOST_CLASS_EXPORT(a)
+... // other class headers and exports
+</code></pre>
+This will be true regardless of whether the is part
+of a stand alone executable, a static library or
+a dyanmic or shared library.
+<p>
+Including
+<code style="white-space: normal">BOOST_CLASS_EXPORT</code>
+in the "a.hpp" header itself as one would do with
+other serialization traits will make it difficult
+or impossible to follow the rule above regarding
+inclusion of archive headers before
+<code style="white-space: normal">BOOST_CLASS_EXPORT</code>
+is invoked. This can best be addressed by using
+<code style="white-space: normal">BOOST_CLASS_EXPORT_KEY</code>
+in the header declarations and
+<code style="white-space: normal">BOOST_CLASS_EXPORT_IMPLEMENT</code>
+in the class definition file.
+
+<p>
+This system has certain implications for placing code in static or shared
+libraries. Placing <code style="white-space: normal">BOOST_CLASS_EXPORT</code>
+in library code will have no effect unless archive class headers are
+also included. So when building a library, one should include all headers
+for all the archive classes which he anticipates using. Alternatively,
+one can include headers for just the
+<a href="archive_reference.html#polymorphic">Polymoprhic Archives</a>.
+
+<p>
+Strictly speaking, export should not be necessary if all pointer serialization
+occurs through the most derived class. However, in order to detect
+what would be catastophic error, the library traps ALL serializations through
+a pointer to a polymorphic which are not exported or otherwise registered.
+So, in practice, be prepared to register or export all classes with one
+or more virtual functions which are serialized through a pointer.
+
+<p>
+Note that the implementation of this functionality depends upon vendor
+specific extensions to the C++ language. So, there is no guarenteed portability
+of programs which use this facility. However, all C++ compilers which
+are tested with boost provide the required extensions. The library
+includes the extra declarations required by each of these compilers.
+It's reasonable to expect that future C++ compilers will support
+these extensions or something equivalent.
+
+<h3><a name="static_libraries">Static Libraries and Serialization</a></h3>
+Code for serialization of data types can be saved in libraries
+just as it can for the rest of the type implementation.
+This works well, and can save huge amount of compilation time.
+<ul>
+<li>Only compile serialization definitions in the library.
+<li>Explicitly instantiate serialization code for ALL
+archive classes you intend to use in the library.
+<li>For exported types, only use <code style="white-space: normal">BOOST_CLASS_EXPORT_KEY</code>
+in headers.
+<li>For exported types, only use <code style="white-space: normal">BOOST_CLASS_EXPORT_IMPLEMENT</code>
+in definitions compiled in the library. For any particular type,
+there should be only one file which contains
+<code style="white-space: normal">BOOST_CLASS_EXPORT_IMPLEMENT</code>
+for that type. This ensures that only one copy
+of serialization code will exist within the program. It avoids
+wasted space and the possibility of having different
+versions of the serialization code in the same program.
+Including
+<code style="white-space: normal">BOOST_CLASS_EXPORT_IMPLEMENT</code>
+in multiple files could result in a failure
+to link due to duplicated symbols or the throwing
+of a runtime exception.
+<li> Code for serialization should be only in the library,
+<li>Familiarize yourself with the <b>PIMPL</b> idiom.
+</ul>
+This is illustrated by
+<a href = "../example/demo_pimpl.cpp" target="demo_pimpl">
+<code style="white-space: normal">demo_pimpl.cpp</code>
+</a>,
+<a href = "../example/demo_pimpl_A.cpp" target="demo_pimpl">
+<code style="white-space: normal">demo_pimpl_A.cpp</code>
+</a>
+and
+<a href = "../example/demo_pimpl_A.hpp" target="demo_pimpl">
+<code style="white-space: normal">demo_pimpl_A.hpp</code>
+</a>
+where implementation of serializaton is in a static library
+completely separate from the main program.
+
+<h3><a name="dlls">DLLS - Serialization and Runtime Linking</a></h3>
+Serialization code can be placed in libraries to be linked at runtime. That is,
+code can be placed in DLLS(Windows) Shared Libraries(*nix), or static libraries
+as well as the main executable. The best technique is the
+same as that described above for libraries. The serialization
+library test suite includes the following programs
+to illustrate how this works:
+<p>
+
+<a href = "../test/test_dll_simple.cpp" target="test_dll_simple">
+<code style="white-space: normal">test_dll_simple</code>
+</a>,
+and
+<a href = "../test/dll_a.cpp" target="dll_a">
+<code style="white-space: normal">dll_a.cpp</code>
+</a>
+where implementation of serializaton is also completely separate
+from the main program but the code is loaded at runtime. In this
+example, this code is loaded automatically when the program which
+uses it starts up, but it could just as well be loaded and unloaded
+with an OS dependent API call.
+<p>
+Also included are
+<a href = "../test/test_dll_exported.cpp" target="test_dll_exported">
+<code style="white-space: normal">test_dll_exported.cpp</code>
+</a>,
+and
+<a href = "../test/polymorphic_derived2.cpp" target="polymorphic_derived2">
+<code style="white-space: normal">polymorphic_derived2.cpp</code>
+</a>
+which are similar to the above but include tests of the export
+and no_rtti facilities in the context of DLLS.
+<p>
+For best results, write your code to conform to the following
+guidelines:
+<ul>
+ <li>Don't include <code>inline</code> code in classes used in DLLS.
+This will generate duplicate code in the DLLS and mainline. This
+needlessly duplicates code. Worse, it makes is possible for
+different versions of the same code exist simultaneously. This
+type of error turns out to be excruciatingly difficult to debug.
+Finally, it opens the possibility that module being referred to
+might be explictly unloaded which would (hopefully) result in
+a runtime error. This is another bug that is not always
+reproducible or easy to find. For class member templates use something like
+
+<pre><code>
+template<class Archive>
+void serialize(Archive & ar, const unsigned int version);
+</code></pre>
+in the header, and
+
+<pre><code>
+template<class Archive>
+void myclass::serialize(Archive & ar, const unsigned int version){
+ ...
+}
+
+BOOST_EXPORT_CLASS_IMPLEMENT(my_class)
+
+#include <boost/archive/text_oarchive>
+#include <boost/archive/text_iarchive<
+template myclass::serialize(boost::archive::text_oarchive & ar, const unsigned int version);
+template myclass::serialize(boost::archive::text_iarchive & ar, const unsigned int version);
+... // repeat for each archive class to be used.
+</code></pre>
+in the implementation file. This will result in generation of all code
+required in only one place. The library does not detect this type of error for you.
+ <li>If DLLS are to be loaded an unloaded explicitly (e.g. using <code>dlopen</code> in *nix or
+<code>LoadLibrary</code> in Windows). Try to arrange that they are unloaded in the reverse
+sequence. This should guarentee that problems are avoided even if the
+above guidline hasn't been followed.
+
+</ul>
+
+<h3><a name="plugins">Plugins</a></h3>
+In order to implement the library, various facilities for runtime
+manipulation of types are runtime were required. These
+are <a target="detail" href="extended_type_info.html"><code>extended_type_info</code></a>
+for associating classes with external identifying strings (<b>GUID</b>)
+and <a target="detail" href="void_cast.html"><code>void_cast</code></a>
+for casting between pointers of related types.
+
+To complete the functionality of
+<a target="detail" href="extended_type_info.html"><code>extended_type_info</code></a>
+the ability to construct and destroy corresponding types has been
+added. In order to use this functionality, one must specify
+how each type is created. This should be done at the time
+a class is exported. So, a more complete example of the code above would be:
+
+<pre><code>
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_oarchive.hpp>
+... // other archives
+
+#include "a.hpp" // header declaration for class a
+
+// this class has a default constructor
+BOOST_SERIALIZATION_FACTORY_0(a)
+// as well as one that takes one integer argument
+BOOST_SERIALIZATION_FACTORY_1(a, int)
+
+// specify the GUID for this class
+BOOST_CLASS_EXPORT(a)
+... // other class headers and exports
+</code></pre>
+
+With this in place, one can construct, serialize and destroy
+about which only is know the <b>GUID</b> and a base class.
+
+
+<h3><a name="multi_threading">Multi-Threading</a></h3>
+The fundamental purpose of serialization would conflict with multiple
+thread concurrently writing/reading from/to a single open archive instance.
+The library implementation presumes that the application avoids such an situtation.
+<p>
+However, Writing/Reading different archives simultaneously
+in different tasks is permitted as each archive instance is (almost)
+completely independent from any other archive instance. The only shared
+information are some type tables which have been implemented using a
+lock-free thread-safe
+<a target="detail" href="singleton.html">
+<code style="white-space: normal">singleton</code>
+</a>
+described elsewhere in this documentation.
+<p>
+This singleton implementation guarentees that all of this shared
+information is initialized when the code module which contains
+them is loaded. The serialization library takes care to
+ensure that these data structures are not subsequently
+modified. The only time there could be a problem would
+be if code is loaded/unloaded while another task is
+serializing data. This could only occur for types whose
+serialization is implemented in a dynamically loaded/unload DLL
+or shared library. So if the following is avoided:
+<ul>
+ <li>Accessing the same archive instance from different tasks.
+ <li>Loading/Unloading DLLS or shared libraries while any archive
+ instances are open.
+</ul>
+The library should be thread safe.
+
+<h3><a name="optimizations">Optimizations</a></h3>
+In performance critical applications that serialize large sets of contiguous data of homogeneous
+types one wants to avoid the overhead of serializing each element individually, which is
+the motivation for the <a href="wrappers.html#arrays"><code>array</code></a>
+wrapper.
+
+Serialization functions for data types containing contiguous arrays of homogeneous
+types, such as for <code>std::vector</code>, <code>std::valarray</code> or
+<code>boost::multiarray</code> should serialize them using an
+<a href="wrappers.html#arrays"><code>array</code></a> wrapper to make use of
+these optimizations.
+
+Archive types that can provide optimized serialization for contiguous arrays of
+homogeneous types should implement these by overloading the serialization of
+the <a href="wrappers.html#arrays"><code>array</code></a> wrapper, as is done
+for the binary archives.
+
+
+<h3><a href="exceptions.html">Archive Exceptions</a></h3>
+<h3><a href="exception_safety.html">Exception Safety</a></h3>
+
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - <code style="white-space: normal">state_saver</code></title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center"><code style="white-space: normal">state_saver</code</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<p>
+Sometimes a certain value has to change only for a limited scope.
+This class wrapper saves a copy of the current state of some object,
+and resets the object's state at destruction time, undoing any change the object
+may have gone through. Here is the interface:
+
+<pre><code>
+template<class T>
+// T requirements:
+// - POD or object semantic (cannot be reference, function, ...)
+// - copy constructor
+// - operator = (no-throw one preferred)
+class state_saver : private boost::noncopyable
+{
+private:
+ ... // implementation
+
+public:
+ state_saver(T & object);
+ ~state_saver();
+};
+</code></pre>
+
+The complete implementation can be found
+<a target="state_saver" href="../../../boost/serialization/state_saver.hpp">here</a>
+
+The following illustrates how this is expected to be used.
+
+<pre><code>
+#include <boost/state_saver.hpp>
+
+void func(A & a)
+ boost::state_saver<A> s(a);
+ ... // alter state of a by calling non-const functions
+ ... // call other functions
+ // original state of a automatically restored on exit
+}
+</pre></code>
+
+<h3>History</h3>
+This is a generalization of Daryle Walker's
+<a href="../../../libs/io/doc/ios_state.html">io_state_saver</a> library.
+<p>
+Robert Ramey made an initial version for the serialization library.
+<p>
+Pavel Vozenilek made several non-obvious refinements to make it more
+secure and boost friendly
+
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - BOOST_STATIC_WARNING</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center"><code>BOOST_STATIC_WARNING</code></h2>
+ </td>
+ </tr>
+</table>
+<hr>
+
+The header <code><boost/serialization/static_warning.hpp></code> supplies a single macro
+<code style="white-space: normal">BOOST_STATIC_WARNING(x)</code>, which generates a compile time warning message if
+the integral-constant-expression x is not true.
+<p>
+Note that if the condition is true, then the macro will generate neither
+code nor data - and the macro can also be used at either namespace,
+class or function scope. When used in a template, the expression x
+will be evaluated at the time the template is instantiated; this is
+particularly useful for validating template parameters.
+<p>
+It is intended that the functioning of <code style="white-space: normal">BOOST_STATIC_WARNING(x)</code>
+be identical to that of <code style="white-space: normal">BOOST_STATIC_ASSERT(x)</code>
+except that rather than resulting in a compilation error, it will result in
+a compiler warning. In all other respects it should be the same. So
+for more information on using <code style="white-space: normal">BOOST_STATIC_WARNING(x)</code>
+consult the documentation for <code style="white-space: normal">BOOST_STATIC_ASSERT(x)</code>
+<a href="../../../doc/html/boost_staticassert.html">here</a>.
+
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - BOOST_STATIC_WARNING</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center"><code style="white-space: normal">BOOST_STRONG_TYPEDEF</code></h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<h3>Motivation</h3>
+<code style="white-space: normal">typedef</code> creates an alias for an existing type. It does not create
+a new type that can be used for matching either function or template parameters.
+This can be shown by trying to compile the following example.
+<pre></code>
+typedef int a;
+void f(int x); // (1) function to handle simple integers
+void f(a x); // (2) special function to handle integers of type a
+int main(){
+ int x = 1;
+ a y;
+ y = x; // other operations permitted as a is converted as necessary
+ f(x); // chooses (1)
+ f(y); // chooses (2)
+}
+</code></pre>
+Since typedef doesn't create a new type, this program can't compile to code
+that implements its obvious intention.
+<p>
+Usage of BOOST_STRONG_TYPEDEF
+addresses this.
+<pre></code>
+<a target="strong_typedef" href="../../../boost/strong_typedef.hpp">
+#include <boost/serialization/strong_typedef.hpp>
+</a>
+
+BOOST_STRONG_TYPEDEF(int, a)
+void f(int x); // (1) function to handle simple integers
+void f(a x); // (2) special function to handle integers of type a
+int main(){
+ int x = 1;
+ a y;
+ y = x; // other operations permitted as a is converted as necessary
+ f(x); // chooses (1)
+ f(y); // chooses (2)
+}
+</code></pre>
+The program will now compile and run as expected.
+
+<h3>Usage</h3>
+Syntax of <code style="white-space: normal">BOOST_STRONG_TYPEDEF</code>
+has been designed to be similar to the standard
+<code style="white-space: normal">typedef</code>. So
+
+<pre><code>
+BOOST_STRONG_TYPEDEF(primitive type, name)
+</code></pre>
+
+will create a new type "name" which will be substitutable for the original
+type but still of distinct type.
+
+<h3>Implemenation</h3>
+<code style="white-space: normal">BOOST_STRONG_TYPEDEF</code> is a macro
+which generates a class named "name" wraps and instance of its
+primitive type and provides appropriate conversion operators in order
+to make the new type substitutable for the one that it wraps.
+
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+pre{
+ BORDER-RIGHT: gray 1pt solid;
+ BORDER-TOP: gray 1pt solid;
+ BORDER-LEFT: gray 1pt solid;
+ BORDER-BOTTOM: gray 1pt solid;
+ MARGIN-LEFT: 0pt;
+ background-color: #EEEEEE;
+}
+
+/*
+(C) Copyright 2008 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)
+*/
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - To Do</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">To Do</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<dl class="index">
+ <dt><a href="#portablebinaryarchives">Portable Binary Archives</a></dt>
+ <dt><a href="#performancetesting">Performance Testing and Profiling</a></dt>
+ <dt><a href="#backversioning">Back Versioning</a></dt>
+ <dt><a href="#nortti">Testing for Environments with No RTTI</a></dt>
+ <dt><a href="new_case_studies.html">Additional Case Studies</a></dt>
+</dl>
+
+These are enhancements that the serialization library needs but have not been done.
+Some of these projects, though tricky, are not huge and would be suitable
+for someone who has a limited time to spend on them. In particular, they
+might be of interest as student projects such as the Google Summer of Code.
+
+<h2><a name="portablebinaryarchives"></a>Portable Binary Archives</h2>
+Currently there is a portable binary archive in the examples directory.
+It is not regularly submitted to the exhaustive boost testing regimen
+but it is tested occasionally and has been used in production code.
+<p>
+Its missing the following:
+<ul>
+ <li>Addition of portable floating point types. This is not trivial. In addition to
+ handling floating point types of varying sizes, It requires
+ handling invalid floating point numbers (NaNs) in a portable manner.
+ <li>Some way to test archive portability within the Boost testing regimen.
+ <li>Integration into the Boost testing similar to the other archive classes.
+</ul>
+
+<h2><a name="performancetesting"></a>Performance Testing and Profiling</h2>
+
+I've managed to setup performance profiling using the following:
+<ul>
+ <li>current (as I write this) Boost.Build tools.
+ <li>the gcc compiler.
+ <li>and a shell script - profile.sh
+ <li>library_status program from the tools/regression/src directory
+</ul>
+Invoking profile script produces a
+<a href="performance_status.html">table</a>
+which shows the results of each test and links to the actual
+profile.
+<p>
+The first thing I did was include some of the serialization library tests.
+It became immediatly apparent that these tests were totally unsuitable
+for performance testing and that new tests needed to be written for this
+purpose. These tests would highlight the location of any performance
+bottlenecks in the serialization library. Whenever I've subjected my
+code in the past to this type of analysis, I've always been suprised
+to find bottlenecks in totally unanticipated places and fixing those
+has always lead to large improvements in performance. I expect that
+this project would have a huge impact on the utility of the serialization
+library.
+
+<h2><a name="backversioning"></a>Back Versioning</h2>
+
+It has been suggested that a useful feature of the library would be
+the ability to create "older versions" of archives. Currently,
+the library permits one make programs that are guarenteed
+the ability to load archives with classes of a previous version.
+But there is not way to save classes in accordance with a
+previous version. At first I dismissed this a a huge project
+with small demand. A cursory examination of the code revealed
+that this would not be very difficult. It would require some
+small changes in code and some additional tests. Also it
+would require special treatment in the documentation - perhaps
+a case study.
+
+
+<h2><a name="nortti"></a>Environments without RTTI</h2>
+
+I note that some have commented that this library requires RTTI.
+This is not strictly true. The examples and almost all the
+tests presume the existence of RTTI. But it should be possible
+to use the library without it. The example used for testing is an
+<code style="white-space: normal">extended_typeinfo</code>
+implemenation which presumes that all classes names have been exported.
+So, to make this library compatible for platforms without RTTI,
+a set of tests, examples and new manual section would have to be created
+
+<hr>
+<p>Revised 1 November, 2008
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2008.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Class Serialization Traits</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Class Serialization Traits</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<dl class="page-index">
+ <dt><a href="#version">Version</a>
+ <dt><a href="#level">Implementation Level</a>
+ <dt><a href="#tracking">Object Tracking</a>
+ <dt><a href="#export">Export Key</a>
+ <dt><a href="#abstract">Abstract</a>
+ <dt><a href="#typeinfo">Type Information Implementation</a>
+ <dt><a href="#wrappers">Wrappers</a>
+ <dt><a href="#bitwise">Bitwise Serialization</a>
+ <dt><a href="#templates">Template Serialization Traits</a>
+ <dt><a href="#compiletime_messages">Compile Time Warnings and Errors</a>
+</dl>
+Serialization of data depends on the type of the data. For example, for
+primitive types such as an <code style="white-space: normal">int</code>, it wouldn't make sense to save
+a version number in the archive. Likewise, for a data type that is never
+serialized through a pointer, it would (almost) never make sense to track
+the address of objects saved to/loaded from the archive as it will never
+be saved/loaded more than once in any case. Details of
+serialization for a particular data type will vary depending on the
+type, the way it is used and specifications of the programmer.
+<p>
+One can alter the manner in which a particular data type is serialized
+by specifying one or more <strong>class serialization traits</strong>.
+It is not generally necessary for the programmer to explictly assign
+traits to his classes as there are default values for all traits.
+If the default values are not appropriate they can be assigned by the programmer.
+A template is used to associate a typename with a constant. For example
+see <a href="../../../boost/serialization/version.hpp" target="version_hpp">
+version.hpp</a>.
+<h3><a name="version">Version</a></h3>
+This header file includes the following code:
+
+<pre><code>
+namespace boost {
+namespace serialization {
+template<class T>
+struct version
+{
+ BOOST_STATIC_CONSTANT(unsigned int, value = 0);
+};
+} // namespace serialization
+} // namespace boost
+</code></pre>
+
+For any class <code style="white-space: normal">T</code>, The default definition
+of <code style="white-space: normal">boost::serialization::version<T>::value</code> is 0.
+If we want to assign a value of 2 as the version for class <code style="white-space: normal">my_class</code>
+we specialize the version template:
+<pre><code>
+namespace boost {
+namespace serialization {
+struct version<my_class>
+{
+ BOOST_STATIC_CONSTANT(unsigned int, value = 2);
+};
+} // namespace serialization
+} // namespace boost
+</code></pre>
+Now whenever the version number for class <code style="white-space: normal">my_class</code> is required,
+the value 2 will be returned rather than the default value of 0.
+<p>
+To diminish typing and enhance readability, a macro is defined
+so that instead of the above, we could write:
+<pre><code>
+BOOST_CLASS_VERSION(my_class, 2)
+</code></pre>
+which expands to the code above.
+
+<h3><a name="level">Implementation Level</a></h3>
+In the same manner as the above, the "level" of implementation of serialization is
+specified. The header file <a href="../../../boost/serialization/level.hpp"
+target="level_hpp">level.hpp</a> defines the following.
+<pre><code>
+// names for each level
+enum level_type
+{
+ // Don't serialize this type. An attempt to do so should
+ // invoke a compile time assertion.
+ not_serializable = 0,
+ // write/read this type directly to the archive. In this case
+ // serialization code won't be called. This is the default
+ // case for fundamental types. It presumes a member function or
+ // template in the archive class that can handle this type.
+ // there is no runtime overhead associated reading/writing
+ // instances of this level
+ primitive_type = 1,
+ // Serialize the objects of this type using the objects "serialize"
+ // function or template. This permits values to be written/read
+ // to/from archives but includes no class or version information.
+ object_serializable = 2,
+ ///////////////////////////////////////////////////////////////////
+ // once an object is serialized at one of the above levels, the
+ // corresponding archives cannot be read if the implementation level
+ // for the archive object is changed.
+ ///////////////////////////////////////////////////////////////////
+ // Add class information to the archive. Class information includes
+ // implementation level, class version and class name if available.
+ object_class_info = 3,
+};
+</code></pre>
+Using a macro defined in <code style="white-space: normal">level.hpp</code> we can specify
+that <code style="white-space: normal">my_class</code> should be serialized along with its version number:
+<pre><code>
+BOOST_CLASS_IMPLEMENTATION(my_class, boost::serialization::object_class_info)
+</code></pre>
+If implementation level is not explicitly assigned, the system uses
+a default according to the following rules.
+<ul>
+ <li>if the data type is <code style="white-space: normal">volatile</code>
+assign <code style="white-space: normal">not_serializable</code>
+ <li>else if it's an enum or fundamental type assign <code style="white-space: normal">primitive_type</code>
+ <li>else assign <code style="white-space: normal">object_class_info</code>
+</ul>
+That is, for most user defined types, objects will be serialized along with
+class version information. This will permit one to maintain backward
+compatibility with archives which contain previous versions. However, with this
+ability comes a small runtime cost. For types whose definition will "never"
+change, efficiency can be gained by specifying <code style="white-space: normal">object_serializable</code>
+to override the default setting of <code style="white-space: normal">object_class_info</code>.
+For example,
+this has been done for the
+<a href="../../../boost/serialization/binary_object.hpp" target="binary_object_hpp">
+binary_object wrapper</a>
+
+<h3><a name="tracking">Object Tracking</a></h3>
+Depending on the way a type is used, it may be necessary or convenient to
+track the address of objects saved and loaded. For example, this is generally
+necessary while serializing objects through a pointer in order to be sure
+that multiple identical objects are not created when an archive is loaded.
+This "tracking behavior" is controlled by the type trait defined in the header
+file <a href="../../../boost/serialization/tracking.hpp" target="tracking_hpp">tracking.hpp</a>
+which defines the following:
+<pre><code>
+// names for each tracking level
+enum tracking_type
+{
+ // never track this type
+ track_never = 0,
+ // track objects of this type if the object is serialized through a
+ // pointer.
+ track_selectively = 1,
+ // always track this type
+ track_always = 2
+};
+</code></pre>
+A corresponding macro is defined so that we can use:
+<pre><code>
+BOOST_CLASS_TRACKING(my_class, boost::serialization::track_never)
+</code></pre>
+Default tracking traits are:
+<ul>
+ <li>For primitive, <code style="white-space: normal">track_never</code>.
+ <li>For pointers, <code style="white-space: normal">track_never</code>.
+ That is, addresses of addresses are not tracked by default.
+ <li>All current serialization wrappers such as <code style="white-space: normal">boost::serialization::nvp</code>,
+ <code style="white-space: normal">track_never</code>.
+ <li>For all other types, <code style="white-space: normal">track_selectively</code>.
+ That is addresses of serialized objects are tracked if and only if
+ one or more of the following is true:
+ <ul>
+ <li>an object of this type is anywhere in the program serialized
+ through a pointer.
+ <li>the class is explicitly "exported" - see below.
+ <li>the class is explicitly "registered" in the archive
+ </ul>
+</ul>
+
+<p>
+The default behavior is almost always the most convenient one. However,
+there a few cases where it would be desirable to override the
+default. One case is that of a virtual base class. In a diamond
+heritance structure with a virtual base class, object tracking
+will prevent redundant save/load invocations. So here is one
+case where it might be convenient to override the default tracking
+trait. <i>(Note: in a future version the default will be reimplemented
+to automatically track classes used as virtual bases).</i> This
+situation is demonstrated by
+<a href="../test/test_diamond.cpp" target="test_diamond_cpp">test_diamond.cpp</a>
+included with the library.
+
+<h3><a name="export">Export Key</a></h3>
+
+When serializing a derived class through a virtual base class pointer,
+two issues may arise.
+<ul>
+<li> The code in the derived class might never be explicitly
+referred to. Such code will never be instantiated.
+<p>
+This is addressed by invoking
+<code style="white-space: normal">BOOST_CLASS_EXPORT_IMPLEMENT(T)</code>
+in the file which defines (implements) the class T.
+This ensures that code for the derived class T will
+be explicity instantiated.
+<li> There needs to be some sort of identifier which can
+be used to select the code to be invoked when the object
+is loaded.
+Standard C++ does implement <code style="white-space: normal">typeid()</code> which can be
+used to return a unique string for the class. This is not entirely
+statisfactory for our purposes for the following reasons:
+<ul>
+ <li>There is no guarantee that the string is the same across platforms.
+ This would then fail to support portable archives.
+ <li>In using code modules from various sources, classes may have
+ to be wrapped in different namespaces in different programs.
+ <li>There might be classes locally defined in different code modules
+ that have the same name.
+ <li>There might be classes with different names that we want to
+ consider equivalent for purposes of of serialization.
+</ul>
+<p>
+So in the serialization library, this is addressed by invoking
+<code style="white-space: normal">BOOST_CLASS_EXPORT_KEY2(my_class, "my_class_external_identifier")</code>
+in the header file which declares he class.
+In a large majority of applications, the class name works just fine
+for the external identifier string so the following short cut is
+defined -
+<code style="white-space: normal">BOOST_CLASS_EXPORT_KEY(my_class)</code>.
+</ul>
+For programs which consist of only one module - that is
+programs which do not use DLLS, one can specify
+<code style="white-space: normal">BOOST_CLASS_EXPORT(my_class)</code>
+or
+<code style="white-space: normal">BOOST_CLASS_EXPORT_GUID(my_class, "my_class_external_identifier")</code>
+in either he declaration header or definition. These macros
+expand to invocation of the of both of the macros described above.
+<i>(<b>GUID</b> stands for <b>G</b>lobally <b>U</b>nique <b>ID</b>entfier.)</i>
+<p>
+<i>(<a target="detail" href="special.html#export">Elsewhere</a>
+in this manual, the serialization of derived classes is addressed in detail.)</i>
+<p>
+The header file
+<a href="../../../boost/serialization/export.hpp" target="export_hpp">export.hpp</a>
+contains all macro definitions described here.
+The library will throw a runtime exception if
+<ul>
+<li> A type not explicitly referred to is not exported.
+<li> Serialization code for the same type is instantiated
+in more than one module (or DLL).
+</ul>
+
+<h3><a name="abstract">Abstract</a></h3>
+When serializing an object through a pointer to its base class,
+the library needs to determine whether or not the bas is abstract
+(i.e. has at least one virtual function). The library uses the
+type trait macro <code style="white-space: normal">BOOST_IS_ABSTRACT(T)</code>
+to do this. Not all compilers support this type trait and corresponding
+macro. To address this, the macro <code style="white-space: normal">
+BOOST_SERIALIZATION_ASSUME_ABSTRACT(T)</code> has been
+implemented to permit one to explicitly indicate that a specified
+type is in fact abstract. This will guarentee that
+<code style="white-space: normal">BOOST_IS_ABSTRACT</code>
+will return the correct value for all compilers.
+
+<h3><a name="typeinfo">Type Information Implementation</a></h3>
+This last trait is also related to the serialization of objects
+through a base class pointer. The implementation of this facility
+requires the ability to determine at run time the true type of the
+object that a base class pointer points to. Different serialization
+systems do this in different ways. In our system, the default method
+is to use the function <code style="white-space: normal">typeid(...)</code> which is available
+in systems which support <b>RTTI</b> (<b>R</b>un <b>T</b>ime
+<b>T</b>ype <b>I</b>nformation).
+This will be satisfactory in almost all cases and most users of this
+library will lose nothing in skipping this section of the manual.
+<p>
+However, there are some cases where the default type determination
+system is not convenient. Some platforms might not support
+RTTI or it may have been disabled in order to speed execution
+or for some other reason. Some applications, E.G. runtime linking
+of plug-in modules, can't depend on C++ RTTI to determine the
+true derived class. RTTI only returns the correct type for polymorphic
+classes - classes with at least one virtual function. If any of these
+situations applies, one may substitute his own implementation of
+<code style="white-space: normal">extended_type_info</code>
+<p>
+The interface to facilities required to implement serialization is defined in
+<a href="../../../boost/serialization/extended_type_info.hpp"
+target="extended_type_info_hpp">extended_type_info.hpp</a>.
+
+Default implementation of these facilities based on <code style="white-space: normal">typeid(...)</code>
+is defined in
+
+<a href="../../../boost/serialization/extended_type_info_typeid.hpp"
+target="extended_type_info_typeid_hpp">extended_type_info_typeid.hpp</a>.
+
+An alternative implementation based on exported class identifiers
+is defined in
+<a href="../../../boost/serialization/extended_type_info_no_rtti.hpp"
+target="extended_type_info_rtti_hpp">extended_type_info_no_rtti.hpp</a>.
+<p>
+By invoking the macro:
+<pre><code>
+BOOST_CLASS_TYPE_INFO(
+ my_class,
+ extended_type_info_no_rtti<my_class>
+)
+</code></pre>
+we can assign the type information implementation to each class on a case by
+case basis. There is no requirement that all classes in a program use the same
+implementation of <code style="white-space: normal">extended_type_info</code>. This supports the concept
+that serialization of each class is specified "once and for all" in a header
+file that can be included in any project without change.
+<p>
+This is illustrated by the test program
+<a href="../test/test_no_rtti.cpp" target="test_no_rtti_cpp">test_no_rtti.cpp</a>.
+Other implementations are possible and might be necessary for
+certain special cases.
+
+version.hpp</a>.
+<h3><a name="wrappers">Wrappers</a></h3>
+Archives need to treat wrappers diffently from other types since, for example,
+they usually are non-const object while output archives require that any
+serialized object (with the exception of a wrapper) be const.
+
+This header file <a href="../../../boost/serialization/wrapper.hpp">wrapper.hpp</a>
+includes the following code:
+
+<pre><code>
+namespace boost {
+namespace serialization {
+template<class T>
+struct is_wrapper
+ : public mpl::false_
+{};
+} // namespace serialization
+} // namespace boost
+</code></pre>
+
+For any class <code style="white-space: normal">T</code>, The default definition
+of <code style="white-space: normal">boost::serialization::is_wrapper<T>::value</code> is thus false.
+
+If we want to declare that a class <code style="white-space: normal">my_class</code>
+is a wrapper we specialize the version template:
+<pre><code>
+namespace boost {
+namespace serialization {
+struct is_wrapper<my_class>
+ : mpl::true_
+{};
+} // namespace serialization
+} // namespace boost
+</code></pre>
+<p>
+To diminish typing and enhance readability, a macro is defined
+so that instead of the above, we could write:
+<pre><code>
+BOOST_CLASS_IS_WRAPPER(my_class)
+</code></pre>
+which expands to the code above.
+
+<h3><a name="bitwise">Bitwise Serialization</a></h3>
+Some simple classes could be serialized just by directly copying all bits
+of the class. This is, in particular, the case for POD data types containing
+no pointer members, and which are neither versioned nor tracked. Some archives,
+such as non-portable binary archives can make us of this information to
+substantially speed up serialization.
+
+To indicate the possibility of bitwise serialization the type trait defined
+in the header
+file <a href="../../../boost/serialization/is_bitwise_serializable.hpp" target="is_bitwise_serializable">is_bitwise_serializable.hpp</a>
+is used:
+<pre><code>
+namespace boost { namespace serialization {
+ template<class T>
+ struct is_bitwise_serializable
+ : public is_arithmetic<T>
+ {};
+} }
+</code></pre>
+is used, and can be specialized for other classes. The specialization
+is made easy by the corresponding macro:
+<pre><code>
+BOOST_IS_BITWISE_SERIALIZABLE(my_class)
+</code></pre>
+
+<h3><a name="templates">Template Serialization Traits</a></h3>
+In some instances it might be convenient to assign serialization traits
+to a whole group of classes at once. Consider, the name-value pair
+wrapper
+<pre><code>
+template<class T>
+struct nvp : public std::pair<const char *, T *>
+{
+ ...
+};
+</code></pre>
+used by XML archives to associate a name with a data variable of type T.
+These data types are never tracked and never versioned. So one might
+want to specify:
+<pre><code>
+BOOST_CLASS_IMPLEMENTATION(nvp<T>, boost::serialization::level_type::object_serializable)
+BOOST_CLASS_TRACKING(nvp<T>, boost::serialization::track_never)
+</code></pre>
+Examination of the definition of these macros reveals that they won't expand
+to sensible code when used with a template argument. So rather than using the
+convenience macros, use the original definitions
+<pre><code>
+template<class T>
+struct implementation_level<nvp<T> >
+{
+ typedef mpl::integral_c_tag tag;
+ typedef mpl::int_<object_serializable> type;
+ BOOST_STATIC_CONSTANT(
+ int,
+ value = implementation_level::type::value
+ );
+};
+
+// nvp objects are generally created on the stack and are never tracked
+template<class T>
+struct tracking_level<nvp<T> >
+{
+ typedef mpl::integral_c_tag tag;
+ typedef mpl::int_<track_never> type;
+ BOOST_STATIC_CONSTANT(
+ int,
+ value = tracking_level::type::value
+ );
+};
+</code></pre>
+to assign serialization traits to all classes generated by the template
+<code style="white-space: normal">nvp<T></code>
+<p>
+
+Note that it is only possible to use the above method to assign traits to
+templates when using compilers which correctly support Partial Template Specialization.
+
+One's first impulse might be to do something like:
+
+<pre><code>
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template<class T>
+struct implementation_level<nvp<T> >
+{
+ ... // see above
+};
+
+// nvp objects are generally created on the stack and are never tracked
+template<class T>
+struct tracking_level<nvp<T> >
+{
+ ... // see above
+};
+#endif
+</code></pre>
+This can be problematic when one wants to make his code <strong>and archives</strong>
+portable to other platforms. It means the she objects will be serialized differently
+depending on the platform used. This implies that objects saved from one platform
+won't be loaded properly on another. In other words, archives won't be portable.
+<p>
+This problem is addressed by creating another method of assigning serialization traits
+to user classes. This is illustrated by the serialization for a
+<a target="nvp" href="../../../boost/serialization/nvp.hpp"><strong>name-value</strong> pair</a>.
+<p>
+Specifically, this entails deriving the template from a special class
+<a target="traits" href="../../../boost/serialization/traits.hpp">
+<code style="white-space: normal">boost::serialization::traits</code></a> which is specialized for a specific
+combination of serialization traits.
+When looking up the serialization traits, the library first checks to see if this class has been
+used as a base class. If so, the corresponding traits are used. Otherwise, the standard defaults
+are used. By deriving from a serialization traits class rather than relying upon Partial Template
+Specializaton, one can a apply serialization traits to a template and those traits will be
+the same across all known platforms.
+<p>
+The signature for the traits template is:
+<pre><code>
+template<
+ class T,
+ int Level,
+ int Tracking,
+ unsigned int Version = 0,
+ class ETII = BOOST_SERIALIZATION_DEFAULT_TYPE_INFO(T),
+ class IsWrapper = mpl::false_
+>
+struct traits
+</code></pre>
+and template parameters should be assigned according to the following table:
+<p>
+<table border>
+<tr><th align=left>parameter</th><th align=left>description</th><th align=left>permitted values</th><th align=left>default value</th></tr>
+<tr><td><code>T</code></td><td>target class</td><td>class name<T></td><td>none</td></tr>
+<tr><td><code>Level</code></td><td>implementation level</td><td><code>not_serializable<br>primitive_type<br>object_serializable<br>object_class_info</code></td><td>none</td></tr>
+<tr><td><code>Tracking</code></td><td>tracking level</td><td><code>track_never<br>track_selectivly<br>track_always</code></td><td>none</td></tr>
+<tr><td><code>Version</code></td><td><code>class version</td><td>unsigned integer</td><td><code>0</code></td></tr>
+<tr><td><code>ETTI</code></td><td><code>type_info</code> implementation</td><td><code>extended_type_info_typeid<br>extended_type_info_no_rtti</code></td><td>default <code>type_info implementation</code></td></tr>
+<tr><td><code>IsWrapper</code></td><td><code></code>is the type a wrapper?</td><td><code>mpl::false_<br>mpl::true_</code></td><td><code>mpl::false_</code></td></tr>
+</table>
+
+<h3><a name="compiletime_messages">Compile Time Warnings and Errors</a></h3>
+Some serialization traits can conflict with other ones. Sometimes these conflicts
+will result in erroneous behavior (E.G. creating of archives which could not be read)
+and other times they represent a probable misconception on the part of the
+library user which could result in suprising behavior. The extent possible,
+these conflicts are detected at compile time and errors (BOOST_STATIC_ASSERT)
+or warnings (BOOST_STATIC_WARNING) are generated. The are generated in a
+compiler dependent way manner which should show an chain of instantiation
+to the point where the error/warning is detected. Without this capability,
+it would be very hard to track down errors or unexpected behavior in library
+usage. Here is list of the conflicts trapped:
+
+<dl>
+<dt><h2><a name="object_level">object_level</a> - error</h2></dt>
+<dd>
+This error traps attempts to serialize types whose
+implentation level is set to non_serializable.
+</dd>
+<dt><h2><a name="object_versioning">object_versioning</a> - error</h2></dt>
+<dd>
+It's possible that for efficiency reasons, a type can be
+assigned a serialization level which doesn't include type information
+in the archive. This would preclude the assignment
+of a new version number to the type. This error
+traps attempts to assign a version number in this case.
+This has to be a user error.
+</dd>
+
+<dt><h2><a name="object_tracking">object_tracking</a> - warning</h2></dt>
+<dd>
+The following code will display a message when compiled:
+
+<code style="white-space: normal"><pre>
+T t;
+ar << t;
+</pre></code>
+
+unless the tracking_level serialization trait is set to "track_never". The following
+will compile without problem:
+
+<code style="white-space: normal"><pre>
+const T t
+ar << t;
+</pre></code>
+
+Likewise, the following code will trap at compile time:
+
+<code style="white-space: normal"><pre>
+T * t;
+ar >> t;
+</pre></code>
+
+if the tracking_level serialization trait is set to "track_never".
+<p>
+
+The following case illustrates the function of this message.
+It was originally used as an example in the
+mailing list by Peter Dimov.
+
+<code style="white-space: normal"><pre>
+class construct_from
+{
+ ...
+};
+
+void main(){
+ ...
+ Y y;
+ construct_from x(y);
+ ar << x;
+}
+</pre></code>
+
+Suppose that the above message is not displayed and the code is used as is.
+<ol>
+ <li>this example compiles and executes fine. No tracking is done because
+ construct_from has never been serialized through a pointer. Now some time
+ later, the next programmer(2) comes along and makes an enhancement. He
+ wants the archive to be sort of a log.
+
+<code style="white-space: normal"><pre>
+void main(){
+ ...
+ Y y;
+ construct_from x(y);
+ ar << x;
+ ...
+ x.f(); // change x in some way
+ ...
+ ar << x
+}
+</pre></code>
+ <p>
+ Again no problem. He gets two different of copies in the archive, each one is different.
+ That is he gets exactly what he expects and is naturally delighted.
+ <p>
+ <li>Now sometime later, a third programmer(3) sees construct_from and says -
+ oh cool, just what I need. He writes a function in a totally disjoint
+ module. (The project is so big, he doesn't even realize the existence of
+ the original usage) and writes something like:
+
+<code style="white-space: normal"><pre>
+class K {
+ shared_ptr <construct_from> z;
+ template <class Archive>
+ void serialize(Archive & ar, const unsigned version){
+ ar << z;
+ }
+};
+</pre></code>
+
+ <p>
+ He builds and runs the program and tests his new functionality. It works
+ great and he's delighted.
+ <p>
+ <li>Things continue smoothly as before. A month goes by and it's
+ discovered that when loading the archives made in the last month (reading the
+ log). Things don't work. The second log entry is always the same as the
+ first. After a series of very long and increasingly acrimonius email exchanges,
+its discovered
+ that programmer (3) accidently broke programmer(2)'s code .This is because by
+ serializing via a pointer, the "log" object now being tracked. This is because
+ the default tracking behavior is "track_selectively". This means that class
+ instances are tracked only if they are serialized through pointers anywhere in
+ the program. Now multiple saves from the same address result in only the first one
+ being written to the archive. Subsequent saves only add the address - even though the
+ data might have been changed. When it comes time to load the data, all instances of the log record show the same data.
+ In this way, the behavior of a functioning piece of code is changed due the side
+ effect of a change in an otherwise disjoint module.
+ Worse yet, the data has been lost and cannot not be now recovered from the archives.
+ People are really upset and disappointed with boost (at least the serialization system).
+ <p>
+ <li>
+ After a lot of investigation, it's discovered what the source of the problem
+ and class construct_from is marked "track_never" by including:
+<code style="white-space: normal"><pre>
+BOOST_CLASS_TRACKING(construct_from, track_never)
+</pre></code>
+ <li>Now everything works again. Or - so it seems.
+ <p>
+ <li><code style="white-space: normal">shared_ptr<construct_from></code>
+is not going to have a single raw pointer shared amongst the instances. Each loaded
+<code style="white-space: normal">shared_ptr<construct_from></code> is going to
+have its own distinct raw pointer. This will break
+<code style="white-space: normal">shared_ptr</code> and cause a memory leak. Again,
+The cause of this problem is very far removed from the point of discovery. It could
+well be that the problem is not even discovered until after the archives are loaded.
+Now we not only have difficult to find and fix program bug, but we have a bunch of
+invalid archives and lost data.
+</ol>
+
+<p>Now consider what happens when the message is displayed:
+
+<ol>
+ <p>
+ <li>Right away, the program traps at
+<code style="white-space: normal"><pre>
+ar << x;
+</pre></code>
+ <p>
+ <li>The programmer curses (another %^&*&* hoop to jump through). If he's in a
+ hurry (and who isn't) and would prefer not to <code style="white-space: normal">const_cast</code>
+ - because it looks bad. So he'll just make the following change an move on.
+<code style="white-space: normal"><pre>
+Y y;
+const construct_from x(y);
+ar << x;
+</pre></code>
+ <p>
+ Things work fine and he moves on.
+ <p>
+ <li>Now programer (2) wants to make his change - and again another
+ annoying const issue;
+<code style="white-space: normal"><pre>
+Y y;
+const construct_from x(y);
+...
+x.f(); // change x in some way ; compile error f() is not const
+...
+ar << x
+</pre></code>
+ <p>
+ He's mildly annoyed now he tries the following:
+ <ul>
+ <li>He considers making f() a const - but presumable that shifts the const
+ error to somewhere else. And his doesn't want to fiddle with "his" code to
+ work around a quirk in the serializaition system
+ <p>
+ <li>He removes the <code style="white-space: normal">const</code>
+ from <code style="white-space: normal">const construct_from</code> above - damn now he
+ gets the trap. If he looks at the comment code where the
+ <code style="white-space: normal">BOOST_STATIC_ASSERT</code>
+ occurs, he'll do one of two things
+ <ol>
+ <p>
+ <li>This is just crazy. Its making my life needlessly difficult and flagging
+ code that is just fine. So I'll fix this with a <code style="white-space: normal">const_cast</code>
+ and fire off a complaint to the list and mabe they will fix it.
+ In this case, the story branches off to the previous scenario.
+ <p>
+ <li>Oh, this trap is suggesting that the default serialization isn't really
+ what I want. Of course in this particular program it doesn't matter. But
+ then the code in the trap can't really evaluate code in other modules (which
+ might not even be written yet). OK, I'll add the following to my
+ construct_from.hpp to solve the problem.
+<code style="white-space: normal"><pre>
+BOOST_CLASS_TRACKING(construct_from, track_never)
+</pre></code>
+ </ol>
+ </ul>
+ <p>
+ <li>Now programmer (3) comes along and make his change. The behavior of the
+ original (and distant module) remains unchanged because the
+ <code style="white-space: normal">construct_from</code> trait has been set to
+ "track_never" so he should always get copies and the log should be what we expect.
+ <p>
+ <li>But now he gets another trap - trying to save an object of a
+ class marked "track_never" through a pointer. So he goes back to
+ construct_from.hpp and comments out the
+ <code style="white-space: normal">BOOST_CLASS_TRACKING</code> that
+ was inserted. Now the second trap is avoided, But damn - the first trap is
+ popping up again. Eventually, after some code restructuring, the differing
+ requirements of serializating <code style="white-space: normal">construct_from</code>
+ are reconciled.
+</ol>
+Note that in this second scenario
+<ul>
+ <li>all errors are trapped at compile time.
+ <li>no invalid archives are created.
+ <li>no data is lost.
+ <li>no runtime errors occur.
+</ul>
+
+It's true that these messages may sometimes flag code that is currently correct and
+that this may be annoying to some programmers. However, this example illustrates
+my view that these messages are useful and that any such annoyance is small price to
+pay to avoid particularly vexing programming errors.
+
+</dd>
+
+<dt><h2><a name="pointer_level">pointer_level</a> - warning</h2></dt>
+<dd>
+This trap addresses the following situaion when serializing
+a pointer:
+<ul>
+<li>A type doesn't save class information in the
+archive. That is, the serialization trait implementation
+level <= object_serializable.
+<li>Tracking for this type is set to "track selectively"
+in this case, indication that an object is tracked is
+not stored in the archive itself - see level == object_serializable.
+Since class information is not saved in the archive, the existence
+or absense of the operation ar << T * anywhere else in the
+program is used to infer that an object of this type should be tracked.
+<p>
+A problem arises when a program which reads an archive
+includes the operation ar >> T * so that tracking information
+will be included in the archive. When a program which
+creates the archive doesn't include ar << T it is presumed
+that the archive doesn't include tracking information and
+the archive will fail to load. Also the reverse situation could
+trigger a similar problem.
+<p>
+Though this situation is unlikely for several reasones,
+it is possible - hence this warning.
+</ul>
+So if your program traps here, consider changing the
+tracking or implementation level traits - or not
+serializing via a pointer.
+</dd>
+
+<dt><h2><a name="pointer_tracking">pointer_tracking</a> - warning</h2></dt>
+<dd>
+Serializing an object of a type marked "track_never" through a pointer
+could result in creating more objects than were saved! There are cases
+in which a user might really want to do this so we leave it as a warning.
+</dd>
+
+<dt><h2><a name="const_loading">const_loading</a> - error</h2></dt>
+<dd>
+One cannot load data into a "const" object unless it's a
+wrapper around some other non-const object.
+</dd>
+</dl>
+
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004 and Matthias Troyer 2006.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Tutorial</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Tutorial</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<dl class="page-index">
+ <dt><a href="#simplecase">A Very Simple Case</a>
+ <dt><a href="#nonintrusiveversion">Non Intrusive Version</a>
+ <dt><a href="#serializablemembers">Serializable Members</a>
+ <dt><a href="#derivedclasses">Derived Classes</a>
+ <dt><a href="#pointers">Pointers</a>
+ <dt><a href="#arrays">Arrays</a>
+ <dt><a href="#stl">STL Collections</a>
+ <dt><a href="#versioning">Class Versioning</a>
+ <dt><a href="#splitting">Splitting <code style="white-space: normal">serialize</code> into <code style="white-space: normal">save/load</code></a>
+ <dt><a href="#archives">Archives</a>
+ <dt><a href="#examples">List of examples</a>
+</dl>
+An output archive is similar to an output data stream. Data can be saved to the archive
+with either the << or the & operator:
+<pre><code>
+ar << data;
+ar & data;
+</code></pre>
+An input archive is similar to an input datastream. Data can be loaded from the archive
+with either the >> or the & operator.
+<pre><code>
+ar >> data;
+ar & data;
+</code></pre>
+<p>
+When these operators are invoked for primitive data types, the data is simply saved/loaded
+to/from the archive. When invoked for class data types, the class
+<code style="white-space: normal">serialize</code> function is invoked. Each
+<code style="white-space: normal">serialize</code> function is uses the above operators
+to save/load its data members. This process will continue in a recursive manner until
+all the data contained in the class is saved/loaded.
+
+<h3><a name="simplecase">A Very Simple Case</a></h3>
+These operators are used inside the <code style="white-space: normal">serialize</code>
+function to save and load class data members.
+<p>
+Included in this library is a program called
+<a href="../example/demo.cpp" target="demo_cpp">demo.cpp</a> which illustrates how
+to use this system. Below we excerpt code from this program to
+illustrate with the simplest possible case how this library is
+intended to be used.
+<pre>
+<code>
+#include <fstream>
+
+// include headers that implement a archive in simple text format
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
+
+/////////////////////////////////////////////////////////////
+// gps coordinate
+//
+// illustrates serialization for a simple type
+//
+class gps_position
+{
+private:
+ friend class boost::serialization::access;
+ // When the class Archive corresponds to an output archive, the
+ // & operator is defined similar to <<. Likewise, when the class Archive
+ // is a type of input archive the & operator is defined similar to >>.
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int version)
+ {
+ ar & degrees;
+ ar & minutes;
+ ar & seconds;
+ }
+ int degrees;
+ int minutes;
+ float seconds;
+public:
+ gps_position(){};
+ gps_position(int d, int m, float s) :
+ degrees(d), minutes(m), seconds(s)
+ {}
+};
+
+int main() {
+ // create and open a character archive for output
+ std::ofstream ofs("filename");
+
+ // create class instance
+ const gps_position g(35, 59, 24.567f);
+
+ // save data to archive
+ {
+ boost::archive::text_oarchive oa(ofs);
+ // write class instance to archive
+ oa << g;
+ // archive and stream closed when destructors are called
+ }
+
+ // ... some time later restore the class instance to its orginal state
+ gps_position newg;
+ {
+ // create and open an archive for input
+ std::ifstream ifs("filename");
+ boost::archive::text_iarchive ia(ifs);
+ // read class state from archive
+ ia >> newg;
+ // archive and stream closed when destructors are called
+ }
+ return 0;
+}
+</code>
+</pre>
+<p>For each class to be saved via serialization, there must exist a function to
+save all the class members which define the state of the class.
+For each class to be loaded via serialization, there must exist a function to
+load theese class members in the same sequence as they were saved.
+In the above example, these functions are generated by the
+template member function <code style="white-space: normal">serialize</code>.
+
+<h3><a name="nonintrusiveversion">Non Intrusive Version</a></h3>
+<p>The above formulation is intrusive. That is, it requires
+that classes whose instances are to be serialized be
+altered. This can be inconvenient in some cases.
+An equivalent alternative formulation permitted by the
+system would be:
+<pre><code>
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
+
+class gps_position
+{
+public:
+ int degrees;
+ int minutes;
+ float seconds;
+ gps_position(){};
+ gps_position(int d, int m, float s) :
+ degrees(d), minutes(m), seconds(s)
+ {}
+};
+
+namespace boost {
+namespace serialization {
+
+template<class Archive>
+void serialize(Archive & ar, gps_position & g, const unsigned int version)
+{
+ ar & g.degrees;
+ ar & g.minutes;
+ ar & g.seconds;
+}
+
+} // namespace serialization
+} // namespace boost
+</code></pre>
+<p>
+In this case the generated serialize functions are not members of the
+<code style="white-space: normal">gps_position</code> class. The two formulations function
+in exactly the same way.
+<p>
+The main application of non-intrusive serialization is to permit serialization
+to be implemented for classes without changing the class definition.
+In order for this to be possible, the class must expose enough information
+to reconstruct the class state. In this example, we presumed that the
+class had <code style="white-space: normal">public</code> members - not a common occurence. Only
+classes which expose enough information to save and restore the class
+state will be serializable without changing the class definition.
+<h3><a name="serializablemembers">Serializable Members</a></h3>
+<p>
+A serializable class with serializable members would look like this:
+<pre><code>
+class bus_stop
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int version)
+ {
+ ar & latitude;
+ ar & longitude;
+ }
+ gps_position latitude;
+ gps_position longitude;
+protected:
+ bus_stop(const gps_position & lat_, const gps_position & long_) :
+ latitude(lat_), longitude(long_)
+ {}
+public:
+ bus_stop(){}
+ // See item # 14 in Effective C++ by Scott Meyers.
+ // re non-virtual destructors in base classes.
+ virtual ~bus_stop(){}
+};
+</code></pre>
+<p>That is, members of class type are serialized just as
+members of primitive types are.
+<p>
+Note that saving an instance of the class <code style="white-space: normal">bus_stop</code>
+with one of the archive operators will invoke the
+<code style="white-space: normal">serialize</code> function which saves
+<code style="white-space: normal">latitude</code> and
+<code style="white-space: normal">longitude</code>. Each of these in turn will be saved by invoking
+<code style="white-space: normal">serialize</code> in the definition of
+<code style="white-space: normal">gps_position</code>. In this manner the whole
+data structure is saved by the application of an archive operator to
+just its root item.
+
+
+<h3><a name="derivedclasses">Derived Classes</a></h3>
+<p>Derived classes should include serializations of their base classes.
+<pre><code>
+#include <boost/serialization/base_object.hpp>
+
+class bus_stop_corner : public bus_stop
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int version)
+ {
+ // serialize base class information
+ ar & boost::serialization::base_object<bus_stop>(*this);
+ ar & street1;
+ ar & street2;
+ }
+ std::string street1;
+ std::string street2;
+ virtual std::string description() const
+ {
+ return street1 + " and " + street2;
+ }
+public:
+ bus_stop_corner(){}
+ bus_stop_corner(const gps_position & lat_, const gps_position & long_,
+ const std::string & s1_, const std::string & s2_
+ ) :
+ bus_stop(lat_, long_), street1(s1_), street2(s2_)
+ {}
+};
+</code>
+</pre>
+<p>
+Note the serialization of the base classes from the derived
+class. Do <b>NOT</b> directly call the base class serialize
+functions. Doing so might seem to work but will bypass the code
+that tracks instances written to storage to eliminate redundancies.
+It will also bypass the writing of class version information into
+the archive. For this reason, it is advisable to always make member
+<code style="white-space: normal">serialize</code> functions private. The declaration
+<code style="white-space: normal">friend boost::serialization::access</code> will grant to the
+serialization library access to private member variables and functions.
+<p>
+<h3><a name="pointers">Pointers</a></h3>
+Suppose we define a bus route as an array of bus stops. Given that
+<ol>
+ <li>we might have several types of bus stops (remember bus_stop is
+a base class)
+ <li>a given bus_stop might appear in more than one route.
+</ol>
+it's convenient to represent a bus route with an array of pointers
+to <code style="white-space: normal">bus_stop</code>.
+<pre>
+<code>
+class bus_route
+{
+ friend class boost::serialization::access;
+ bus_stop * stops[10];
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int version)
+ {
+ int i;
+ for(i = 0; i < 10; ++i)
+ ar & stops[i];
+ }
+public:
+ bus_route(){}
+};
+</code>
+</pre>
+Each member of the array <code style="white-space: normal">stops</code> will be serialized.
+But remember each member is a pointer - so what can this really
+mean? The whole object of this serialization is to permit
+reconstruction of the original data structures at another place
+and time. In order to accomplish this with a pointer, it is
+not sufficient to save the value of the pointer, rather the
+object it points to must be saved. When the member is later
+loaded, a new object has to be created and a new pointer has
+to be loaded into the class member.
+<p>
+If the same pointer is serialized more than once, only one instance
+is be added to the archive. When read back, no data is read back in.
+The only operation that occurs is for the second pointer is set equal to the first
+<p>
+Note that, in this example, the array consists of polymorphic pointers.
+That is, each array element point to one of several possible
+kinds of bus stops. So when the pointer is saved, some sort of class
+identifier must be saved. When the pointer is loaded, the class
+identifier must be read and and instance of the corresponding class
+must be constructed. Finally the data can be loaded to newly created
+instance of the correct type.
+
+As can be seen in
+<a href="../example/demo.cpp" target="demo_cpp">demo.cpp</a>,
+serialization of pointers to derived classes through a base
+clas pointer may require explicit enumeration of the derived
+classes to be serialized. This is referred to as "registration" or "export"
+of derived classes. This requirement and the methods of
+satisfying it are explained in detail
+<a href="serialization.html#derivedpointers">here</a>
+<p>
+All this is accomplished automatically by the serialization
+library. The above code is all that is necessary to accomplish
+the saving and loading of objects accessed through pointers.
+<p>
+<h3><a name="arrays">Arrays</a></h3>
+The above formulation is in fact more complex than necessary.
+The serialization library detects when the object being
+serialized is an array and emits code equivalent to the above.
+So the above can be shortened to:
+<pre>
+<code>
+class bus_route
+{
+ friend class boost::serialization::access;
+ bus_stop * stops[10];
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int version)
+ {
+ ar & stops;
+ }
+public:
+ bus_route(){}
+};
+</code>
+</pre>
+<h3><a name="stl">STL Collections</a></h3>
+The above example uses an array of members. More likely such
+an application would use an STL collection for such a purpose.
+The serialization library contains code for serialization
+of all STL classes. Hence, the reformulation below will
+also work as one would expect.
+<pre>
+<code>
+#include <boost/serialization/list.hpp>
+
+class bus_route
+{
+ friend class boost::serialization::access;
+ std::list<bus_stop *> stops;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int version)
+ {
+ ar & stops;
+ }
+public:
+ bus_route(){}
+};
+</code>
+</pre>
+<h3><a name="versioning">Class Versioning</a></h3>
+<p>
+Suppose we're satisfied with our <code style="white-space: normal">bus_route</code> class, build a program
+that uses it and ship the product. Some time later, it's decided
+that the program needs enhancement and the <code style="white-space: normal">bus_route</code> class is
+altered to include the name of the driver of the route. So the
+new version looks like:
+<pre>
+<code>
+#include <boost/serialization/list.hpp>
+#include <boost/serialization/string.hpp>
+
+class bus_route
+{
+ friend class boost::serialization::access;
+ std::list<bus_stop *> stops;
+ std::string driver_name;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int version)
+ {
+ ar & driver_name;
+ ar & stops;
+ }
+public:
+ bus_route(){}
+};
+</code>
+</pre>
+Great, we're all done. Except... what about people using our application
+who now have a bunch of files created under the previous program.
+How can these be used with our new program version?
+<p>
+In general, the serialization library stores a version number in the
+archive for each class serialized. By default this version number is 0.
+When the archive is loaded, the version number under which it was saved
+is read. The above code can be altered to exploit this
+<pre>
+<code>
+#include <boost/serialization/list.hpp>
+#include <boost/serialization/string.hpp>
+#include <boost/serialization/version.hpp>
+
+class bus_route
+{
+ friend class boost::serialization::access;
+ std::list<bus_stop *> stops;
+ std::string driver_name;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int version)
+ {
+ // only save/load driver_name for newer archives
+ if(version > 0)
+ ar & driver_name;
+ ar & stops;
+ }
+public:
+ bus_route(){}
+};
+
+BOOST_CLASS_VERSION(bus_route, 1)
+</code>
+</pre>
+By application of versioning to each class, there is no need to
+try to maintain a versioning of files. That is, a file version
+is the combination of the versions of all its constituent classes.
+
+This system permits programs to be always compatible with archives
+created by all previous versions of a program with no more
+effort than required by this example.
+
+<h3><a name="splitting">Splitting <code style="white-space: normal">serialize</code>
+into <code style="white-space: normal">save/load</code></a></h3>
+The <code style="white-space: normal">serialize</code> function is simple, concise, and guarantees
+that class members are saved and loaded in the same sequence
+- the key to the serialization system. However, there are cases
+where the load and save operations are not as similar as the examples
+used here. For example, this could occur with a class that has evolved through
+multiple versions. The above class can be reformulated as:
+<pre>
+<code>
+#include <boost/serialization/list.hpp>
+#include <boost/serialization/string.hpp>
+#include <boost/serialization/version.hpp>
+#include <boost/serialization/split_member.hpp>
+
+class bus_route
+{
+ friend class boost::serialization::access;
+ std::list<bus_stop *> stops;
+ std::string driver_name;
+ template<class Archive>
+ void save(Archive & ar, const unsigned int version) const
+ {
+ // note, version is always the latest when saving
+ ar & driver_name;
+ ar & stops;
+ }
+ template<class Archive>
+ void load(Archive & ar, const unsigned int version)
+ {
+ if(version > 0)
+ ar & driver_name;
+ ar & stops;
+ }
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+public:
+ bus_route(){}
+};
+
+BOOST_CLASS_VERSION(bus_route, 1)
+</code>
+</pre>
+The macro <code style="white-space: normal">BOOST_SERIALIZATION_SPLIT_MEMBER()</code> generates
+code which invokes the <code style="white-space: normal">save</code>
+or <code style="white-space: normal">load</code>
+depending on whether the archive is used for saving or loading.
+<h3><a name="archives">Archives</a></h3>
+Our discussion here has focused on adding serialization
+capability to classes. The actual rendering of the data to be serialized
+is implemented in the archive class. Thus the stream of serialized
+data is a product of the serialization of the class and the
+archive selected. It is a key design decision that these two
+components be independent. This permits any serialization specification
+to be usable with any archive.
+<p>
+In this tutorial, we have used a particular
+archive class - <code style="white-space: normal">text_oarchive</code> for saving and
+<code style="white-space: normal">text_iarchive</code> for loading.
+text archives render data as text and are portable across platforms. In addition
+to text archives, the library includes archive class for native binary data
+and xml formatted data. Interfaces to all archive classes are all identical.
+Once serialization has been defined for a class, that class can be serialized to
+any type of archive.
+<p>
+If the current set of archive classes doesn't provide the
+attributes, format, or behavior needed for a particular application,
+one can either make a new archive class or derive from an existing one.
+This is described later in the manual.
+
+<h3><a name="examples">List of Examples</h3>
+<dl>
+ <dt><a href="../example/demo.cpp" target="demo_cpp">demo.cpp</a>
+ <dd>This is the completed example used in this tutorial.
+ It does the following:
+ <ol>
+ <li>Creates a structure of differing kinds of stops, routes and schedules
+ <li>Displays it
+ <li>Serializes it to a file named "testfile.txt" with one
+ statement
+ <li>Restores to another structure
+ <li>Displays the restored structure
+ </ol>
+ <a href="../example/demo_output.txt" target="demo_output">Output of
+ this program</a> is sufficient to verify that all the
+ originally stated requirements for a serialization system
+ are met with this system. The <a href="../example/demofile.txt"
+ target="test_file">contents of the archive file</a> can
+ also be displayed as serialization files are ASCII text.
+
+ <dt><a href="../example/demo_xml.cpp" target="demo_xml_cpp">demo_xml.cpp</a>
+ <dd>This is a variation the original demo which supports xml archives in addition
+ to the others. The extra wrapping macro, BOOST_SERIALIZATION_NVP(name), is
+ needed to associate a data item name with the corresponding xml
+ tag. It is importanted that 'name' be a valid xml tag, else it
+ will be impossible to restore the archive.
+ For more information see
+ <a target="detail" href="wrappers.html#nvp">Name-Value Pairs</a>.
+ <a href="../example/demo_save.xml" target="demo_save_xml">Here</a>
+ is what an xml archive looks like.
+
+ <dt><a href="../example/demo_xml_save.cpp" target="demo_xml_save_cpp">demo_xml_save.cpp</a>
+ and <a href="../example/demo_xml_load.cpp" target="demo_xml_load_cpp">demo_xml_load.cpp</a>
+ <dd>Note also that though our examples save and load the program data
+ to an archive within the same program, this merely a convenience
+ for purposes of illustration. In general, the archive may or may
+ not be loaded by the same program that created it.
+</dl>
+<p>
+The astute reader might notice that these examples contain a subtle but important flaw.
+They leak memory. The bus stops are created in the <code style="white-space: normal">
+main</code> function. The bus schedules may refer to these bus stops
+any number of times. At the end of the main function after the bus schedules are destroyed,
+the bus stops are destroyed. This seems fine. But what about the structure
+<code style="white-space: normal">new_schedule</code> data item created by the
+process of loading from an archive? This contains its own separate set of bus stops
+that are not referenced outside of the bus schedule. These won't be destroyed
+anywhere in the program - a memory leak.
+<p>
+There are couple of ways of fixing this. One way is to explicitly manage the bus stops.
+However, a more robust and transparent is to use
+<code style="white-space: normal">shared_ptr</code> rather than raw pointers. Along
+with serialization implemenations for the Standard Library, the serialization library
+includes implementation of serialization for
+<code style="white-space: normal">boost::shared ptr</code>. Given this, it should be
+easy to alter any of these examples to eliminate the memory leak. This is left
+as an excercise for the reader.
+
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - BOOST_STATIC_WARNING</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center"><code>void_cast</code></h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<h3>Motivation</h3>
+C++ includes the operator <code style="white-space: normal">dynamic_cast<T>(U * u)</code>
+for casting a pointer at runtime between two related types. However, this can only be
+used for polymorphic classes. That is, it can only be used with related classes which have at least one virtual function.
+Limiting the serializaton of pointers to only such class would diminish the applicability
+of the library.
+
+<h3>Usage</h3>
+
+The following functions are defined in the header
+<a target="void_cast" href="../../../boost/serialization/void_cast.hpp">void_cast.hpp</a>.
+They are declared in the namespace
+<code style="white-space: normal">boost::serialization</code>.
+
+<dl>
+<dt><h4><pre><code>
+template<class Derived, class Base>
+const void_cast_detail::void_caster &
+void_cast_register(
+ Derived const * derived = NULL,
+ Base * const base = NULL
+)
+</code></pre></h4></dt>
+<dd>
+This function "registers" a pair of related types. It stores the fact that
+<code style="white-space: normal">Derived</code> is immediately derived from
+<code style="white-space: normal">Base</code> in a global table.
+<ul>
+ <li>This "registration" can be invoked anywhere in the program. The table is built at
+ pre-runtime and is available anywhere else in the program.
+ <li>only adjacent base/derived pairs need be registered. That is,
+ <pre><code>
+ void_cast_register<A, B>();
+ void_cast_register<B, C>();
+ </code></pre>
+ automatically derives the fact that A can be upcast to C and vice-versa.
+</ul>
+</dd>
+
+<dt><h4><pre><code>
+void *
+void_upcast(
+ extended_type_info const & derived_type,
+ extended_type_info const & base_type,
+ void * const t
+);
+</code></pre></h4></dt>
+
+<dt><h4><pre><code>
+void *
+void_downcast(
+ extended_type_info const & derived_type,
+ extended_type_info const & base_type,
+ void * const t
+);
+</code></pre></h4></dt>
+<dd>
+These functions cast a void pointer from one type to another. The source and
+definition types are specified by passing references to the corresponding
+<a href="extended_type_info.html"><code style="white-space: normal">
+extended_type_info</code></a>
+records. An attempt to cast between types not "registered" with
+<code style="white-space: normal">void_cast_register</code>
+will throw a
+<a href="exceptions.html"><code style="white-space: normal">boost::archive::archive_exception</code></a>
+with value equal to
+<code style="white-space: normal">unregistered_cast</code>
+</dd>
+</dl>
+
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
--- /dev/null
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../boost.css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Serialization - Serialization Wrappers</title>
+</head>
+<body link="#0000ff" vlink="#800080">
+<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
+ </td>
+ <td valign="top">
+ <h1 align="center">Serialization</h1>
+ <h2 align="center">Serialization Wrappers</h2>
+ </td>
+ </tr>
+</table>
+<hr>
+<dl class="page-index">
+ <dt><a href="#binaryobjects">Binary Objects</a>
+ <dt><a href="#arrays">Arrays</a>
+ <dt><a href="#strong_type"><code style="white-space: normal">BOOST_STRONG_TYPEDEF</code></a>
+ <dt><a href="#collection_size_type">Collection Sizes</a>
+ <dt><a href="#nvp">Name-Value Pairs</a>
+ <dt><a href="#composition">Composition</a>
+</dl>
+Sometimes it convenient to create a temporary object just to support serialization
+of some underlying data. This permits an archive class to define special
+handling of this type. The library includes several such types for varying
+purposes.
+<p>
+Wrappers need to be treated in a special way by some archives, and hence
+the <A href="traits.html#wrappers"><code>is_wrapper</code></a> trait for
+these wrapper classes is set to true.
+
+<h3><a name="binaryobjects">Binary Objects</a></h3>
+A binary object is just an sequence of bytes stored as raw
+binary data. This would most likely be used for a large amount
+of "light weight" data such as a pixel map or embedded binary file.
+The header file
+<a href="../../../boost/serialization/binary_object.hpp" target="binary_object_hpp">
+binary_object.hpp
+</a>
+includes the constructors:
+<pre><code>
+boost::serialization::binary_object(void * t, size_t size);
+boost::serialization::make_binary_object(void * t, size_t size);
+</code></pre>
+which will construct a temporary binary object that can be serialized just like any other object.
+Its default serialization is to use archive class primitives
+<code style="white-space: normal">save_binary</code> and <code>load_binary</code>.
+Note that it doesn't allocated any storage or create any objects.
+Its sole purpose is to pass the data size and address as pair to the archive class.
+
+
+<h3><a name="arrays">Arrays</a></h3>
+An array is a contiguous sequence of homogeneous data types, such as a builtin
+C-array, a <code>boost::array<T></code> or a <code>std::vector<T></code>.
+The purpose of this wrapper is to support archive types (such as binary
+archives) that provide optimized serialization for contiguous sequences of
+objects of the same type.
+
+The header file
+<a href="../../../boost/serialization/array.hpp" target="array_hpp">
+array.hpp
+</a>
+includes the function
+<pre><code>
+template <T>
+boost::serialization::make_array(T* t, std::size_t size);
+</code></pre>
+which will construct a temporary <code>array</code> object
+<pre><code>
+template<class T>
+class array
+{
+public:
+ typedef T value_type;
+ array(value_type* t, std::size_t s);
+ value_type* address() const;
+ std::size_t count() const;
+};
+</code></pre>
+that can be serialized just like any other object.
+Its default serialization is to use serialize each array element.
+Note that it doesn't allocated any storage or create any objects.
+Its sole purpose is to pass the data type, size and address to the archive class.
+
+Archive types that can provide optimized implementations for contiguous
+arrays of homogeneous data types should overload the serialization of
+<code>array</code>.
+
+
+<h3><a name="strong_type"><code style="white-space: normal">BOOST_STRONG_TYPEDEF</code></h3>
+Another example of a serialization wrapper is the
+<a href="strong_typedef.html"><code style="white-space: normal">BOOST_STRONG_TYPEDEF</code></a> template.
+The serialization libraries uses these to pass particular kinds of integers such
+as object_id, version, etc. to an archive class. Given that these integers
+are now distinguishable according to their type, XML archives can apply
+special handling to these types. For example, a version number is rendered
+as an XML attribute in the form "version=12". In the absence of any specific override,
+these types are automatically converted to the underlying integer type so the
+special overrides used for XML archives aren't needed for other archives.
+
+
+
+<h3><a name="collection_size_type">Collection Sizes</h3>
+An example of a strong typedef is the <code>collection_size_type</code> in the
+header file
+<a href="../../../boost/serialization/collection_size_type.hpp" target="collection_size_type_hpp">
+collection_size_type.hpp
+</a>. This type should be used for serializaing the size of a C++ collection, so
+that the archive can pick the best integral representation for the serialization
+of collection sizes. This is necessary since, although <code>std::size_t</code>
+is guaranteed to be an integral type large enough to represent the size of
+a collection on a specific platform, the archive might want to serialize
+the size differently than this type. For example, the <code>collection_size_type</code>
+might be serialized as a variable length integer in a portable binary archive.
+
+
+
+
+
+
+<h3><a name="nvp">Name-Value Pairs</h3>
+XML archives present a somewhat special case. XML format has a nested
+structure that maps well to the "recursive class member visitor" pattern used
+by the serialization system. However, XML differs from other formats
+in that it requires a name for each class data member. Our goal is to
+add this information to the class serialization specification while
+still permiting the the serialization code to be used with any archive.
+<p>
+Our solution is to wrap class members to be serialized in a
+<strong>name-value-pair</strong>. This structure is defined in
+<a href="../../../boost/serialization/nvp.hpp" target="nvp_hpp">nvp.hpp</a>.
+It is just a reference to the data member coupled with a pointer to
+to a <code style="white-space: normal">const char *</code> which
+corresponds to the XML name. It implements the default
+serialization functions for a name-value pair. This default
+action is to just ignore the item name and serialize the
+data value in the normal manner. For archive classes that
+don't make any special provision for name-value pairs, this
+is the action which will be invoked when the name-value pair
+is serialized. Hence, wrapping a data value into a name-value
+pair will have no effect when used with archives which
+make no special provision for this wrapper.
+<p>
+The xml archive classes contain code similar to:
+<pre><code>
+// special treatment for name-value pairs.
+template<class T>
+xml_oarchive & operator&(const boost::serialization::nvp<T> & t)
+{
+ // write an xml start tag
+ start_tag(t.name());
+
+ // serialize the data as usual
+ *this & t.value();
+
+ // write an xml end tag
+ end_tag(t.name());
+}
+</code></pre>
+The most obvious and convient name to assign to as the XML data item name
+is - surpise! - the name of the C++ class data member. So our serialization
+code will look like:
+<pre><code>
+ar & make_nvp("my_variable", my_variable);
+</code></pre>
+To simplify typing and enhance readability a macro is defined so we can write:
+<pre><code>
+ar & BOOST_SERIALIZATION_NVP(my_variable);
+</code></pre>
+Similarly there exists a macro definition that permits us to write:
+<pre><code>
+BOOST_SERIALIZATION_BASE_OBJECT_NVP(my_base_class)
+</code></pre>
+
+Note that these macros must be used in the namespace of the class,
+and without qualifying the namespace in the argument.
+
+<p>
+<a href="../example/demo_gps.hpp" target="demo_gps_hpp">demo_gps.hpp<a>
+includes NVP wrappers or all data members.
+<a href="../example/demo_xml.cpp" target="demo_xml_cpp">demo_xml.cpp<a>
+saves and loads data to an XML archive.
+<a href="../example/demo_save.xml" target="demo_save_xml">Here</a>
+is example of the XML Archive corresponding to our tutorial example.
+
+<h3><a name="composition">Composition</h3>
+Wrappers should be designed so that they can be composed as necessary.
+For example, to pass binary data as a name value pair use:
+<pre><code>
+ar & make_nvp("named_binary_object", make_binary_object(address, size));
+</code></pre>
+</html>
+<hr>
+<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
+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)
+</i></p>
+</body>
+</html>
+
--- /dev/null
+# Boost serialization Library Build Jamfile
+# (C) Copyright Robert Ramey 2002-2004.
+# Use, modification, and distribution are 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/libs/serialization for the library home page.
+
+project libs/serialization/example
+ : id serialization_example
+ : requirements <library>../build//boost_serialization
+ ;
+
+rule demo_bsl_run ( demo-name : othersources * : requirements * )
+{
+ return [ run
+ # sources
+ $(demo-name).cpp
+ $(othersources).cpp
+ : # command
+ : # input files
+ : # requirements
+ # toolset suppress-warnings
+ <toolset>gcc:<cxxflags>"-Wno-non-virtual-dtor -Wno-ctor-dtor-privacy"
+ <toolset>msvc-8.0:<cxxflags>"-wd4996"
+ <toolset>borland:<cxxflags>"-w-8080 -w-8071 -w-8057 -w-8062 -w-8008 -w-0018 -w-8066"
+ # toolset optimizations
+ <toolset>gcc:<cxxflags>"-ftemplate-depth-255"
+ <toolset>msvc:<cxxflags>"-Gy"
+ # toolset shared library support
+ <toolset>como,<runtime-link>shared:<build>no
+ <toolset>msvc,<stdlib>stlport,<runtime-link>shared:<build>no
+ <toolset>cw,<runtime-link>static:<build>no
+ $(requirements)
+ : # test name
+ $(demo-name)
+ ]
+ ;
+}
+
+test-suite "demo-suite" :
+ # demos
+ [ demo_bsl_run demo ]
+ [ demo_bsl_run demo_auto_ptr ]
+ [ demo_bsl_run demo_exception ]
+ [ demo_bsl_run demo_log : log_archive ]
+ [ demo_bsl_run demo_pimpl : demo_pimpl_A ]
+ [ demo_bsl_run demo_polymorphic : demo_polymorphic_A ]
+ [ demo_bsl_run demo_portable_archive : portable_binary_iarchive portable_binary_oarchive ]
+ [ demo_bsl_run demo_shared_ptr ]
+ [ demo_bsl_run demo_simple_log ]
+ [ demo_bsl_run demo_trivial_archive ]
+ [ demo_bsl_run demo_xml ]
+ [ demo_bsl_run demo_xml_save ]
+ [ demo_bsl_run demo_xml_load : : <dependency>demo_xml_save ]
+;
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// demo.cpp
+//
+// (C) Copyright 2002-4 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)
+
+
+#include <cstddef> // NULL
+#include <iomanip>
+#include <iostream>
+#include <fstream>
+#include <string>
+
+#include <boost/archive/tmpdir.hpp>
+
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/text_oarchive.hpp>
+
+#include <boost/serialization/base_object.hpp>
+#include <boost/serialization/utility.hpp>
+#include <boost/serialization/list.hpp>
+#include <boost/serialization/assume_abstract.hpp>
+
+/////////////////////////////////////////////////////////////
+// The intent of this program is to serve as a tutorial for
+// users of the serialization package. An attempt has been made
+// to illustrate most of the facilities of the package.
+//
+// The intent is to create an example suffciently complete to
+// illustrate the usage and utility of the package while
+// including a minimum of other code.
+//
+// This illustration models the bus system of a small city.
+// This includes, multiple bus stops, bus routes and schedules.
+// There are different kinds of stops. Bus stops in general will
+// will appear on multiple routes. A schedule will include
+// muliple trips on the same route.
+
+/////////////////////////////////////////////////////////////
+// gps coordinate
+//
+// llustrates serialization for a simple type
+//
+class gps_position
+{
+ friend std::ostream & operator<<(std::ostream &os, const gps_position &gp);
+ friend class boost::serialization::access;
+ int degrees;
+ int minutes;
+ float seconds;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* file_version */){
+ ar & degrees & minutes & seconds;
+ }
+public:
+ // every serializable class needs a constructor
+ gps_position(){};
+ gps_position(int _d, int _m, float _s) :
+ degrees(_d), minutes(_m), seconds(_s)
+ {}
+};
+std::ostream & operator<<(std::ostream &os, const gps_position &gp)
+{
+ return os << ' ' << gp.degrees << (unsigned char)186 << gp.minutes << '\'' << gp.seconds << '"';
+}
+
+/////////////////////////////////////////////////////////////
+// One bus stop
+//
+// illustrates serialization of serializable members
+//
+
+class bus_stop
+{
+ friend class boost::serialization::access;
+ friend std::ostream & operator<<(std::ostream &os, const bus_stop &gp);
+ virtual std::string description() const = 0;
+ gps_position latitude;
+ gps_position longitude;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int version)
+ {
+ ar & latitude;
+ ar & longitude;
+ }
+protected:
+ bus_stop(const gps_position & _lat, const gps_position & _long) :
+ latitude(_lat), longitude(_long)
+ {}
+public:
+ bus_stop(){}
+ virtual ~bus_stop(){}
+};
+
+BOOST_SERIALIZATION_ASSUME_ABSTRACT(bus_stop)
+
+std::ostream & operator<<(std::ostream &os, const bus_stop &bs)
+{
+ return os << bs.latitude << bs.longitude << ' ' << bs.description();
+}
+
+/////////////////////////////////////////////////////////////
+// Several kinds of bus stops
+//
+// illustrates serialization of derived types
+//
+class bus_stop_corner : public bus_stop
+{
+ friend class boost::serialization::access;
+ std::string street1;
+ std::string street2;
+ virtual std::string description() const
+ {
+ return street1 + " and " + street2;
+ }
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int version)
+ {
+ // save/load base class information
+ ar & boost::serialization::base_object<bus_stop>(*this);
+ ar & street1 & street2;
+ }
+
+public:
+ bus_stop_corner(){}
+ bus_stop_corner(const gps_position & _lat, const gps_position & _long,
+ const std::string & _s1, const std::string & _s2
+ ) :
+ bus_stop(_lat, _long), street1(_s1), street2(_s2)
+ {
+ }
+};
+
+class bus_stop_destination : public bus_stop
+{
+ friend class boost::serialization::access;
+ std::string name;
+ virtual std::string description() const
+ {
+ return name;
+ }
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int version)
+ {
+ ar & boost::serialization::base_object<bus_stop>(*this) & name;
+ }
+public:
+
+ bus_stop_destination(){}
+ bus_stop_destination(
+ const gps_position & _lat, const gps_position & _long, const std::string & _name
+ ) :
+ bus_stop(_lat, _long), name(_name)
+ {
+ }
+};
+
+/////////////////////////////////////////////////////////////
+// a bus route is a collection of bus stops
+//
+// illustrates serialization of STL collection templates.
+//
+// illustrates serialzation of polymorphic pointer (bus stop *);
+//
+// illustrates storage and recovery of shared pointers is correct
+// and efficient. That is objects pointed to by more than one
+// pointer are stored only once. In such cases only one such
+// object is restored and pointers are restored to point to it
+//
+class bus_route
+{
+ friend class boost::serialization::access;
+ friend std::ostream & operator<<(std::ostream &os, const bus_route &br);
+ typedef bus_stop * bus_stop_pointer;
+ std::list<bus_stop_pointer> stops;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int version)
+ {
+ // in this program, these classes are never serialized directly but rather
+ // through a pointer to the base class bus_stop. So we need a way to be
+ // sure that the archive contains information about these derived classes.
+ //ar.template register_type<bus_stop_corner>();
+ ar.register_type(static_cast<bus_stop_corner *>(NULL));
+ //ar.template register_type<bus_stop_destination>();
+ ar.register_type(static_cast<bus_stop_destination *>(NULL));
+ // serialization of stl collections is already defined
+ // in the header
+ ar & stops;
+ }
+public:
+ bus_route(){}
+ void append(bus_stop *_bs)
+ {
+ stops.insert(stops.end(), _bs);
+ }
+};
+std::ostream & operator<<(std::ostream &os, const bus_route &br)
+{
+ std::list<bus_stop *>::const_iterator it;
+ // note: we're displaying the pointer to permit verification
+ // that duplicated pointers are properly restored.
+ for(it = br.stops.begin(); it != br.stops.end(); it++){
+ os << '\n' << std::hex << "0x" << *it << std::dec << ' ' << **it;
+ }
+ return os;
+}
+
+/////////////////////////////////////////////////////////////
+// a bus schedule is a collection of routes each with a starting time
+//
+// Illustrates serialization of STL objects(pair) in a non-intrusive way.
+// See definition of operator<< <pair<F, S> >(ar, pair) and others in
+// serialization.hpp
+//
+// illustrates nesting of serializable classes
+//
+// illustrates use of version number to automatically grandfather older
+// versions of the same class.
+
+class bus_schedule
+{
+public:
+ // note: this structure was made public. because the friend declarations
+ // didn't seem to work as expected.
+ struct trip_info
+ {
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int file_version)
+ {
+ // in versions 2 or later
+ if(file_version >= 2)
+ // read the drivers name
+ ar & driver;
+ // all versions have the follwing info
+ ar & hour & minute;
+ }
+
+ // starting time
+ int hour;
+ int minute;
+ // only after system shipped was the driver's name added to the class
+ std::string driver;
+
+ trip_info(){}
+ trip_info(int _h, int _m, const std::string &_d) :
+ hour(_h), minute(_m), driver(_d)
+ {}
+ };
+private:
+ friend class boost::serialization::access;
+ friend std::ostream & operator<<(std::ostream &os, const bus_schedule &bs);
+ friend std::ostream & operator<<(std::ostream &os, const bus_schedule::trip_info &ti);
+ std::list<std::pair<trip_info, bus_route *> > schedule;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int version)
+ {
+ ar & schedule;
+ }
+public:
+ void append(const std::string &_d, int _h, int _m, bus_route *_br)
+ {
+ schedule.insert(schedule.end(), std::make_pair(trip_info(_h, _m, _d), _br));
+ }
+ bus_schedule(){}
+};
+BOOST_CLASS_VERSION(bus_schedule::trip_info, 2)
+
+std::ostream & operator<<(std::ostream &os, const bus_schedule::trip_info &ti)
+{
+ return os << '\n' << ti.hour << ':' << ti.minute << ' ' << ti.driver << ' ';
+}
+std::ostream & operator<<(std::ostream &os, const bus_schedule &bs)
+{
+ std::list<std::pair<bus_schedule::trip_info, bus_route *> >::const_iterator it;
+ for(it = bs.schedule.begin(); it != bs.schedule.end(); it++){
+ os << it->first << *(it->second);
+ }
+ return os;
+}
+
+void save_schedule(const bus_schedule &s, const char * filename){
+ // make an archive
+ std::ofstream ofs(filename);
+ boost::archive::text_oarchive oa(ofs);
+ oa << s;
+}
+
+void
+restore_schedule(bus_schedule &s, const char * filename)
+{
+ // open the archive
+ std::ifstream ifs(filename);
+ boost::archive::text_iarchive ia(ifs);
+
+ // restore the schedule from the archive
+ ia >> s;
+}
+
+int main(int argc, char *argv[])
+{
+ // make the schedule
+ bus_schedule original_schedule;
+
+ // fill in the data
+ // make a few stops
+ bus_stop *bs0 = new bus_stop_corner(
+ gps_position(34, 135, 52.560f),
+ gps_position(134, 22, 78.30f),
+ "24th Street", "10th Avenue"
+ );
+ bus_stop *bs1 = new bus_stop_corner(
+ gps_position(35, 137, 23.456f),
+ gps_position(133, 35, 54.12f),
+ "State street", "Cathedral Vista Lane"
+ );
+ bus_stop *bs2 = new bus_stop_destination(
+ gps_position(35, 136, 15.456f),
+ gps_position(133, 32, 15.300f),
+ "White House"
+ );
+ bus_stop *bs3 = new bus_stop_destination(
+ gps_position(35, 134, 48.789f),
+ gps_position(133, 32, 16.230f),
+ "Lincoln Memorial"
+ );
+
+ // make a routes
+ bus_route route0;
+ route0.append(bs0);
+ route0.append(bs1);
+ route0.append(bs2);
+
+ // add trips to schedule
+ original_schedule.append("bob", 6, 24, &route0);
+ original_schedule.append("bob", 9, 57, &route0);
+ original_schedule.append("alice", 11, 02, &route0);
+
+ // make aother routes
+ bus_route route1;
+ route1.append(bs3);
+ route1.append(bs2);
+ route1.append(bs1);
+
+ // add trips to schedule
+ original_schedule.append("ted", 7, 17, &route1);
+ original_schedule.append("ted", 9, 38, &route1);
+ original_schedule.append("alice", 11, 47, &route1);
+
+ // display the complete schedule
+ std::cout << "original schedule";
+ std::cout << original_schedule;
+
+ std::string filename(boost::archive::tmpdir());
+ filename += "/demofile.txt";
+
+ // save the schedule
+ save_schedule(original_schedule, filename.c_str());
+
+ // ... some time later
+ // make a new schedule
+ bus_schedule new_schedule;
+
+ restore_schedule(new_schedule, filename.c_str());
+
+ // and display
+ std::cout << "\nrestored schedule";
+ std::cout << new_schedule;
+ // should be the same as the old one. (except for the pointer values)
+
+ delete bs0;
+ delete bs1;
+ delete bs2;
+ delete bs3;
+ return 0;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// demo_auto_ptr.cpp
+
+// (C) Copyright 2002-4 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)
+
+#include <list>
+#include <memory>
+#include <fstream>
+#include <string>
+
+#include <cstdio> // remove, std::autoptr inteface wrong in dinkumware
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include <boost/archive/tmpdir.hpp>
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
+
+#include <boost/serialization/split_free.hpp>
+
+namespace boost {
+namespace serialization {
+
+/////////////////////////////////////////////////////////////
+// implement serialization for auto_ptr<T>
+// note: this must be added to the boost namespace in order to
+// be called by the library
+template<class Archive, class T>
+inline void save(
+ Archive & ar,
+ const std::auto_ptr<T> &t,
+ const unsigned int file_version
+){
+ // only the raw pointer has to be saved
+ // the ref count is rebuilt automatically on load
+ const T * const tx = t.get();
+ ar << tx;
+}
+
+template<class Archive, class T>
+inline void load(
+ Archive & ar,
+ std::auto_ptr<T> &t,
+ const unsigned int file_version
+){
+ T *pTarget;
+ ar >> pTarget;
+ // note that the reset automagically maintains the reference count
+ #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+ t.release();
+ t = std::auto_ptr<T>(pTarget);
+ #else
+ t.reset(pTarget);
+ #endif
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<class Archive, class T>
+inline void serialize(
+ Archive & ar,
+ std::auto_ptr<T> &t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+} // namespace serialization
+} // namespace boost
+
+/////////////////////////////////////////////////////////////
+// test auto_ptr serialization
+class A
+{
+private:
+ friend class boost::serialization::access;
+ int x;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */){
+ ar & x;
+ }
+public:
+ A(){} // default constructor
+ ~A(){} // default destructor
+};
+
+void save(const std::auto_ptr<A> & spa, const char *filename)
+{
+ std::ofstream ofs(filename);
+ boost::archive::text_oarchive oa(ofs);
+ oa << spa;
+}
+
+void load(std::auto_ptr<A> & spa, const char *filename)
+{
+ // open the archive
+ std::ifstream ifs(filename);
+ boost::archive::text_iarchive ia(ifs);
+
+ // restore the schedule from the archive
+ ia >> spa;
+}
+
+int main(int argc, char *argv[])
+{
+ std::string filename = boost::archive::tmpdir();
+ filename += "/testfile";
+
+ // create a new auto pointer to ta new object of type A
+ std::auto_ptr<A> spa(new A);
+ // serialize it
+ save(spa, filename.c_str());
+ // reset the auto pointer to NULL
+ // thereby destroying the object of type A
+ // note that the reset automagically maintains the reference count
+ #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+ spa.release();
+ #else
+ spa.reset();
+ #endif
+ // restore state to one equivalent to the original
+ // creating a new type A object
+ load(spa, filename.c_str());
+ // obj of type A gets destroyed
+ // as auto_ptr goes out of scope
+ std::remove(filename.c_str());
+ return 0;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_derived_class.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef> // NULL
+#include <fstream>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include "B.hpp"
+#include "A.ipp"
+
+int test_main( int argc, char* argv[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+
+ BOOST_REQUIRE(NULL != testfile);
+
+ B b, b1;
+
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("b", b);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("b1", b1);
+ }
+ BOOST_CHECK(b == b1);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+#ifndef BOOST_SERIALIZATION_TEST_A_HPP
+#define BOOST_SERIALIZATION_TEST_A_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
+// A.hpp simple class test
+
+// (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 <cassert>
+#include <cstdlib> // for rand()
+#include <cmath> // for fabs()
+#include <cstddef> // size_t
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::rand;
+ using ::fabs;
+ using ::size_t;
+}
+#endif
+
+//#include <boost/test/test_exec_monitor.hpp>
+#include <boost/limits.hpp>
+#include <boost/cstdint.hpp>
+
+#include <boost/detail/workaround.hpp>
+#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+#include <boost/archive/dinkumware.hpp>
+#endif
+
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/string.hpp>
+#include <boost/serialization/access.hpp>
+
+class A
+{
+private:
+ friend class boost::serialization::access;
+ // note: from an aesthetic perspective, I would much prefer to have this
+ // defined out of line. Unfortunately, this trips a bug in the VC 6.0
+ // compiler. So hold our nose and put it her to permit running of tests.
+ template<class Archive>
+ void serialize(
+ Archive &ar,
+ const unsigned int /* file_version */
+ ){
+ ar & BOOST_SERIALIZATION_NVP(b);
+ #ifndef BOOST_NO_INT64_T
+ ar & BOOST_SERIALIZATION_NVP(f);
+ ar & BOOST_SERIALIZATION_NVP(g);
+ #endif
+ #if BOOST_WORKAROUND(__BORLANDC__, <= 0x551 )
+ int i;
+ if(BOOST_DEDUCED_TYPENAME Archive::is_saving::value){
+ i = l;
+ ar & BOOST_SERIALIZATION_NVP(i);
+ }
+ else{
+ ar & BOOST_SERIALIZATION_NVP(i);
+ l = i;
+ }
+ #else
+ ar & BOOST_SERIALIZATION_NVP(l);
+ #endif
+ ar & BOOST_SERIALIZATION_NVP(m);
+ ar & BOOST_SERIALIZATION_NVP(n);
+ ar & BOOST_SERIALIZATION_NVP(o);
+ ar & BOOST_SERIALIZATION_NVP(p);
+ ar & BOOST_SERIALIZATION_NVP(q);
+ #ifndef BOOST_NO_CWCHAR
+ ar & BOOST_SERIALIZATION_NVP(r);
+ #endif
+ ar & BOOST_SERIALIZATION_NVP(c);
+ ar & BOOST_SERIALIZATION_NVP(s);
+ ar & BOOST_SERIALIZATION_NVP(t);
+ ar & BOOST_SERIALIZATION_NVP(u);
+ ar & BOOST_SERIALIZATION_NVP(v);
+ ar & BOOST_SERIALIZATION_NVP(w);
+ ar & BOOST_SERIALIZATION_NVP(x);
+ ar & BOOST_SERIALIZATION_NVP(y);
+ #ifndef BOOST_NO_STD_WSTRING
+ ar & BOOST_SERIALIZATION_NVP(z);
+ #endif
+ }
+ bool b;
+ #ifndef BOOST_NO_INT64_T
+ boost::int64_t f;
+ boost::uint64_t g;
+ #endif
+ enum h {
+ i = 0,
+ j,
+ k
+ } l;
+ std::size_t m;
+ signed long n;
+ unsigned long o;
+ signed short p;
+ unsigned short q;
+ #ifndef BOOST_NO_CWCHAR
+ wchar_t r;
+ #endif
+ char c;
+ signed char s;
+ unsigned char t;
+ signed int u;
+ unsigned int v;
+ float w;
+ double x;
+ std::string y;
+ #ifndef BOOST_NO_STD_WSTRING
+ std::wstring z;
+ #endif
+public:
+ A();
+ bool operator==(const A &rhs) const;
+ bool operator!=(const A &rhs) const;
+ bool operator<(const A &rhs) const; // used by less
+ // hash function for class A
+ operator std::size_t () const;
+ friend std::ostream & operator<<(std::ostream & os, A const & a);
+ friend std::istream & operator>>(std::istream & is, A & a);
+};
+
+//BOOST_TEST_DONT_PRINT_LOG_VALUE(A);
+
+template<class S>
+void randomize(S &x)
+{
+ assert(0 == x.size());
+ for(;;){
+ unsigned int i = std::rand() % 27;
+ if(0 == i)
+ break;
+ x += static_cast<BOOST_DEDUCED_TYPENAME S::value_type>('a' - 1 + i);
+ }
+}
+
+template<class T>
+void accumulate(std::size_t & s, const T & t){
+ const char * tptr = (const char *)(& t);
+ unsigned int count = sizeof(t);
+ while(count-- > 0){
+ s += *tptr++;
+ }
+}
+
+A::operator std::size_t () const {
+ std::size_t retval = 0;
+ accumulate(retval, b);
+ #ifndef BOOST_NO_INT64_T
+ accumulate(retval, f);
+ accumulate(retval, g);
+ #endif
+ accumulate(retval, l);
+ accumulate(retval, m);
+ accumulate(retval, n);
+ accumulate(retval, o);
+ accumulate(retval, p);
+ accumulate(retval, q);
+ #ifndef BOOST_NO_CWCHAR
+ accumulate(retval, r);
+ #endif
+ accumulate(retval, c);
+ accumulate(retval, s);
+ accumulate(retval, t);
+ accumulate(retval, u);
+ accumulate(retval, v);
+ return retval;
+}
+
+inline A::A() :
+ b(true),
+ #ifndef BOOST_NO_INT64_T
+ f(std::rand() * std::rand()),
+ g(std::rand() * std::rand()),
+ #endif
+ l(static_cast<enum h>(std::rand() % 3)),
+ m(std::rand()),
+ n(std::rand()),
+ o(std::rand()),
+ p(std::rand()),
+ q(std::rand()),
+ #ifndef BOOST_NO_CWCHAR
+ r(std::rand()),
+ #endif
+ c(std::rand()),
+ s(std::rand()),
+ t(std::rand()),
+ u(std::rand()),
+ v(std::rand()),
+ w((float)std::rand()),
+ x((double)std::rand())
+{
+ randomize(y);
+ #ifndef BOOST_NO_STD_WSTRING
+ randomize(z);
+ #endif
+}
+
+inline bool A::operator==(const A &rhs) const
+{
+ if(b != rhs.b)
+ return false;
+ if(l != rhs.l)
+ return false;
+ #ifndef BOOST_NO_INT64_T
+ if(f != rhs.f)
+ return false;
+ if(g != rhs.g)
+ return false;
+ #endif
+ if(m != rhs.m)
+ return false;
+ if(n != rhs.n)
+ return false;
+ if(o != rhs.o)
+ return false;
+ if(p != rhs.p)
+ return false;
+ if(q != rhs.q)
+ return false;
+ #ifndef BOOST_NO_CWCHAR
+ if(r != rhs.r)
+ return false;
+ #endif
+ if(c != rhs.c)
+ return false;
+ if(s != rhs.s)
+ return false;
+ if(t != rhs.t)
+ return false;
+ if(u != rhs.u)
+ return false;
+ if(v != rhs.v)
+ return false;
+ if(w == 0 && std::fabs(rhs.w) > std::numeric_limits<float>::epsilon())
+ return false;
+ if(std::fabs(rhs.w/w - 1.0) > std::numeric_limits<float>::epsilon())
+ return false;
+ if(x == 0 && std::fabs(rhs.x - x) > std::numeric_limits<float>::epsilon())
+ return false;
+ if(std::fabs(rhs.x/x - 1.0) > std::numeric_limits<float>::epsilon())
+ return false;
+ if(0 != y.compare(rhs.y))
+ return false;
+ #ifndef BOOST_NO_STD_WSTRING
+ if(0 != z.compare(rhs.z))
+ return false;
+ #endif
+ return true;
+}
+
+inline bool A::operator!=(const A &rhs) const
+{
+ return ! (*this == rhs);
+}
+
+inline bool A::operator<(const A &rhs) const
+{
+ if(b != rhs.b)
+ return b < rhs.b;
+ #ifndef BOOST_NO_INT64_T
+ if(f != rhs.f)
+ return f < rhs.f;
+ if(g != rhs.g)
+ return g < rhs.g;
+ #endif
+ if(l != rhs.l )
+ return l < rhs.l;
+ if(m != rhs.m )
+ return m < rhs.m;
+ if(n != rhs.n )
+ return n < rhs.n;
+ if(o != rhs.o )
+ return o < rhs.o;
+ if(p != rhs.p )
+ return p < rhs.p;
+ if(q != rhs.q )
+ return q < rhs.q;
+ #ifndef BOOST_NO_CWCHAR
+ if(r != rhs.r )
+ return r < rhs.r;
+ #endif
+ if(c != rhs.c )
+ return c < rhs.c;
+ if(s != rhs.s )
+ return s < rhs.s;
+ if(t != rhs.t )
+ return t < rhs.t;
+ if(u != rhs.u )
+ return u < rhs.u;
+ if(v != rhs.v )
+ return v < rhs.v;
+ if(w != rhs.w )
+ return w < rhs.w;
+ if(x != rhs.x )
+ return x < rhs.x;
+ int i = y.compare(rhs.y);
+ if(i != 0 )
+ return i < 0;
+ #ifndef BOOST_NO_STD_WSTRING
+ int j = z.compare(rhs.z);
+ if(j != 0 )
+ return j < 0;
+ #endif
+ return false;
+}
+
+#endif // BOOST_SERIALIZATION_TEST_A_HPP
--- /dev/null
+#ifndef BOOST_SERIALIZATION_TEST_A_HPP
+#define BOOST_SERIALIZATION_TEST_A_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
+// A.hpp simple class test
+
+// (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 <cassert>
+#include <cstdlib> // for rand()
+#include <cmath> // for fabs()
+#include <cstddef> // size_t
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::rand;
+ using ::fabs;
+ using ::size_t;
+}
+#endif
+
+//#include <boost/test/test_exec_monitor.hpp>
+#include <boost/limits.hpp>
+#include <boost/cstdint.hpp>
+
+#include <boost/detail/workaround.hpp>
+#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+#include <boost/archive/dinkumware.hpp>
+#endif
+
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/string.hpp>
+#include <boost/serialization/access.hpp>
+
+class A
+{
+private:
+ friend class boost::serialization::access;
+ // note: from an aesthetic perspective, I would much prefer to have this
+ // defined out of line. Unfortunately, this trips a bug in the VC 6.0
+ // compiler. So hold our nose and put it her to permit running of tests.
+ template<class Archive>
+ void serialize(
+ Archive &ar,
+ const unsigned int /* file_version */
+ ){
+ ar & BOOST_SERIALIZATION_NVP(b);
+ #ifndef BOOST_NO_INT64_T
+ ar & BOOST_SERIALIZATION_NVP(f);
+ ar & BOOST_SERIALIZATION_NVP(g);
+ #endif
+ #if BOOST_WORKAROUND(__BORLANDC__, <= 0x551 )
+ int i;
+ if(BOOST_DEDUCED_TYPENAME Archive::is_saving::value){
+ i = l;
+ ar & BOOST_SERIALIZATION_NVP(i);
+ }
+ else{
+ ar & BOOST_SERIALIZATION_NVP(i);
+ l = i;
+ }
+ #else
+ ar & BOOST_SERIALIZATION_NVP(l);
+ #endif
+ ar & BOOST_SERIALIZATION_NVP(m);
+ ar & BOOST_SERIALIZATION_NVP(n);
+ ar & BOOST_SERIALIZATION_NVP(o);
+ ar & BOOST_SERIALIZATION_NVP(p);
+ ar & BOOST_SERIALIZATION_NVP(q);
+ #ifndef BOOST_NO_CWCHAR
+ ar & BOOST_SERIALIZATION_NVP(r);
+ #endif
+ ar & BOOST_SERIALIZATION_NVP(c);
+ ar & BOOST_SERIALIZATION_NVP(s);
+ ar & BOOST_SERIALIZATION_NVP(t);
+ ar & BOOST_SERIALIZATION_NVP(u);
+ ar & BOOST_SERIALIZATION_NVP(v);
+ ar & BOOST_SERIALIZATION_NVP(w);
+ ar & BOOST_SERIALIZATION_NVP(x);
+ ar & BOOST_SERIALIZATION_NVP(y);
+ #ifndef BOOST_NO_STD_WSTRING
+ ar & BOOST_SERIALIZATION_NVP(z);
+ #endif
+ }
+ bool b;
+ #ifndef BOOST_NO_INT64_T
+ boost::int64_t f;
+ boost::uint64_t g;
+ #endif
+ enum h {
+ i = 0,
+ j,
+ k
+ } l;
+ std::size_t m;
+ signed long n;
+ unsigned long o;
+ signed short p;
+ unsigned short q;
+ #ifndef BOOST_NO_CWCHAR
+ wchar_t r;
+ #endif
+ char c;
+ signed char s;
+ unsigned char t;
+ signed int u;
+ unsigned int v;
+ float w;
+ double x;
+ std::string y;
+ #ifndef BOOST_NO_STD_WSTRING
+ std::wstring z;
+ #endif
+public:
+ A();
+ bool operator==(const A &rhs) const;
+ bool operator!=(const A &rhs) const;
+ bool operator<(const A &rhs) const; // used by less
+ // hash function for class A
+ operator std::size_t () const;
+ friend std::ostream & operator<<(std::ostream & os, A const & a);
+ friend std::istream & operator>>(std::istream & is, A & a);
+};
+
+//BOOST_TEST_DONT_PRINT_LOG_VALUE(A);
+
+template<class S>
+void randomize(S &x)
+{
+ assert(0 == x.size());
+ for(;;){
+ unsigned int i = std::rand() % 27;
+ if(0 == i)
+ break;
+ x += static_cast<BOOST_DEDUCED_TYPENAME S::value_type>('a' - 1 + i);
+ }
+}
+
+template<class T>
+void accumulate(std::size_t & s, const T & t){
+ const char * tptr = (const char *)(& t);
+ unsigned int count = sizeof(t);
+ while(count-- > 0){
+ s += *tptr++;
+ }
+}
+
+A::operator std::size_t () const {
+ std::size_t retval = 0;
+ accumulate(retval, b);
+ #ifndef BOOST_NO_INT64_T
+ accumulate(retval, f);
+ accumulate(retval, g);
+ #endif
+ accumulate(retval, l);
+ accumulate(retval, m);
+ accumulate(retval, n);
+ accumulate(retval, o);
+ accumulate(retval, p);
+ accumulate(retval, q);
+ #ifndef BOOST_NO_CWCHAR
+ accumulate(retval, r);
+ #endif
+ accumulate(retval, c);
+ accumulate(retval, s);
+ accumulate(retval, t);
+ accumulate(retval, u);
+ accumulate(retval, v);
+ return retval;
+}
+
+inline A::A() :
+ b(true),
+ #ifndef BOOST_NO_INT64_T
+ f(std::rand() * std::rand()),
+ g(std::rand() * std::rand()),
+ #endif
+ l(static_cast<enum h>(std::rand() % 3)),
+ m(std::rand()),
+ n(std::rand()),
+ o(std::rand()),
+ p(std::rand()),
+ q(std::rand()),
+ #ifndef BOOST_NO_CWCHAR
+ r(std::rand()),
+ #endif
+ c(std::rand()),
+ s(std::rand()),
+ t(std::rand()),
+ u(std::rand()),
+ v(std::rand()),
+ w((float)std::rand()),
+ x((double)std::rand())
+{
+ randomize(y);
+ #ifndef BOOST_NO_STD_WSTRING
+ randomize(z);
+ #endif
+}
+
+inline bool A::operator==(const A &rhs) const
+{
+ if(b != rhs.b)
+ return false;
+ if(l != rhs.l)
+ return false;
+ #ifndef BOOST_NO_INT64_T
+ if(f != rhs.f)
+ return false;
+ if(g != rhs.g)
+ return false;
+ #endif
+ if(m != rhs.m)
+ return false;
+ if(n != rhs.n)
+ return false;
+ if(o != rhs.o)
+ return false;
+ if(p != rhs.p)
+ return false;
+ if(q != rhs.q)
+ return false;
+ #ifndef BOOST_NO_CWCHAR
+ if(r != rhs.r)
+ return false;
+ #endif
+ if(c != rhs.c)
+ return false;
+ if(s != rhs.s)
+ return false;
+ if(t != rhs.t)
+ return false;
+ if(u != rhs.u)
+ return false;
+ if(v != rhs.v)
+ return false;
+ if(w == 0 && std::fabs(rhs.w) > std::numeric_limits<float>::epsilon())
+ return false;
+ if(std::fabs(rhs.w/w - 1.0) > std::numeric_limits<float>::epsilon())
+ return false;
+ if(x == 0 && std::fabs(rhs.x - x) > std::numeric_limits<float>::epsilon())
+ return false;
+ if(std::fabs(rhs.x/x - 1.0) > std::numeric_limits<float>::epsilon())
+ return false;
+ if(0 != y.compare(rhs.y))
+ return false;
+ #ifndef BOOST_NO_STD_WSTRING
+ if(0 != z.compare(rhs.z))
+ return false;
+ #endif
+ return true;
+}
+
+inline bool A::operator!=(const A &rhs) const
+{
+ return ! (*this == rhs);
+}
+
+inline bool A::operator<(const A &rhs) const
+{
+ if(b != rhs.b)
+ return b < rhs.b;
+ #ifndef BOOST_NO_INT64_T
+ if(f != rhs.f)
+ return f < rhs.f;
+ if(g != rhs.g)
+ return g < rhs.g;
+ #endif
+ if(l != rhs.l )
+ return l < rhs.l;
+ if(m != rhs.m )
+ return m < rhs.m;
+ if(n != rhs.n )
+ return n < rhs.n;
+ if(o != rhs.o )
+ return o < rhs.o;
+ if(p != rhs.p )
+ return p < rhs.p;
+ if(q != rhs.q )
+ return q < rhs.q;
+ #ifndef BOOST_NO_CWCHAR
+ if(r != rhs.r )
+ return r < rhs.r;
+ #endif
+ if(c != rhs.c )
+ return c < rhs.c;
+ if(s != rhs.s )
+ return s < rhs.s;
+ if(t != rhs.t )
+ return t < rhs.t;
+ if(u != rhs.u )
+ return u < rhs.u;
+ if(v != rhs.v )
+ return v < rhs.v;
+ if(w != rhs.w )
+ return w < rhs.w;
+ if(x != rhs.x )
+ return x < rhs.x;
+ int i = y.compare(rhs.y);
+ if(i != 0 )
+ return i < 0;
+ #ifndef BOOST_NO_STD_WSTRING
+ int j = z.compare(rhs.z);
+ if(j != 0 )
+ return j < 0;
+ #endif
+ return false;
+}
+
+#endif // BOOST_SERIALIZATION_TEST_A_HPP
--- /dev/null
+#ifndef BOOST_SERIALIZATION_TEST_B_HPP
+#define BOOST_SERIALIZATION_TEST_B_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
+// B.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 <cstdlib> // for rand()
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::rand;
+}
+#endif
+
+#include <boost/serialization/version.hpp>
+#include <boost/serialization/split_member.hpp>
+#include <boost/serialization/base_object.hpp>
+
+#include "A.hpp"
+
+///////////////////////////////////////////////////////
+// Derived class test
+class B : public A
+{
+private:
+ friend class boost::serialization::access;
+ template<class Archive>
+ void save(Archive &ar, const unsigned int /* file_version */) const
+ {
+ // write any base class info to the archive
+ ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(A);
+
+ // write out members
+ ar << BOOST_SERIALIZATION_NVP(s);
+ ar << BOOST_SERIALIZATION_NVP(t);
+ ar << BOOST_SERIALIZATION_NVP(u);
+ ar << BOOST_SERIALIZATION_NVP(v);
+ ar << BOOST_SERIALIZATION_NVP(w);
+ ar << BOOST_SERIALIZATION_NVP(x);
+ }
+
+ template<class Archive>
+ void load(Archive & ar, const unsigned int file_version)
+ {
+ // read any base class info to the archive
+ ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(A);
+ switch(file_version){
+ case 1:
+ case 2:
+ ar >> BOOST_SERIALIZATION_NVP(s);
+ ar >> BOOST_SERIALIZATION_NVP(t);
+ ar >> BOOST_SERIALIZATION_NVP(u);
+ ar >> BOOST_SERIALIZATION_NVP(v);
+ ar >> BOOST_SERIALIZATION_NVP(w);
+ ar >> BOOST_SERIALIZATION_NVP(x);
+ default:
+ break;
+ }
+ }
+
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+ signed char s;
+ unsigned char t;
+ signed int u;
+ unsigned int v;
+ float w;
+ double x;
+public:
+ B();
+ virtual ~B(){};
+ bool operator==(const B &rhs) const;
+};
+
+B::B() :
+ s(std::rand()),
+ t(std::rand()),
+ u(std::rand()),
+ v(std::rand()),
+ w((float)std::rand() / std::rand()),
+ x((double)std::rand() / std::rand())
+{
+}
+
+BOOST_CLASS_VERSION(B, 2)
+
+inline bool B::operator==(const B &rhs) const
+{
+ return
+ A::operator==(rhs)
+ && s == rhs.s
+ && t == rhs.t
+ && u == rhs.u
+ && v == rhs.v
+ && std::fabs(w - rhs.w) <= std::numeric_limits<float>::round_error()
+ && std::fabs(x - rhs.x) <= std::numeric_limits<float>::round_error()
+ ;
+}
+
+#endif // BOOST_SERIALIZATION_TEST_B_HPP
--- /dev/null
+#ifndef BOOST_SERIALIZATION_TEST_B_HPP
+#define BOOST_SERIALIZATION_TEST_B_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
+// B.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 <cstdlib> // for rand()
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::rand;
+}
+#endif
+
+#include <boost/serialization/version.hpp>
+#include <boost/serialization/split_member.hpp>
+#include <boost/serialization/base_object.hpp>
+
+#include "A.hpp"
+
+///////////////////////////////////////////////////////
+// Derived class test
+class B : public A
+{
+private:
+ friend class boost::serialization::access;
+ template<class Archive>
+ void save(Archive &ar, const unsigned int /* file_version */) const
+ {
+ // write any base class info to the archive
+ ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(A);
+
+ // write out members
+ ar << BOOST_SERIALIZATION_NVP(s);
+ ar << BOOST_SERIALIZATION_NVP(t);
+ ar << BOOST_SERIALIZATION_NVP(u);
+ ar << BOOST_SERIALIZATION_NVP(v);
+ ar << BOOST_SERIALIZATION_NVP(w);
+ ar << BOOST_SERIALIZATION_NVP(x);
+ }
+
+ template<class Archive>
+ void load(Archive & ar, const unsigned int file_version)
+ {
+ // read any base class info to the archive
+ ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(A);
+ switch(file_version){
+ case 1:
+ case 2:
+ ar >> BOOST_SERIALIZATION_NVP(s);
+ ar >> BOOST_SERIALIZATION_NVP(t);
+ ar >> BOOST_SERIALIZATION_NVP(u);
+ ar >> BOOST_SERIALIZATION_NVP(v);
+ ar >> BOOST_SERIALIZATION_NVP(w);
+ ar >> BOOST_SERIALIZATION_NVP(x);
+ default:
+ break;
+ }
+ }
+
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+ signed char s;
+ unsigned char t;
+ signed int u;
+ unsigned int v;
+ float w;
+ double x;
+public:
+ B();
+ virtual ~B(){};
+ bool operator==(const B &rhs) const;
+};
+
+B::B() :
+ s(std::rand()),
+ t(std::rand()),
+ u(std::rand()),
+ v(std::rand()),
+ w((float)std::rand() / std::rand()),
+ x((double)std::rand() / std::rand())
+{
+}
+
+BOOST_CLASS_VERSION(B, 2)
+
+inline bool B::operator==(const B &rhs) const
+{
+ return
+ A::operator==(rhs)
+ && s == rhs.s
+ && t == rhs.t
+ && u == rhs.u
+ && v == rhs.v
+ && std::fabs(w - rhs.w) <= std::numeric_limits<float>::round_error()
+ && std::fabs(x - rhs.x) <= std::numeric_limits<float>::round_error()
+ ;
+}
+
+#endif // BOOST_SERIALIZATION_TEST_B_HPP
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// demo_exception.cpp
+
+// (C) Copyright 2002-4 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)
+
+// Example of safe exception handling for pointer de-serialization
+//
+// This example was prepared by Robert Ramey to demonstrate and test
+// safe exception handling during the de-serialization of pointers in
+// a non-trivial example.
+//
+// Hopefully, this addresses exception issues raised by
+// Vahan Margaryan who spent considerable time and effort
+// in the analysis and testing of issues of exception safety
+// of the serialization library.
+
+#include <algorithm>
+#include <iostream>
+#include <cstddef> // NULL
+#include <fstream>
+#include <string>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include <boost/archive/tmpdir.hpp>
+
+#ifndef BOOST_NO_EXCEPTIONS
+#include <exception>
+#endif
+
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/text_oarchive.hpp>
+
+#include <boost/serialization/list.hpp>
+#include <boost/serialization/split_member.hpp>
+
+template<class TPTR>
+struct deleter
+{
+ void operator()(TPTR t){
+ delete t;
+ }
+};
+
+class Course;
+class Student;
+
+class Student
+{
+public:
+ static int count;
+ Student(){
+ count++;
+ }
+ ~Student(){
+ some_courses.clear();
+ count--;
+ }
+ std::list<Course *> some_courses;
+private:
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* file_version */){
+ ar & some_courses;
+ }
+};
+
+int Student::count = 0;
+
+class Course
+{
+public:
+ static int count;
+ Course(){
+ count++;
+ }
+ ~Course(){
+ // doesnt delete pointers in list
+ // since it doesn't "own" them
+ some_students.clear();
+ count--;
+ }
+ std::list<Student *> some_students;
+private:
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* file_version */){
+ ar & some_students;
+ }
+};
+
+int Course::count = 0;
+
+class School
+{
+public:
+ ~School(){
+ // must delete all the students because
+ // it "owns" them
+ std::for_each(all_students.begin(), all_students.end(), deleter<Student *>());
+ all_students.clear();
+ // as well as courses
+ std::for_each(all_courses.begin(), all_courses.end(), deleter<Course *>());
+ all_courses.clear();
+ }
+ std::list<Student *> all_students;
+ std::list<Course *> all_courses;
+private:
+ friend class boost::serialization::access;
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+ template<class Archive>
+ void save(Archive & ar, const unsigned int file_version) const;
+ template<class Archive>
+ void load(Archive & ar, const unsigned int file_version);
+};
+
+#if 0
+// case 1:
+template<class Archive>
+void School::serialize(Archive & ar, const unsigned int /* file_version */){
+ // if an exeception occurs while loading courses
+ // the structure courses may have some courses each
+ // with students
+ ar & all_courses;
+ // while all_students will have no members.
+ ar & all_students; // create students that have no courses
+ // so ~School() will delete all members of courses
+ // but this will NOT delete any students - see above
+ // a memory leak will be the result.
+}
+
+// switching the order of serialization doesn't help in this case
+// case 2:
+template<class Archive>
+void School::serialize(Archive & ar, const unsigned int /* file_version */){
+ ar & all_students;
+ ar >> all_courses; // create any courses that have no students
+}
+#endif
+
+template<class Archive>
+void School::save(Archive & ar, const unsigned int /* file_version */) const {
+ ar << all_students;
+ ar << all_courses;
+}
+
+template<class Archive>
+void School::load(Archive & ar, const unsigned int /* file_version */){
+ // if an exeception occurs while loading courses
+ // the structure courses may have some courses each
+ // with students
+ try{
+ // deserialization of a Course * will in general provoke the
+ // deserialization of Student * which are added to the list of
+ // students for a class. That is, this process will result
+ // in the copying of a pointer.
+ ar >> all_courses;
+ ar >> all_students; // create students that have no courses
+ }
+ catch(std::exception){
+ // elminate any dangling references
+ all_courses.clear();
+ all_students.clear();
+ throw;
+ }
+}
+
+void init(School *school){
+ Student *bob = new Student();
+ Student *ted = new Student();
+ Student *carol = new Student();
+ Student *alice = new Student();
+
+ school->all_students.push_back(bob);
+ school->all_students.push_back(ted);
+ school->all_students.push_back(carol);
+ school->all_students.push_back(alice);
+
+ Course *math = new Course();
+ Course *history = new Course();
+ Course *literature = new Course();
+ Course *gym = new Course();
+
+ school->all_courses.push_back(math);
+ school->all_courses.push_back(history);
+ school->all_courses.push_back(literature);
+ school->all_courses.push_back(gym);
+
+ bob->some_courses.push_back(math);
+ math->some_students.push_back(bob);
+ bob->some_courses.push_back(literature);
+ literature->some_students.push_back(bob);
+
+ ted->some_courses.push_back(math);
+ math->some_students.push_back(ted);
+ ted->some_courses.push_back(history);
+ history->some_students.push_back(ted);
+
+ alice->some_courses.push_back(literature);
+ literature->some_students.push_back(alice);
+ alice->some_courses.push_back(history);
+ history->some_students.push_back(alice);
+
+ // no students signed up for gym
+ // carol has no courses
+}
+
+void save(const School * const school, const char *filename){
+ std::ofstream ofile(filename);
+ boost::archive::text_oarchive ar(ofile);
+ ar << school;
+}
+
+void load(School * & school, const char *filename){
+ std::ifstream ifile(filename);
+ boost::archive::text_iarchive ar(ifile);
+ try{
+ ar >> school;
+ }
+ catch(std::exception){
+ // eliminate dangling reference
+ school = NULL;
+ }
+}
+
+int main(int argc, char *argv[]){
+ std::string filename(boost::archive::tmpdir());
+ filename += "/demofile.txt";
+
+ School *school = new School();
+ std::cout << "1. student count = " << Student::count << std::endl;
+ std::cout << "2. class count = " << Course::count << std::endl;
+ init(school);
+ std::cout << "3. student count = " << Student::count << std::endl;
+ std::cout << "4. class count = " << Course::count << std::endl;
+ save(school, filename.c_str());
+ delete school;
+ school = NULL;
+ std::cout << "5. student count = " << Student::count << std::endl;
+ std::cout << "6. class count = " << Course::count << std::endl;
+ load(school, filename.c_str());
+ std::cout << "7. student count = " << Student::count << std::endl;
+ std::cout << "8. class count = " << Course::count << std::endl;
+ delete school;
+ std::cout << "9. student count = " << Student::count << std::endl;
+ std::cout << "10. class count = " << Course::count << std::endl;
+ std::remove(filename.c_str());
+ return Student::count + Course::count;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// demo_fast_binary_archive.cpp
+
+// (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)
+
+// should pass compilation and execution
+#include <sstream>
+
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/serialization/pfto.hpp>
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/binary_oarchive_impl.hpp>
+#include <boost/archive/binary_iarchive_impl.hpp>
+#include <boost/archive/detail/register_archive.hpp>
+
+// include template definitions for base classes used. Otherwise
+// you'll get link failure with undefined symbols
+#include <boost/archive/impl/basic_binary_oprimitive.ipp>
+#include <boost/archive/impl/basic_binary_iprimitive.ipp>
+#include <boost/archive/impl/basic_binary_oarchive.ipp>
+#include <boost/archive/impl/basic_binary_iarchive.ipp>
+
+using namespace boost::archive;
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// "Fast" output binary archive. This is a variation of the native binary
+class fast_binary_oarchive :
+ // don't derive from binary_oarchive !!!
+ public binary_oarchive_impl<
+ fast_binary_oarchive,
+ std::ostream::char_type,
+ std::ostream::traits_type
+ >
+{
+ typedef fast_binary_oarchive derived_t;
+ typedef binary_oarchive_impl<
+ fast_binary_oarchive,
+ std::ostream::char_type,
+ std::ostream::traits_type
+ > base_t;
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+ friend class boost::archive::detail::interface_oarchive<derived_t>;
+ friend class basic_binary_oarchive<derived_t>;
+ friend class basic_binary_oprimitive<
+ derived_t,
+ std::ostream::char_type,
+ std::ostream::traits_type
+ >;
+ friend class boost::archive::save_access;
+#endif
+ // add base class to the places considered when matching
+ // save function to a specific set of arguments. Note, this didn't
+ // work on my MSVC 7.0 system using
+ // binary_oarchive_impl<derived_t>::load_override;
+ // so we use the sure-fire method below. This failed to work as well
+ template<class T>
+ void save_override(T & t, BOOST_PFTO int){
+ base_t::save_override(t, 0);
+ // verify that this program is in fact working by making sure
+ // that arrays are getting passed here
+ BOOST_STATIC_ASSERT(! (boost::is_array<T>::value) );
+ }
+ template<int N>
+ void save_override(const int (& t)[N] , int){
+ save_binary(t, sizeof(t));
+ }
+ template<int N>
+ void save_override(const unsigned int (& t)[N], int){
+ save_binary(t, sizeof(t));
+ }
+ template<int N>
+ void save_override(const long (& t)[N], int){
+ save_binary(t, sizeof(t));
+ }
+ template<int N>
+ void save_override(const unsigned long (& t)[N], int){
+ save_binary(t, sizeof(t));
+ }
+public:
+ fast_binary_oarchive(std::ostream & os, unsigned flags = 0) :
+ base_t(os, flags)
+ {}
+ fast_binary_oarchive(std::streambuf & bsb, unsigned int flags = 0) :
+ base_t(bsb, flags)
+ {}
+};
+
+// required by export
+BOOST_SERIALIZATION_REGISTER_ARCHIVE(fast_binary_oarchive)
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// "Fast" input binary archive. This is a variation of the native binary
+class fast_binary_iarchive :
+ // don't derive from binary_oarchive !!!
+ public binary_iarchive_impl<
+ fast_binary_iarchive,
+ std::istream::char_type,
+ std::istream::traits_type
+ >
+{
+ typedef fast_binary_iarchive derived_t;
+ typedef binary_iarchive_impl<
+ fast_binary_iarchive,
+ std::istream::char_type,
+ std::istream::traits_type
+ > base_t;
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+ friend class boost::archive::detail::interface_iarchive<derived_t>;
+ friend class basic_binary_iarchive<derived_t>;
+ friend class basic_binary_iprimitive<
+ derived_t,
+ std::ostream::char_type,
+ std::ostream::traits_type
+ >;
+ friend class boost::archive::load_access;
+#endif
+ // add base class to the places considered when matching
+ // save function to a specific set of arguments. Note, this didn't
+ // work on my MSVC 7.0 system using
+ // binary_oarchive_impl<derived_t>::load_override;
+ // so we use the sure-fire method below. This failed to work as well
+ template<class T>
+ void load_override(T & t, BOOST_PFTO int){
+ base_t::load_override(t, 0);
+ BOOST_STATIC_ASSERT(! (boost::is_array<T>::value) );
+ }
+ template<int N>
+ void load_override(int (& t)[N], int){
+ load_binary(t, sizeof(t));
+ }
+ template<int N>
+ void load_override(unsigned int (& t)[N], int){
+ load_binary(t, sizeof(t));
+ }
+ template<int N>
+ void load_override(long (& t)[N], int){
+ load_binary(t, sizeof(t));
+ }
+ template<int N>
+ void load_override(unsigned long (& t)[N], int){
+ load_binary(t, sizeof(t));
+ }
+public:
+ fast_binary_iarchive(std::istream & is, unsigned int flags = 0) :
+ base_t(is, flags)
+ {}
+ fast_binary_iarchive(std::streambuf & bsb, unsigned int flags = 0) :
+ base_t(bsb, flags)
+ {}
+};
+
+// required by export
+BOOST_SERIALIZATION_REGISTER_ARCHIVE(fast_binary_iarchive)
+
+int main( int argc, char* argv[] )
+{
+ const int a[3] = {1, 2, 3};
+ int a1[3] = {4, 5, 6};
+
+ std::stringstream ss;
+ {
+ fast_binary_oarchive pboa(ss);
+ pboa << a;
+ }
+ {
+ fast_binary_iarchive pbia(ss);
+ pbia >> a1;
+ }
+ return (a[0] != a1[0]) || (a[1] != a1[1]) || (a[2] != a1[2]);
+}
+
+
--- /dev/null
+#ifndef BOOST_SERIALIZATION_EXAMPLE_DEMO_GPS_HPP
+#define BOOST_SERIALIZATION_EXAMPLE_DEMO_GPS_HPP
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+//
+// demo_gps.hpp
+//
+// (C) Copyright 2002-4 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)
+
+#include <iomanip>
+#include <iostream>
+#include <fstream>
+
+#include <boost/serialization/string.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/utility.hpp>
+#include <boost/serialization/list.hpp>
+#include <boost/serialization/version.hpp>
+#include <boost/serialization/assume_abstract.hpp>
+
+// This illustration models the bus system of a small city.
+// This includes, multiple bus stops, bus routes and schedules.
+// There are different kinds of stops. Bus stops in general will
+// will appear on multiple routes. A schedule will include
+// muliple trips on the same route.
+
+/////////////////////////////////////////////////////////////
+// gps coordinate
+//
+// llustrates serialization for a simple type
+//
+class gps_position
+{
+ friend class boost::serialization::access;
+ friend std::ostream & operator<<(std::ostream &os, const gps_position &gp);
+
+ int degrees;
+ int minutes;
+ float seconds;
+
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_NVP(degrees)
+ & BOOST_SERIALIZATION_NVP(minutes)
+ & BOOST_SERIALIZATION_NVP(seconds);
+ }
+
+public:
+ // every serializable class needs a constructor
+ gps_position(){};
+ gps_position(int _d, int _m, float _s) :
+ degrees(_d), minutes(_m), seconds(_s)
+ {}
+};
+
+std::ostream & operator<<(std::ostream &os, const gps_position &gp)
+{
+ return os << ' ' << gp.degrees << (unsigned char)186 << gp.minutes << '\'' << gp.seconds << '"';
+}
+
+/////////////////////////////////////////////////////////////
+// One bus stop
+//
+// illustrates serialization of serializable members
+//
+
+class bus_stop
+{
+ friend class boost::serialization::access;
+ virtual std::string description() const = 0;
+ gps_position latitude;
+ gps_position longitude;
+
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int version)
+ {
+ ar & BOOST_SERIALIZATION_NVP(latitude);
+ ar & BOOST_SERIALIZATION_NVP(longitude);
+ }
+
+protected:
+ bus_stop(const gps_position & _lat, const gps_position & _long) :
+ latitude(_lat), longitude(_long)
+ {}
+public:
+ bus_stop(){}
+ friend std::ostream & operator<<(std::ostream &os, const bus_stop &gp);
+ virtual ~bus_stop(){}
+};
+
+BOOST_SERIALIZATION_ASSUME_ABSTRACT(bus_stop)
+
+std::ostream & operator<<(std::ostream &os, const bus_stop &bs)
+{
+ return os << bs.latitude << bs.longitude << ' ' << bs.description();
+}
+
+/////////////////////////////////////////////////////////////
+// Several kinds of bus stops
+//
+// illustrates serialization of derived types
+//
+class bus_stop_corner : public bus_stop
+{
+ friend class boost::serialization::access;
+ std::string street1;
+ std::string street2;
+ virtual std::string description() const
+ {
+ return street1 + " and " + street2;
+ }
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int version)
+ {
+ // save/load base class information
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(bus_stop);
+ ar & BOOST_SERIALIZATION_NVP(street1);
+ ar & BOOST_SERIALIZATION_NVP(street2);
+ }
+public:
+ bus_stop_corner(){}
+ bus_stop_corner(const gps_position & _lat, const gps_position & _long,
+ const std::string & _s1, const std::string & _s2
+ ) :
+ bus_stop(_lat, _long), street1(_s1), street2(_s2)
+ {
+ }
+};
+
+class bus_stop_destination : public bus_stop
+{
+ friend class boost::serialization::access;
+ std::string name;
+ virtual std::string description() const
+ {
+ return name;
+ }
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int version)
+ {
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(bus_stop)
+ & BOOST_SERIALIZATION_NVP(name);
+ }
+public:
+ bus_stop_destination(){}
+ bus_stop_destination(
+ const gps_position & _lat, const gps_position & _long, const std::string & _name
+ ) :
+ bus_stop(_lat, _long), name(_name)
+ {
+ }
+};
+
+/////////////////////////////////////////////////////////////
+// a bus route is a collection of bus stops
+//
+// illustrates serialization of STL collection templates.
+//
+// illustrates serialzation of polymorphic pointer (bus stop *);
+//
+// illustrates storage and recovery of shared pointers is correct
+// and efficient. That is objects pointed to by more than one
+// pointer are stored only once. In such cases only one such
+// object is restored and pointers are restored to point to it
+//
+class bus_route
+{
+ friend class boost::serialization::access;
+ friend std::ostream & operator<<(std::ostream &os, const bus_route &br);
+ typedef bus_stop * bus_stop_pointer;
+ std::list<bus_stop_pointer> stops;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int version)
+ {
+ // in this program, these classes are never serialized directly but rather
+ // through a pointer to the base class bus_stop. So we need a way to be
+ // sure that the archive contains information about these derived classes.
+ //ar.template register_type<bus_stop_corner>();
+ ar.register_type(static_cast<bus_stop_corner *>(NULL));
+ //ar.template register_type<bus_stop_destination>();
+ ar.register_type(static_cast<bus_stop_destination *>(NULL));
+ // serialization of stl collections is already defined
+ // in the header
+ ar & BOOST_SERIALIZATION_NVP(stops);
+ }
+public:
+ bus_route(){}
+ void append(bus_stop *_bs)
+ {
+ stops.insert(stops.end(), _bs);
+ }
+};
+std::ostream & operator<<(std::ostream &os, const bus_route &br)
+{
+ std::list<bus_stop *>::const_iterator it;
+ // note: we're displaying the pointer to permit verification
+ // that duplicated pointers are properly restored.
+ for(it = br.stops.begin(); it != br.stops.end(); it++){
+ os << '\n' << std::hex << "0x" << *it << std::dec << ' ' << **it;
+ }
+ return os;
+}
+
+/////////////////////////////////////////////////////////////
+// a bus schedule is a collection of routes each with a starting time
+//
+// Illustrates serialization of STL objects(pair) in a non-intrusive way.
+// See definition of operator<< <pair<F, S> >(ar, pair)
+//
+// illustrates nesting of serializable classes
+//
+// illustrates use of version number to automatically grandfather older
+// versions of the same class.
+
+class bus_schedule
+{
+ friend class boost::serialization::access;
+ friend std::ostream & operator<<(std::ostream &os, const bus_schedule &bs);
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int version)
+ {
+ ar & BOOST_SERIALIZATION_NVP(schedule);
+ }
+ // note: this structure was made public. because the friend declarations
+ // didn't seem to work as expected.
+public:
+ struct trip_info
+ {
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int file_version)
+ {
+ // in versions 2 or later
+ if(file_version >= 2)
+ // read the drivers name
+ ar & BOOST_SERIALIZATION_NVP(driver);
+ // all versions have the follwing info
+ ar & BOOST_SERIALIZATION_NVP(hour)
+ & BOOST_SERIALIZATION_NVP(minute);
+ }
+
+ // starting time
+ int hour;
+ int minute;
+ // only after system shipped was the driver's name added to the class
+ std::string driver;
+
+ trip_info(){}
+ trip_info(int _h, int _m, const std::string &_d) :
+ hour(_h), minute(_m), driver(_d)
+ {}
+ ~trip_info(){
+ }
+ };
+// friend std::ostream & operator<<(std::ostream &os, const trip_info &ti);
+private:
+ std::list<std::pair<trip_info, bus_route *> > schedule;
+public:
+ void append(const std::string &_d, int _h, int _m, bus_route *_br)
+ {
+ schedule.insert(schedule.end(), std::make_pair(trip_info(_h, _m, _d), _br));
+ }
+ bus_schedule(){}
+};
+
+BOOST_CLASS_VERSION(bus_schedule::trip_info, 3)
+BOOST_CLASS_VERSION(bus_schedule, 2)
+
+std::ostream & operator<<(std::ostream &os, const bus_schedule::trip_info &ti)
+{
+ return os << '\n' << ti.hour << ':' << ti.minute << ' ' << ti.driver << ' ';
+}
+std::ostream & operator<<(std::ostream &os, const bus_schedule &bs)
+{
+ std::list<std::pair<bus_schedule::trip_info, bus_route *> >::const_iterator it;
+ for(it = bs.schedule.begin(); it != bs.schedule.end(); it++){
+ os << it->first << *(it->second);
+ }
+ return os;
+}
+
+#endif // BOOST_SERIALIZATION_EXAMPLE_DEMO_GPS_HPP
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+//
+// demo_log.cpp
+//
+// (C) Copyright 2009 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)
+
+#include <iostream>
+#include <cstdio>
+
+#include "demo_gps.hpp"
+#include "log_archive.hpp"
+
+int main(int argc, char *argv[])
+{
+ // make the schedule
+ bus_schedule schedule;
+
+ // fill in the data
+ // make a few stops
+ bus_stop *bs0 = new bus_stop_corner(
+ gps_position(34, 135, 52.560f),
+ gps_position(134, 22, 78.30f),
+ "24th Street", "10th Avenue"
+ );
+ bus_stop *bs1 = new bus_stop_corner(
+ gps_position(35, 137, 23.456f),
+ gps_position(133, 35, 54.12f),
+ "State street", "Cathedral Vista Lane"
+ );
+ bus_stop *bs2 = new bus_stop_destination(
+ gps_position(35, 136, 15.456f),
+ gps_position(133, 32, 15.300f),
+ "White House"
+ );
+ bus_stop *bs3 = new bus_stop_destination(
+ gps_position(35, 134, 48.789f),
+ gps_position(133, 32, 16.230f),
+ "Lincoln Memorial"
+ );
+
+ // make a routes
+ bus_route route0;
+ route0.append(bs0);
+ route0.append(bs1);
+ route0.append(bs2);
+
+ // add trips to schedule
+ schedule.append("bob", 6, 24, &route0);
+ schedule.append("bob", 9, 57, &route0);
+ schedule.append("alice", 11, 02, &route0);
+
+ // make aother routes
+ bus_route route1;
+ route1.append(bs3);
+ route1.append(bs2);
+ route1.append(bs1);
+
+ // add trips to schedule
+ schedule.append("ted", 7, 17, &route1);
+ schedule.append("ted", 9, 38, &route1);
+ schedule.append("alice", 11, 47, &route1);
+
+ // display the complete schedule
+ log_archive oa(std::cout);
+ //oa << BOOST_SERIALIZATION_NVP(schedule);
+ oa << schedule;
+
+ delete bs0;
+ delete bs1;
+ delete bs2;
+ delete bs3;
+ return 0;
+}
--- /dev/null
+original schedule
+6:24 bob
+0x003265C8 34º135'52.56" 134º22'78.3" 24th Street and 10th Avenue
+0x00326648 35º137'23.456" 133º35'54.12" State street and Cathedral Vista Lane
+0x00326768 35º136'15.456" 133º32'15.3" White House
+9:57 bob
+0x003265C8 34º135'52.56" 134º22'78.3" 24th Street and 10th Avenue
+0x00326648 35º137'23.456" 133º35'54.12" State street and Cathedral Vista Lane
+0x00326768 35º136'15.456" 133º32'15.3" White House
+11:2 alice
+0x003265C8 34º135'52.56" 134º22'78.3" 24th Street and 10th Avenue
+0x00326648 35º137'23.456" 133º35'54.12" State street and Cathedral Vista Lane
+0x00326768 35º136'15.456" 133º32'15.3" White House
+7:17 ted
+0x003267D0 35º134'48.789" 133º32'16.23" Lincoln Memorial
+0x00326768 35º136'15.456" 133º32'15.3" White House
+0x00326648 35º137'23.456" 133º35'54.12" State street and Cathedral Vista Lane
+9:38 ted
+0x003267D0 35º134'48.789" 133º32'16.23" Lincoln Memorial
+0x00326768 35º136'15.456" 133º32'15.3" White House
+0x00326648 35º137'23.456" 133º35'54.12" State street and Cathedral Vista Lane
+11:47 alice
+0x003267D0 35º134'48.789" 133º32'16.23" Lincoln Memorial
+0x00326768 35º136'15.456" 133º32'15.3" White House
+0x00326648 35º137'23.456" 133º35'54.12" State street and Cathedral Vista Lane
+restored schedule
+6:24
+0x0032A2F8 34º135'52.56" 134º22'78.3" 24th Street and 10th Avenue
+0x0032A508 35º137'23.456" 133º35'54.12" State street and Cathedral Vista Lane
+0x0032A628 35º136'15.456" 133º32'15.3" White House
+9:57
+0x0032A2F8 34º135'52.56" 134º22'78.3" 24th Street and 10th Avenue
+0x0032A508 35º137'23.456" 133º35'54.12" State street and Cathedral Vista Lane
+0x0032A628 35º136'15.456" 133º32'15.3" White House
+11:2
+0x0032A2F8 34º135'52.56" 134º22'78.3" 24th Street and 10th Avenue
+0x0032A508 35º137'23.456" 133º35'54.12" State street and Cathedral Vista Lane
+0x0032A628 35º136'15.456" 133º32'15.3" White House
+7:17
+0x0032A8C0 35º134'48.789" 133º32'16.23" Lincoln Memorial
+0x0032A628 35º136'15.456" 133º32'15.3" White House
+0x0032A508 35º137'23.456" 133º35'54.12" State street and Cathedral Vista Lane
+9:38
+0x0032A8C0 35º134'48.789" 133º32'16.23" Lincoln Memorial
+0x0032A628 35º136'15.456" 133º32'15.3" White House
+0x0032A508 35º137'23.456" 133º35'54.12" State street and Cathedral Vista Lane
+11:47
+0x0032A8C0 35º134'48.789" 133º32'16.23" Lincoln Memorial
+0x0032A628 35º136'15.456" 133º32'15.3" White House
+0x0032A508 35º137'23.456" 133º35'54.12" State street and Cathedral Vista Lane
+*** No errors detected
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// demo_pimpl.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <sstream>
+
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/text_oarchive.hpp>
+
+#include "demo_pimpl_A.hpp"
+
+int main(int argc, char* argv[])
+{
+ std::stringstream ss;
+
+ const A a;
+ {
+ boost::archive::text_oarchive oa(ss);
+ oa << a;
+ }
+ A a1;
+ {
+ boost::archive::text_iarchive ia(ss);
+ ia >> a1;
+ }
+ return 0;
+}
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// demo_pimpl_A.cpp
+
+// (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)
+
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/text_oarchive.hpp>
+
+#include "demo_pimpl_A.hpp"
+
+// "hidden" definition of class B
+struct B {
+ int b;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* file_version */){
+ ar & b;
+ }
+};
+
+A::A() :
+ pimpl(new B)
+{}
+A::~A(){
+ delete pimpl;
+}
+// now we can define the serialization for class A
+template<class Archive>
+void A::serialize(Archive & ar, const unsigned int /* file_version */){
+ ar & pimpl;
+}
+
+// without the explicit instantiations below, the program will
+// fail to link for lack of instantiantiation of the above function
+// note: the following failed to fix link errors for vc 7.0 !
+template void A::serialize<boost::archive::text_iarchive>(
+ boost::archive::text_iarchive & ar,
+ const unsigned int file_version
+);
+template void A::serialize<boost::archive::text_oarchive>(
+ boost::archive::text_oarchive & ar,
+ const unsigned int file_version
+);
--- /dev/null
+#ifndef BOOST_SERIALIZATION_EXAMPLE_DEMO_PIMPL_A_HPP
+#define BOOST_SERIALIZATION_EXAMPLE_DEMO_PIMPL_A_HPP
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// demo_pimpl_A.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)
+
+// class whose declaration is hidden by a pointer
+struct B;
+
+struct A {
+ // class a contains a pointer to a "hidden" declaration
+ B *pimpl;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int file_version);
+ A();
+ ~A();
+};
+
+#endif // BOOST_SERIALIZATION_EXAMPLE_DEMO_PIMPL_A_HPP
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// demo_polymorphic.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <sstream>
+
+#include <boost/archive/polymorphic_text_iarchive.hpp>
+#include <boost/archive/polymorphic_text_oarchive.hpp>
+
+#include <boost/archive/polymorphic_binary_iarchive.hpp>
+#include <boost/archive/polymorphic_binary_oarchive.hpp>
+
+#include "demo_polymorphic_A.hpp"
+
+int main(int argc, char* argv[])
+{
+ const A a;
+ A a1;
+ {
+ // test with a text archive
+ std::stringstream ss;
+ {
+ // instantiate archive which inhertis polymorphic interface
+ // and the normal text archive implementation
+ boost::archive::polymorphic_text_oarchive oa(ss);
+ boost::archive::polymorphic_oarchive & oa_interface = oa;
+ // we can just just the interface for saving
+ oa_interface << a;
+ }
+ {
+ // or we can use the implementation directly
+ boost::archive::polymorphic_text_iarchive ia(ss);
+ ia >> a1;
+ }
+ }
+ if(! (a == a1))
+ return 1;
+ {
+ //test with a binary archive
+ std::stringstream ss;
+ {
+ // instantiate archive which inhertis polymorphic interface
+ // and the normal binary archive implementation
+ boost::archive::polymorphic_binary_oarchive oa(ss);
+ oa << a;
+ }
+ {
+ // see above
+ boost::archive::polymorphic_binary_iarchive ia(ss);
+ boost::archive::polymorphic_iarchive & ia_interface = ia;
+ // use just the polymorphic interface for loading.
+ ia_interface >> a1;
+ }
+ }
+ if(! (a == a1))
+ return 1;
+ return 0;
+}
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// demo_polymorphic_A.cpp
+
+// (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)
+
+
+#include <boost/archive/polymorphic_iarchive.hpp>
+#include <boost/archive/polymorphic_oarchive.hpp>
+
+#include "demo_polymorphic_A.hpp"
+
+// explicitly instantiate templates for polymorphic archives
+// used by this demo.
+template
+void A::serialize<boost::archive::polymorphic_iarchive>(
+ boost::archive::polymorphic_iarchive &,
+ const unsigned int
+);
+template
+void A::serialize<boost::archive::polymorphic_oarchive>(
+ boost::archive::polymorphic_oarchive &,
+ const unsigned int
+);
--- /dev/null
+#ifndef BOOST_SERIALIZATION_EXAMPLE_DEMO_POLYMORPHIC_A_HPP
+#define BOOST_SERIALIZATION_EXAMPLE_DEMO_POLYMORPHIC_A_HPP
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// demo_polymorphic_A.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)
+
+namespace boost {
+namespace archive {
+
+class polymorphic_iarchive;
+class polymorphic_oarchive;
+
+} // namespace archive
+} // namespace boost
+
+struct A {
+ // class a contains a pointer to a "hidden" declaration
+ template<class Archive>
+ void serialize(
+ Archive & ar,
+ const unsigned int file_version
+ ){
+ ar & data;
+ }
+ int data;
+ bool operator==(const A & rhs) const {
+ return data == rhs.data;
+ }
+ A() :
+ data(0)
+ {}
+};
+
+#endif // BOOST_SERIALIZATION_EXAMPLE_DEMO_POLYMORPHIC_A_HPP
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+//
+// demo_portable_archive.cpp
+//
+// (C) Copyright 2002-4 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)
+
+// should pass compilation and execution
+
+// note:: this example can only be built with the static library
+// (at least with MSVC - due to conflicts related to import of library
+// code and instantiation of templates.
+#include <sstream>
+
+#include "portable_binary_oarchive.hpp"
+#include "portable_binary_iarchive.hpp"
+
+#include <cstdlib>
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ using ::rand; }
+#endif
+
+class A
+{
+ friend class boost::serialization::access;
+ char c;
+ int i;
+ int i2; // special tricky case to check sign extension
+ unsigned int ui;
+ long l;
+ unsigned long ul;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* version */){
+ ar & c & i & i2 & ui & l & ul ;
+ }
+public:
+ bool operator==(const A & rhs) const {
+ return
+ c == rhs.c
+ && i == rhs.i
+ && i2 == rhs.i2
+ && ui == rhs.ui
+ && l == rhs.l
+ && ul == rhs.ul
+ ;
+ }
+ A() :
+ c(0xFF & std::rand()),
+ i(std::rand()),
+ i2(0x80),
+ ui(std::rand()),
+ l(std::rand() * std::rand()),
+ ul(std::rand())
+ {}
+};
+
+int main( int /* argc */, char* /* argv */[] )
+{
+ const A a;
+ A a1;
+
+ std::stringstream ss;
+ {
+ portable_binary_oarchive pboa(ss);
+ pboa << a;
+ }
+ {
+ portable_binary_iarchive pbia(ss);
+ pbia >> a1;
+ }
+ if(! (a == a1))
+ return 1;
+
+ ss.clear();
+ {
+ portable_binary_oarchive pboa(ss, endian_big);
+ pboa << a;
+ }
+ {
+ portable_binary_iarchive pbia(ss, endian_big);
+ pbia >> a1;
+ }
+ if(! (a == a1))
+ return 1;
+
+ ss.clear();
+ {
+ portable_binary_oarchive pboa(ss, endian_big);
+ pboa << a;
+ }
+ {
+ portable_binary_iarchive pbia(ss, endian_big);
+ pbia >> a1;
+ }
+
+ return !(a == a1);
+}
+
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<!DOCTYPE boost_serialization>
+<boost_serialization signature="serialization::archive" version="3">
+<s class_id="0" tracking_level="0" version="2">
+ <schedule class_id="1" tracking_level="0">
+ <count>6</count>
+ <item class_id="2" tracking_level="0">
+ <first class_id="3" tracking_level="0" version="3">
+ <driver>bob</driver>
+ <hour>6</hour>
+ <minute>24</minute>
+ </first>
+ <second class_id="4" tracking_level="1" object_id="_0">
+ <stops class_id="7" tracking_level="0">
+ <count>3</count>
+ <item class_id="5" tracking_level="1" object_id="_1">
+ <bus_stop class_id="8" tracking_level="0">
+ <latitude class_id="9" tracking_level="0">
+ <degrees>34</degrees>
+ <minutes>135</minutes>
+ <seconds>52.560001</seconds>
+ </latitude>
+ <longitude>
+ <degrees>134</degrees>
+ <minutes>22</minutes>
+ <seconds>78.300003</seconds>
+ </longitude>
+ </bus_stop>
+ <street1>24th Street</street1>
+ <street2>10th Avenue</street2>
+ </item>
+ <item class_id_reference="5" object_id="_2">
+ <bus_stop>
+ <latitude>
+ <degrees>35</degrees>
+ <minutes>137</minutes>
+ <seconds>23.455999</seconds>
+ </latitude>
+ <longitude>
+ <degrees>133</degrees>
+ <minutes>35</minutes>
+ <seconds>54.119999</seconds>
+ </longitude>
+ </bus_stop>
+ <street1>State street</street1>
+ <street2>Cathedral Vista Lane</street2>
+ </item>
+ <item class_id="6" tracking_level="1" object_id="_3">
+ <bus_stop>
+ <latitude>
+ <degrees>35</degrees>
+ <minutes>136</minutes>
+ <seconds>15.456</seconds>
+ </latitude>
+ <longitude>
+ <degrees>133</degrees>
+ <minutes>32</minutes>
+ <seconds>15.3</seconds>
+ </longitude>
+ </bus_stop>
+ <name>White House</name>
+ </item>
+ </stops>
+ </second>
+ </item>
+ <item>
+ <first>
+ <driver>bob</driver>
+ <hour>9</hour>
+ <minute>57</minute>
+ </first>
+ <second class_id_reference="4" object_id_reference="_0"></second>
+ </item>
+ <item>
+ <first>
+ <driver>alice</driver>
+ <hour>11</hour>
+ <minute>2</minute>
+ </first>
+ <second class_id_reference="4" object_id_reference="_0"></second>
+ </item>
+ <item>
+ <first>
+ <driver>ted</driver>
+ <hour>7</hour>
+ <minute>17</minute>
+ </first>
+ <second class_id_reference="4" object_id="_4">
+ <stops>
+ <count>3</count>
+ <item class_id_reference="6" object_id="_5">
+ <bus_stop>
+ <latitude>
+ <degrees>35</degrees>
+ <minutes>134</minutes>
+ <seconds>48.789001</seconds>
+ </latitude>
+ <longitude>
+ <degrees>133</degrees>
+ <minutes>32</minutes>
+ <seconds>16.23</seconds>
+ </longitude>
+ </bus_stop>
+ <name>Lincoln Memorial</name>
+ </item>
+ <item class_id_reference="6" object_id_reference="_3"></item>
+ <item class_id_reference="5" object_id_reference="_2"></item>
+ </stops>
+ </second>
+ </item>
+ <item>
+ <first>
+ <driver>ted</driver>
+ <hour>9</hour>
+ <minute>38</minute>
+ </first>
+ <second class_id_reference="4" object_id_reference="_4"></second>
+ </item>
+ <item>
+ <first>
+ <driver>alice</driver>
+ <hour>11</hour>
+ <minute>47</minute>
+ </first>
+ <second class_id_reference="4" object_id_reference="_4"></second>
+ </item>
+ </schedule>
+</s>
+</boost_serialization>
--- /dev/null
+// demo_shared_ptr.cpp : demonstrates adding serialization to a template
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . Polymorphic
+// derived pointer example by David Tonge.
+
+// 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 <iomanip>
+#include <iostream>
+#include <cstddef> // NULL
+#include <fstream>
+#include <string>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/tmpdir.hpp>
+
+#include <boost/serialization/shared_ptr.hpp>
+
+///////////////////////////
+// test shared_ptr serialization
+class A
+{
+private:
+ friend class boost::serialization::access;
+ int x;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* file_version */){
+ ar & x;
+ }
+public:
+ static int count;
+ A(){++count;} // default constructor
+ virtual ~A(){--count;} // default destructor
+};
+
+BOOST_SERIALIZATION_SHARED_PTR(A)
+
+/////////////////
+// ADDITION BY DT
+class B : public A
+{
+private:
+ friend class boost::serialization::access;
+ int x;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* file_version */){
+ ar & boost::serialization::base_object<A>(*this);
+ }
+public:
+ static int count;
+ B() : A() {};
+ virtual ~B() {};
+};
+
+BOOST_SERIALIZATION_SHARED_PTR(B)
+
+/////////////////
+
+int A::count = 0;
+
+void display(boost::shared_ptr<A> &spa, boost::shared_ptr<A> &spa1)
+{
+ std::cout << "a = 0x" << std::hex << spa.get() << " ";
+ if (spa.get()) std::cout << "is a " << typeid(*(spa.get())).name() << "* ";
+ std::cout << "use count = " << std::dec << spa.use_count() << std::endl;
+ std::cout << "a1 = 0x" << std::hex << spa1.get() << " ";
+ if (spa1.get()) std::cout << "is a " << typeid(*(spa1.get())).name() << "* ";
+ std::cout << "use count = " << std::dec << spa1.use_count() << std::endl;
+ std::cout << "unique element count = " << A::count << std::endl;
+}
+
+int main(int /* argc */, char /* *argv[] */)
+{
+ std::string filename(boost::archive::tmpdir());
+ filename += "/testfile";
+
+ // create a new shared pointer to ta new object of type A
+ boost::shared_ptr<A> spa(new A);
+ boost::shared_ptr<A> spa1;
+ spa1 = spa;
+ display(spa, spa1);
+ // serialize it
+ {
+ std::ofstream ofs(filename.c_str());
+ boost::archive::text_oarchive oa(ofs);
+ oa << spa;
+ oa << spa1;
+ }
+ // reset the shared pointer to NULL
+ // thereby destroying the object of type A
+ spa.reset();
+ spa1.reset();
+ display(spa, spa1);
+ // restore state to one equivalent to the original
+ // creating a new type A object
+ {
+ // open the archive
+ std::ifstream ifs(filename.c_str());
+ boost::archive::text_iarchive ia(ifs);
+
+ // restore the schedule from the archive
+ ia >> spa;
+ ia >> spa1;
+ }
+ display(spa, spa1);
+ spa.reset();
+ spa1.reset();
+
+ std::cout << std::endl;
+ std::cout << std::endl;
+ std::cout << "New tests" << std::endl;
+
+ /////////////////
+ // ADDITION BY DT
+ // create a new shared pointer to ta new object of type A
+ spa = boost::shared_ptr<A>(new B);
+ spa1 = spa;
+ display(spa, spa1);
+ // serialize it
+ {
+ std::ofstream ofs(filename.c_str());
+ boost::archive::text_oarchive oa(ofs);
+ oa.register_type(static_cast<B *>(NULL));
+ oa << spa;
+ oa << spa1;
+ }
+ // reset the shared pointer to NULL
+ // thereby destroying the object of type B
+ spa.reset();
+ spa1.reset();
+ display(spa, spa1);
+ // restore state to one equivalent to the original
+ // creating a new type B object
+ {
+ // open the archive
+ std::ifstream ifs(filename.c_str());
+ boost::archive::text_iarchive ia(ifs);
+
+ // restore the schedule from the archive
+ ia.register_type(static_cast<B *>(NULL));
+ ia >> spa;
+ ia >> spa1;
+ }
+ display(spa, spa1);
+ ///////////////
+ std::remove(filename.c_str());
+
+ // obj of type A gets destroyed
+ // as smart_ptr goes out of scope
+ return 0;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+//
+// demo_log.cpp
+//
+// (C) Copyright 2009 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)
+
+#include <iostream>
+#include <cstdio>
+
+#include "demo_gps.hpp"
+#include "simple_log_archive.hpp"
+
+int main(int argc, char *argv[])
+{
+ // make the schedule
+ bus_schedule schedule;
+
+ // fill in the data
+ // make a few stops
+ bus_stop *bs0 = new bus_stop_corner(
+ gps_position(34, 135, 52.560f),
+ gps_position(134, 22, 78.30f),
+ "24th Street", "10th Avenue"
+ );
+ bus_stop *bs1 = new bus_stop_corner(
+ gps_position(35, 137, 23.456f),
+ gps_position(133, 35, 54.12f),
+ "State street", "Cathedral Vista Lane"
+ );
+ bus_stop *bs2 = new bus_stop_destination(
+ gps_position(35, 136, 15.456f),
+ gps_position(133, 32, 15.300f),
+ "White House"
+ );
+ bus_stop *bs3 = new bus_stop_destination(
+ gps_position(35, 134, 48.789f),
+ gps_position(133, 32, 16.230f),
+ "Lincoln Memorial"
+ );
+
+ // make a routes
+ bus_route route0;
+ route0.append(bs0);
+ route0.append(bs1);
+ route0.append(bs2);
+
+ // add trips to schedule
+ schedule.append("bob", 6, 24, &route0);
+ schedule.append("bob", 9, 57, &route0);
+ schedule.append("alice", 11, 02, &route0);
+
+ // make aother routes
+ bus_route route1;
+ route1.append(bs3);
+ route1.append(bs2);
+ route1.append(bs1);
+
+ // add trips to schedule
+ schedule.append("ted", 7, 17, &route1);
+ schedule.append("ted", 9, 38, &route1);
+ schedule.append("alice", 11, 47, &route1);
+
+ // display the complete schedule
+ simple_log_archive log(std::cout);
+ log << schedule;
+
+ delete bs0;
+ delete bs1;
+ delete bs2;
+ delete bs3;
+ return 0;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+//
+// demo_trivial_archive.cpp
+//
+// (C) Copyright 2009 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)
+
+#include <cstddef> // std::size_t
+#include <boost/mpl/bool.hpp>
+
+/////////////////////////////////////////////////////////////////////////
+// class trivial_oarchive
+class trivial_oarchive {
+
+public:
+ //////////////////////////////////////////////////////////
+ // public interface used by programs that use the
+ // serialization library
+ typedef boost::mpl::bool_<true> is_saving;
+ typedef boost::mpl::bool_<false> is_loading;
+ template<class T> register_type(){}
+ template<class T> trivial_oarchive & operator<<(const T & t){
+ return *this;
+ }
+ template<class T> trivial_oarchive & operator&(const T & t){
+ return *this << t;
+ }
+ void save_binary(void *address, std::size_t count){};
+};
+
+#include "demo_gps.hpp"
+
+int main(int argc, char *argv[])
+{
+ // make the schedule
+ bus_schedule schedule;
+
+ // fill in the data
+ // make a few stops
+ bus_stop *bs0 = new bus_stop_corner(
+ gps_position(34, 135, 52.560f),
+ gps_position(134, 22, 78.30f),
+ "24th Street", "10th Avenue"
+ );
+ bus_stop *bs1 = new bus_stop_corner(
+ gps_position(35, 137, 23.456f),
+ gps_position(133, 35, 54.12f),
+ "State street", "Cathedral Vista Lane"
+ );
+ bus_stop *bs2 = new bus_stop_destination(
+ gps_position(35, 136, 15.456f),
+ gps_position(133, 32, 15.300f),
+ "White House"
+ );
+ bus_stop *bs3 = new bus_stop_destination(
+ gps_position(35, 134, 48.789f),
+ gps_position(133, 32, 16.230f),
+ "Lincoln Memorial"
+ );
+
+ // make a routes
+ bus_route route0;
+ route0.append(bs0);
+ route0.append(bs1);
+ route0.append(bs2);
+
+ // add trips to schedule
+ schedule.append("bob", 6, 24, &route0);
+ schedule.append("bob", 9, 57, &route0);
+ schedule.append("alice", 11, 02, &route0);
+
+ // make aother routes
+ bus_route route1;
+ route1.append(bs3);
+ route1.append(bs2);
+ route1.append(bs1);
+
+ // add trips to schedule
+ schedule.append("ted", 7, 17, &route1);
+ schedule.append("ted", 9, 38, &route1);
+ schedule.append("alice", 11, 47, &route1);
+
+ // display the complete schedule
+ trivial_oarchive ta;
+ ta << schedule;
+
+ delete bs0;
+ delete bs1;
+ delete bs2;
+ delete bs3;
+ return 0;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+//
+// demo_xml.cpp
+//
+// (C) Copyright 2002-4 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)
+
+#include <iomanip>
+#include <iostream>
+#include <fstream>
+#include <string>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include <boost/archive/tmpdir.hpp>
+#include <boost/archive/xml_iarchive.hpp>
+#include <boost/archive/xml_oarchive.hpp>
+
+#include "demo_gps.hpp"
+
+void save_schedule(const bus_schedule &s, const char * filename){
+ // make an archive
+ std::ofstream ofs(filename);
+ assert(ofs.good());
+ boost::archive::xml_oarchive oa(ofs);
+ oa << BOOST_SERIALIZATION_NVP(s);
+}
+
+void
+restore_schedule(bus_schedule &s, const char * filename)
+{
+ // open the archive
+ std::ifstream ifs(filename);
+ assert(ifs.good());
+ boost::archive::xml_iarchive ia(ifs);
+
+ // restore the schedule from the archive
+ ia >> BOOST_SERIALIZATION_NVP(s);
+}
+
+int main(int argc, char *argv[])
+{
+ // make the schedule
+ bus_schedule original_schedule;
+
+ // fill in the data
+ // make a few stops
+ bus_stop *bs0 = new bus_stop_corner(
+ gps_position(34, 135, 52.560f),
+ gps_position(134, 22, 78.30f),
+ "24th Street", "10th Avenue"
+ );
+ bus_stop *bs1 = new bus_stop_corner(
+ gps_position(35, 137, 23.456f),
+ gps_position(133, 35, 54.12f),
+ "State street", "Cathedral Vista Lane"
+ );
+ bus_stop *bs2 = new bus_stop_destination(
+ gps_position(35, 136, 15.456f),
+ gps_position(133, 32, 15.300f),
+ "White House"
+ );
+ bus_stop *bs3 = new bus_stop_destination(
+ gps_position(35, 134, 48.789f),
+ gps_position(133, 32, 16.230f),
+ "Lincoln Memorial"
+ );
+
+ // make a routes
+ bus_route route0;
+ route0.append(bs0);
+ route0.append(bs1);
+ route0.append(bs2);
+
+ // add trips to schedule
+ original_schedule.append("bob", 6, 24, &route0);
+ original_schedule.append("bob", 9, 57, &route0);
+ original_schedule.append("alice", 11, 02, &route0);
+
+ // make aother routes
+ bus_route route1;
+ route1.append(bs3);
+ route1.append(bs2);
+ route1.append(bs1);
+
+ // add trips to schedule
+ original_schedule.append("ted", 7, 17, &route1);
+ original_schedule.append("ted", 9, 38, &route1);
+ original_schedule.append("alice", 11, 47, &route1);
+
+ // display the complete schedule
+ std::cout << "original schedule";
+ std::cout << original_schedule;
+
+ std::string filename(boost::archive::tmpdir());
+ filename += "/demo.xml";
+
+ // save the schedule
+ save_schedule(original_schedule, filename.c_str());
+
+ // ... some time later
+ // make a new schedule
+ bus_schedule new_schedule;
+
+ restore_schedule(new_schedule, filename.c_str());
+
+ // and display
+ std::cout << "\nrestored schedule";
+ std::cout << new_schedule;
+ // should be the same as the old one. (except for the pointer values)
+
+ std::remove(filename.c_str());
+
+ delete bs0;
+ delete bs1;
+ delete bs2;
+ delete bs3;
+ return 0;
+}
--- /dev/null
+#ifndef BOOST_SERIALIZATION_EXAMPLE_DEMO_XML_HPP
+#define BOOST_SERIALIZATION_EXAMPLE_DEMO_XML_HPP
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+//
+// demo_xml.hpp
+//
+// (C) Copyright 2002-4 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)
+
+
+#include <string>
+#include <iomanip>
+#include <iostream>
+#include <fstream>
+
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/utility.hpp>
+#include <boost/serialization/list.hpp>
+#include <boost/serialization/version.hpp>
+
+// This illustration models the bus system of a small city.
+// This includes, multiple bus stops, bus routes and schedules.
+// There are different kinds of stops. Bus stops in general will
+// will appear on multiple routes. A schedule will include
+// muliple trips on the same route.
+
+/////////////////////////////////////////////////////////////
+// gps coordinate
+//
+// llustrates serialization for a simple type
+//
+class gps_position
+{
+ friend class boost::serialization::access;
+ friend std::ostream & operator<<(std::ostream &os, const gps_position &gp);
+
+ int degrees;
+ int minutes;
+ float seconds;
+
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_NVP(degrees)
+ & BOOST_SERIALIZATION_NVP(minutes)
+ & BOOST_SERIALIZATION_NVP(seconds);
+ }
+
+public:
+ // every serializable class needs a constructor
+ gps_position(){};
+ gps_position(int _d, int _m, float _s) :
+ degrees(_d), minutes(_m), seconds(_s)
+ {}
+};
+
+std::ostream & operator<<(std::ostream &os, const gps_position &gp)
+{
+ return os << ' ' << gp.degrees << (unsigned char)186 << gp.minutes << '\'' << gp.seconds << '"';
+}
+
+/////////////////////////////////////////////////////////////
+// One bus stop
+//
+// illustrates serialization of serializable members
+//
+
+class bus_stop
+{
+ friend class boost::serialization::access;
+ virtual std::string description() const = 0;
+ gps_position latitude;
+ gps_position longitude;
+
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int version)
+ {
+ ar & BOOST_SERIALIZATION_NVP(latitude);
+ ar & BOOST_SERIALIZATION_NVP(longitude);
+ }
+
+protected:
+ bus_stop(const gps_position & _lat, const gps_position & _long) :
+ latitude(_lat), longitude(_long)
+ {}
+public:
+ bus_stop(){}
+ friend std::ostream & operator<<(std::ostream &os, const bus_stop &gp);
+ virtual ~bus_stop(){}
+};
+
+BOOST_IS_ABSTRACT(bus_stop)
+
+std::ostream & operator<<(std::ostream &os, const bus_stop &bs)
+{
+ return os << bs.latitude << bs.longitude << ' ' << bs.description();
+}
+
+/////////////////////////////////////////////////////////////
+// Several kinds of bus stops
+//
+// illustrates serialization of derived types
+//
+class bus_stop_corner : public bus_stop
+{
+ friend class boost::serialization::access;
+ std::string street1;
+ std::string street2;
+ virtual std::string description() const
+ {
+ return street1 + " and " + street2;
+ }
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int version)
+ {
+ // save/load base class information
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(bus_stop);
+ ar & BOOST_SERIALIZATION_NVP(street1);
+ ar & BOOST_SERIALIZATION_NVP(street2);
+ }
+public:
+ bus_stop_corner(){}
+ bus_stop_corner(const gps_position & _lat, const gps_position & _long,
+ const std::string & _s1, const std::string & _s2
+ ) :
+ bus_stop(_lat, _long), street1(_s1), street2(_s2)
+ {
+ }
+};
+
+class bus_stop_destination : public bus_stop
+{
+ friend class boost::serialization::access;
+ std::string name;
+ virtual std::string description() const
+ {
+ return name;
+ }
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int version)
+ {
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(bus_stop)
+ & BOOST_SERIALIZATION_NVP(name);
+ }
+public:
+ bus_stop_destination(){}
+ bus_stop_destination(
+ const gps_position & _lat, const gps_position & _long, const std::string & _name
+ ) :
+ bus_stop(_lat, _long), name(_name)
+ {
+ }
+};
+
+/////////////////////////////////////////////////////////////
+// a bus route is a collection of bus stops
+//
+// illustrates serialization of STL collection templates.
+//
+// illustrates serialzation of polymorphic pointer (bus stop *);
+//
+// illustrates storage and recovery of shared pointers is correct
+// and efficient. That is objects pointed to by more than one
+// pointer are stored only once. In such cases only one such
+// object is restored and pointers are restored to point to it
+//
+class bus_route
+{
+ friend class boost::serialization::access;
+ friend std::ostream & operator<<(std::ostream &os, const bus_route &br);
+ typedef bus_stop * bus_stop_pointer;
+ std::list<bus_stop_pointer> stops;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int version)
+ {
+ // in this program, these classes are never serialized directly but rather
+ // through a pointer to the base class bus_stop. So we need a way to be
+ // sure that the archive contains information about these derived classes.
+ //ar.template register_type<bus_stop_corner>();
+ ar.register_type(static_cast<bus_stop_corner *>(NULL));
+ //ar.template register_type<bus_stop_destination>();
+ ar.register_type(static_cast<bus_stop_destination *>(NULL));
+ // serialization of stl collections is already defined
+ // in the header
+ ar & BOOST_SERIALIZATION_NVP(stops);
+ }
+public:
+ bus_route(){}
+ void append(bus_stop *_bs)
+ {
+ stops.insert(stops.end(), _bs);
+ }
+};
+std::ostream & operator<<(std::ostream &os, const bus_route &br)
+{
+ std::list<bus_stop *>::const_iterator it;
+ // note: we're displaying the pointer to permit verification
+ // that duplicated pointers are properly restored.
+ for(it = br.stops.begin(); it != br.stops.end(); it++){
+ os << '\n' << std::hex << "0x" << *it << std::dec << ' ' << **it;
+ }
+ return os;
+}
+
+/////////////////////////////////////////////////////////////
+// a bus schedule is a collection of routes each with a starting time
+//
+// Illustrates serialization of STL objects(pair) in a non-intrusive way.
+// See definition of operator<< <pair<F, S> >(ar, pair)
+//
+// illustrates nesting of serializable classes
+//
+// illustrates use of version number to automatically grandfather older
+// versions of the same class.
+
+class bus_schedule
+{
+ friend class boost::serialization::access;
+ friend std::ostream & operator<<(std::ostream &os, const bus_schedule &bs);
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int version)
+ {
+ ar & BOOST_SERIALIZATION_NVP(schedule);
+ }
+ // note: this structure was made public. because the friend declarations
+ // didn't seem to work as expected.
+public:
+ struct trip_info
+ {
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int file_version)
+ {
+ // in versions 2 or later
+ if(file_version >= 2)
+ // read the drivers name
+ ar & BOOST_SERIALIZATION_NVP(driver);
+ // all versions have the follwing info
+ ar & BOOST_SERIALIZATION_NVP(hour)
+ & BOOST_SERIALIZATION_NVP(minute);
+ }
+
+ // starting time
+ int hour;
+ int minute;
+ // only after system shipped was the driver's name added to the class
+ std::string driver;
+
+ trip_info(){}
+ trip_info(int _h, int _m, const std::string &_d) :
+ hour(_h), minute(_m), driver(_d)
+ {}
+ ~trip_info(){
+ }
+ };
+// friend std::ostream & operator<<(std::ostream &os, const trip_info &ti);
+private:
+ std::list<std::pair<trip_info, bus_route *> > schedule;
+public:
+ void append(const std::string &_d, int _h, int _m, bus_route *_br)
+ {
+ schedule.insert(schedule.end(), std::make_pair(trip_info(_h, _m, _d), _br));
+ }
+ bus_schedule(){}
+};
+
+BOOST_CLASS_VERSION(bus_schedule::trip_info, 3)
+BOOST_CLASS_VERSION(bus_schedule, 2)
+
+std::ostream & operator<<(std::ostream &os, const bus_schedule::trip_info &ti)
+{
+ return os << '\n' << ti.hour << ':' << ti.minute << ' ' << ti.driver << ' ';
+}
+std::ostream & operator<<(std::ostream &os, const bus_schedule &bs)
+{
+ std::list<std::pair<bus_schedule::trip_info, bus_route *> >::const_iterator it;
+ for(it = bs.schedule.begin(); it != bs.schedule.end(); it++){
+ os << it->first << *(it->second);
+ }
+ return os;
+}
+
+#endif // BOOST_SERIALIZATION_EXAMPLE_DEMO_XML_HPP
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+//
+// demo_xml_load.cpp
+//
+// (C) Copyright 2002-4 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)
+
+#include <iostream>
+#include <string>
+#include <boost/archive/tmpdir.hpp>
+
+#include <boost/archive/xml_iarchive.hpp>
+
+#include "demo_gps.hpp"
+
+void
+restore_schedule(bus_schedule &s, const char * filename)
+{
+ // open the archive
+ std::ifstream ifs(filename);
+ assert(ifs.good());
+ boost::archive::xml_iarchive ia(ifs);
+
+ // restore the schedule from the archive
+ ia >> BOOST_SERIALIZATION_NVP(s);
+}
+
+int main(int argc, char *argv[])
+{
+ // make a new schedule
+ bus_schedule new_schedule;
+
+ std::string filename(boost::archive::tmpdir());
+ filename += "/demo_save.xml";
+
+ restore_schedule(new_schedule, filename.c_str());
+
+ // and display
+ std::cout << "\nrestored schedule";
+ std::cout << new_schedule;
+
+ return 0;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+//
+// demo_xml_save.cpp
+//
+// (C) Copyright 2002-4 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)
+
+#include <iostream>
+#include <string>
+#include <boost/archive/tmpdir.hpp>
+
+#include <boost/archive/xml_oarchive.hpp>
+
+#include "demo_gps.hpp"
+
+void save_schedule(const bus_schedule &s, const char * filename){
+ // make an archive
+ std::ofstream ofs(filename);
+ assert(ofs.good());
+ boost::archive::xml_oarchive oa(ofs);
+ oa << BOOST_SERIALIZATION_NVP(s);
+}
+
+int main(int argc, char *argv[])
+{
+ // make the schedule
+ bus_schedule original_schedule;
+
+ // fill in the data
+ // make a few stops
+ bus_stop *bs0 = new bus_stop_corner(
+ gps_position(34, 135, 52.560f),
+ gps_position(134, 22, 78.30f),
+ "24th Street", "10th Avenue"
+ );
+ bus_stop *bs1 = new bus_stop_corner(
+ gps_position(35, 137, 23.456f),
+ gps_position(133, 35, 54.12f),
+ "State street", "Cathedral Vista Lane"
+ );
+ bus_stop *bs2 = new bus_stop_destination(
+ gps_position(35, 136, 15.456f),
+ gps_position(133, 32, 15.300f),
+ "White House"
+ );
+ bus_stop *bs3 = new bus_stop_destination(
+ gps_position(35, 134, 48.789f),
+ gps_position(133, 32, 16.230f),
+ "Lincoln Memorial"
+ );
+
+ // make a routes
+ bus_route route0;
+ route0.append(bs0);
+ route0.append(bs1);
+ route0.append(bs2);
+
+ // add trips to schedule
+ original_schedule.append("bob", 6, 24, &route0);
+ original_schedule.append("bob", 9, 57, &route0);
+ original_schedule.append("alice", 11, 02, &route0);
+
+ // make aother routes
+ bus_route route1;
+ route1.append(bs3);
+ route1.append(bs2);
+ route1.append(bs1);
+
+ // add trips to schedule
+ original_schedule.append("ted", 7, 17, &route1);
+ original_schedule.append("ted", 9, 38, &route1);
+ original_schedule.append("alice", 11, 47, &route1);
+
+ // display the complete schedule
+ std::cout << "original schedule";
+ std::cout << original_schedule;
+
+ std::string filename(boost::archive::tmpdir());
+ filename += "/demo_save.xml";
+
+ // save the schedule
+ save_schedule(original_schedule, filename.c_str());
+
+ delete bs0;
+ delete bs1;
+ delete bs2;
+ delete bs3;
+ return 0;
+}
--- /dev/null
+22 serialization::archive 3 0 2 0 0 6 0 0 0 0 6 24 4 1 0
+0 0 0 3 5 1 0
+1 0 0 0 0 34 135 52.560001 134 22 78.300003 11 24th Street 11 10th Avenue 5
+2 35 137 23.455999 133 35 54.119999 12 State street 20 Cathedral Vista Lane 6 1 0
+3 35 136 15.456 133 32 15.3 11 White House 9 57 4
+0 11 2 4
+0 7 17 4
+4 3 6
+5 35 134 48.789001 133 32 16.23 16 Lincoln Memorial 6
+3 5
+2 9 38 4
+4 11 47 4
+4
\ No newline at end of file
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// log_archive.cpp:
+
+// (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.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+//#define BOOST_ARCHIVE_SOURCE
+#include "log_archive.hpp"
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of xml stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_xml_oarchive.ipp>
+#include <boost/archive/impl/xml_oarchive_impl.ipp>
+
+namespace boost {
+namespace archive {
+
+template class detail::archive_serializer_map<log_archive>;
+template class basic_xml_oarchive<log_archive> ;
+template class xml_oarchive_impl<log_archive> ;
+
+} // namespace archive
+} // namespace boost
--- /dev/null
+#ifndef LOG_ARCHIVE_HPP
+#define LOG_ARCHIVE_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
+// log_archive.hpp
+
+// (C) Copyright 2010 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 <boost/archive/xml_oarchive.hpp>
+
+/////////////////////////////////////////////////////////////////////////
+// log data to an output stream. This illustrates a simpler implemenation
+// of text output which is useful for getting a formatted display of
+// any serializable class. Intended to be useful as a debugging aid.
+class log_archive :
+ /* protected ? */
+ public boost::archive::xml_oarchive_impl<log_archive>
+{
+ typedef boost::archive::xml_oarchive_impl<log_archive> base;
+ // give serialization implementation access to this clas
+ friend class boost::archive::detail::interface_oarchive<log_archive>;
+ friend class boost::archive::basic_xml_oarchive<log_archive>;
+ friend boost::archive::save_access;
+
+ /////////////////////////////////////////////////////////////////////
+ // Override functions defined in basic_xml_oarchive
+
+ // Anything not an attribute and not a name-value pair is an
+ // error and should be trapped here. Note the usage of
+ // function argument matching (BOOST_PFTO) to permit usage
+ // with compilers which fail to properly support
+ // function template ordering
+ template<class T>
+ void save_override(T & t, BOOST_PFTO int){
+ // make it a name-value pair and pass it on.
+ // this permits this to be used even with data types which
+ // are not wrapped with the name
+ base::save_override(boost::serialization::make_nvp(NULL, t), 0);
+ }
+ template<class T>
+ void save_override(const boost::serialization::nvp<T> & t, int){
+ // this is here to remove the "const" requirement. Since
+ // this class is to be used only for output, it's not required.
+ base::save_override(t, 0);
+ }
+ // specific overrides for attributes - not name value pairs so we
+ // want to trap them before the above "fall through"
+ // since we don't want to see these in the output - make them no-ops.
+ void save_override(const boost::archive::object_id_type & t, int){}
+ void save_override(const boost::archive::object_reference_type & t, int){}
+ void save_override(const boost::archive::version_type & t, int){}
+ void save_override(const boost::archive::class_id_type & t, int){}
+ void save_override(const boost::archive::class_id_optional_type & t, int){}
+ void save_override(const boost::archive::class_id_reference_type & t, int){}
+ void save_override(const boost::archive::class_name_type & t, int){}
+ void save_override(const boost::archive::tracking_type & t, int){}
+public:
+ log_archive(std::ostream & os, unsigned int flags = 0) :
+ boost::archive::xml_oarchive_impl<log_archive>(
+ os,
+ flags | boost::archive::no_header
+ )
+ {}
+};
+
+#endif // LOG_ARCHIVE_HPP
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_portable_binary_iarchive.cpp
+
+// (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 <istream>
+
+#define BOOST_ARCHIVE_SOURCE
+#include "polymorphic_portable_binary_iarchive.hpp"
+
+// explicitly instantiate for this type of text stream
+#include <boost/archive/impl/basic_binary_iarchive.ipp>
+#include <boost/archive/impl/archive_pointer_iserializer.ipp>
+#include <boost/archive/impl/basic_binary_iprimitive.ipp>
+
+namespace boost {
+namespace archive {
+
+template class binary_iarchive_impl<
+ polymorphic_portable_binary_iarchive,
+ std::istream::char_type,
+ std::istream::traits_type
+>;
+template class detail::archive_pointer_iserializer<
+ polymorphic_portable_binary_iarchive
+> ;
+
+} // namespace archive
+} // namespace boost
--- /dev/null
+#ifndef BOOST_ARCHIVE_POLYMORPHIC_PORTABLE_BINARY_IARCHIVE_HPP
+#define BOOST_ARCHIVE_POLYMORPHIC_PORTABLE_BINARY_IARCHIVE_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
+// polymorphic_portable_binary_iarchive.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 <boost/archive/detail/polymorphic_iarchive_dispatch.hpp>
+#include "portable_binary_iarchive.hpp"
+
+typedef boost::archive::detail::polymorphic_iarchive_dispatch<
+ portable_binary_iarchive
+> polymorphic_portable_binary_iarchive;
+
+#include <boost/version.hpp>
+#if BOOST_VERSION > 103401
+ // required by export
+ BOOST_SERIALIZATION_REGISTER_ARCHIVE(
+ polymorphic_portable_binary_iarchive
+ )
+#endif
+
+#endif // BOOST_ARCHIVE_POLYMORPHIC_PORTABLE_BINARY_OARCHIVE_HPP
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_portable_binary_oarchive.cpp
+
+// (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 <ostream>
+
+#define BOOST_ARCHIVE_SOURCE
+#include "polymorphic_portable_binary_oarchive.hpp"
+
+// explicitly instantiate for this type of text stream
+#include <boost/archive/impl/basic_binary_oarchive.ipp>
+#include <boost/archive/impl/archive_pointer_oserializer.ipp>
+#include <boost/archive/impl/basic_binary_oprimitive.ipp>
+
+namespace boost {
+namespace archive {
+
+// explicitly instantiate for this type of binary stream
+template class binary_oarchive_impl<
+ polymorphic_portable_binary_oarchive,
+ std::ostream::char_type,
+ std::ostream::traits_type
+>;
+template class detail::archive_pointer_oserializer<
+ polymorphic_portable_binary_oarchive
+> ;
+
+} // namespace archive
+} // namespace boost
--- /dev/null
+#ifndef BOOST_ARCHIVE_POLYMORPHIC_PORTABLE_BINARY_OARCHIVE_HPP
+#define BOOST_ARCHIVE_POLYMORPHIC_PORTABLE_BINARY_OARCHIVE_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
+// polymorphic_portable_binary_oarchive.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 <boost/archive/detail/polymorphic_oarchive_dispatch.hpp>
+#include "portable_binary_oarchive.hpp"
+
+typedef boost::archive::detail::polymorphic_oarchive_dispatch<
+ portable_binary_oarchive
+ > polymorphic_portable_binary_oarchive;
+
+#include <boost/version.hpp>
+#if BOOST_VERSION > 103401
+ // required by export
+ BOOST_SERIALIZATION_REGISTER_ARCHIVE(
+ polymorphic_portable_binary_oarchive
+ )
+#endif
+
+#endif // BOOST_ARCHIVE_POLYMORPHIC_PORTABLE_BINARY_OARCHIVE_HPP
--- /dev/null
+#ifndef PORTABLE_BINARY_ARCHIVE_HPP
+#define PORTABLE_BINARY_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)
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/serialization/pfto.hpp>
+#include <boost/static_assert.hpp>
+
+#include <climits>
+#if CHAR_BIT != 8
+#error This code assumes an eight-bit byte.
+#endif
+
+#include <boost/archive/basic_archive.hpp>
+#include <boost/detail/endian.hpp>
+
+enum portable_binary_archive_flags {
+ endian_big = 0x4000,
+ endian_little = 0x8000
+};
+
+//#if ( endian_big <= boost::archive::flags_last )
+//#error archive flags conflict
+//#endif
+
+inline void
+reverse_bytes(char size, char *address){
+ char * first = address;
+ char * last = first + size - 1;
+ for(;first < last;++first, --last){
+ char x = *last;
+ *last = *first;
+ *first = x;
+ }
+}
+
+#endif // PORTABLE_BINARY_ARCHIVE_HPP
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// portable_binary_iarchive.cpp
+
+// (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 <istream>
+#include <string>
+
+#include <boost/detail/endian.hpp>
+#include <boost/serialization/throw_exception.hpp>
+#include <boost/archive/archive_exception.hpp>
+
+#include "portable_binary_iarchive.hpp"
+
+void
+portable_binary_iarchive::load_impl(boost::intmax_t & l, char maxsize){
+ char size;
+ l = 0;
+ this->primitive_base_t::load(size);
+
+ if(0 == size){
+ return;
+ }
+
+ bool negative = (size < 0);
+ if(negative)
+ size = -size;
+
+ if(size > maxsize)
+ boost::serialization::throw_exception(
+ portable_binary_iarchive_exception()
+ );
+
+ char * cptr = reinterpret_cast<char *>(& l);
+ #ifdef BOOST_BIG_ENDIAN
+ cptr += (sizeof(boost::intmax_t) - size);
+ #endif
+ this->primitive_base_t::load_binary(cptr, size);
+
+ #ifdef BOOST_BIG_ENDIAN
+ if(m_flags & endian_little)
+ #else
+ if(m_flags & endian_big)
+ #endif
+ reverse_bytes(size, cptr);
+
+ if(negative)
+ l = -l;
+}
+
+void
+portable_binary_iarchive::load_override(
+ boost::archive::class_name_type & t, int
+){
+ std::string cn;
+ cn.reserve(BOOST_SERIALIZATION_MAX_KEY_SIZE);
+ load_override(cn, 0);
+ if(cn.size() > (BOOST_SERIALIZATION_MAX_KEY_SIZE - 1))
+ boost::serialization::throw_exception(
+ boost::archive::archive_exception(
+ boost::archive::archive_exception::invalid_class_name)
+ );
+ std::memcpy(t, cn.data(), cn.size());
+ // borland tweak
+ t.t[cn.size()] = '\0';
+}
+
+void
+portable_binary_iarchive::init(unsigned int flags){
+ if(0 == (flags & boost::archive::no_header)){
+ // read signature in an archive version independent manner
+ std::string file_signature;
+ * this >> file_signature;
+ if(file_signature != boost::archive::BOOST_ARCHIVE_SIGNATURE())
+ boost::serialization::throw_exception(
+ boost::archive::archive_exception(
+ boost::archive::archive_exception::invalid_signature
+ )
+ );
+ // make sure the version of the reading archive library can
+ // support the format of the archive being read
+ boost::archive::version_type input_library_version;
+ * this >> input_library_version;
+
+ // extra little .t is to get around borland quirk
+ if(boost::archive::BOOST_ARCHIVE_VERSION() < input_library_version.t)
+ boost::serialization::throw_exception(
+ boost::archive::archive_exception(
+ boost::archive::archive_exception::unsupported_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
+ boost::archive::detail::basic_iarchive::set_library_version(
+ input_library_version
+ );
+ #endif
+ }
+ unsigned char x;
+ load(x);
+ m_flags = x << CHAR_BIT;
+}
+
+#include <boost/archive/impl/basic_binary_iprimitive.ipp>
+
+
+namespace boost {
+namespace archive {
+
+template class basic_binary_iprimitive<
+ portable_binary_iarchive,
+ std::istream::char_type,
+ std::istream::traits_type
+> ;
+
+} // namespace archive
+} // namespace boost
--- /dev/null
+#ifndef PORTABLE_BINARY_IARCHIVE_HPP
+#define PORTABLE_BINARY_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#if defined(_MSC_VER)
+#pragma warning( push )
+#pragma warning( disable : 4244 )
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// portable_binary_iarchive.hpp
+
+// (C) Copyright 2002-7 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 <istream>
+#include <boost/serialization/string.hpp>
+#include <boost/archive/archive_exception.hpp>
+#include <boost/archive/basic_binary_iprimitive.hpp>
+#include <boost/archive/detail/common_iarchive.hpp>
+#include <boost/archive/shared_ptr_helper.hpp>
+#include <boost/archive/detail/register_archive.hpp>
+
+#include "portable_binary_archive.hpp"
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// exception to be thrown if integer read from archive doesn't fit
+// variable being loaded
+class portable_binary_iarchive_exception :
+ public virtual boost::archive::archive_exception
+{
+public:
+ typedef enum {
+ incompatible_integer_size
+ } exception_code;
+ portable_binary_iarchive_exception(exception_code c = incompatible_integer_size ) :
+ boost::archive::archive_exception(boost::archive::archive_exception::other_exception)
+ {}
+ virtual const char *what( ) const throw( )
+ {
+ const char *msg = "programmer error";
+ switch(code){
+ case incompatible_integer_size:
+ msg = "integer cannot be represented";
+ break;
+ default:
+ msg = boost::archive::archive_exception::what();
+ assert(false);
+ break;
+ }
+ return msg;
+ }
+};
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// "Portable" input binary archive. It addresses integer size and endienness so
+// that binary archives can be passed across systems. Note:floating point types
+// not addressed here
+class portable_binary_iarchive :
+ public boost::archive::basic_binary_iprimitive<
+ portable_binary_iarchive,
+ std::istream::char_type,
+ std::istream::traits_type
+ >,
+ public boost::archive::detail::common_iarchive<
+ portable_binary_iarchive
+ >
+ ,
+ public boost::archive::detail::shared_ptr_helper
+ {
+ typedef boost::archive::basic_binary_iprimitive<
+ portable_binary_iarchive,
+ std::istream::char_type,
+ std::istream::traits_type
+ > primitive_base_t;
+ typedef boost::archive::detail::common_iarchive<
+ portable_binary_iarchive
+ > archive_base_t;
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+ friend archive_base_t;
+ friend primitive_base_t; // since with override load below
+ friend class boost::archive::detail::interface_iarchive<
+ portable_binary_iarchive
+ >;
+ friend class boost::archive::load_access;
+protected:
+#endif
+ unsigned int m_flags;
+ void load_impl(boost::intmax_t & l, char maxsize);
+
+ // default fall through for any types not specified here
+ template<class T>
+ void load(T & t){
+ boost::intmax_t l;
+ load_impl(l, sizeof(T));
+ // use cast to avoid compile time warning
+ t = static_cast<T>(l);
+ }
+ void load(std::string & t){
+ this->primitive_base_t::load(t);
+ }
+ #ifndef BOOST_NO_STD_WSTRING
+ void load(std::wstring & t){
+ this->primitive_base_t::load(t);
+ }
+ #endif
+ void load(float & t){
+ this->primitive_base_t::load(t);
+ // floats not supported
+ //BOOST_STATIC_ASSERT(false);
+ }
+ void load(double & t){
+ this->primitive_base_t::load(t);
+ // doubles not supported
+ //BOOST_STATIC_ASSERT(false);
+ }
+ void load(char & t){
+ this->primitive_base_t::load(t);
+ }
+ void load(unsigned char & t){
+ this->primitive_base_t::load(t);
+ }
+ // intermediate level to support override of operators
+ // fot templates in the absence of partial function
+ // template ordering
+ typedef boost::archive::detail::common_iarchive<portable_binary_iarchive>
+ detail_common_iarchive;
+ template<class T>
+ void load_override(T & t, BOOST_PFTO int){
+ this->detail_common_iarchive::load_override(t, 0);
+ }
+ void load_override(boost::archive::class_name_type & t, int);
+ // binary files don't include the optional information
+ void load_override(
+ boost::archive::class_id_optional_type & /* t */,
+ int
+ ){}
+
+ void init(unsigned int flags);
+public:
+ portable_binary_iarchive(std::istream & is, unsigned flags = 0) :
+ primitive_base_t(
+ * is.rdbuf(),
+ 0 != (flags & boost::archive::no_codecvt)
+ ),
+ archive_base_t(flags),
+ m_flags(0)
+ {
+ init(flags);
+ }
+
+ portable_binary_iarchive(
+ std::basic_streambuf<
+ std::istream::char_type,
+ std::istream::traits_type
+ > & bsb,
+ unsigned int flags
+ ) :
+ primitive_base_t(
+ bsb,
+ 0 != (flags & boost::archive::no_codecvt)
+ ),
+ archive_base_t(flags),
+ m_flags(0)
+ {
+ init(flags);
+ }
+};
+
+// required by export in boost version > 1.34
+#ifdef BOOST_SERIALIZATION_REGISTER_ARCHIVE
+ BOOST_SERIALIZATION_REGISTER_ARCHIVE(portable_binary_iarchive)
+#endif
+
+// required by export in boost <= 1.34
+#define BOOST_ARCHIVE_CUSTOM_IARCHIVE_TYPES portable_binary_iarchive
+
+#if defined(_MSC_VER)
+#pragma warning( pop )
+#endif
+
+#endif // PORTABLE_BINARY_IARCHIVE_HPP
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// portable_binary_oarchive.cpp
+
+// (C) Copyright 2002-7 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 <ostream>
+#include <boost/detail/endian.hpp>
+#include "portable_binary_oarchive.hpp"
+
+void
+portable_binary_oarchive::save_impl(
+ const boost::intmax_t l,
+ const char maxsize
+){
+ char size = 0;
+
+ if(l == 0){
+ this->primitive_base_t::save(size);
+ return;
+ }
+
+ boost::intmax_t ll;
+ bool negative = (l < 0);
+ if(negative)
+ ll = -l;
+ else
+ ll = l;
+
+ do{
+ ll >>= CHAR_BIT;
+ ++size;
+ }while(ll != 0);
+
+ this->primitive_base_t::save(
+ static_cast<char>(negative ? -size : size)
+ );
+
+ if(negative)
+ ll = -l;
+ else
+ ll = l;
+ char * cptr = reinterpret_cast<char *>(& ll);
+ #ifdef BOOST_BIG_ENDIAN
+ cptr += (sizeof(boost::intmax_t) - size);
+ if(m_flags & endian_little)
+ reverse_bytes(size, cptr);
+ #else
+ if(m_flags & endian_big)
+ reverse_bytes(size, cptr);
+ #endif
+ this->primitive_base_t::save_binary(cptr, size);
+}
+
+void
+portable_binary_oarchive::init(unsigned int flags) {
+ if(m_flags == (endian_big | endian_little)){
+ boost::serialization::throw_exception(
+ portable_binary_oarchive_exception()
+ );
+ }
+ if(0 == (flags & boost::archive::no_header)){
+ // write signature in an archive version independent manner
+ const std::string file_signature(
+ boost::archive::BOOST_ARCHIVE_SIGNATURE()
+ );
+ * this << file_signature;
+ // write library version
+ const boost::archive::version_type v(
+ boost::archive::BOOST_ARCHIVE_VERSION()
+ );
+ * this << v;
+ }
+ save(static_cast<unsigned char>(m_flags >> CHAR_BIT));
+}
+
+#include <boost/archive/impl/basic_binary_oprimitive.ipp>
+
+namespace boost {
+namespace archive {
+
+template class basic_binary_oprimitive<
+ portable_binary_oarchive,
+ std::ostream::char_type,
+ std::ostream::traits_type
+> ;
+
+} // namespace archive
+} // namespace boost
--- /dev/null
+#ifndef PORTABLE_BINARY_OARCHIVE_HPP
+#define PORTABLE_BINARY_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#if defined(_MSC_VER)
+#pragma warning( push )
+#pragma warning( disable : 4244 )
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// portable_binary_oarchive.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 <ostream>
+#include <boost/serialization/string.hpp>
+#include <boost/archive/archive_exception.hpp>
+#include <boost/archive/basic_binary_oprimitive.hpp>
+#include <boost/archive/detail/common_oarchive.hpp>
+#include <boost/archive/detail/register_archive.hpp>
+
+#include "portable_binary_archive.hpp"
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// exception to be thrown if integer read from archive doesn't fit
+// variable being loaded
+class portable_binary_oarchive_exception :
+ public virtual boost::archive::archive_exception
+{
+public:
+ typedef enum {
+ invalid_flags
+ } exception_code;
+ portable_binary_oarchive_exception(exception_code c = invalid_flags )
+ {}
+ virtual const char *what( ) const throw( )
+ {
+ const char *msg = "programmer error";
+ switch(code){
+ case invalid_flags:
+ msg = "cannot be both big and little endian";
+ default:
+ boost::archive::archive_exception::what();
+ }
+ return msg;
+ }
+};
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// "Portable" output binary archive. This is a variation of the native binary
+// archive. it addresses integer size and endienness so that binary archives can
+// be passed across systems. Note:floating point types not addressed here
+
+class portable_binary_oarchive :
+ public boost::archive::basic_binary_oprimitive<
+ portable_binary_oarchive,
+ std::ostream::char_type,
+ std::ostream::traits_type
+ >,
+ public boost::archive::detail::common_oarchive<
+ portable_binary_oarchive
+ >
+{
+ typedef boost::archive::basic_binary_oprimitive<
+ portable_binary_oarchive,
+ std::ostream::char_type,
+ std::ostream::traits_type
+ > primitive_base_t;
+ typedef boost::archive::detail::common_oarchive<
+ portable_binary_oarchive
+ > archive_base_t;
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+ friend archive_base_t;
+ friend primitive_base_t; // since with override save below
+ friend class boost::archive::detail::interface_oarchive<
+ portable_binary_oarchive
+ >;
+ friend class boost::archive::save_access;
+protected:
+#endif
+ unsigned int m_flags;
+ void save_impl(const boost::intmax_t l, const char maxsize);
+ // add base class to the places considered when matching
+ // save function to a specific set of arguments. Note, this didn't
+ // work on my MSVC 7.0 system so we use the sure-fire method below
+ // using archive_base_t::save;
+
+ // default fall through for any types not specified here
+ template<class T>
+ void save(const T & t){
+ save_impl(t, sizeof(T));
+ }
+ void save(const std::string & t){
+ this->primitive_base_t::save(t);
+ }
+ #ifndef BOOST_NO_STD_WSTRING
+ void save(const std::wstring & t){
+ this->primitive_base_t::save(t);
+ }
+ #endif
+ void save(const float & t){
+ this->primitive_base_t::save(t);
+ // floats not supported
+ //BOOST_STATIC_ASSERT(false);
+ }
+ void save(const double & t){
+ this->primitive_base_t::save(t);
+ // doubles not supported
+ //BOOST_STATIC_ASSERT(false);
+ }
+ void save(const char & t){
+ this->primitive_base_t::save(t);
+ }
+ void save(const unsigned char & t){
+ this->primitive_base_t::save(t);
+ }
+
+ // default processing - kick back to base class. Note the
+ // extra stuff to get it passed borland compilers
+ typedef boost::archive::detail::common_oarchive<portable_binary_oarchive>
+ detail_common_oarchive;
+ template<class T>
+ void save_override(T & t, BOOST_PFTO int){
+ this->detail_common_oarchive::save_override(t, 0);
+ }
+ // explicitly convert to char * to avoid compile ambiguities
+ void save_override(const boost::archive::class_name_type & t, int){
+ const std::string s(t);
+ * this << s;
+ }
+ // binary files don't include the optional information
+ void save_override(
+ const boost::archive::class_id_optional_type & /* t */,
+ int
+ ){}
+
+ void init(unsigned int flags);
+public:
+ portable_binary_oarchive(std::ostream & os, unsigned flags = 0) :
+ primitive_base_t(
+ * os.rdbuf(),
+ 0 != (flags & boost::archive::no_codecvt)
+ ),
+ archive_base_t(flags),
+ m_flags(flags & (endian_big | endian_little))
+ {
+ init(flags);
+ }
+
+ portable_binary_oarchive(
+ std::basic_streambuf<
+ std::ostream::char_type,
+ std::ostream::traits_type
+ > & bsb,
+ unsigned int flags
+ ) :
+ primitive_base_t(
+ bsb,
+ 0 != (flags & boost::archive::no_codecvt)
+ ),
+ archive_base_t(flags),
+ m_flags(0)
+ {
+ init(flags);
+ }
+};
+
+
+// required by export in boost version > 1.34
+#ifdef BOOST_SERIALIZATION_REGISTER_ARCHIVE
+ BOOST_SERIALIZATION_REGISTER_ARCHIVE(portable_binary_oarchive)
+#endif
+
+// required by export in boost <= 1.34
+#define BOOST_ARCHIVE_CUSTOM_OARCHIVE_TYPES portable_binary_oarchive
+
+#if defined(_MSC_VER)
+#pragma warning( pop )
+#endif
+
+#endif // PORTABLE_BINARY_OARCHIVE_HPP
--- /dev/null
+#ifndef BOOST_SIMPLE_LOG_ARCHIVE_HPP
+#define BOOST_SIMPLE_LOG_ARCHIVE_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
+// simple_log_archive.hpp
+
+// (C) Copyright 2010 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 <ostream>
+#include <cstddef> // std::size_t
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/array.hpp>
+#include <boost/serialization/string.hpp>
+#include <boost/serialization/access.hpp>
+
+/////////////////////////////////////////////////////////////////////////
+// log data to an output stream. This illustrates a simpler implemenation
+// of text output which is useful for getting a formatted display of
+// any serializable class. Intended to be useful as a debugging aid.
+class simple_log_archive {
+ std::ostream & m_os;
+ unsigned int m_depth;
+
+ template<class Archive>
+ struct save_enum_type {
+ template<class T>
+ static void invoke(Archive &ar, const T &t){
+ ar.m_os << static_cast<int>(t);
+ }
+ };
+ template<class Archive>
+ struct save_primitive {
+ template<class T>
+ static void invoke(Archive & ar, const T & t){
+ ar.m_os << t;
+ }
+ };
+ template<class Archive>
+ struct save_only {
+ template<class T>
+ static void invoke(Archive & ar, const T & t){
+ // make sure call is routed through the highest interface that might
+ // be specialized by the user.
+ boost::serialization::serialize_adl(
+ ar,
+ const_cast<T &>(t),
+ ::boost::serialization::version<T>::value
+ );
+ }
+ };
+ template<class T>
+ void save(const T &t){
+ typedef
+ BOOST_DEDUCED_TYPENAME boost::mpl::eval_if<boost::is_enum<T>,
+ boost::mpl::identity<save_enum_type<simple_log_archive> >,
+ //else
+ BOOST_DEDUCED_TYPENAME boost::mpl::eval_if<
+ // if its primitive
+ boost::mpl::equal_to<
+ boost::serialization::implementation_level<T>,
+ boost::mpl::int_<boost::serialization::primitive_type>
+ >,
+ boost::mpl::identity<save_primitive<simple_log_archive> >,
+ // else
+ boost::mpl::identity<save_only<simple_log_archive> >
+ > >::type typex;
+ typex::invoke(*this, t);
+ }
+ #ifndef BOOST_NO_STD_WSTRING
+ void save(const std::wstring &ws){
+ m_os << "wide string types not suported in log archive";
+ }
+ #endif
+
+public:
+ ///////////////////////////////////////////////////
+ // Implement requirements for archive concept
+
+ typedef boost::mpl::bool_<false> is_loading;
+ typedef boost::mpl::bool_<true> is_saving;
+
+ // this can be a no-op since we ignore pointer polymorphism
+ template<class T>
+ void register_type(const T * = NULL){}
+
+ unsigned int get_library_version(){
+ return 0;
+ }
+
+ void
+ save_binary(const void *address, std::size_t count){
+ m_os << "save_binary not implemented";
+ }
+
+ // the << operators
+ template<class T>
+ simple_log_archive & operator<<(T const & t){
+ m_os << ' ';
+ save(t);
+ return * this;
+ }
+ template<class T>
+ simple_log_archive & operator<<(T * const t){
+ m_os << " ->";
+ if(NULL == t)
+ m_os << " null";
+ else
+ *this << * t;
+ return * this;
+ }
+ template<class T, int N>
+ simple_log_archive & operator<<(const T (&t)[N]){
+ ar << serialization::make_array(
+ static_cast<value_type const*>(&t[0]),count
+ );
+ }
+ template<class T>
+ simple_log_archive & operator<<(const ::boost::serialization::nvp<T> & t){
+ m_os << '\n'; // start line with each named object
+ // indent according to object depth
+ for(unsigned int i = 0; i < m_depth; ++i)
+ m_os << ' ';
+ ++m_depth;
+ m_os << t.name(); // output the name of the object
+ * this << t.const_value();
+ --m_depth;
+ return * this;
+ }
+
+ // the & operator
+ template<class T>
+ simple_log_archive & operator&(const T & t){
+ return * this << t;
+ }
+ ///////////////////////////////////////////////
+
+ simple_log_archive(std::ostream & os) :
+ m_os(os),
+ m_depth(0)
+ {}
+};
+
+#endif // BOOST_SIMPLE_LOG_ARCHIVE_HPP
--- /dev/null
+<html>
+<!--
+(C) Copyright 2002-4 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)
+-->
+<head>
+<meta http-equiv="refresh" content="0; URL=doc/index.html">
+</head>
+<body>
+Automatic redirection failed, please go to
+<a href="doc/index.html">doc/index.html</a>.
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+# Boost serialization Library performance test Jamfile
+
+# (C) Copyright Robert Ramey 2002-2004.
+# Use, modification, and distribution are 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)
+#
+
+project libs/serialization/performance
+ : default-build release
+ : id serialization_performance
+ ;
+
+# import rules from the boost serialization test
+# import ../util/test : test-bsl-run-no-lib ;
+import ../util/test :
+ run-template
+ run-invoke
+ run-winvoke
+ test-bsl-run-no-lib
+ test-bsl-run
+ test-bsl-run_archive
+ test-bsl-run_files
+ test-bsl-run_polymorphic_archive
+;
+
+BOOST_ARCHIVE_LIST = [ modules.peek : BOOST_ARCHIVE_LIST ] ;
+
+test-suite "performance" :
+ [ test-bsl-run_files peformance_array : ../test/A ]
+# [ test-bsl-run_files performance_binary ]
+# [ test-bsl-run_files performance_polymorphic ]
+# [ test-bsl-run_files performance_vector ]
+# [ test-bsl-run_files performance_no_rtti ]
+# [ test-bsl-run_files performance_simple_class ]
+# [ test-bsl-run_polymorphic_archive performance_polymorphic : ../test/test_polymorphic_A ]
+
+ [ test-bsl-run-no-lib performance_iterators ]
+ [ test-bsl-run-no-lib performance_iterators_base64 ]
+# [ test-bsl-run-no-lib performance_utf8_codecvt
+# : ../src/utf8_codecvt_facet
+# : # <dependency>../../config/test/all//BOOST_NO_STD_WSTREAMBUF
+# ]
+# [ test-bsl-run-no-lib performance_codecvt_null
+# : ../src/codecvt_null
+# : # <dependency>../../config/test/all//BOOST_NO_STD_WSTREAMBUF
+# ]
+;
--- /dev/null
+// (C) Copyright 2002-4 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.
+// (C) Copyright 2002-4 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.
+
+// binary_archive
+#include <boost/archive/binary_oarchive.hpp>
+typedef boost::archive::binary_oarchive test_oarchive;
+typedef std::ofstream test_ostream;
+#include <boost/archive/binary_iarchive.hpp>
+typedef boost::archive::binary_iarchive test_iarchive;
+typedef std::ifstream test_istream;
+#define TEST_STREAM_FLAGS std::ios::binary
+
--- /dev/null
+// (C) Copyright 2002-4 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.
+// binary_warchive
+#include <boost/archive/binary_woarchive.hpp>
+typedef boost::archive::binary_woarchive test_oarchive;
+typedef std::wofstream test_ostream;
+#include <boost/archive/binary_wiarchive.hpp>
+typedef boost::archive::binary_wiarchive test_iarchive;
+typedef std::wifstream test_istream;
+#define TEST_STREAM_FLAGS std::wios::binary
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_array.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <fstream>
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "../test/test_tools.hpp"
+
+#include <boost/preprocessor/stringize.hpp>
+//#include <boost/preprocessor/cat.hpp>
+// the following fails with (only!) gcc 3.4
+// #include BOOST_PP_STRINGIZE(BOOST_PP_CAT(../test/,BOOST_ARCHIVE_TEST))
+// just copy over the files from the test directory
+#include BOOST_PP_STRINGIZE(BOOST_ARCHIVE_TEST)
+
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/archive/archive_exception.hpp>
+
+#include <boost/serialization/nvp.hpp>
+#include "../test/A.hpp"
+#include "../test/A.ipp"
+
+struct array_equal_to //: public std::binary_function<T, T, bool>
+{
+template<class T, class U>
+ bool operator()(const T & _Left, const U & _Right) const
+ {
+ // consider alignment
+ int count_left = sizeof(_Left) / (
+ static_cast<const char *>(static_cast<const void *>(&_Left[1]))
+ - static_cast<const char *>(static_cast<const void *>(&_Left[0]))
+ );
+ int count_right = sizeof(_Right) / (
+ static_cast<const char *>(static_cast<const void *>(&_Right[1]))
+ - static_cast<const char *>(static_cast<const void *>(&_Right[0]))
+ );
+ if(count_right != count_left)
+ return false;
+ while(count_left-- > 0){
+ if(_Left[count_left] == _Right[count_left])
+ continue;
+ return false;
+ }
+ return true;
+ }
+};
+
+template <class T>
+int test_array(T)
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ // test array of objects
+ const T a_array[10]={T(),T(),T(),T(),T(),T(),T(),T(),T(),T()};
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("a_array", a_array);
+ }
+ {
+ T a_array1[10];
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("a_array", a_array1);
+
+ array_equal_to/*<A[10]>*/ Compare;
+ BOOST_CHECK(Compare(a_array, a_array1));
+ }
+ {
+ T a_array1[9];
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ BOOST_TRY {
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ bool exception_invoked = false;
+ BOOST_TRY {
+ ia >> boost::serialization::make_nvp("a_array", a_array1);
+ }
+ BOOST_CATCH (boost::archive::archive_exception ae){
+ BOOST_CHECK(
+ boost::archive::archive_exception::array_size_too_short
+ == ae.code
+ );
+ exception_invoked = true;
+ }
+ BOOST_CATCH_END
+ BOOST_CHECK(exception_invoked);
+ }
+ BOOST_CATCH (boost::archive::archive_exception ae){}
+ BOOST_CATCH_END
+ }
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ int res = test_array(A());
+ // test an int array for which optimized versions should be available
+ if (res == EXIT_SUCCESS)
+ res = test_array(0);
+ return res;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_simple_class.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <fstream>
+
+#include <cstdlib> // for rand()
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::rand;
+ using ::remove;
+}
+#endif
+
+#include "../test/test_tools.hpp"
+#include <boost/preprocessor/stringize.hpp>
+// #include <boost/preprocessor/cat.hpp>
+// the following fails with (only!) gcc 3.4
+// #include BOOST_PP_STRINGIZE(BOOST_PP_CAT(../test/,BOOST_ARCHIVE_TEST))
+// just copy over the files from the test directory
+#include BOOST_PP_STRINGIZE(BOOST_ARCHIVE_TEST)
+
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/binary_object.hpp>
+
+class A {
+ friend class boost::serialization::access;
+ char data[150];
+ // note: from an aesthetic perspective, I would much prefer to have this
+ // defined out of line. Unfortunately, this trips a bug in the VC 6.0
+ // compiler. So hold our nose and put it her to permit running of tests.
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* file_version */){
+ ar & boost::serialization::make_nvp(
+ "data",
+ boost::serialization::make_binary_object(data, sizeof(data))
+ );
+ }
+
+public:
+ A();
+ bool operator==(const A & rhs) const;
+};
+
+A::A(){
+ int i = sizeof(data);
+ while(i-- > 0)
+ data[i] = 0xff & std::rand();
+}
+
+bool A::operator==(const A & rhs) const {
+ int i = sizeof(data);
+ while(i-- > 0)
+ if(data[i] != rhs.data[i])
+ return false;
+ return true;
+}
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ const A a;
+ A a1;
+ const int i = 12345;
+ int i1 = 34790;
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << BOOST_SERIALIZATION_NVP(a);
+ // note: add a little bit on the end of the archive to detect
+ // failure of text mode binary.
+ oa << BOOST_SERIALIZATION_NVP(i);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> BOOST_SERIALIZATION_NVP(a1);
+ ia >> BOOST_SERIALIZATION_NVP(i1);
+ }
+ BOOST_CHECK(i == i1);
+ BOOST_CHECK(a == a1);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_codecvt_null.cpp
+
+// (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)
+
+// should pass compilation and execution. Note: compilation with compilers
+// which use wchar_t as 2 byte objects will emit warnings. These should be
+// ignored.
+
+#include <algorithm>
+#include <fstream>
+#include <iostream>
+#include <iterator>
+#include <locale>
+#include <vector>
+#include <cstddef>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include <boost/archive/add_facet.hpp>
+#include <boost/archive/codecvt_null.hpp>
+#include <boost/archive/iterators/ostream_iterator.hpp>
+#include <boost/archive/iterators/istream_iterator.hpp>
+
+template<std::size_t S>
+struct test_data
+{
+ static wchar_t wchar_encoding[];
+};
+
+template<>
+wchar_t test_data<2>::wchar_encoding[] = {
+ 0x0001,
+ 0x007f,
+ 0x0080,
+ 0x07ff,
+ 0x0800,
+ 0x7fff
+};
+
+template<>
+wchar_t test_data<4>::wchar_encoding[] = {
+ 0x00000001,
+ 0x0000007f,
+ 0x00000080,
+ 0x000007ff,
+ 0x00000800,
+ 0x0000ffff,
+ 0x00010000,
+ 0x0010ffff,
+ 0x001fffff,
+ 0x00200000,
+ 0x03ffffff,
+ 0x04000000,
+ 0x7fffffff
+};
+
+#include <iostream>
+
+int test_main( int /* argc */, char* /* argv */[] ) {
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ std::locale old_loc;
+ std::locale * null_locale =
+ boost::archive::add_facet(old_loc, new boost::archive::codecvt_null<wchar_t>);
+
+ typedef test_data<sizeof(wchar_t)> td;
+ {
+ std::wofstream ofs;
+ ofs.imbue(*null_locale);
+ ofs.open(testfile, std::ios::binary);
+ std::copy(
+ td::wchar_encoding,
+ #if ! defined(__BORLANDC__)
+ // borland 5.60 complains about this
+ td::wchar_encoding + sizeof(td::wchar_encoding)/sizeof(wchar_t),
+ #else
+ // so use this instead
+ td::wchar_encoding + 6,
+ #endif
+ boost::archive::iterators::ostream_iterator<wchar_t>(ofs)
+ );
+ }
+ bool ok = false;
+ {
+ std::wifstream ifs;
+ ifs.imbue(*null_locale);
+ ifs.open(testfile, std::ios::binary);
+ ok = std::equal(
+ td::wchar_encoding,
+ #if ! defined(__BORLANDC__)
+ // borland 5.60 complains about this
+ td::wchar_encoding + sizeof(td::wchar_encoding)/sizeof(wchar_t),
+ #else
+ // so use this instead
+ td::wchar_encoding + 6,
+ #endif
+ boost::archive::iterators::istream_iterator<wchar_t>(ifs)
+ );
+ }
+
+ BOOST_CHECK(ok);
+ {
+ std::wofstream ofs("testfile2");
+ ofs.imbue(*null_locale);
+ int i = 10;
+ ofs << i;
+ ofs.close();
+
+ std::wifstream ifs("testfile2");
+ ifs.imbue(*null_locale);
+ int i2;
+ ifs >> i2;
+ std::cout << "i=" << i << std::endl;
+ std::cout << "i2=" << i2 << std::endl;
+ BOOST_CHECK(i == i2);
+ ifs.close();
+ }
+
+ delete null_locale;
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_iterators.cpp
+
+// (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)
+
+#include <algorithm>
+#include <vector>
+#include <cstdlib> // for rand
+#include <functional>
+#include <sstream> // used to test stream iterators
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{
+ using ::rand;
+}
+#endif
+
+#include <boost/detail/workaround.hpp>
+#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+#include <boost/archive/dinkumware.hpp>
+#endif
+
+#ifndef BOOST_NO_CWCHAR
+#include <boost/archive/iterators/mb_from_wchar.hpp>
+#include <boost/archive/iterators/wchar_from_mb.hpp>
+#endif
+#include <boost/archive/iterators/xml_escape.hpp>
+#include <boost/archive/iterators/xml_unescape.hpp>
+#include <boost/archive/iterators/transform_width.hpp>
+#include <boost/archive/iterators/istream_iterator.hpp>
+#include <boost/archive/iterators/ostream_iterator.hpp>
+
+#include "../test/test_tools.hpp"
+
+#ifndef BOOST_NO_CWCHAR
+
+void test_wchar_from_mb(const wchar_t *la, const char * a, const unsigned int size){
+ typedef boost::archive::iterators::wchar_from_mb<const char *> translator;
+ BOOST_CHECK((
+ std::equal(
+ translator(BOOST_MAKE_PFTO_WRAPPER(a)),
+ translator(BOOST_MAKE_PFTO_WRAPPER(a + size)),
+ la
+ )
+ ));
+}
+
+void test_mb_from_wchar(const char * a, const wchar_t *la, const unsigned int size){
+ typedef boost::archive::iterators::mb_from_wchar<const wchar_t *> translator;
+ BOOST_CHECK(
+ std::equal(
+ translator(BOOST_MAKE_PFTO_WRAPPER(la)),
+ translator(BOOST_MAKE_PFTO_WRAPPER(la + size)),
+ a
+ )
+ );
+}
+
+#endif
+
+template<class CharType>
+void test_xml_escape(
+ const CharType * xml_escaped,
+ const CharType * xml,
+ unsigned int size
+){
+ typedef boost::archive::iterators::xml_escape<const CharType *> translator;
+
+ BOOST_CHECK(
+ std::equal(
+ translator(BOOST_MAKE_PFTO_WRAPPER(xml)),
+ translator(BOOST_MAKE_PFTO_WRAPPER(xml + size)),
+ xml_escaped
+ )
+ );
+}
+
+template<class CharType>
+void test_xml_unescape(
+ const CharType * xml,
+ const CharType * xml_escaped,
+ unsigned int size
+){
+
+ // test xml_unescape
+ typedef boost::archive::iterators::xml_unescape<const CharType *> translator;
+
+ BOOST_CHECK(
+ std::equal(
+ translator(BOOST_MAKE_PFTO_WRAPPER(xml_escaped)),
+ translator(BOOST_MAKE_PFTO_WRAPPER(xml_escaped + size)),
+ xml
+ )
+ );
+}
+
+template<int BitsOut, int BitsIn>
+void test_transform_width(unsigned int size){
+ // test transform_width
+ char rawdata[8];
+
+ char * rptr;
+ for(rptr = rawdata + 6; rptr-- > rawdata;)
+ *rptr = std::rand();
+
+ // convert 8 to 6 bit characters
+ typedef boost::archive::iterators::transform_width<
+ char *, BitsOut, BitsIn
+ > translator1;
+
+ std::vector<char> v6;
+
+ std::copy(
+ translator1(BOOST_MAKE_PFTO_WRAPPER(static_cast<char *>(rawdata))),
+ translator1(BOOST_MAKE_PFTO_WRAPPER(rawdata + size)),
+ std::back_inserter(v6)
+ );
+
+ // check to see we got the expected # of characters out
+ if(0 == size)
+ BOOST_CHECK(v6.size() == 0);
+ else
+ BOOST_CHECK(v6.size() == (size * BitsIn - 1 ) / BitsOut + 1);
+
+ typedef boost::archive::iterators::transform_width<
+ std::vector<char>::iterator, BitsIn, BitsOut
+ > translator2;
+
+ BOOST_CHECK(
+ std::equal(
+ rawdata,
+ rawdata + size,
+ translator2(BOOST_MAKE_PFTO_WRAPPER(v6.begin()))
+ )
+ );
+
+}
+
+template<class CharType>
+void test_stream_iterators(
+ const CharType * test_data,
+ unsigned int size
+){
+ std::basic_stringstream<CharType> ss;
+ boost::archive::iterators::ostream_iterator<CharType> osi =
+ boost::archive::iterators::ostream_iterator<CharType>(ss);
+ std::copy(test_data, test_data + size, osi);
+
+ BOOST_CHECK(size == ss.str().size());
+
+ boost::archive::iterators::istream_iterator<CharType> isi =
+ boost::archive::iterators::istream_iterator<CharType>(ss);
+ BOOST_CHECK(std::equal(test_data, test_data + size,isi));
+}
+
+int
+test_main(int /* argc */, char* /* argv */ [] )
+{
+ const char xml[] = "<+>+&+\"+'";
+ const char xml_escaped[] = "<+>+&+"+'";
+ test_xml_escape<const char>(
+ xml_escaped,
+ xml,
+ sizeof(xml) / sizeof(char) - 1
+ );
+ test_xml_unescape<const char>(
+ xml,
+ xml_escaped,
+ sizeof(xml_escaped) / sizeof(char) - 1
+ );
+
+ const char a[] = "abcdefghijklmnopqrstuvwxyz";
+
+ #ifndef BOOST_NO_CWCHAR
+ const wchar_t wxml[] = L"<+>+&+\"+'";
+ const wchar_t wxml_escaped[] = L"<+>+&+"+'";
+ test_xml_escape<const wchar_t>(
+ wxml_escaped,
+ wxml,
+ sizeof(wxml) / sizeof(wchar_t) - 1
+ );
+ test_xml_unescape<const wchar_t>(
+ wxml,
+ wxml_escaped,
+ sizeof(wxml_escaped) / sizeof(wchar_t) - 1
+ );
+
+ const wchar_t la[] = L"abcdefghijklmnopqrstuvwxyz";
+
+ test_wchar_from_mb(la, a, sizeof(a) / sizeof(char) - 1);
+ test_mb_from_wchar(a, la, sizeof(la) / sizeof(wchar_t) - 1);
+
+ test_stream_iterators<wchar_t>(la, sizeof(la)/sizeof(wchar_t) - 1);
+ #endif
+
+ test_stream_iterators<char>(a, sizeof(a) - 1);
+
+ test_transform_width<6, 8>(0);
+ test_transform_width<6, 8>(1);
+ test_transform_width<6, 8>(2);
+ test_transform_width<6, 8>(3);
+ test_transform_width<6, 8>(4);
+ test_transform_width<6, 8>(5);
+ test_transform_width<6, 8>(6);
+ test_transform_width<6, 8>(7);
+ test_transform_width<6, 8>(8);
+
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_iterators.cpp
+
+// (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)
+
+#include <algorithm>
+#include <list>
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <cstdlib>
+#include <cstddef> // size_t
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{
+ using ::rand;
+ using ::size_t;
+}
+#endif
+
+#include <boost/serialization/pfto.hpp>
+
+#include <boost/archive/iterators/binary_from_base64.hpp>
+#include <boost/archive/iterators/base64_from_binary.hpp>
+#include <boost/archive/iterators/insert_linebreaks.hpp>
+#include <boost/archive/iterators/remove_whitespace.hpp>
+#include <boost/archive/iterators/transform_width.hpp>
+
+#include "../test/test_tools.hpp"
+
+#include <iostream>
+
+template<typename CharType>
+void test_base64(){
+ CharType rawdata[150];
+ std::size_t size = sizeof(rawdata) / sizeof(CharType);
+ CharType * rptr;
+ for(rptr = rawdata + size; rptr-- > rawdata;)
+ *rptr = std::rand();
+
+ // convert to base64
+ typedef std::list<CharType> text_base64_type;
+ text_base64_type text_base64;
+
+ typedef
+ boost::archive::iterators::insert_linebreaks<
+ boost::archive::iterators::base64_from_binary<
+ boost::archive::iterators::transform_width<
+ CharType *
+ ,6
+ ,sizeof(CharType) * 8
+ >
+ >
+ ,72
+ >
+ translate_out;
+
+ std::copy(
+ translate_out(BOOST_MAKE_PFTO_WRAPPER(static_cast<CharType *>(rawdata))),
+ translate_out(BOOST_MAKE_PFTO_WRAPPER(rawdata + size)),
+ std::back_inserter(text_base64)
+ );
+
+ // convert from base64 to binary and compare with the original
+ typedef
+ boost::archive::iterators::transform_width<
+ boost::archive::iterators::binary_from_base64<
+ boost::archive::iterators::remove_whitespace<
+ BOOST_DEDUCED_TYPENAME text_base64_type::iterator
+ >
+ >,
+ sizeof(CharType) * 8,
+ 6
+ > translate_in;
+
+ BOOST_CHECK(
+ std::equal(
+ rawdata,
+ rawdata + size,
+ translate_in(BOOST_MAKE_PFTO_WRAPPER(text_base64.begin()))
+ )
+ );
+
+}
+
+int
+test_main( int argc, char* argv[] )
+{
+ test_base64<char>();
+ #ifndef BOOST_NO_CWCHAR
+ test_base64<wchar_t>();
+ #endif
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_no_rtti.cpp
+
+// (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)
+
+// note: this program tests the inter-operability of different
+// extended typeinfo systems. In this example, one class is
+// identified using the default RTTI while the other uses a custom
+// system based on the export key.
+//
+// As this program uses RTTI for one of the types, the test will fail
+// on a system for which RTTI is not enabled or not existent.
+
+#include <fstream>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/archive/archive_exception.hpp>
+#include "../test/test_tools.hpp"
+#include <boost/preprocessor/stringize.hpp>
+// #include <boost/preprocessor/cat.hpp>
+// the following fails with (only!) gcc 3.4
+// #include BOOST_PP_STRINGIZE(BOOST_PP_CAT(../test/,BOOST_ARCHIVE_TEST))
+// just copy over the files from the test directory
+#include BOOST_PP_STRINGIZE(BOOST_ARCHIVE_TEST)
+
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/base_object.hpp>
+#include <boost/serialization/export.hpp>
+#include <boost/serialization/type_info_implementation.hpp>
+#include <boost/serialization/extended_type_info_no_rtti.hpp>
+
+class polymorphic_base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & /* ar */, const unsigned int /* file_version */){
+ }
+public:
+ virtual const char * get_key() const = 0;
+ virtual ~polymorphic_base(){};
+};
+
+BOOST_IS_ABSTRACT(polymorphic_base)
+BOOST_CLASS_TYPE_INFO(
+ polymorphic_base,
+ extended_type_info_no_rtti<polymorphic_base>
+)
+// note: types which use ...no_rtti MUST be exported
+BOOST_CLASS_EXPORT(polymorphic_base)
+
+class polymorphic_derived1 : public polymorphic_base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(polymorphic_base);
+ }
+public:
+ virtual const char * get_key() const ;
+};
+
+BOOST_CLASS_TYPE_INFO(
+ polymorphic_derived1,
+ extended_type_info_no_rtti<polymorphic_derived1>
+)
+BOOST_CLASS_EXPORT(polymorphic_derived1)
+
+const char * polymorphic_derived1::get_key() const {
+ const boost::serialization::extended_type_info *eti
+ = boost::serialization::type_info_implementation<polymorphic_derived1>
+ ::type::get_instance();
+ return eti->get_key();
+}
+
+class polymorphic_derived2 : public polymorphic_base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(polymorphic_base);
+ }
+public:
+ virtual const char * get_key() const ;
+};
+
+// note the mixing of type_info systems is supported.
+BOOST_CLASS_TYPE_INFO(
+ polymorphic_derived2,
+ boost::serialization::extended_type_info_typeid<polymorphic_derived2>
+)
+
+BOOST_CLASS_EXPORT(polymorphic_derived2)
+
+const char * polymorphic_derived2::get_key() const {
+ // use the exported key as the identifier
+ const boost::serialization::extended_type_info *eti
+ = boost::serialization::type_info_implementation<polymorphic_derived2>
+ ::type::get_instance();
+ return eti->get_key();
+}
+
+// save derived polymorphic class
+void save_derived(const char *testfile)
+{
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+
+ polymorphic_derived1 *rd1 = new polymorphic_derived1;
+ polymorphic_derived2 *rd2 = new polymorphic_derived2;
+
+ oa << BOOST_SERIALIZATION_NVP(rd1);
+ oa << BOOST_SERIALIZATION_NVP(rd2);
+
+ // the above opereration registers the derived classes as a side
+ // effect. Hence, instances can now be correctly serialized through
+ // a base class pointer.
+ polymorphic_base *rb1 = rd1;
+ polymorphic_base *rb2 = rd2;
+ oa << BOOST_SERIALIZATION_NVP(rb1);
+ oa << BOOST_SERIALIZATION_NVP(rb2);
+
+ delete rd1;
+ delete rd2;
+}
+
+// save derived polymorphic class
+void load_derived(const char *testfile)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+
+ polymorphic_derived1 *rd1 = NULL;
+ polymorphic_derived2 *rd2 = NULL;
+
+ ia >> BOOST_SERIALIZATION_NVP(rd1);
+
+ BOOST_CHECK_MESSAGE(
+ boost::serialization::type_info_implementation<polymorphic_derived1>
+ ::type::get_instance()
+ == boost::serialization::type_info_implementation<polymorphic_derived1>
+ ::type::get_derived_extended_type_info(*rd1),
+ "restored pointer d1 not of correct type"
+ );
+
+ ia >> BOOST_SERIALIZATION_NVP(rd2);
+
+ BOOST_CHECK_MESSAGE(
+ boost::serialization::type_info_implementation<polymorphic_derived2>
+ ::type::get_instance()
+ == boost::serialization::type_info_implementation<polymorphic_derived2>
+ ::type::get_derived_extended_type_info(*rd2),
+ "restored pointer d2 not of correct type"
+ );
+
+ polymorphic_base *rb1 = NULL;
+ polymorphic_base *rb2 = NULL;
+
+ // the above opereration registers the derived classes as a side
+ // effect. Hence, instances can now be correctly serialized through
+ // a base class pointer.
+ ia >> BOOST_SERIALIZATION_NVP(rb1);
+
+ BOOST_CHECK_MESSAGE(
+ rb1 == dynamic_cast<polymorphic_base *>(rd1),
+ "serialized pointers not correctly restored"
+ );
+
+ BOOST_CHECK_MESSAGE(
+ boost::serialization::type_info_implementation<polymorphic_derived1>
+ ::type::get_instance()
+ == boost::serialization::type_info_implementation<polymorphic_base>
+ ::type::get_derived_extended_type_info(*rb1),
+ "restored pointer b1 not of correct type"
+ );
+
+ ia >> BOOST_SERIALIZATION_NVP(rb2);
+
+ BOOST_CHECK_MESSAGE(
+ rb2 == dynamic_cast<polymorphic_base *>(rd2),
+ "serialized pointers not correctly restored"
+ );
+
+ BOOST_CHECK_MESSAGE(
+ boost::serialization::type_info_implementation<polymorphic_derived2>
+ ::type::get_instance()
+ == boost::serialization::type_info_implementation<polymorphic_base>
+ ::type::get_derived_extended_type_info(*rb2),
+ "restored pointer b2 not of correct type"
+ );
+
+ delete rb1;
+ delete rb2;
+}
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+
+ BOOST_REQUIRE(NULL != testfile);
+
+ save_derived(testfile);
+ load_derived(testfile);
+
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_polymorphic.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <fstream>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "../test/test_tools.hpp"
+
+#if !defined(BOOST_ARCHIVE_TEST)
+#define BOOST_ARCHIVE_TEST polymorphic_text_archive.hpp
+#endif
+
+// the following is to ensure that when one of the libraries changes
+// BJAM rebuilds and relinks the test.
+/*
+#include "polymorphic_text_archive.hpp"
+#include "polymorphic_text_warchive.hpp"
+#include "polymorphic_binary_archive.hpp"
+#include "polymorphic_xml_archive.hpp"
+#include "polymorphic_xml_warchive.hpp"
+*/
+
+#include <boost/preprocessor/stringize.hpp>
+// #include <boost/preprocessor/cat.hpp>
+// the following fails with (only!) gcc 3.4
+// #include BOOST_PP_STRINGIZE(BOOST_PP_CAT(../test/,BOOST_ARCHIVE_TEST))
+// just copy over the files from the test directory
+#include BOOST_PP_STRINGIZE(BOOST_ARCHIVE_TEST)
+
+#include <boost/archive/polymorphic_oarchive.hpp>
+#include <boost/archive/polymorphic_iarchive.hpp>
+
+#include <boost/serialization/nvp.hpp>
+#include "../test/test_polymorphic_A.hpp"
+
+int test_main(int /* argc */, char * /* argv */ [])
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+ const data d;
+ data d1;
+ // test using using polymorphic interface
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa_implementation(os);
+ boost::archive::polymorphic_oarchive & oa_interface = oa_implementation;
+ oa_interface << BOOST_SERIALIZATION_NVP(d);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia_implementation(is);
+ boost::archive::polymorphic_iarchive & ia_interface = ia_implementation;
+ ia_interface >> BOOST_SERIALIZATION_NVP(d1);
+ }
+ BOOST_CHECK(d == d1);
+ std::remove(testfile);
+
+ // test using using polymorphic implementation.
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa_implementation(os);
+ oa_implementation << BOOST_SERIALIZATION_NVP(d);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia_implementation(is);
+ ia_implementation >> BOOST_SERIALIZATION_NVP(d1);
+ }
+ BOOST_CHECK(d == d1);
+ std::remove(testfile);
+
+ // test using using polymorphic implementation.
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ boost::archive::polymorphic_oarchive * oa_implementation
+ = new test_oarchive(os);
+ *oa_implementation << BOOST_SERIALIZATION_NVP(d);
+ delete oa_implementation;
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ boost::archive::polymorphic_iarchive * ia_implementation
+ = new test_iarchive(is);
+ *ia_implementation >> BOOST_SERIALIZATION_NVP(d1);
+ delete ia_implementation;
+ }
+ BOOST_CHECK(d == d1);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_simple_class.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+// invoke header for a custom archive test.
+
+#include <fstream>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "../test/test_tools.hpp"
+#include <boost/preprocessor/stringize.hpp>
+// #include <boost/preprocessor/cat.hpp>
+// the following fails with (only!) gcc 3.4
+// #include BOOST_PP_STRINGIZE(BOOST_PP_CAT(../test/,BOOST_ARCHIVE_TEST))
+// just copy over the files from the test directory
+#include BOOST_PP_STRINGIZE(BOOST_ARCHIVE_TEST)
+
+#include <boost/serialization/nvp.hpp>
+#include "../test/A.hpp"
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ A a, a1;
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("a", a);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("a", a1);
+ }
+ BOOST_CHECK_EQUAL(a, a1);
+ std::remove(testfile);
+ return (a == a1) ? EXIT_SUCCESS : EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_utf8_codecvt.cpp
+
+// (C) Copyright 2002-4 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)
+
+#include <algorithm>
+#include <fstream>
+#include <iostream>
+#include <iterator>
+#include <locale>
+#include <vector>
+#include <string>
+
+#include <cstddef> // size_t
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+
+#include <cwchar>
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{ using ::wcslen; }
+#endif
+
+#include "../test/test_tools.hpp"
+#include <boost/archive/iterators/istream_iterator.hpp>
+#include <boost/archive/iterators/ostream_iterator.hpp>
+
+#include <boost/archive/add_facet.hpp>
+#include <boost/archive/detail/utf8_codecvt_facet.hpp>
+
+template<std::size_t s>
+struct test_data
+{
+ static unsigned char utf8_encoding[];
+ static wchar_t wchar_encoding[];
+};
+
+template<>
+unsigned char test_data<2>::utf8_encoding[] = {
+ 0x01,
+ 0x7f,
+ 0xc2, 0x80,
+ 0xdf, 0xbf,
+ 0xe0, 0xa0, 0x80,
+ 0xe7, 0xbf, 0xbf
+};
+
+template<>
+wchar_t test_data<2>::wchar_encoding[] = {
+ 0x0001,
+ 0x007f,
+ 0x0080,
+ 0x07ff,
+ 0x0800,
+ 0x7fff
+};
+
+template<>
+unsigned char test_data<4>::utf8_encoding[] = {
+ 0x01,
+ 0x7f,
+ 0xc2, 0x80,
+ 0xdf, 0xbf,
+ 0xe0, 0xa0, 0x80,
+ 0xef, 0xbf, 0xbf,
+ 0xf0, 0x90, 0x80, 0x80,
+ 0xf4, 0x8f, 0xbf, 0xbf,
+ 0xf7, 0xbf, 0xbf, 0xbf,
+ 0xf8, 0x88, 0x80, 0x80, 0x80,
+ 0xfb, 0xbf, 0xbf, 0xbf, 0xbf,
+ 0xfc, 0x84, 0x80, 0x80, 0x80, 0x80,
+ 0xfd, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf
+};
+
+template<>
+wchar_t test_data<4>::wchar_encoding[] = {
+ 0x00000001,
+ 0x0000007f,
+ 0x00000080,
+ 0x000007ff,
+ 0x00000800,
+ 0x0000ffff,
+ 0x00010000,
+ 0x0010ffff,
+ 0x001fffff,
+ 0x00200000,
+ 0x03ffffff,
+ 0x04000000,
+ 0x7fffffff
+};
+
+int
+test_main(int /* argc */, char * /* argv */[]) {
+ std::locale old_loc;
+ std::locale * utf8_locale
+ = boost::archive::add_facet(
+ old_loc,
+ new boost::archive::detail::utf8_codecvt_facet
+ );
+
+ typedef char utf8_t;
+ typedef test_data<sizeof(wchar_t)> td;
+
+ // Send our test UTF-8 data to file
+ {
+ std::ofstream ofs;
+ ofs.open("test.dat", std::ios::binary);
+ std::copy(
+ td::utf8_encoding,
+ #if ! defined(__BORLANDC__)
+ // borland 5.60 complains about this
+ td::utf8_encoding + sizeof(td::utf8_encoding) / sizeof(unsigned char),
+ #else
+ // so use this instead
+ td::utf8_encoding + 12,
+ #endif
+ boost::archive::iterators::ostream_iterator<utf8_t>(ofs)
+ );
+ }
+
+ // Read the test data back in, converting to UCS-4 on the way in
+ std::vector<wchar_t> from_file;
+ {
+ std::wifstream ifs;
+ ifs.imbue(*utf8_locale);
+ ifs.open("test.dat");
+
+ wchar_t item = 0;
+ // note can't use normal vector from iterator constructor because
+ // dinkumware doesn't have it.
+ for(;;){
+ item = ifs.get();
+ if(item == WEOF)
+ break;
+ //ifs >> item;
+ //if(ifs.eof())
+ // break;
+ from_file.push_back(item);
+ }
+ }
+
+ // compare the data read back in with the orginal
+ #if ! defined(__BORLANDC__)
+ // borland 5.60 complains about this
+ BOOST_CHECK(from_file.size() == sizeof(td::wchar_encoding)/sizeof(wchar_t));
+ #else
+ // so use this instead
+ BOOST_CHECK(from_file.size() == 6);
+ #endif
+
+ BOOST_CHECK(std::equal(from_file.begin(), from_file.end(), td::wchar_encoding));
+
+ // Send the UCS4_data back out, converting to UTF-8
+ {
+ std::wofstream ofs;
+ ofs.imbue(*utf8_locale);
+ ofs.open("test2.dat");
+ std::copy(
+ from_file.begin(),
+ from_file.end(),
+ boost::archive::iterators::ostream_iterator<wchar_t>(ofs)
+ );
+ }
+
+ // Make sure that both files are the same
+ {
+ typedef boost::archive::iterators::istream_iterator<utf8_t> is_iter;
+ is_iter end_iter;
+
+ std::ifstream ifs1("test.dat");
+ is_iter it1(ifs1);
+ std::vector<utf8_t> data1;
+ std::copy(it1, end_iter, std::back_inserter(data1));
+
+ std::ifstream ifs2("test2.dat");
+ is_iter it2(ifs2);
+ std::vector<utf8_t> data2;
+ std::copy(it2, end_iter, std::back_inserter(data2));
+
+ BOOST_CHECK(data1 == data2);
+ }
+
+ // some libraries have trouble that only shows up with longer strings
+
+ wchar_t * test3_data = L"\
+ <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>\
+ <!DOCTYPE boost_serialization>\
+ <boost_serialization signature=\"serialization::archive\" version=\"3\">\
+ <a class_id=\"0\" tracking_level=\"0\">\
+ <b>1</b>\
+ <f>96953204</f>\
+ <g>177129195</g>\
+ <l>1</l>\
+ <m>5627</m>\
+ <n>23010</n>\
+ <o>7419</o>\
+ <p>16212</p>\
+ <q>4086</q>\
+ <r>2749</r>\
+ <c>-33</c>\
+ <s>124</s>\
+ <t>28</t>\
+ <u>32225</u>\
+ <v>17543</v>\
+ <w>0.84431422</w>\
+ <x>1.0170664757130923</x>\
+ <y>tjbx</y>\
+ <z>cuwjentqpkejp</z>\
+ </a>\
+ </boost_serialization>\
+ ";
+
+ // Send the UCS4_data back out, converting to UTF-8
+ std::size_t l = std::wcslen(test3_data);
+ {
+ std::wofstream ofs;
+ ofs.imbue(*utf8_locale);
+ ofs.open("test3.dat");
+ std::copy(
+ test3_data,
+ test3_data + l,
+ boost::archive::iterators::ostream_iterator<wchar_t>(ofs)
+ );
+ }
+
+ // Make sure that both files are the same
+ {
+ std::wifstream ifs;
+ ifs.imbue(*utf8_locale);
+ ifs.open("test3.dat");
+ BOOST_CHECK(
+ std::equal(
+ test3_data,
+ test3_data + l,
+ boost::archive::iterators::istream_iterator<wchar_t>(ifs)
+ )
+ );
+ }
+
+ delete utf8_locale;
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_vector.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <fstream>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "../test/test_tools.hpp"
+#include <boost/preprocessor/stringize.hpp>
+// #include <boost/preprocessor/cat.hpp>
+// the following fails with (only!) gcc 3.4
+// #include BOOST_PP_STRINGIZE(BOOST_PP_CAT(../test/,BOOST_ARCHIVE_TEST))
+// just copy over the files from the test directory
+#include BOOST_PP_STRINGIZE(BOOST_ARCHIVE_TEST)
+#include <boost/serialization/vector.hpp>
+
+#include "../test/A.hpp"
+
+template <class T>
+int test_vector(T)
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ // test array of objects
+ std::vector<T> avector;
+ avector.push_back(T());
+ avector.push_back(T());
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("avector", avector);
+ }
+ std::vector<T> avector1;
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("avector", avector1);
+ }
+ BOOST_CHECK(avector == avector1);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ int res = test_vector(A());
+ // test an int vector for which optimized versions should be available
+ if (res == EXIT_SUCCESS)
+ res = test_vector(0);
+ // test a bool vector
+ if (res == EXIT_SUCCESS)
+ res = test_vector(false);
+ return res;
+}
+
+// EOF
--- /dev/null
+// (C) Copyright 2002-4 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 <boost/archive/polymorphic_binary_oarchive.hpp>
+typedef boost::archive::polymorphic_binary_oarchive test_oarchive;
+typedef std::ofstream test_ostream;
+#include <boost/archive/polymorphic_binary_iarchive.hpp>
+typedef boost::archive::polymorphic_binary_iarchive test_iarchive;
+typedef std::ifstream test_istream;
+#define TEST_STREAM_FLAGS std::ios::binary
--- /dev/null
+// (C) Copyright 2002-4 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 <boost/archive/polymorphic_binary_oarchive.hpp>
+typedef boost::archive::polymorphic_binary_oarchive test_oarchive;
+typedef std::ofstream test_ostream;
+#include <boost/archive/polymorphic_binary_iarchive.hpp>
+typedef boost::archive::polymorphic_binary_iarchive test_iarchive;
+typedef std::ifstream test_istream;
+#define TEST_STREAM_FLAGS std::ios::binary
--- /dev/null
+// (C) Copyright 2002-4 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 <boost/archive/polymorphic_text_oarchive.hpp>
+typedef boost::archive::polymorphic_text_oarchive test_oarchive;
+typedef std::ofstream test_ostream;
+#include <boost/archive/polymorphic_text_iarchive.hpp>
+typedef boost::archive::polymorphic_text_iarchive test_iarchive;
+typedef std::ifstream test_istream;
+#define TEST_STREAM_FLAGS (std::ios_base::openmode)0
--- /dev/null
+// (C) Copyright 2002-4 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 <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+#include <boost/archive/polymorphic_text_woarchive.hpp>
+typedef boost::archive::polymorphic_text_woarchive test_oarchive;
+typedef std::wofstream test_ostream;
+#include <boost/archive/polymorphic_text_wiarchive.hpp>
+typedef boost::archive::polymorphic_text_wiarchive test_iarchive;
+typedef std::wifstream test_istream;
+#define TEST_STREAM_FLAGS (std::ios_base::openmode)0
+#endif
--- /dev/null
+// (C) Copyright 2002-4 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 <boost/archive/polymorphic_xml_oarchive.hpp>
+typedef boost::archive::polymorphic_xml_oarchive test_oarchive;
+typedef std::ofstream test_ostream;
+#include <boost/archive/polymorphic_xml_iarchive.hpp>
+typedef boost::archive::polymorphic_xml_iarchive test_iarchive;
+typedef std::ifstream test_istream;
+#define TEST_STREAM_FLAGS (std::ios_base::openmode)0
--- /dev/null
+// (C) Copyright 2002-4 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 <boost/archive/polymorphic_xml_woarchive.hpp>
+typedef boost::archive::polymorphic_xml_woarchive test_oarchive;
+typedef std::wofstream test_ostream;
+#include <boost/archive/polymorphic_xml_wiarchive.hpp>
+typedef boost::archive::polymorphic_xml_wiarchive test_iarchive;
+typedef std::wifstream test_istream;
+#define TEST_STREAM_FLAGS (std::ios_base::openmode)0
--- /dev/null
+// (C) Copyright 2002-4 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.// file includes for testing a custom archive.
+// as an example this tests the portable binary archive
+
+// #include output archive header
+#include "../example/portable_binary_oarchive.hpp"
+// define output archive class to be used
+typedef portable_binary_oarchive test_oarchive;
+// and corresponding stream
+typedef std::ofstream test_ostream;
+
+// repeat the above for correspondng input archive
+#include "../example/portable_binary_iarchive.hpp"
+typedef portable_binary_iarchive test_iarchive;
+typedef std::ifstream test_istream;
+
+// and stream open flags
+#define TEST_STREAM_FLAGS std::ios::binary
--- /dev/null
+# build and run the tests leaving the executables in place
+
+# (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)
+
+# profile.sh --toolset=gcc preserve-test-targets=on variant=profile
+if test $# -eq 0
+then
+ echo "Usage: $0 <bjam arguments>"
+ echo "Typical bjam arguements are:"
+ echo " toolset=msvc-7.1,gcc"
+ echo " link=static,shared"
+ echo " threading=single,multi"
+ echo " -sBOOST_ARCHIVE_LIST=<archive name>"
+else
+ bjam --dump-tests variant=profile preserve-test-targets=on $@ >bjam.log 2>&1
+ process_jam_log --v2 <bjam.log
+
+ # for each test directory
+
+ for dir in \
+ ../../../bin.v2/libs/serialization/performance/*/gcc*/profile \
+ ../../../bin.v2/libs/serialization/performance/*/gcc*/*/profile
+ do
+ # execute test
+ for exe in $dir/*.exe
+ do
+ # execute the test
+ echo executing $exe
+ $exe
+ # copy profile to test directory
+ gprof $exe gmon.out >$dir/profile.txt
+ done
+ done
+
+ library_status library_status.html links.html
+fi
--- /dev/null
+// (C) Copyright 2002-4 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.
+// text_archive
+#include <boost/archive/text_oarchive.hpp>
+typedef boost::archive::text_oarchive test_oarchive;
+typedef std::ofstream test_ostream;
+#include <boost/archive/text_iarchive.hpp>
+typedef boost::archive::text_iarchive test_iarchive;
+typedef std::ifstream test_istream;
+#define TEST_STREAM_FLAGS (std::ios_base::openmode)0
--- /dev/null
+// (C) Copyright 2002-4 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.
+// text_warchive
+#include <boost/archive/text_woarchive.hpp>
+typedef boost::archive::text_woarchive test_oarchive;
+typedef std::wofstream test_ostream;
+#include <boost/archive/text_wiarchive.hpp>
+typedef boost::archive::text_wiarchive test_iarchive;
+typedef std::wifstream test_istream;
+#define TEST_STREAM_FLAGS (std::ios_base::openmode)0
+
+
+
+
+
--- /dev/null
+// (C) Copyright 2002-4 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.
+// xml_archive
+#include <boost/archive/xml_oarchive.hpp>
+typedef boost::archive::xml_oarchive test_oarchive;
+typedef std::ofstream test_ostream;
+#include <boost/archive/xml_iarchive.hpp>
+typedef boost::archive::xml_iarchive test_iarchive;
+typedef std::ifstream test_istream;
+#define TEST_STREAM_FLAGS (std::ios_base::openmode)0
+
+
--- /dev/null
+// (C) Copyright 2002-4 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.
+// xml_warchive
+#include <boost/archive/xml_woarchive.hpp>
+typedef boost::archive::xml_woarchive test_oarchive;
+typedef std::wofstream test_ostream;
+#include <boost/archive/xml_wiarchive.hpp>
+typedef boost::archive::xml_wiarchive test_iarchive;
+typedef std::wifstream test_istream;
+#define TEST_STREAM_FLAGS (std::ios_base::openmode)0
+
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// archive_exception.cpp:
+
+// (C) Copyright 2009 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.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <exception>
+#include <cassert>
+#include <string>
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/archive_exception.hpp>
+
+namespace boost {
+namespace archive {
+
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+archive_exception::archive_exception(
+ exception_code c,
+ const char * e1,
+ const char * e2
+) :
+ code(c)
+{
+ m_msg = "programming error";
+ switch(code){
+ case no_exception:
+ m_msg = "uninitialized exception";
+ break;
+ case unregistered_class:
+ m_msg = "unregistered class";
+ if(NULL != e1){
+ m_msg += " - ";
+ m_msg += e1;
+ }
+ break;
+ case invalid_signature:
+ m_msg = "invalid signature";
+ break;
+ case unsupported_version:
+ m_msg = "unsupported version";
+ break;
+ case pointer_conflict:
+ m_msg = "pointer conflict";
+ break;
+ case incompatible_native_format:
+ m_msg = "incompatible native format";
+ if(NULL != e1){
+ m_msg += " - ";
+ m_msg += e1;
+ }
+ break;
+ case array_size_too_short:
+ m_msg = "array size too short";
+ break;
+ case stream_error:
+ m_msg = "stream error";
+ break;
+ case invalid_class_name:
+ m_msg = "class name too long";
+ break;
+ case unregistered_cast:
+ m_msg = "unregistered void cast ";
+ m_msg += (NULL != e1) ? e1 : "?";
+ m_msg += "<-";
+ m_msg += (NULL != e2) ? e2 : "?";
+ break;
+ case unsupported_class_version:
+ m_msg = "class version";
+ break;
+ case other_exception:
+ // if get here - it indicates a derived exception
+ // was sliced by passing by value in catch
+ m_msg = "unknown derived exception";
+ break;
+ case multiple_code_instantiation:
+ m_msg = "code instantiated in more than one module";
+ if(NULL != e1){
+ m_msg += " - ";
+ m_msg += e1;
+ }
+ break;
+ default:
+ assert(false);
+ break;
+ }
+}
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+archive_exception::~archive_exception() throw () {}
+
+BOOST_ARCHIVE_DECL(const char *)
+archive_exception::what( ) const throw()
+{
+ return m_msg.c_str();
+}
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+archive_exception::archive_exception() :
+ code(no_exception)
+{}
+
+} // archive
+} // boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_archive.cpp:
+
+// (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.
+
+//////////////////////////////////////////////////////////////////////
+//
+// objects are stored as
+//
+// class_id* // -1 for a null pointer
+// if a new class id
+// [
+// exported key - class name*
+// tracking level - always/never
+// class version
+// ]
+//
+// if tracking
+// [
+// object_id
+// ]
+//
+// [ // if a new object id
+// data...
+// ]
+//
+// * required only for pointers - optional for objects
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/basic_archive.hpp>
+
+namespace boost {
+namespace archive {
+
+///////////////////////////////////////////////////////////////////////
+// constants used in archive signature
+//This should never ever change. note that is not an std::string
+// string.
+BOOST_ARCHIVE_DECL(const char *)
+BOOST_ARCHIVE_SIGNATURE(){
+ return "serialization::archive";
+}
+
+// this should change if the capabilities are added to the library
+// such that archives can be created which can't be read by previous
+// versions of this library
+// 1 - initial version
+// 2 - made address tracking optional
+// 3 - numerous changes - can't guarentee compatibility with previous versions
+// 4 - Boost 1.34
+// added register_version to properly support versioning for collections
+// 5 - Boost 1.36
+// changed serialization of collections: adding version even for primitive
+// types caused backwards compatibility breaking change in 1.35
+// 6 - Boost 1.41, serializing collection sizes as std::size_t
+
+BOOST_ARCHIVE_DECL(version_type)
+BOOST_ARCHIVE_VERSION(){
+ return version_type(7);
+}
+
+} // namespace archive
+} // namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_archive.cpp:
+
+// (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 <boost/config.hpp> // msvc 6.0 needs this to suppress warnings
+
+#include <cassert>
+#include <set>
+#include <list>
+#include <vector>
+#include <cstddef> // size_t, NULL
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+
+#include <boost/integer_traits.hpp>
+#include <boost/serialization/state_saver.hpp>
+#include <boost/serialization/throw_exception.hpp>
+#include <boost/serialization/tracking.hpp>
+
+#define BOOST_ARCHIVE_SOURCE
+#define BOOST_SERIALIZATION_SOURCE
+
+#include <boost/archive/archive_exception.hpp>
+
+#include <boost/archive/detail/decl.hpp>
+#include <boost/archive/basic_archive.hpp>
+#include <boost/archive/detail/basic_iserializer.hpp>
+#include <boost/archive/detail/basic_pointer_iserializer.hpp>
+#include <boost/archive/detail/basic_iarchive.hpp>
+
+#include <boost/archive/detail/auto_link_archive.hpp>
+
+using namespace boost::serialization;
+
+namespace boost {
+namespace archive {
+namespace detail {
+
+class basic_iarchive_impl {
+ friend class basic_iarchive;
+ version_type m_archive_library_version;
+ unsigned int m_flags;
+
+ //////////////////////////////////////////////////////////////////////
+ // information about each serialized object loaded
+ // indexed on object_id
+ struct aobject
+ {
+ void * address;
+ bool loaded_as_pointer;
+ class_id_type class_id;
+ aobject(
+ void *a,
+ class_id_type class_id_
+ ) :
+ address(a),
+ loaded_as_pointer(false),
+ class_id(class_id_)
+ {}
+ aobject() :
+ address(NULL),
+ loaded_as_pointer(false),
+ class_id(-2)
+ {}
+ };
+ typedef std::vector<aobject> object_id_vector_type;
+ object_id_vector_type object_id_vector;
+
+ //////////////////////////////////////////////////////////////////////
+ // used to implement the reset_object_address operation.
+ object_id_type moveable_objects_start;
+ object_id_type moveable_objects_end;
+ object_id_type moveable_objects_recent;
+
+ void reset_object_address(
+ const void * new_address,
+ const void *old_address
+ );
+
+ //////////////////////////////////////////////////////////////////////
+ // used by load object to look up class id given basic_serializer
+ struct cobject_type
+ {
+ const basic_iserializer * m_bis;
+ const class_id_type m_class_id;
+ cobject_type(
+ std::size_t class_id,
+ const basic_iserializer & bis
+ ) :
+ m_bis(& bis),
+ m_class_id(class_id)
+ {}
+ cobject_type(const cobject_type & rhs) :
+ 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
+ // is made to assign. This should never be necessary
+ cobject_type & operator=(const cobject_type & rhs);
+ bool operator<(const cobject_type &rhs) const
+ {
+ return *m_bis < *(rhs.m_bis);
+ }
+ };
+ typedef std::set<cobject_type> cobject_info_set_type;
+ cobject_info_set_type cobject_info_set;
+
+ //////////////////////////////////////////////////////////////////////
+ // information about each serialized class indexed on class_id
+ class cobject_id
+ {
+ public:
+ cobject_id & operator=(const cobject_id & rhs){
+ bis_ptr = rhs.bis_ptr;
+ bpis_ptr = rhs.bpis_ptr;
+ file_version = rhs.file_version;
+ tracking_level = rhs.tracking_level;
+ initialized = rhs.initialized;
+ return *this;
+ }
+ const basic_iserializer * bis_ptr;
+ const basic_pointer_iserializer * bpis_ptr;
+ version_type file_version;
+ tracking_type tracking_level;
+ bool initialized;
+
+ cobject_id(const basic_iserializer & bis_) :
+ bis_ptr(& bis_),
+ bpis_ptr(NULL),
+ file_version(0),
+ tracking_level(track_never),
+ initialized(false)
+ {}
+ cobject_id(const cobject_id &rhs):
+ bis_ptr(rhs.bis_ptr),
+ bpis_ptr(rhs.bpis_ptr),
+ file_version(rhs.file_version),
+ tracking_level(rhs.tracking_level),
+ initialized(rhs.initialized)
+ {}
+ };
+ typedef std::vector<cobject_id> cobject_id_vector_type;
+ cobject_id_vector_type cobject_id_vector;
+
+ //////////////////////////////////////////////////////////////////////
+ // address of the most recent object serialized as a poiner
+ // whose data itself is now pending serialization
+ void * pending_object;
+ const basic_iserializer * pending_bis;
+ version_type pending_version;
+
+ basic_iarchive_impl(unsigned int flags) :
+ m_archive_library_version(BOOST_ARCHIVE_VERSION()),
+ m_flags(flags),
+ moveable_objects_start(0),
+ moveable_objects_end(0),
+ moveable_objects_recent(0),
+ pending_object(NULL),
+ pending_bis(NULL),
+ pending_version(0)
+ {}
+ ~basic_iarchive_impl(){}
+ void set_library_version(version_type archive_library_version){
+ m_archive_library_version = archive_library_version;
+ }
+ bool
+ track(
+ basic_iarchive & ar,
+ void * & t
+ );
+ void
+ load_preamble(
+ basic_iarchive & ar,
+ cobject_id & co
+ );
+ class_id_type register_type(
+ const basic_iserializer & bis
+ );
+
+ // redirect through virtual functions to load functions for this archive
+ template<class T>
+ void load(basic_iarchive & ar, T & t){
+ ar.vload(t);
+ }
+
+//public:
+ void
+ next_object_pointer(void * t){
+ pending_object = t;
+ }
+ void delete_created_pointers();
+ class_id_type register_type(
+ const basic_pointer_iserializer & bpis
+ );
+ void load_object(
+ basic_iarchive & ar,
+ void * t,
+ const basic_iserializer & bis
+ );
+ const basic_pointer_iserializer * load_pointer(
+ basic_iarchive & ar,
+ void * & t,
+ const basic_pointer_iserializer * bpis,
+ const basic_pointer_iserializer * (*finder)(
+ const boost::serialization::extended_type_info & type
+ )
+
+ );
+};
+
+inline void
+basic_iarchive_impl::reset_object_address(
+ const void * new_address,
+ const void *old_address
+){
+ // this code handles a couple of situations.
+ // a) where reset_object_address is applied to an untracked object.
+ // In such a case the call is really superfluous and its really an
+ // an error. But we don't have access to the types here so we can't
+ // know that. However, this code will effectively turn this situation
+ // into a no-op and every thing will work fine - albeat with a small
+ // execution time penalty.
+ // b) where the call to reset_object_address doesn't immediatly follow
+ // the << operator to which it corresponds. This would be a bad idea
+ // but the code may work anyway. Naturally, a bad practice on the part
+ // of the programmer but we can't detect it - as above. So maybe we
+ // can save a few more people from themselves as above.
+ object_id_type i;
+ for(i = moveable_objects_recent; i < moveable_objects_end; ++i){
+ if(old_address == object_id_vector[i].address)
+ break;
+ }
+ for(; i < moveable_objects_end; ++i){
+
+ // calculate displacement from this level
+ // warning - pointer arithmetic on void * is in herently non-portable
+ // but expected to work on all platforms in current usage
+ if(object_id_vector[i].address > old_address){
+ std::size_t member_displacement
+ = reinterpret_cast<std::size_t>(object_id_vector[i].address)
+ - reinterpret_cast<std::size_t>(old_address);
+ object_id_vector[i].address = reinterpret_cast<void *>(
+ reinterpret_cast<std::size_t>(new_address) + member_displacement
+ );
+ }
+ else{
+ std::size_t member_displacement
+ = reinterpret_cast<std::size_t>(old_address)
+ - reinterpret_cast<std::size_t>(object_id_vector[i].address);
+ object_id_vector[i].address = reinterpret_cast<void *>(
+ reinterpret_cast<std::size_t>(new_address) - member_displacement
+ );
+ }
+ }
+}
+
+inline void
+basic_iarchive_impl::delete_created_pointers()
+{
+ object_id_vector_type::iterator i;
+ for(
+ i = object_id_vector.begin();
+ i != object_id_vector.end();
+ ++i
+ ){
+ if(i->loaded_as_pointer){
+ // borland complains without this minor hack
+ const int j = i->class_id;
+ const cobject_id & co = cobject_id_vector[j];
+ //const cobject_id & co = cobject_id_vector[i->class_id];
+ // with the appropriate input serializer,
+ // delete the indicated object
+ co.bis_ptr->destroy(i->address);
+ }
+ }
+}
+
+inline class_id_type
+basic_iarchive_impl::register_type(
+ const basic_iserializer & bis
+){
+ assert(
+ cobject_info_set.size()
+ <=
+ boost::integer_traits<class_id_type>::const_max
+ );
+ class_id_type cid(static_cast<class_id_type>(
+ cobject_info_set.size()
+ ));
+ cobject_type co(cid, bis);
+ std::pair<cobject_info_set_type::const_iterator, bool>
+ result = cobject_info_set.insert(co);
+
+ if(result.second){
+ cobject_id_vector.push_back(cobject_id(bis));
+ assert(cobject_info_set.size() == cobject_id_vector.size());
+ }
+ cid = result.first->m_class_id;
+ // borland complains without this minor hack
+ const int tid = cid;
+ cobject_id & coid = cobject_id_vector[tid];
+ coid.bpis_ptr = bis.get_bpis_ptr();
+ return cid;
+}
+
+void
+basic_iarchive_impl::load_preamble(
+ basic_iarchive & ar,
+ cobject_id & co
+){
+ if(! co.initialized){
+ if(co.bis_ptr->class_info()){
+ class_id_optional_type cid;
+ load(ar, cid); // to be thrown away
+ load(ar, co.tracking_level);
+ load(ar, co.file_version);
+ }
+ else{
+ // override tracking with indicator from class information
+ co.tracking_level = co.bis_ptr->tracking(m_flags);
+ co.file_version = version_type(
+ co.bis_ptr->version()
+ );
+ }
+ co.initialized = true;
+ }
+}
+
+bool
+basic_iarchive_impl::track(
+ basic_iarchive & ar,
+ void * & t
+){
+ object_id_type oid;
+ load(ar, oid);
+
+ // if its a reference to a old object
+ if(object_id_type(object_id_vector.size()) > oid){
+ // we're done
+ t = object_id_vector[oid].address;
+ return false;
+ }
+ return true;
+}
+
+inline void
+basic_iarchive_impl::load_object(
+ basic_iarchive & ar,
+ void * t,
+ const basic_iserializer & bis
+){
+ // if its been serialized through a pointer and the preamble's been done
+ if(t == pending_object && & bis == pending_bis){
+ // read data
+ (bis.load_object_data)(ar, t, pending_version);
+ return;
+ }
+
+ const class_id_type cid = register_type(bis);
+ const int i = cid;
+ cobject_id & co = cobject_id_vector[i];
+
+ load_preamble(ar, co);
+
+ // save the current move stack position in case we want to truncate it
+ boost::serialization::state_saver<object_id_type> w(moveable_objects_start);
+
+ // note: extra line used to evade borland issue
+ const bool tracking = co.tracking_level;
+
+ object_id_type this_id;
+ moveable_objects_start =
+ this_id = object_id_vector.size();
+
+ // if we tracked this object when the archive was saved
+ if(tracking){
+ // if it was already read
+ if(!track(ar, t))
+ // we're done
+ return;
+ // add a new enty into the tracking list
+ object_id_vector.push_back(aobject(t, cid));
+ // and add an entry for this object
+ moveable_objects_end = object_id_vector.size();
+ }
+ // read data
+ (bis.load_object_data)(ar, t, co.file_version);
+ moveable_objects_recent = this_id;
+}
+
+inline const basic_pointer_iserializer *
+basic_iarchive_impl::load_pointer(
+ basic_iarchive &ar,
+ void * & t,
+ const basic_pointer_iserializer * bpis_ptr,
+ const basic_pointer_iserializer * (*finder)(
+ const boost::serialization::extended_type_info & type_
+ )
+
+){
+ class_id_type cid;
+ load(ar, cid);
+
+ if(NULL_POINTER_TAG == cid){
+ t = NULL;
+ return bpis_ptr;
+ }
+
+ assert(
+ cobject_info_set.size()
+ <=
+ boost::integer_traits<class_id_type>::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
+ if(NULL == bpis_ptr
+ // or polymorphic
+ || bpis_ptr->get_basic_serializer().is_polymorphic()){
+ // is must have been exported
+ char key[BOOST_SERIALIZATION_MAX_KEY_SIZE];
+ class_name_type class_name(key);
+ load(ar, class_name);
+ // if it has a class name
+ const serialization::extended_type_info *eti = NULL;
+ if(0 != key[0])
+ eti = serialization::extended_type_info::find(key);
+ if(NULL == eti)
+ boost::serialization::throw_exception(
+ archive_exception(archive_exception::unregistered_class)
+ );
+ bpis_ptr = (*finder)(*eti);
+ }
+ assert(NULL != bpis_ptr);
+ class_id_type new_cid = register_type(bpis_ptr->get_basic_serializer());
+ int i = cid;
+ cobject_id_vector[i].bpis_ptr = bpis_ptr;
+ assert(new_cid == cid);
+ }
+ int i = cid;
+ cobject_id & co = cobject_id_vector[i];
+ bpis_ptr = co.bpis_ptr;
+
+ load_preamble(ar, co);
+
+ // extra line to evade borland issue
+ const bool tracking = co.tracking_level;
+ // if we're tracking and the pointer has already been read
+ if(tracking && ! track(ar, t))
+ // we're done
+ return bpis_ptr;
+
+ // save state
+ serialization::state_saver<object_id_type> w_start(moveable_objects_start);
+
+ if(! tracking){
+ bpis_ptr->load_object_ptr(ar, t, co.file_version);
+ }
+ else{
+ serialization::state_saver<void *> x(pending_object);
+ serialization::state_saver<const basic_iserializer *> y(pending_bis);
+ serialization::state_saver<version_type> z(pending_version);
+
+ pending_bis = & bpis_ptr->get_basic_serializer();
+ pending_version = co.file_version;
+
+ // predict next object id to be created
+ const unsigned int ui = object_id_vector.size();
+
+ serialization::state_saver<object_id_type> w_end(moveable_objects_end);
+
+ // because the following operation could move the items
+ // don't use co after this
+ // add to list of serialized objects so that we can properly handle
+ // cyclic strucures
+ object_id_vector.push_back(aobject(t, cid));
+
+ bpis_ptr->load_object_ptr(
+ ar,
+ object_id_vector[ui].address,
+ co.file_version
+ );
+ t = object_id_vector[ui].address;
+ object_id_vector[ui].loaded_as_pointer = true;
+ assert(NULL != t);
+ }
+
+ return bpis_ptr;
+}
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
+//////////////////////////////////////////////////////////////////////
+// implementation of basic_iarchive functions
+namespace boost {
+namespace archive {
+namespace detail {
+
+BOOST_ARCHIVE_DECL(void)
+basic_iarchive::next_object_pointer(void *t){
+ pimpl->next_object_pointer(t);
+}
+
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_iarchive::basic_iarchive(unsigned int flags) :
+ pimpl(new basic_iarchive_impl(flags))
+{}
+
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_iarchive::~basic_iarchive()
+{
+ delete pimpl;
+}
+
+BOOST_ARCHIVE_DECL(void)
+basic_iarchive::set_library_version(version_type archive_library_version){
+ pimpl->set_library_version(archive_library_version);
+}
+
+BOOST_ARCHIVE_DECL(void)
+basic_iarchive::reset_object_address(
+ const void * new_address,
+ const void * old_address
+){
+ pimpl->reset_object_address(new_address, old_address);
+}
+
+BOOST_ARCHIVE_DECL(void)
+basic_iarchive::load_object(
+ void *t,
+ const basic_iserializer & bis
+){
+ pimpl->load_object(*this, t, bis);
+}
+
+// load a pointer object
+BOOST_ARCHIVE_DECL(const basic_pointer_iserializer *)
+basic_iarchive::load_pointer(
+ void * &t,
+ const basic_pointer_iserializer * bpis_ptr,
+ const basic_pointer_iserializer * (*finder)(
+ const boost::serialization::extended_type_info & type_
+ )
+
+){
+ return pimpl->load_pointer(*this, t, bpis_ptr, finder);
+}
+
+BOOST_ARCHIVE_DECL(void)
+basic_iarchive::register_basic_serializer(const basic_iserializer & bis){
+ pimpl->register_type(bis);
+}
+
+BOOST_ARCHIVE_DECL(void)
+basic_iarchive::delete_created_pointers()
+{
+ pimpl->delete_created_pointers();
+}
+
+BOOST_ARCHIVE_DECL(unsigned int)
+basic_iarchive::get_library_version() const{
+ return pimpl->m_archive_library_version;
+}
+
+BOOST_ARCHIVE_DECL(unsigned int)
+basic_iarchive::get_flags() const{
+ return pimpl->m_flags;
+}
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_iserializer.cpp:
+
+// (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 <cstddef> // NULL
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/detail/basic_iserializer.hpp>
+
+namespace boost {
+namespace archive {
+namespace detail {
+
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_iserializer::basic_iserializer(
+ const boost::serialization::extended_type_info & eti
+) :
+ basic_serializer(eti),
+ m_bpis(NULL)
+{}
+
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_iserializer::~basic_iserializer(){}
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_oarchive.cpp:
+
+// (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 <boost/config.hpp> // msvc 6.0 needs this for warning suppression
+
+#include <cassert>
+#include <set>
+#include <cstddef> // NULL
+
+#include <boost/limits.hpp>
+#include <boost/serialization/state_saver.hpp>
+#include <boost/serialization/throw_exception.hpp>
+
+// including this here to work around an ICC in intel 7.0
+// normally this would be part of basic_oarchive.hpp below.
+#define BOOST_ARCHIVE_SOURCE
+#define BOOST_SERIALIZATION_SOURCE
+
+#include <boost/archive/detail/decl.hpp>
+#include <boost/archive/basic_archive.hpp>
+#include <boost/archive/detail/basic_oserializer.hpp>
+#include <boost/archive/detail/basic_pointer_oserializer.hpp>
+#include <boost/archive/detail/basic_oarchive.hpp>
+#include <boost/archive/archive_exception.hpp>
+#include <boost/serialization/extended_type_info.hpp>
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable : 4251 4231 4660 4275)
+#endif
+
+using namespace boost::serialization;
+
+namespace boost {
+namespace archive {
+namespace detail {
+
+class basic_oarchive_impl {
+ friend class basic_oarchive;
+ unsigned int m_flags;
+
+ //////////////////////////////////////////////////////////////////////
+ // information about each serialized object saved
+ // keyed on address, class_id
+ struct aobject
+ {
+ const void * address;
+ class_id_type class_id;
+ object_id_type object_id;
+
+ bool operator<(const aobject &rhs) const
+ {
+ assert(NULL != address);
+ assert(NULL != rhs.address);
+ if( address < rhs.address )
+ return true;
+ if( address > rhs.address )
+ return false;
+ return class_id < rhs.class_id;
+ }
+ aobject & operator=(const aobject & rhs)
+ {
+ address = rhs.address;
+ class_id = rhs.class_id;
+ object_id = rhs.object_id;
+ return *this;
+ }
+ aobject(
+ const void *a,
+ class_id_type class_id_,
+ object_id_type object_id_
+ ) :
+ address(a),
+ class_id(class_id_),
+ object_id(object_id_)
+ {}
+ aobject() : address(NULL){}
+ };
+ // keyed on class_id, address
+ typedef std::set<aobject> object_set_type;
+ object_set_type object_set;
+
+ //////////////////////////////////////////////////////////////////////
+ // information about each serialized class saved
+ // keyed on type_info
+ struct cobject_type
+ {
+ 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
+ ) :
+ m_bos_ptr(& bos),
+ m_class_id(
+ static_cast<class_id_type>(class_id)
+ ),
+ m_initialized(false)
+ {}
+ cobject_type(const basic_oserializer & bos)
+ : m_bos_ptr(& bos)
+ {}
+ cobject_type(
+ const cobject_type & rhs
+ ) :
+ 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
+ // is made to assign. This should never be necessary
+ // use this only for lookup argument
+ cobject_type & operator=(const cobject_type &rhs);
+ bool operator<(const cobject_type &rhs) const {
+ return *m_bos_ptr < *(rhs.m_bos_ptr);
+ }
+ };
+ // keyed on type_info
+ typedef std::set<cobject_type> cobject_info_set_type;
+ cobject_info_set_type cobject_info_set;
+
+ // list of objects initially stored as pointers - used to detect errors
+ // keyed on object id
+ std::set<object_id_type> stored_pointers;
+
+ // address of the most recent object serialized as a poiner
+ // whose data itself is now pending serialization
+ const void * pending_object;
+ const basic_oserializer * pending_bos;
+
+ basic_oarchive_impl(unsigned int flags) :
+ m_flags(flags),
+ pending_object(NULL),
+ pending_bos(NULL)
+ {}
+
+ const cobject_type &
+ find(const basic_oserializer & bos);
+ const basic_oserializer *
+ find(const serialization::extended_type_info &ti) const;
+
+//public:
+ const cobject_type &
+ register_type(const basic_oserializer & bos);
+ void save_object(
+ basic_oarchive & ar,
+ const void *t,
+ const basic_oserializer & bos
+ );
+ void save_pointer(
+ basic_oarchive & ar,
+ const void * t,
+ const basic_pointer_oserializer * bpos
+ );
+};
+
+//////////////////////////////////////////////////////////////////////
+// basic_oarchive implementation functions
+
+// given a type_info - find its bos
+// return NULL if not found
+inline const basic_oserializer *
+basic_oarchive_impl::find(const serialization::extended_type_info & ti) const {
+ #ifdef BOOST_MSVC
+ # pragma warning(push)
+ # pragma warning(disable : 4511 4512)
+ #endif
+ class bosarg :
+ public basic_oserializer
+ {
+ bool class_info() const {
+ assert(false);
+ return false;
+ }
+ // returns true if objects should be tracked
+ bool tracking(const unsigned int) const {
+ assert(false);
+ return false;
+ }
+ // returns class version
+ version_type version() const {
+ assert(false);
+ return version_type(0);
+ }
+ // returns true if this class is polymorphic
+ bool is_polymorphic() const{
+ assert(false);
+ return false;
+ }
+ void save_object_data(
+ basic_oarchive & /*ar*/, const void * /*x*/
+ ) const {
+ assert(false);
+ }
+ public:
+ bosarg(const serialization::extended_type_info & eti) :
+ 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));
+ // it should already have been "registered" - see below
+ if(cit == cobject_info_set.end()){
+ // if an entry is not found in the table it is because a pointer
+ // of a derived class has been serialized through its base class
+ // but the derived class hasn't been "registered"
+ return NULL;
+ }
+ // return pointer to the real class
+ 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<class_id_type>::const_max
+ );
+ std::pair<cobject_info_set_type::iterator, bool> cresult =
+ cobject_info_set.insert(cobject_type(cobject_info_set.size(), bos));
+ return *(cresult.first);
+}
+
+inline const basic_oarchive_impl::cobject_type &
+basic_oarchive_impl::register_type(
+ const basic_oserializer & bos
+){
+ assert(
+ cobject_info_set.size()
+ <=
+ boost::integer_traits<class_id_type>::const_max
+ );
+ cobject_type co(cobject_info_set.size(), bos);
+ std::pair<cobject_info_set_type::const_iterator, bool>
+ result = cobject_info_set.insert(co);
+ return *(result.first);
+}
+
+inline void
+basic_oarchive_impl::save_object(
+ basic_oarchive & ar,
+ const void *t,
+ const basic_oserializer & bos
+){
+ // if its been serialized through a pointer and the preamble's been done
+ if(t == pending_object && pending_bos == & bos){
+ // just save the object data
+ ar.end_preamble();
+ (bos.save_object_data)(ar, t);
+ return;
+ }
+
+ // get class information for this object
+ const cobject_type & co = register_type(bos);
+ if(bos.class_info()){
+ 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<cobject_type &>(co)).m_initialized = true;
+ }
+ }
+
+ // we're not tracking this type of object
+ if(! bos.tracking(m_flags)){
+ // just windup the preamble - no object id to write
+ ar.end_preamble();
+ // and save the data
+ (bos.save_object_data)(ar, t);
+ return;
+ }
+
+ // 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.m_class_id, oid);
+ std::pair<basic_oarchive_impl::object_set_type::const_iterator, bool>
+ aresult = object_set.insert(ao);
+ oid = aresult.first->object_id;
+
+ // if its a new object
+ if(aresult.second){
+ // write out the object id
+ ar.vsave(oid);
+ ar.end_preamble();
+ // and data
+ (bos.save_object_data)(ar, t);
+ return;
+ }
+
+ // check that it wasn't originally stored through a pointer
+ if(stored_pointers.end() != stored_pointers.find(oid)){
+ // this has to be a user error. loading such an archive
+ // would create duplicate objects
+ boost::serialization::throw_exception(
+ archive_exception(archive_exception::pointer_conflict)
+ );
+ }
+ // just save the object id
+ ar.vsave(object_reference_type(oid));
+ ar.end_preamble();
+ return;
+}
+
+// save a pointer to an object instance
+inline void
+basic_oarchive_impl::save_pointer(
+ basic_oarchive & ar,
+ const void * t,
+ const basic_pointer_oserializer * bpos_ptr
+){
+ 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.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()){
+ const serialization::extended_type_info *eti = & bos.get_eti();
+ const char * key = NULL;
+ if(NULL != eti)
+ key = eti->get_key();
+ if(NULL != key){
+ // the following is required by IBM C++ compiler which
+ // makes a copy when passing a non-const to a const. This
+ // is permitted by the standard but rarely seen in practice
+ const class_name_type cn(key);
+ // write out the external class identifier
+ ar.vsave(cn);
+ }
+ else
+ // without an external class name
+ // we won't be able to de-serialize it so bail now
+ boost::serialization::throw_exception(
+ archive_exception(archive_exception::unregistered_class)
+ );
+ }
+ }
+ if(bos.class_info()){
+ ar.vsave(tracking_type(bos.tracking(m_flags)));
+ ar.vsave(version_type(bos.version()));
+ }
+ (const_cast<cobject_type &>(co)).m_initialized = true;
+ }
+ else{
+ ar.vsave(class_id_reference_type(co.m_class_id));
+ }
+
+ // if we're not tracking
+ if(! bos.tracking(m_flags)){
+ // just save the data itself
+ ar.end_preamble();
+ serialization::state_saver<const void *> x(pending_object);
+ serialization::state_saver<const basic_oserializer *> y(pending_bos);
+ pending_object = t;
+ pending_bos = & bpos_ptr->get_basic_serializer();
+ bpos_ptr->save_object_ptr(ar, t);
+ return;
+ }
+
+ 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.m_class_id, oid);
+ std::pair<basic_oarchive_impl::object_set_type::const_iterator, bool>
+ aresult = object_set.insert(ao);
+ oid = aresult.first->object_id;
+ // if the saved object already exists
+ if(! aresult.second){
+ // append the object id to he preamble
+ ar.vsave(object_reference_type(oid));
+ // and windup.
+ ar.end_preamble();
+ return;
+ }
+
+ // append id of this object to preamble
+ ar.vsave(oid);
+ ar.end_preamble();
+
+ // and save the object itself
+ serialization::state_saver<const void *> x(pending_object);
+ serialization::state_saver<const basic_oserializer *> y(pending_bos);
+ pending_object = t;
+ pending_bos = & bpos_ptr->get_basic_serializer();
+ bpos_ptr->save_object_ptr(ar, t);
+ // add to the set of object initially stored through pointers
+ stored_pointers.insert(oid);
+}
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
+//////////////////////////////////////////////////////////////////////
+// implementation of basic_oarchive functions
+
+namespace boost {
+namespace archive {
+namespace detail {
+
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_oarchive::basic_oarchive(unsigned int flags)
+ : pimpl(new basic_oarchive_impl(flags))
+{}
+
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_oarchive::~basic_oarchive()
+{
+ delete pimpl;
+}
+
+BOOST_ARCHIVE_DECL(void)
+basic_oarchive::save_object(
+ const void *x,
+ const basic_oserializer & bos
+){
+ pimpl->save_object(*this, x, bos);
+}
+
+BOOST_ARCHIVE_DECL(void)
+basic_oarchive::save_pointer(
+ const void * t,
+ const basic_pointer_oserializer * bpos_ptr
+){
+ pimpl->save_pointer(*this, t, bpos_ptr);
+}
+
+BOOST_ARCHIVE_DECL(void)
+basic_oarchive::register_basic_serializer(const basic_oserializer & bos){
+ pimpl->register_type(bos);
+}
+
+BOOST_ARCHIVE_DECL(unsigned int)
+basic_oarchive::get_library_version() const{
+ return BOOST_ARCHIVE_VERSION();
+}
+
+BOOST_ARCHIVE_DECL(unsigned int)
+basic_oarchive::get_flags() const{
+ return pimpl->m_flags;
+}
+
+BOOST_ARCHIVE_DECL(void)
+basic_oarchive::end_preamble(){
+}
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_oserializer.cpp:
+
+// (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 <cstddef> // NULL
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/detail/basic_oserializer.hpp>
+
+namespace boost {
+namespace archive {
+namespace detail {
+
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_oserializer::basic_oserializer(
+ const boost::serialization::extended_type_info & eti
+) :
+ basic_serializer(eti),
+ m_bpos(NULL)
+{}
+
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_oserializer::~basic_oserializer(){}
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_pointer_iserializer.cpp:
+
+// (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.
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/detail/basic_pointer_iserializer.hpp>
+
+namespace boost {
+namespace archive {
+namespace detail {
+
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_pointer_iserializer::basic_pointer_iserializer(
+ const boost::serialization::extended_type_info & eti
+) :
+ basic_serializer(eti)
+{}
+
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_pointer_iserializer::~basic_pointer_iserializer() {}
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_pointer_oserializer.cpp:
+
+// (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.
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/detail/basic_pointer_oserializer.hpp>
+
+namespace boost {
+namespace archive {
+namespace detail {
+
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_pointer_oserializer::basic_pointer_oserializer(
+ const boost::serialization::extended_type_info & eti
+) :
+ basic_serializer(eti)
+{}
+
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_pointer_oserializer::~basic_pointer_oserializer() {}
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// serializer_map.cpp:
+
+// (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.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <set>
+#include <utility>
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/archive_exception.hpp>
+#include <boost/serialization/throw_exception.hpp>
+
+#include <boost/archive/detail/basic_serializer.hpp>
+#include <boost/archive/detail/basic_serializer_map.hpp>
+
+namespace boost {
+ namespace serialization {
+ class extended_type_info;
+ }
+namespace archive {
+namespace detail {
+
+bool
+basic_serializer_map::type_info_pointer_compare::operator()(
+ const basic_serializer * lhs, const basic_serializer * rhs
+) const {
+ return *lhs < *rhs;
+}
+
+BOOST_ARCHIVE_DECL(bool)
+basic_serializer_map::insert(const basic_serializer * bs){
+ // attempt to insert serializer into it's map
+ const std::pair<map_type::iterator, bool> result =
+ m_map.insert(bs);
+ // the following is commented out - rather than being just
+ // deleted as a reminder not to try this.
+
+ // At first it seemed like a good idea. It enforced the
+ // idea that a type be exported from at most one code module
+ // (DLL or mainline). This would enforce a "one definition rule"
+ // across code modules. This seems a good idea to me.
+ // But it seems that it's just too hard for many users to implement.
+
+ // Ideally, I would like to make this exception a warning -
+ // but there isn't anyway to do that.
+
+ // if this fails, it's because it's been instantiated
+ // in multiple modules - DLLS - a recipe for problems.
+ // So trap this here
+ // if(!result.second){
+ // boost::serialization::throw_exception(
+ // archive_exception(
+ // archive_exception::multiple_code_instantiation,
+ // bs->get_debug_info()
+ // )
+ // );
+ // }
+ return true;
+}
+
+BOOST_ARCHIVE_DECL(void)
+basic_serializer_map::erase(const basic_serializer * bs){
+ map_type::iterator it = m_map.begin();
+ map_type::iterator it_end = m_map.end();
+
+ while(it != it_end){
+ // note item 9 from Effective STL !!! it++
+ if(*it == bs)
+ m_map.erase(it++);
+ else
+ it++;
+ }
+ // note: we can't do this since some of the eti records
+ // we're pointing to might be expired and the comparison
+ // won't work. Leave this as a reminder not to "optimize" this.
+ //it = m_map.find(bs);
+ //assert(it != m_map.end());
+ //if(*it == bs)
+ // m_map.erase(it);
+}
+BOOST_ARCHIVE_DECL(const basic_serializer *)
+basic_serializer_map::find(
+ const boost::serialization::extended_type_info & eti
+) const {
+ const basic_serializer_arg bs(eti);
+ map_type::const_iterator it;
+ it = m_map.find(& bs);
+ assert(it != m_map.end());
+ return *it;
+}
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_iprimitive.cpp:
+
+// (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.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <istream>
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/impl/basic_text_iprimitive.ipp>
+
+namespace boost {
+namespace archive {
+
+// explicitly instantiate for this type of text stream
+template class basic_text_iprimitive<std::istream> ;
+
+} // namespace archive
+} // namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_oprimitive.cpp:
+
+// (C) Copyright 2004 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.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <ostream>
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/impl/basic_text_oprimitive.ipp>
+
+namespace boost {
+namespace archive {
+
+// explicitly instantiate for this type of text stream
+template class basic_text_oprimitive<std::ostream> ;
+
+} // namespace archive
+} // namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_wiprimitive.cpp:
+
+// (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 <boost/config.hpp>
+
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <istream>
+
+#define BOOST_WARCHIVE_SOURCE
+#include <boost/archive/detail/auto_link_warchive.hpp>
+#include <boost/archive/impl/basic_text_iprimitive.ipp>
+
+namespace boost {
+namespace archive {
+
+template class basic_text_iprimitive<std::wistream> ;
+
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_NO_STD_WSTREAMBUF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_woprimitive.cpp:
+
+// (C) Copyright 2004 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 <boost/config.hpp>
+
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <ostream>
+
+#define BOOST_WARCHIVE_SOURCE
+#include <boost/archive/detail/auto_link_warchive.hpp>
+#include <boost/archive/impl/basic_text_oprimitive.ipp>
+
+namespace boost {
+namespace archive {
+
+template class basic_text_oprimitive<std::wostream> ;
+
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_NO_STD_WSTREAMBUF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_xml_archive.cpp:
+
+// (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.
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/basic_xml_archive.hpp>
+
+namespace boost {
+namespace archive {
+
+BOOST_ARCHIVE_DECL(const char *)
+BOOST_ARCHIVE_XML_OBJECT_ID(){
+ return "object_id";
+}
+BOOST_ARCHIVE_DECL(const char *)
+BOOST_ARCHIVE_XML_OBJECT_REFERENCE(){
+ return "object_id_reference";
+}
+BOOST_ARCHIVE_DECL(const char *)
+BOOST_ARCHIVE_XML_CLASS_ID(){
+ return "class_id";
+}
+BOOST_ARCHIVE_DECL(const char *)
+BOOST_ARCHIVE_XML_CLASS_ID_REFERENCE(){
+ return "class_id_reference";
+}
+BOOST_ARCHIVE_DECL(const char *)
+BOOST_ARCHIVE_XML_CLASS_NAME(){
+ return "class_name";
+}
+BOOST_ARCHIVE_DECL(const char *)
+BOOST_ARCHIVE_XML_TRACKING(){
+ return "tracking_level";
+}
+BOOST_ARCHIVE_DECL(const char *)
+BOOST_ARCHIVE_XML_VERSION(){
+ return "version";
+}
+BOOST_ARCHIVE_DECL(const char *)
+BOOST_ARCHIVE_XML_SIGNATURE(){
+ return "signature";
+}
+
+}// namespace archive
+}// namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_xml_grammar.ipp:
+
+// (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.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <istream>
+#include <algorithm>
+#include <boost/config.hpp> // BOOST_DEDUCED_TYPENAME
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable : 4511 4512)
+#endif
+
+// spirit stuff
+#include <boost/spirit/core/composite/operators.hpp>
+#include <boost/spirit/core/composite/actions.hpp>
+#include <boost/spirit/core/primitives/numerics.hpp>
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+// for head_iterator test
+//#include <boost/bind.hpp>
+#include <boost/function.hpp>
+#include <boost/serialization/pfto.hpp>
+
+#include <boost/io/ios_state.hpp>
+#include <boost/serialization/throw_exception.hpp>
+#include <boost/archive/impl/basic_xml_grammar.hpp>
+#include <boost/archive/xml_archive_exception.hpp>
+#include <boost/archive/basic_xml_archive.hpp>
+#include <boost/archive/iterators/xml_unescape.hpp>
+
+using namespace boost::spirit;
+
+namespace boost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// template code for basic_xml_grammar of both wchar_t and char types
+
+namespace xml { // anonymous
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable : 4511 4512)
+#endif
+
+template<class T>
+struct assign_impl {
+ T & t;
+ void operator()(const T t_) const {
+ t = t_;
+ }
+ assign_impl(T & t_)
+ : t(t_)
+ {}
+};
+
+template<>
+struct assign_impl<std::string> {
+ std::string & t;
+ void operator()(
+ std::string::const_iterator b,
+ std::string::const_iterator e
+ ) const {
+ t.resize(0);
+ while(b != e){
+ t += * b;
+ ++b;
+ }
+ }
+ assign_impl<std::string> & operator=(
+ assign_impl<std::string> & rhs
+ );
+ assign_impl(std::string & t_)
+ : t(t_)
+ {}
+};
+
+#ifndef BOOST_NO_STD_WSTRING
+template<>
+struct assign_impl<std::wstring> {
+ std::wstring & t;
+ void operator()(
+ std::wstring::const_iterator b,
+ std::wstring::const_iterator e
+ ) const {
+ t.resize(0);
+ while(b != e){
+ t += * b;
+ ++b;
+ }
+ }
+ assign_impl(std::wstring & t_)
+ : t(t_)
+ {}
+};
+#endif
+
+template<class T>
+assign_impl<T> assign_object(T &t){
+ return assign_impl<T>(t);
+}
+
+struct assign_level {
+ tracking_type & tracking_level;
+ void operator()(const unsigned int tracking_level_) const {
+ tracking_level = (0 == tracking_level_) ? false : true;
+ }
+ assign_level(tracking_type & tracking_level_)
+ : tracking_level(tracking_level_)
+ {}
+};
+
+template<class String, class Iterator>
+struct append_string {
+ String & contents;
+ void operator()(Iterator start, Iterator end) const {
+ #if 0
+ typedef boost::archive::iterators::xml_unescape<Iterator> translator;
+ contents.append(
+ translator(BOOST_MAKE_PFTO_WRAPPER(start)),
+ translator(BOOST_MAKE_PFTO_WRAPPER(end))
+ );
+ #endif
+ contents.append(start, end);
+ }
+ append_string(String & contents_)
+ : contents(contents_)
+ {}
+};
+
+template<class String>
+struct append_char {
+ String & contents;
+ void operator()(const unsigned int char_value) const {
+ const BOOST_DEDUCED_TYPENAME String::value_type z = char_value;
+ contents += z;
+ }
+ append_char(String & contents_)
+ : contents(contents_)
+ {}
+};
+
+template<class String, unsigned int c>
+struct append_lit {
+ String & contents;
+ template<class X, class Y>
+ void operator()(const X & /*x*/, const Y & /*y*/) const {
+ const BOOST_DEDUCED_TYPENAME String::value_type z = c;
+ contents += z;
+ }
+ append_lit(String & contents_)
+ : contents(contents_)
+ {}
+};
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+} // namespace anonymous
+
+template<class CharType>
+bool basic_xml_grammar<CharType>::my_parse(
+ BOOST_DEDUCED_TYPENAME basic_xml_grammar<CharType>::IStream & is,
+ const rule_t & rule_,
+ CharType delimiter
+) const {
+ if(is.fail()){
+ boost::serialization::throw_exception(
+ archive_exception(archive_exception::stream_error)
+ );
+ }
+
+ boost::io::ios_flags_saver ifs(is);
+ is >> std::noskipws;
+
+ std::basic_string<CharType> arg;
+
+ CharType val;
+ do{
+ BOOST_DEDUCED_TYPENAME basic_xml_grammar<CharType>::IStream::int_type
+ result = is.get();
+ if(is.fail())
+ return false;
+ val = static_cast<CharType>(result);
+ arg += val;
+ }
+ while(val != delimiter);
+
+ // read just one more character. This will be the newline after the tag
+ // this is so that the next operation will return fail if the archive
+ // is terminated. This will permit the archive to be used for debug
+ // and transaction data logging in the standard way.
+
+ parse_info<BOOST_DEDUCED_TYPENAME std::basic_string<CharType>::iterator>
+ result = boost::spirit::parse(arg.begin(), arg.end(), rule_);
+ return result.hit;
+}
+
+template<class CharType>
+bool basic_xml_grammar<CharType>::parse_start_tag(
+ BOOST_DEDUCED_TYPENAME basic_xml_grammar<CharType>::IStream & is
+){
+ rv.class_name.resize(0);
+ return my_parse(is, STag);
+}
+
+template<class CharType>
+bool basic_xml_grammar<CharType>::parse_end_tag(IStream & is) const {
+ return my_parse(is, ETag);
+}
+
+template<class CharType>
+bool basic_xml_grammar<CharType>::parse_string(IStream & is, StringType & s){
+ rv.contents.resize(0);
+ bool result = my_parse(is, content, '<');
+ // note: unget caused a problem with dinkumware. replace with
+ // is.unget();
+ // putback another dilimiter instead
+ is.putback('<');
+ if(result)
+ s = rv.contents;
+ return result;
+}
+
+template<class CharType>
+basic_xml_grammar<CharType>::basic_xml_grammar(){
+ init_chset();
+
+ S =
+ +(Sch)
+ ;
+
+ // refactoring to workaround template depth on darwin
+ NameHead = (Letter | '_' | ':');
+ NameTail = *NameChar ;
+ Name =
+ NameHead >> NameTail
+ ;
+
+ Eq =
+ !S >> '=' >> !S
+ ;
+
+ AttributeList =
+ *(S >> Attribute)
+ ;
+
+ STag =
+ !S
+ >> '<'
+ >> Name [xml::assign_object(rv.object_name)]
+ >> AttributeList
+ >> !S
+ >> '>'
+ ;
+
+ ETag =
+ !S
+ >> "</"
+ >> Name [xml::assign_object(rv.object_name)]
+ >> !S
+ >> '>'
+ ;
+
+ // refactoring to workaround template depth on darwin
+ CharDataChars = +(anychar_p - chset_p(L"&<"));
+ CharData =
+ CharDataChars [
+ xml::append_string<
+ StringType,
+ BOOST_DEDUCED_TYPENAME std::basic_string<CharType>::const_iterator
+ >(rv.contents)
+ ]
+ ;
+
+ // slight factoring works around ICE in msvc 6.0
+ CharRef1 =
+ str_p(L"&#") >> uint_p [xml::append_char<StringType>(rv.contents)] >> L';'
+ ;
+ CharRef2 =
+ str_p(L"&#x") >> hex_p [xml::append_char<StringType>(rv.contents)] >> L';'
+ ;
+ CharRef = CharRef1 | CharRef2 ;
+
+ AmpRef = str_p(L"&")[xml::append_lit<StringType, L'&'>(rv.contents)];
+ LTRef = str_p(L"<")[xml::append_lit<StringType, L'<'>(rv.contents)];
+ GTRef = str_p(L">")[xml::append_lit<StringType, L'>'>(rv.contents)];
+ AposRef = str_p(L"'")[xml::append_lit<StringType, L'\''>(rv.contents)];
+ QuoteRef = str_p(L""")[xml::append_lit<StringType, L'"'>(rv.contents)];
+
+ Reference =
+ AmpRef
+ | LTRef
+ | GTRef
+ | AposRef
+ | QuoteRef
+ | CharRef
+ ;
+
+ content =
+ L"<" // should be end_p
+ | +(Reference | CharData) >> L"<"
+ ;
+
+ ClassIDAttribute =
+ str_p(BOOST_ARCHIVE_XML_CLASS_ID()) >> NameTail
+ >> Eq
+ >> L'"'
+ >> int_p [xml::assign_object(rv.class_id.t)]
+ >> L'"'
+ ;
+
+ ObjectIDAttribute = (
+ str_p(BOOST_ARCHIVE_XML_OBJECT_ID())
+ |
+ str_p(BOOST_ARCHIVE_XML_OBJECT_REFERENCE())
+ )
+ >> NameTail
+ >> Eq
+ >> L'"'
+ >> L'_'
+ >> uint_p [xml::assign_object(rv.object_id.t)]
+ >> L'"'
+ ;
+
+ AmpName = str_p(L"&")[xml::append_lit<StringType, L'&'>(rv.class_name)];
+ LTName = str_p(L"<")[xml::append_lit<StringType, L'<'>(rv.class_name)];
+ GTName = str_p(L">")[xml::append_lit<StringType, L'>'>(rv.class_name)];
+ ClassNameChar =
+ AmpName
+ | LTName
+ | GTName
+ | (anychar_p - chset_p(L"\"")) [xml::append_char<StringType>(rv.class_name)]
+ ;
+
+ ClassName =
+ * ClassNameChar
+ ;
+
+ ClassNameAttribute =
+ str_p(BOOST_ARCHIVE_XML_CLASS_NAME())
+ >> Eq
+ >> L'"'
+ >> ClassName
+ >> L'"'
+ ;
+
+ TrackingAttribute =
+ str_p(BOOST_ARCHIVE_XML_TRACKING())
+ >> Eq
+ >> L'"'
+ >> uint_p [xml::assign_level(rv.tracking_level)]
+ >> L'"'
+ ;
+
+ VersionAttribute =
+ str_p(BOOST_ARCHIVE_XML_VERSION())
+ >> Eq
+ >> L'"'
+ >> uint_p [xml::assign_object(rv.version.t)]
+ >> L'"'
+ ;
+
+ UnusedAttribute =
+ Name
+ >> Eq
+ >> L'"'
+ >> !CharData
+ >> L'"'
+ ;
+
+ Attribute =
+ ClassIDAttribute
+ | ObjectIDAttribute
+ | ClassNameAttribute
+ | TrackingAttribute
+ | VersionAttribute
+ | UnusedAttribute
+ ;
+
+ XMLDeclChars = *(anychar_p - chset_p(L"?>"));
+ XMLDecl =
+ !S
+ >> str_p(L"<?xml")
+ >> S
+ >> str_p(L"version")
+ >> Eq
+ >> str_p(L"\"1.0\"")
+ >> XMLDeclChars
+ >> !S
+ >> str_p(L"?>")
+ ;
+
+ DocTypeDeclChars = *(anychar_p - chset_p(L">"));
+ DocTypeDecl =
+ !S
+ >> str_p(L"<!DOCTYPE")
+ >> DocTypeDeclChars
+ >> L'>'
+ ;
+
+ SignatureAttribute =
+ str_p(L"signature")
+ >> Eq
+ >> L'"'
+ >> Name [xml::assign_object(rv.class_name)]
+ >> L'"'
+ ;
+
+ SerializationWrapper =
+ !S
+ >> str_p(L"<boost_serialization")
+ >> S
+ >> SignatureAttribute
+ >> S
+ >> VersionAttribute
+ >> !S
+ >> L'>'
+ ;
+}
+
+template<class CharType>
+void basic_xml_grammar<CharType>::init(IStream & is){
+ init_chset();
+ if(! my_parse(is, XMLDecl))
+ boost::serialization::throw_exception(
+ xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+ );
+ if(! my_parse(is, DocTypeDecl))
+ boost::serialization::throw_exception(
+ xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+ );
+ if(! my_parse(is, SerializationWrapper))
+ boost::serialization::throw_exception(
+ xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+ );
+ if(! std::equal(rv.class_name.begin(), rv.class_name.end(), BOOST_ARCHIVE_SIGNATURE()))
+ boost::serialization::throw_exception(
+ archive_exception(archive_exception::invalid_signature)
+ );
+}
+
+template<class CharType>
+void basic_xml_grammar<CharType>::windup(IStream & is){
+ if(is.fail())
+ return;
+ // uh-oh - don't throw exception from code called by a destructor !
+ // so just ignore any failure.
+ my_parse(is, ETag);
+}
+
+} // namespace archive
+} // namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_iarchive.cpp:
+
+// (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 <istream>
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/binary_iarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_binary_iprimitive.ipp>
+#include <boost/archive/impl/basic_binary_iarchive.ipp>
+
+namespace boost {
+namespace archive {
+
+// explicitly instantiate for this type of stream
+template class detail::archive_serializer_map<naked_binary_iarchive>;
+template class basic_binary_iprimitive<
+ naked_binary_iarchive,
+ std::istream::char_type,
+ std::istream::traits_type
+>;
+template class basic_binary_iarchive<naked_binary_iarchive> ;
+template class binary_iarchive_impl<
+ naked_binary_iarchive,
+ std::istream::char_type,
+ std::istream::traits_type
+>;
+
+// explicitly instantiate for this type of stream
+template class detail::archive_serializer_map<binary_iarchive>;
+template class basic_binary_iprimitive<
+ binary_iarchive,
+ std::istream::char_type,
+ std::istream::traits_type
+>;
+template class basic_binary_iarchive<binary_iarchive> ;
+template class binary_iarchive_impl<
+ binary_iarchive,
+ std::istream::char_type,
+ std::istream::traits_type
+>;
+
+} // namespace archive
+} // namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_oarchive.cpp:
+
+// (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 <ostream>
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/binary_oarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of binary stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_binary_oprimitive.ipp>
+#include <boost/archive/impl/basic_binary_oarchive.ipp>
+
+namespace boost {
+namespace archive {
+
+template class detail::archive_serializer_map<binary_oarchive>;
+template class basic_binary_oprimitive<
+ binary_oarchive,
+ std::ostream::char_type,
+ std::ostream::traits_type
+>;
+template class basic_binary_oarchive<binary_oarchive> ;
+template class binary_oarchive_impl<
+ binary_oarchive,
+ std::ostream::char_type,
+ std::ostream::traits_type
+>;
+
+} // namespace archive
+} // namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_wiarchive.cpp:
+
+// (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 <boost/config.hpp>
+
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#define BOOST_WARCHIVE_SOURCE
+#include <boost/archive/binary_wiarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of text stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_binary_iprimitive.ipp>
+#include <boost/archive/impl/basic_binary_iarchive.ipp>
+
+namespace boost {
+namespace archive {
+
+template class detail::archive_serializer_map<naked_binary_wiarchive>;
+template class basic_binary_iprimitive<
+ naked_binary_wiarchive,
+ wchar_t,
+ std::char_traits<wchar_t>
+>;
+template class basic_binary_iarchive<naked_binary_wiarchive> ;
+template class binary_iarchive_impl<
+ naked_binary_wiarchive,
+ wchar_t,
+ std::char_traits<wchar_t>
+>;
+
+// explicitly instantiate for this type of text stream
+template class detail::archive_serializer_map<binary_wiarchive>;
+template class basic_binary_iprimitive<
+ binary_wiarchive,
+ wchar_t,
+ std::char_traits<wchar_t>
+>;
+template class basic_binary_iarchive<binary_wiarchive> ;
+template class binary_iarchive_impl<
+ binary_wiarchive,
+ wchar_t,
+ std::char_traits<wchar_t>
+>;
+
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_woarchive.cpp:
+
+// (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 <boost/config.hpp>
+
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#define BOOST_WARCHIVE_SOURCE
+#include <boost/archive/binary_woarchive.hpp>
+
+// explicitly instantiate for this type of text stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_binary_oprimitive.ipp>
+#include <boost/archive/impl/basic_binary_oarchive.ipp>
+
+namespace boost {
+namespace archive {
+
+template class detail::archive_serializer_map<binary_woarchive>;
+template class basic_binary_oprimitive<
+ binary_woarchive,
+ wchar_t,
+ std::char_traits<wchar_t>
+>;
+template class basic_binary_oarchive<binary_woarchive> ;
+template class binary_oarchive_impl<
+ binary_woarchive,
+ wchar_t,
+ std::char_traits<wchar_t>
+>;
+
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_NO_STD_WSTREAMBUF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// codecvt_null.cpp
+
+// Copyright (c) 2004 Robert Ramey, Indiana University (garcia@osl.iu.edu)
+// Andrew Lumsdaine, Indiana University (lums@osl.iu.edu).
+// 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)
+
+#define BOOST_WARCHIVE_SOURCE
+#include <boost/archive/codecvt_null.hpp>
+
+// codecvt implementation for passing wchar_t objects to char output
+// without any translation whatever. Used to implement binary output
+// of wchar_t objects.
+
+namespace boost {
+namespace archive {
+
+BOOST_WARCHIVE_DECL(std::codecvt_base::result)
+codecvt_null<wchar_t>::do_out(
+ std::mbstate_t & /*state*/,
+ const wchar_t * first1,
+ const wchar_t * last1,
+ const wchar_t * & next1,
+ char * first2,
+ char * last2,
+ char * & next2
+) const {
+ while(first1 != last1){
+ // Per std::22.2.1.5.2/2, we can store no more that
+ // last2-first2 characters. If we need to more encode
+ // next internal char type, return 'partial'.
+ if(static_cast<int>(sizeof(wchar_t)) > (last2 - first2)){
+ next1 = first1;
+ next2 = first2;
+ return std::codecvt_base::partial;
+ }
+ * reinterpret_cast<wchar_t *>(first2) = * first1++;
+ first2 += sizeof(wchar_t);
+
+ }
+ next1 = first1;
+ next2 = first2;
+ return std::codecvt_base::ok;
+}
+
+BOOST_WARCHIVE_DECL(std::codecvt_base::result)
+codecvt_null<wchar_t>::do_in(
+ std::mbstate_t & state,
+ const char * first1,
+ const char * last1,
+ const char * & next1,
+ wchar_t * first2,
+ wchar_t * last2,
+ wchar_t * & next2
+) const {
+ // Process input characters until we've run of them,
+ // or the number of remaining characters is not
+ // enough to construct another output character,
+ // or we've run out of place for output characters.
+ while(first2 != last2){
+ // Have we converted all input characters?
+ // Return with 'ok', if so.
+ if (first1 == last1)
+ break;
+ // Do we have less input characters than needed
+ // for a single output character?
+ if(static_cast<int>(sizeof(wchar_t)) > (last1 - first1)){
+ next1 = first1;
+ next2 = first2;
+ return std::codecvt_base::partial;
+ }
+ *first2++ = * reinterpret_cast<const wchar_t *>(first1);
+ first1 += sizeof(wchar_t);
+ }
+ next1 = first1;
+ next2 = first2;
+ return std::codecvt_base::ok;
+}
+
+} // namespace archive
+} // namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// extended_type_info.cpp: implementation for portable version of type_info
+
+// (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.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <algorithm>
+#include <set>
+#include <utility>
+#include <cassert>
+#include <cstddef> // NULL
+
+#include <boost/config.hpp> // msvc needs this to suppress warning
+
+#include <cstring>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ using ::strcmp; }
+#endif
+
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/serialization/singleton.hpp>
+#include <boost/serialization/force_include.hpp>
+
+#define BOOST_SERIALIZATION_SOURCE
+#include <boost/serialization/extended_type_info.hpp>
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable : 4511 4512)
+#endif
+
+namespace boost {
+namespace serialization {
+namespace detail {
+
+struct key_compare
+{
+ bool
+ operator()(
+ const extended_type_info * lhs,
+ const extended_type_info * rhs
+ ) const {
+ // performance shortcut
+ if(lhs == rhs)
+ return false;
+ const char * l = lhs->get_key();
+ assert(NULL != l);
+ const char * r = rhs->get_key();
+ assert(NULL != r);
+ // performance shortcut
+ // shortcut to exploit string pooling
+ if(l == r)
+ return false;
+ // for exported types, use the string key so that
+ // multiple instances in different translation units
+ // can be matched up
+ return std::strcmp(l, r) < 0;
+ }
+};
+
+typedef std::multiset<const extended_type_info *, key_compare> ktmap;
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable : 4511 4512)
+#endif
+
+class extended_type_info_arg : public extended_type_info
+{
+ virtual bool
+ is_less_than(const extended_type_info & /*rhs*/) const {
+ assert(false);
+ return false;
+ };
+ virtual bool
+ is_equal(const extended_type_info & /*rhs*/) const {
+ assert(false);
+ return false;
+ };
+ virtual const char * get_debug_info() const {
+ return get_key();
+ }
+ virtual void * construct(unsigned int /*count*/, ...) const{
+ assert(false);
+ return NULL;
+ }
+ virtual void destroy(void const * const /*p*/) const {
+ assert(false);
+ }
+public:
+ extended_type_info_arg(const char * key) :
+ extended_type_info(0, key)
+ {}
+
+ ~extended_type_info_arg(){
+ }
+};
+
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+} // namespace detail
+
+BOOST_SERIALIZATION_DECL(void)
+extended_type_info::key_register() const{
+ if(NULL == get_key())
+ return;
+ singleton<detail::ktmap>::get_mutable_instance().insert(this);
+}
+
+BOOST_SERIALIZATION_DECL(void)
+extended_type_info::key_unregister() const{
+ if(NULL == get_key())
+ return;
+ if(! singleton<detail::ktmap>::is_destroyed()){
+ detail::ktmap & x = singleton<detail::ktmap>::get_mutable_instance();
+ detail::ktmap::iterator start = x.lower_bound(this);
+ detail::ktmap::iterator end = x.upper_bound(this);
+ // remove entry in map which corresponds to this type
+ for(;start != end; ++start){
+ if(this == *start){
+ x.erase(start);
+ break;
+ }
+ }
+ }
+}
+
+BOOST_SERIALIZATION_DECL(const extended_type_info *)
+extended_type_info::find(const char *key) {
+ assert(NULL != key);
+ const detail::ktmap & k = singleton<detail::ktmap>::get_const_instance();
+ const detail::extended_type_info_arg eti_key(key);
+ const detail::ktmap::const_iterator it = k.find(& eti_key);
+ if(k.end() == it)
+ return NULL;
+ return *(it);
+}
+
+BOOST_SERIALIZATION_DECL(BOOST_PP_EMPTY())
+extended_type_info::extended_type_info(
+ const unsigned int type_info_key,
+ const char * key
+) :
+ m_type_info_key(type_info_key),
+ m_key(key)
+{
+}
+
+BOOST_SERIALIZATION_DECL(BOOST_PP_EMPTY())
+extended_type_info::~extended_type_info(){
+}
+
+BOOST_SERIALIZATION_DECL(bool)
+extended_type_info::operator<(const extended_type_info &rhs) const {
+ // short cut for a common cases
+ if(this == & rhs)
+ return false;
+ if(m_type_info_key == rhs.m_type_info_key){
+ return is_less_than(rhs);
+ }
+ if(m_type_info_key < rhs.m_type_info_key)
+ return true;
+ return false;
+}
+
+BOOST_SERIALIZATION_DECL(bool)
+extended_type_info::operator==(const extended_type_info &rhs) const {
+ // short cut for a common cases
+ if(this == & rhs)
+ return true;
+ if(m_type_info_key != rhs.m_type_info_key){
+ return false;
+ }
+ return is_equal(rhs);
+}
+
+} // namespace serialization
+} // namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// extended_type_info_no_rtti.cpp: specific implementation of type info
+// that is NOT based on typeid
+
+// (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>
+#include <cstddef> // NULL
+#include <cassert>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ using ::strcmp; }
+#endif
+
+#define BOOST_SERIALIZATION_SOURCE
+#include <boost/serialization/extended_type_info_no_rtti.hpp>
+
+#define EXTENDED_TYPE_INFO_NO_RTTI_KEY 2
+
+namespace boost {
+namespace serialization {
+namespace no_rtti_system {
+
+BOOST_SERIALIZATION_DECL(BOOST_PP_EMPTY())
+extended_type_info_no_rtti_0::extended_type_info_no_rtti_0(
+ const char * key
+) :
+ extended_type_info(EXTENDED_TYPE_INFO_NO_RTTI_KEY, key)
+{}
+
+BOOST_SERIALIZATION_DECL(bool)
+extended_type_info_no_rtti_0::is_less_than(
+ const boost::serialization::extended_type_info &rhs) const
+{
+ // shortcut for common case
+ if(this == & rhs)
+ return false;
+ const char * l = get_key();
+ const char * r = rhs.get_key();
+ // if this assertion is triggered, it could mean one of the following
+ // a) This class was never exported - make sure all calls which use
+ // this method of type id are in fact exported.
+ // b) This class was used (e.g. serialized through a pointer) before
+ // it was exported. Make sure that classes which use this method
+ // of type id are NOT "automatically" registered by serializating
+ // through a pointer to the to most derived class. OR make sure
+ // that the BOOST_CLASS_EXPORT is included in every file
+ // which does this.
+ assert(NULL != l);
+ assert(NULL != r);
+ return std::strcmp(l, r) < 0;
+}
+
+BOOST_SERIALIZATION_DECL(bool)
+extended_type_info_no_rtti_0::is_equal(
+ const boost::serialization::extended_type_info &rhs) const
+{
+ // shortcut for common case
+ if(this == & rhs)
+ return true;
+ // null keys don't match with anything
+ const char * l = get_key();
+ assert(NULL != l);
+ if(NULL == l)
+ return false;
+ const char * r = rhs.get_key();
+ assert(NULL != r);
+ if(NULL == r)
+ return false;
+ return 0 == std::strcmp(l, r);
+}
+
+BOOST_SERIALIZATION_DECL(BOOST_PP_EMPTY())
+extended_type_info_no_rtti_0::~extended_type_info_no_rtti_0()
+{}
+
+} // namespece detail
+} // namespace serialization
+} // namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// extended_type_info_typeid.cpp: specific implementation of type info
+// that is based on typeid
+
+// (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 <algorithm>
+#include <set>
+#include <cassert>
+#include <typeinfo>
+#include <cstddef> // NULL
+
+#include <boost/detail/no_exceptions_support.hpp>
+
+#include <boost/serialization/singleton.hpp>
+
+#define BOOST_SERIALIZATION_SOURCE
+#include <boost/serialization/extended_type_info_typeid.hpp>
+
+namespace boost {
+namespace serialization {
+namespace typeid_system {
+
+#define EXTENDED_TYPE_INFO_TYPE_KEY 1
+
+struct type_compare
+{
+ bool
+ operator()(
+ const extended_type_info_typeid_0 * lhs,
+ const extended_type_info_typeid_0 * rhs
+ ) const {
+ return lhs->is_less_than(*rhs);
+ }
+};
+
+typedef std::multiset<
+ const extended_type_info_typeid_0 *,
+ type_compare
+> tkmap;
+
+BOOST_SERIALIZATION_DECL(bool)
+extended_type_info_typeid_0::is_less_than(
+ const boost::serialization::extended_type_info & rhs
+) const {
+ // shortcut for common case
+ if(this == & rhs)
+ return false;
+ return 0 != m_ti->before(
+ *(static_cast<const extended_type_info_typeid_0 &>(rhs).m_ti)
+ );
+}
+
+BOOST_SERIALIZATION_DECL(bool)
+extended_type_info_typeid_0::is_equal(
+ const boost::serialization::extended_type_info & rhs
+) const {
+ return
+ // note: std::type_info == operator returns an int !!!
+ // the following permits conversion to bool without a warning.
+ ! (
+ * m_ti
+ != *(static_cast<const extended_type_info_typeid_0 &>(rhs).m_ti)
+ )
+ ;
+}
+
+BOOST_SERIALIZATION_DECL(BOOST_PP_EMPTY())
+extended_type_info_typeid_0::extended_type_info_typeid_0(
+ const char * key
+) :
+ extended_type_info(EXTENDED_TYPE_INFO_TYPE_KEY, key),
+ m_ti(NULL)
+{}
+
+BOOST_SERIALIZATION_DECL(BOOST_PP_EMPTY())
+extended_type_info_typeid_0::~extended_type_info_typeid_0()
+{}
+
+BOOST_SERIALIZATION_DECL(void)
+extended_type_info_typeid_0::type_register(const std::type_info & ti){
+ m_ti = & ti;
+ singleton<tkmap>::get_mutable_instance().insert(this);
+}
+
+BOOST_SERIALIZATION_DECL(void)
+extended_type_info_typeid_0::type_unregister()
+{
+ if(NULL != m_ti){
+ if(! singleton<tkmap>::is_destroyed()){
+ tkmap & x = singleton<tkmap>::get_mutable_instance();
+ tkmap::iterator start = x.lower_bound(this);
+ tkmap::iterator end = x.upper_bound(this);
+ assert(start != end);
+
+ // remove entry in map which corresponds to this type
+ do{
+ if(this == *start)
+ x.erase(start++);
+ else
+ ++start;
+ }while(start != end);
+ }
+ }
+ 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
+{
+ virtual void * construct(unsigned int /*count*/, ...) const{
+ assert(false);
+ return NULL;
+ }
+ virtual void destroy(void const * const /*p*/) const {
+ assert(false);
+ }
+public:
+ extended_type_info_typeid_arg(const std::type_info & ti) :
+ extended_type_info_typeid_0(NULL)
+ {
+ // note absense of self register and key as this is used only as
+ // search argument given a type_info reference and is not to
+ // be added to the map.
+ m_ti = & ti;
+ }
+ ~extended_type_info_typeid_arg(){
+ m_ti = NULL;
+ }
+};
+
+#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
+) const {
+ typeid_system::extended_type_info_typeid_arg etia(ti);
+ const tkmap & t = singleton<tkmap>::get_const_instance();
+ const tkmap::const_iterator it = t.find(& etia);
+ if(t.end() == it)
+ return NULL;
+ return *(it);
+}
+
+} // namespace detail
+} // namespace serialization
+} // namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_iarchive.cpp:
+
+// (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.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/polymorphic_iarchive.hpp>
+
+namespace boost {
+namespace archive {
+namespace detail {
+
+template class archive_serializer_map<polymorphic_iarchive>;
+
+} // detail
+} // archive
+} // boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_oarchive.cpp:
+
+// (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.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/polymorphic_oarchive.hpp>
+
+namespace boost {
+namespace archive {
+namespace detail {
+
+template class archive_serializer_map<polymorphic_oarchive>;
+
+} // detail
+} // archive
+} // boost
--- /dev/null
+// 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 <map>
+#include <list>
+#include <utility>
+#include <cstddef> // NULL
+
+#define BOOST_ARCHIVE_SOURCE
+
+#include <boost/serialization/throw_exception.hpp>
+#include <boost/serialization/void_cast.hpp>
+#include <boost/serialization/extended_type_info.hpp>
+#include <boost/archive/shared_ptr_helper.hpp>
+#include <boost/archive/archive_exception.hpp>
+
+namespace boost {
+namespace archive{
+namespace detail {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// a common class for holding various types of shared pointers
+
+// 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>)
+shared_ptr_helper::get_od(
+ const void * t,
+ const boost::serialization::extended_type_info * true_type,
+ const boost::serialization::extended_type_info * this_type
+){
+ // get void pointer to the most derived type
+ // this uniquely identifies the object referred to
+ const void * od = void_downcast(
+ *true_type,
+ *this_type,
+ t
+ );
+ if(NULL == od)
+ boost::serialization::throw_exception(
+ archive_exception(
+ archive_exception::unregistered_cast,
+ true_type->get_debug_info(),
+ this_type->get_debug_info()
+ )
+ );
+
+ // make tracking array if necessary
+ if(NULL == m_pointers)
+ m_pointers = new collection_type;
+
+ //shared_ptr<const void> sp(od, null_deleter());
+ shared_ptr<const void> sp(od, null_deleter());
+ collection_type::iterator i = m_pointers->find(sp);
+
+ if(i == m_pointers->end()){
+ shared_ptr<void> np;
+ return np;
+ }
+ od = void_upcast(
+ *true_type,
+ *this_type,
+ i->get()
+ );
+ if(NULL == od)
+ boost::serialization::throw_exception(
+ archive_exception(
+ archive_exception::unregistered_cast,
+ true_type->get_debug_info(),
+ this_type->get_debug_info()
+ )
+ );
+
+ return shared_ptr<void>(
+ const_pointer_cast<void>(*i),
+ const_cast<void *>(od)
+ );
+}
+
+BOOST_ARCHIVE_DECL(void)
+shared_ptr_helper::append(const boost::shared_ptr<const void> &sp){
+ // make tracking array if necessary
+ if(NULL == m_pointers)
+ m_pointers = new collection_type;
+
+ collection_type::iterator i = m_pointers->find(sp);
+
+ if(i == m_pointers->end()){
+ std::pair<collection_type::iterator, bool> result;
+ result = m_pointers->insert(sp);
+ assert(result.second);
+ }
+}
+
+// #ifdef BOOST_SERIALIZATION_SHARED_PTR_132_HPP
+BOOST_ARCHIVE_DECL(void)
+shared_ptr_helper::append(const boost_132::shared_ptr<const void> & t){
+ if(NULL == m_pointers_132)
+ m_pointers_132 = new std::list<boost_132::shared_ptr<const void> >;
+ m_pointers_132->push_back(t);
+}
+// #endif
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+shared_ptr_helper::shared_ptr_helper() :
+ m_pointers(NULL)
+ #ifdef BOOST_SERIALIZATION_SHARED_PTR_132_HPP
+ , m_pointers_132(NULL)
+ #endif
+{}
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+shared_ptr_helper::~shared_ptr_helper(){
+ if(NULL != m_pointers)
+ delete m_pointers;
+ #ifdef BOOST_SERIALIZATION_SHARED_PTR_132_HPP
+ if(NULL != m_pointers_132)
+ delete m_pointers_132;
+ #endif
+}
+
+} // namespace detail
+} // namespace serialization
+} // namespace boost
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// stl_port.cpp: implementation of run-time casting of void pointers
+
+// (C) Copyright 2005 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.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+// this befuddles the msvc 6 compiler so we can't use it
+#if ! ((defined _MSC_VER) && (_MSC_VER <= 1300)) \
+&& ! defined(__BORLANDC__)
+
+#include <boost/config.hpp>
+
+#if defined(__SGI_STL_PORT) && (__SGI_STL_PORT < 0x500)
+
+#include <boost/archive/codecvt_null.hpp>
+
+// explicit instantiation
+
+namespace std {
+
+template
+locale::locale(
+ const locale& __loc, boost::archive::codecvt_null<char> * __f
+);
+
+template
+locale::locale(
+ const locale& __loc, boost::archive::codecvt_null<wchar_t> * __f
+);
+
+} // namespace std
+
+#endif
+
+#endif
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_iarchive.cpp:
+
+// (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.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of text stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_text_iarchive.ipp>
+#include <boost/archive/impl/text_iarchive_impl.ipp>
+
+namespace boost {
+namespace archive {
+
+template class detail::archive_serializer_map<naked_text_iarchive>;
+template class basic_text_iarchive<naked_text_iarchive> ;
+template class text_iarchive_impl<naked_text_iarchive> ;
+
+template class detail::archive_serializer_map<text_iarchive>;
+template class basic_text_iarchive<text_iarchive> ;
+template class text_iarchive_impl<text_iarchive> ;
+
+} // namespace archive
+} // namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_oarchive.cpp:
+
+// (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.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of text stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_text_oarchive.ipp>
+#include <boost/archive/impl/text_oarchive_impl.ipp>
+
+namespace boost {
+namespace archive {
+
+//template class basic_text_oprimitive<std::ostream> ;
+template class detail::archive_serializer_map<text_oarchive>;
+template class basic_text_oarchive<text_oarchive> ;
+template class text_oarchive_impl<text_oarchive> ;
+
+} // namespace serialization
+} // namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_wiarchive.cpp:
+
+// (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 <boost/config.hpp>
+
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#define BOOST_WARCHIVE_SOURCE
+#include <boost/archive/text_wiarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of text stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_text_iarchive.ipp>
+#include <boost/archive/impl/text_wiarchive_impl.ipp>
+
+namespace boost {
+namespace archive {
+
+template class detail::archive_serializer_map<naked_text_wiarchive>;
+template class basic_text_iarchive<naked_text_wiarchive> ;
+template class text_wiarchive_impl<naked_text_wiarchive> ;
+
+template class detail::archive_serializer_map<text_wiarchive>;
+template class basic_text_iarchive<text_wiarchive> ;
+template class text_wiarchive_impl<text_wiarchive> ;
+
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_woarchive.cpp:
+
+// (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 <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#define BOOST_WARCHIVE_SOURCE
+#include <boost/archive/text_woarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of text stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_text_oarchive.ipp>
+#include <boost/archive/impl/text_woarchive_impl.ipp>
+
+namespace boost {
+namespace archive {
+
+template class detail::archive_serializer_map<text_woarchive>;
+template class basic_text_oarchive<text_woarchive> ;
+template class text_woarchive_impl<text_woarchive> ;
+
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_NO_STD_WSTREAMBUF
--- /dev/null
+// Copyright Vladimir Prus 2004.
+// 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 <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#define BOOST_UTF8_BEGIN_NAMESPACE \
+ namespace boost { namespace archive { namespace detail {
+#define BOOST_UTF8_DECL
+#define BOOST_UTF8_END_NAMESPACE }}}
+#include "../../detail/utf8_codecvt_facet.cpp"
+#undef BOOST_UTF8_END_NAMESPACE
+#undef BOOST_UTF8_DECL
+#undef BOOST_UTF8_BEGIN_NAMESPACE
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// void_cast.cpp: implementation of run-time casting of void pointers
+
+// (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)
+// <gennadiy.rozental@tfn.com>
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <cassert>
+#include <cstddef> // NULL
+#ifdef BOOST_SERIALIZATION_LOG
+#include <iostream>
+#endif
+
+// STL
+#include <set>
+#include <functional>
+#include <algorithm>
+#include <cassert>
+
+// BOOST
+#define BOOST_SERIALIZATION_SOURCE
+#include <boost/serialization/singleton.hpp>
+
+#define BOOST_SERIALIZATION_SOURCE
+#include <boost/serialization/extended_type_info.hpp>
+#include <boost/serialization/void_cast.hpp>
+
+namespace boost {
+namespace serialization {
+namespace void_cast_detail {
+
+// note that void_casters are keyed on value of
+// member extended type info records - NOT their
+// addresses. This is necessary in order for the
+// void cast operations to work across dll and exe
+// module boundries.
+bool void_caster::operator<(const void_caster & rhs) const {
+ // include short cut to save time and eliminate
+ // problems when when base class aren't virtual
+ if(m_derived != rhs.m_derived){
+ if(*m_derived < *rhs.m_derived)
+ return true;
+ if(*rhs.m_derived < *m_derived)
+ return false;
+ }
+ // m_derived == rhs.m_derived
+ if(m_base != rhs.m_base)
+ return *m_base < *rhs.m_base;
+ else
+ return false;
+}
+
+struct void_caster_compare {
+ bool operator()(const void_caster * lhs, const void_caster * rhs) const {
+ return *lhs < *rhs;
+ }
+};
+
+typedef std::set<const void_caster *, void_caster_compare> set_type;
+typedef boost::serialization::singleton<set_type> 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
+{
+ bool m_includes_virtual_base;
+
+ void const *
+ vbc_upcast(
+ void const * const t
+ ) const;
+ void const *
+ vbc_downcast(
+ void const * const t
+ ) const;
+ virtual void const *
+ upcast(void const * const t) const{
+ if(m_includes_virtual_base)
+ return vbc_upcast(t);
+ return static_cast<const char *> ( t ) - m_difference;
+ }
+ virtual void const *
+ downcast(void const * const t) const{
+ if(m_includes_virtual_base)
+ return vbc_downcast(t);
+ return static_cast<const char *> ( t ) + m_difference;
+ }
+ virtual bool is_shortcut() const {
+ return true;
+ }
+public:
+ void_caster_shortcut(
+ extended_type_info const * derived,
+ extended_type_info const * base,
+ std::ptrdiff_t difference,
+ bool includes_virtual_base,
+ void_caster const * const parent
+ ) :
+ void_caster(derived, base, difference, parent),
+ m_includes_virtual_base(includes_virtual_base)
+ {
+ recursive_register(includes_virtual_base);
+ }
+ virtual ~void_caster_shortcut(){
+ recursive_unregister();
+ }
+};
+
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+void const *
+void_caster_shortcut::vbc_downcast(
+ void const * const t
+) const {
+ // try to find a chain that gives us what we want
+ const void_cast_detail::set_type & s
+ = void_cast_detail::void_caster_registry::get_const_instance();
+ void_cast_detail::set_type::const_iterator it;
+ for(it = s.begin(); it != s.end(); ++it){
+ // if the current candidate casts to the desired target type
+ if ((*it)->m_derived == m_derived){
+ // and if it's not us
+ if ((*it)->m_base != m_base){
+ // try to cast from the candidate base to our base
+ const void * t_new;
+ t_new = void_downcast(*(*it)->m_base, *m_base, t);
+ // if we were successful
+ if(NULL != t_new){
+ // recast to our derived
+ const void_caster * vc = *it;
+ return vc->downcast(t_new);
+ }
+ }
+ }
+ }
+ return NULL;
+}
+
+void const *
+void_caster_shortcut::vbc_upcast(
+ void const * const t
+) const {
+ // try to find a chain that gives us what we want
+ const void_cast_detail::set_type & s
+ = void_cast_detail::void_caster_registry::get_const_instance();
+ void_cast_detail::set_type::const_iterator it;
+ for(it = s.begin(); it != s.end(); ++it){
+ // if the current candidate casts from the desired base type
+ if((*it)->m_base == m_base){
+ // and if it's not us
+ if ((*it)->m_derived != m_derived){
+ // try to cast from the candidate derived to our our derived
+ const void * t_new;
+ t_new = void_upcast(*m_derived, *(*it)->m_derived, t);
+ if(NULL != t_new)
+ return (*it)->upcast(t_new);
+ }
+ }
+ }
+ 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 {
+ assert(false);
+ return NULL;
+ }
+ virtual void const *
+ downcast( void const * const /*t*/) const {
+ assert(false);
+ return NULL;
+ }
+public:
+ void_caster_argument(
+ extended_type_info const * derived,
+ extended_type_info const * base
+ ) :
+ void_caster(derived, base)
+ {}
+ virtual ~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 {
+ void_cast_detail::set_type & s
+ = void_cast_detail::void_caster_registry::get_mutable_instance();
+
+ #ifdef BOOST_SERIALIZATION_LOG
+ std::clog << "recursive_register\n";
+ std::clog << m_derived->get_debug_info();
+ std::clog << "<-";
+ std::clog << m_base->get_debug_info();
+ std::clog << "\n";
+ #endif
+
+ std::pair<void_cast_detail::set_type::const_iterator, bool> result;
+ result = s.insert(this);
+ assert(result.second);
+
+ // generate all implied void_casts.
+ void_cast_detail::set_type::const_iterator it;
+ for(it = s.begin(); it != s.end(); ++it){
+ if(* m_derived == * (*it)->m_base){
+ const void_caster_argument vca(
+ (*it)->m_derived,
+ m_base
+ );
+ void_cast_detail::set_type::const_iterator i;
+ i = s.find(& vca);
+ if(i == s.end()){
+ new void_caster_shortcut(
+ (*it)->m_derived,
+ m_base,
+ m_difference + (*it)->m_difference,
+ includes_virtual_base,
+ this
+ );
+ }
+ }
+ if(* (*it)->m_derived == * m_base){
+ const void_caster_argument vca(
+ m_derived,
+ (*it)->m_base
+ );
+ void_cast_detail::set_type::const_iterator i;
+ i = s.find(& vca);
+ if(i == s.end()){
+ new void_caster_shortcut(
+ m_derived,
+ (*it)->m_base,
+ m_difference + (*it)->m_difference,
+ includes_virtual_base,
+ this
+ );
+ }
+ }
+ }
+}
+
+BOOST_SERIALIZATION_DECL(void)
+void_caster::recursive_unregister() const {
+ if(void_caster_registry::is_destroyed())
+ return;
+
+ #ifdef BOOST_SERIALIZATION_LOG
+ std::clog << "recursive_unregister\n";
+ std::clog << m_derived->get_debug_info();
+ std::clog << "<-";
+ std::clog << m_base->get_debug_info();
+ std::clog << "\n";
+ #endif
+
+ void_cast_detail::set_type & s
+ = void_caster_registry::get_mutable_instance();
+
+ // delete all shortcuts which use this primitive
+ void_cast_detail::set_type::iterator it;
+ for(it = s.begin(); it != s.end();){
+ const void_caster * vc = *it;
+ if(vc == this){
+ s.erase(it++);
+ }
+ else
+ if(vc->m_parent == this){
+ s.erase(it);
+ delete vc;
+ it = s.begin();
+ }
+ else
+ it++;
+ }
+}
+
+} // namespace void_cast_detail
+
+// Given a void *, assume that it really points to an instance of one type
+// and alter it so that it would point to an instance of a related type.
+// Return the altered pointer. If there exists no sequence of casts that
+// can transform from_type to to_type, return a NULL.
+BOOST_SERIALIZATION_DECL(void const *)
+void_upcast(
+ extended_type_info const & derived,
+ extended_type_info const & base,
+ void const * const t
+){
+ // same types - trivial case
+ if (derived == base)
+ return t;
+
+ // check to see if base/derived pair is found in the registry
+ const void_cast_detail::set_type & s
+ = void_cast_detail::void_caster_registry::get_const_instance();
+ const void_cast_detail::void_caster_argument ca(& derived, & base);
+
+ void_cast_detail::set_type::const_iterator it;
+ it = s.find(& ca);
+ if (s.end() != it)
+ return (*it)->upcast(t);
+
+ return NULL;
+}
+
+BOOST_SERIALIZATION_DECL(void const *)
+void_downcast(
+ extended_type_info const & derived,
+ extended_type_info const & base,
+ void const * const t
+){
+ // same types - trivial case
+ if (derived == base)
+ return t;
+
+ // check to see if base/derived pair is found in the registry
+ const void_cast_detail::set_type & s
+ = void_cast_detail::void_caster_registry::get_const_instance();
+ const void_cast_detail::void_caster_argument ca(& derived, & base);
+
+ void_cast_detail::set_type::const_iterator it;
+ it = s.find(&ca);
+ if (s.end() != it)
+ return(*it)->downcast(t);
+
+ return NULL;
+}
+
+} // namespace serialization
+} // namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_archive_exception.cpp:
+
+// (C) Copyright 2009 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.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#define BOOST_ARCHIVE_SOURCE
+
+#include <exception>
+#include <cassert>
+#include <string>
+
+#include <boost/archive/xml_archive_exception.hpp>
+
+namespace boost {
+namespace archive {
+
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+xml_archive_exception::xml_archive_exception(
+ exception_code c,
+ const char * e1,
+ const char * e2
+ ) :
+ archive_exception(other_exception, e1, e2)
+ {
+ m_msg = "programming error";
+ switch(c){
+ case xml_archive_parsing_error:
+ m_msg = "unrecognized XML syntax";
+ break;
+ case xml_archive_tag_mismatch:
+ m_msg = "XML start/end tag mismatch";
+ if(NULL != e1){
+ m_msg += " - ";
+ m_msg += e1;
+ }
+ break;
+ case xml_archive_tag_name_error:
+ m_msg = "Invalid XML tag name";
+ break;
+ default:
+ assert(false);
+ break;
+ }
+ }
+
+} // archive
+} // boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_grammar.cpp:
+
+// (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.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/impl/basic_xml_grammar.hpp>
+
+using namespace boost::spirit;
+
+#include <boost/config.hpp>
+
+// fixup for borland
+// The following code will be put into Boost.Config in a later revision
+#if ! defined(__SGI_STL_PORT) \
+&& defined(BOOST_RWSTD_VER) && BOOST_RWSTD_VER<=0x020101
+#include <string>
+namespace std {
+ template<>
+ inline string &
+ string::replace (
+ char * first1,
+ char * last1,
+ const char * first2,
+ const char * last2
+ ){
+ replace(first1-begin(),last1-first1,first2,last2-first2,0,last2-first2);
+ return *this;
+ }
+} // namespace std
+#endif
+
+namespace boost {
+namespace archive {
+
+typedef basic_xml_grammar<char> xml_grammar;
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// specific definitions for char based XML
+
+template<>
+void xml_grammar::init_chset(){
+ Char = chset_t("\x9\xA\xD\x20-\x7f\x80\x81-\xFF");
+ Letter = chset_t("\x41-\x5A\x61-\x7A\xC0-\xD6\xD8-\xF6\xF8-\xFF");
+ Digit = chset_t("0-9");
+ Extender = chset_t('\xB7');
+ Sch = chset_t("\x20\x9\xD\xA");
+ NameChar = Letter | Digit | chset_p("._:-") | Extender ;
+}
+
+} // namespace archive
+} // namespace boost
+
+#include "basic_xml_grammar.ipp"
+
+namespace boost {
+namespace archive {
+
+// explicit instantiation of xml for 8 bit characters
+template class basic_xml_grammar<char>;
+
+} // namespace archive
+} // namespace boost
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_iarchive.cpp:
+
+// (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.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#define BOOST_ARCHIVE_SOURCE
+
+// the following works around an issue between spirit 1.61 and borland.
+// it turns out the the certain spirit stuff must be defined before
+// certain parts of mpl. including this here makes sure that happens
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x560 )
+#include <boost/archive/impl/basic_xml_grammar.hpp>
+#endif
+
+#include <boost/archive/xml_iarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of xml stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_xml_iarchive.ipp>
+#include <boost/archive/impl/xml_iarchive_impl.ipp>
+
+namespace boost {
+namespace archive {
+
+template class detail::archive_serializer_map<naked_xml_iarchive>;
+template class basic_xml_iarchive<naked_xml_iarchive> ;
+template class xml_iarchive_impl<naked_xml_iarchive> ;
+
+template class detail::archive_serializer_map<xml_iarchive>;
+template class basic_xml_iarchive<xml_iarchive> ;
+template class xml_iarchive_impl<xml_iarchive> ;
+
+} // namespace archive
+} // namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_oarchive.cpp:
+
+// (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.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/xml_oarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of xml stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_xml_oarchive.ipp>
+#include <boost/archive/impl/xml_oarchive_impl.ipp>
+
+namespace boost {
+namespace archive {
+
+template class detail::archive_serializer_map<xml_oarchive>;
+template class basic_xml_oarchive<xml_oarchive> ;
+template class xml_oarchive_impl<xml_oarchive> ;
+
+} // namespace archive
+} // namespace boost
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_wgrammar.cpp:
+
+// (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 <boost/config.hpp>
+
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#define BOOST_WARCHIVE_SOURCE
+#include <boost/archive/impl/basic_xml_grammar.hpp>
+
+using namespace boost::spirit;
+
+// fixup for RogueWave
+#include <boost/config.hpp>
+#if ! defined(__SGI_STL_PORT) \
+&& defined(BOOST_RWSTD_VER) && BOOST_RWSTD_VER<=0x020101
+#include <string>
+namespace std {
+ template<>
+ inline wstring &
+ wstring::replace (
+ wchar_t * first1,
+ wchar_t * last1,
+ const wchar_t * first2,
+ const wchar_t * last2
+ ){
+ replace(first1-begin(),last1-first1,first2,last2-first2,0,last2-first2);
+ return *this;
+ }
+} // namespace std
+#endif
+
+namespace boost {
+namespace archive {
+
+typedef basic_xml_grammar<wchar_t> xml_wgrammar;
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// specific definitions for wchar_t based XML
+
+template<>
+void xml_wgrammar::init_chset(){
+ Char = chset_t(
+ #if defined(__GNUC__) && defined(linux)
+ L"\x9\xA\xD\x20-\xD7FF\xE000-\xFFFD\x10000-\x10FFFF"
+ #else
+ L"\x9\xA\xD\x20-\xD7FF\xE000-\xFFFD"
+ #endif
+ );
+
+ Sch = chset_t(L"\x20\x9\xD\xA");
+
+ BaseChar = chset_t(
+ L"\x41-\x5A\x61-\x7A\xC0-\xD6\xD8-\xF6\xF8-\xFF\x100-\x131\x134-\x13E"
+ L"\x141-\x148\x14A-\x17E\x180-\x1C3\x1CD-\x1F0\x1F4-\x1F5\x1FA-\x217"
+ L"\x250-\x2A8\x2BB-\x2C1\x386\x388-\x38A\x38C\x38E-\x3A1\x3A3-\x3CE"
+ L"\x3D0-\x3D6\x3DA\x3DC\x3DE\x3E0\x3E2-\x3F3\x401-\x40C\x40E-\x44F"
+ L"\x451-\x45C\x45E-\x481\x490-\x4C4\x4C7-\x4C8\x4CB-\x4CC\x4D0-\x4EB"
+ L"\x4EE-\x4F5\x4F8-\x4F9\x531-\x556\x559\x561-\x586\x5D0-\x5EA"
+ L"\x5F0-\x5F2\x621-\x63A\x641-\x64A\x671-\x6B7\x6BA-\x6BE\x6C0-\x6CE"
+ L"\x6D0-\x6D3\x6D5\x6E5-\x6E6\x905-\x939\x93D\x958-\x961\x985-\x98C"
+ L"\x98F-\x990\x993-\x9A8\x9AA-\x9B0\x9B2\x9B6-\x9B9\x9DC-\x9DD"
+ L"\x9DF-\x9E1\x9F0-\x9F1\xA05-\xA0A\xA0F-\xA10\xA13-\xA28\xA2A-\xA30"
+ L"\xA32-\xA33\xA35-\xA36\xA38-\xA39\xA59-\xA5C\xA5E\xA72-\xA74"
+ L"\xA85-\xA8B\xA8D\xA8F-\xA91\xA93-\xAA8\xAAA-\xAB0\xAB2-\xAB3"
+ L"\xAB5-\xAB9\xABD\xAE0\xB05-\xB0C\xB0F-\xB10\xB13-\xB28\xB2A-\xB30"
+ L"\xB32-\xB33\xB36-\xB39\xB3D\xB5C-\xB5D\xB5F-\xB61\xB85-\xB8A"
+ L"\xB8E-\xB90\xB92-\xB95\xB99-\xB9A\xB9C\xB9E-\xB9F\xBA3-\xBA4"
+ L"\xBA8-\xBAA\xBAE-\xBB5\xBB7-\xBB9\xC05-\xC0C\xC0E-\xC10\xC12-\xC28"
+ L"\xC2A-\xC33\xC35-\xC39\xC60-\xC61\xC85-\xC8C\xC8E-\xC90\xC92-\xCA8"
+ L"\xCAA-\xCB3\xCB5-\xCB9\xCDE\xCE0-\xCE1\xD05-\xD0C\xD0E-\xD10"
+ L"\xD12-\xD28\xD2A-\xD39\xD60-\xD61\xE01-\xE2E\xE30\xE32-\xE33"
+ L"\xE40-\xE45\xE81-\xE82\xE84\xE87-\xE88\xE8A\xE8D\xE94-\xE97"
+ L"\xE99-\xE9F\xEA1-\xEA3\xEA5\xEA7\xEAA-\xEAB\xEAD-\xEAE\xEB0"
+ L"\xEB2-\xEB3\xEBD\xEC0-\xEC4\xF40-\xF47\xF49-\xF69\x10A0-\x10C5"
+ L"\x10D0-\x10F6\x1100\x1102-\x1103\x1105-\x1107\x1109\x110B-\x110C"
+ L"\x110E-\x1112\x113C\x113E\x1140\x114C\x114E\x1150\x1154-\x1155"
+ L"\x1159\x115F-\x1161\x1163\x1165\x1167\x1169\x116D-\x116E"
+ L"\x1172-\x1173\x1175\x119E\x11A8\x11AB\x11AE-\x11AF\x11B7-\x11B8"
+ L"\x11BA\x11BC-\x11C2\x11EB\x11F0\x11F9\x1E00-\x1E9B\x1EA0-\x1EF9"
+ L"\x1F00-\x1F15\x1F18-\x1F1D\x1F20-\x1F45\x1F48-\x1F4D\x1F50-\x1F57"
+ L"\x1F59\x1F5B\x1F5D\x1F5F-\x1F7D\x1F80-\x1FB4\x1FB6-\x1FBC\x1FBE"
+ L"\x1FC2-\x1FC4\x1FC6-\x1FCC\x1FD0-\x1FD3\x1FD6-\x1FDB\x1FE0-\x1FEC"
+ L"\x1FF2-\x1FF4\x1FF6-\x1FFC\x2126\x212A-\x212B\x212E\x2180-\x2182"
+ L"\x3041-\x3094\x30A1-\x30FA\x3105-\x312C\xAC00-\xD7A3"
+ );
+
+ Ideographic = chset_t(L"\x4E00-\x9FA5\x3007\x3021-\x3029");
+
+ Letter = BaseChar | Ideographic;
+
+ CombiningChar = chset_t(
+ L"\x0300-\x0345\x0360-\x0361\x0483-\x0486\x0591-\x05A1\x05A3-\x05B9"
+ L"\x05BB-\x05BD\x05BF\x05C1-\x05C2\x05C4\x064B-\x0652\x0670"
+ L"\x06D6-\x06DC\x06DD-\x06DF\x06E0-\x06E4\x06E7-\x06E8\x06EA-\x06ED"
+ L"\x0901-\x0903\x093C\x093E-\x094C\x094D\x0951-\x0954\x0962-\x0963"
+ L"\x0981-\x0983\x09BC\x09BE\x09BF\x09C0-\x09C4\x09C7-\x09C8"
+ L"\x09CB-\x09CD\x09D7\x09E2-\x09E3\x0A02\x0A3C\x0A3E\x0A3F"
+ L"\x0A40-\x0A42\x0A47-\x0A48\x0A4B-\x0A4D\x0A70-\x0A71\x0A81-\x0A83"
+ L"\x0ABC\x0ABE-\x0AC5\x0AC7-\x0AC9\x0ACB-\x0ACD\x0B01-\x0B03\x0B3C"
+ L"\x0B3E-\x0B43\x0B47-\x0B48\x0B4B-\x0B4D\x0B56-\x0B57\x0B82-\x0B83"
+ L"\x0BBE-\x0BC2\x0BC6-\x0BC8\x0BCA-\x0BCD\x0BD7\x0C01-\x0C03"
+ L"\x0C3E-\x0C44\x0C46-\x0C48\x0C4A-\x0C4D\x0C55-\x0C56\x0C82-\x0C83"
+ L"\x0CBE-\x0CC4\x0CC6-\x0CC8\x0CCA-\x0CCD\x0CD5-\x0CD6\x0D02-\x0D03"
+ L"\x0D3E-\x0D43\x0D46-\x0D48\x0D4A-\x0D4D\x0D57\x0E31\x0E34-\x0E3A"
+ L"\x0E47-\x0E4E\x0EB1\x0EB4-\x0EB9\x0EBB-\x0EBC\x0EC8-\x0ECD"
+ L"\x0F18-\x0F19\x0F35\x0F37\x0F39\x0F3E\x0F3F\x0F71-\x0F84"
+ L"\x0F86-\x0F8B\x0F90-\x0F95\x0F97\x0F99-\x0FAD\x0FB1-\x0FB7\x0FB9"
+ L"\x20D0-\x20DC\x20E1\x302A-\x302F\x3099\x309A"
+ );
+
+ Digit = chset_t(
+ L"\x0030-\x0039\x0660-\x0669\x06F0-\x06F9\x0966-\x096F\x09E6-\x09EF"
+ L"\x0A66-\x0A6F\x0AE6-\x0AEF\x0B66-\x0B6F\x0BE7-\x0BEF\x0C66-\x0C6F"
+ L"\x0CE6-\x0CEF\x0D66-\x0D6F\x0E50-\x0E59\x0ED0-\x0ED9\x0F20-\x0F29"
+ );
+
+ Extender = chset_t(
+ L"\x00B7\x02D0\x02D1\x0387\x0640\x0E46\x0EC6\x3005\x3031-\x3035"
+ L"\x309D-\x309E\x30FC-\x30FE"
+ );
+
+ NameChar =
+ Letter
+ | Digit
+ | L'.'
+ | L'-'
+ | L'_'
+ | L':'
+ | CombiningChar
+ | Extender
+ ;
+}
+} // namespace archive
+} // namespace boost
+
+#include "basic_xml_grammar.ipp"
+
+namespace boost {
+namespace archive {
+
+// explicit instantiation of xml for wide characters
+template class basic_xml_grammar<wchar_t>;
+
+} // namespace archive
+} // namespace boost
+
+#endif
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_wiarchive.cpp:
+
+// (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 <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#include <boost/detail/workaround.hpp>
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#define BOOST_WARCHIVE_SOURCE
+
+// the following works around an issue between spirit 1.61 and borland.
+// it turns out the the certain spirit stuff must be defined before
+// certain parts of mpl. including this here makes sure that happens
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x560 )
+#include <boost/archive/impl/basic_xml_grammar.hpp>
+#endif
+
+#include <boost/archive/xml_wiarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of xml stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_xml_iarchive.ipp>
+#include <boost/archive/impl/xml_wiarchive_impl.ipp>
+
+namespace boost {
+namespace archive {
+
+template class detail::archive_serializer_map<naked_xml_wiarchive>;
+template class basic_xml_iarchive<naked_xml_wiarchive> ;
+template class xml_wiarchive_impl<naked_xml_wiarchive> ;
+
+template class detail::archive_serializer_map<xml_wiarchive>;
+template class basic_xml_iarchive<xml_wiarchive> ;
+template class xml_wiarchive_impl<xml_wiarchive> ;
+
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_NO_STD_WSTREAMBUF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_woarchive.cpp:
+
+// (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 <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#define BOOST_WARCHIVE_SOURCE
+#include <boost/archive/xml_woarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of text stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_xml_oarchive.ipp>
+#include <boost/archive/impl/xml_woarchive_impl.ipp>
+
+namespace boost {
+namespace archive {
+
+template class detail::archive_serializer_map<xml_woarchive>;
+template class basic_xml_oarchive<xml_woarchive> ;
+template class xml_woarchive_impl<xml_woarchive> ;
+
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_NO_STD_WSTREAMBUF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// A.cpp simple class test
+
+// (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 <cassert>
+#include <cstdlib> // rand()
+#include <cmath> // fabs()
+#include <cstddef> // size_t
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::rand;
+ using ::fabs;
+ using ::size_t;
+}
+#endif
+
+#include <boost/detail/workaround.hpp>
+#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+#include <boost/archive/dinkumware.hpp>
+#endif
+
+#include "A.hpp"
+
+template<class S>
+void randomize(S &x)
+{
+ assert(0 == x.size());
+ for(;;){
+ unsigned int i = std::rand() % 27;
+ if(0 == i)
+ break;
+ x += static_cast<BOOST_DEDUCED_TYPENAME S::value_type>('a' - 1 + i);
+ }
+}
+
+template<class T>
+void accumulate(std::size_t & s, const T & t){
+ const char * tptr = (const char *)(& t);
+ unsigned int count = sizeof(t);
+ while(count-- > 0){
+ s += *tptr++;
+ }
+}
+
+A::operator std::size_t () const {
+ std::size_t retval = 0;
+ accumulate(retval, b);
+ #ifndef BOOST_NO_INT64_T
+ accumulate(retval, f);
+ accumulate(retval, g);
+ #endif
+ accumulate(retval, l);
+ accumulate(retval, m);
+ accumulate(retval, n);
+ accumulate(retval, o);
+ accumulate(retval, p);
+ accumulate(retval, q);
+ #ifndef BOOST_NO_CWCHAR
+ accumulate(retval, r);
+ #endif
+ accumulate(retval, c);
+ accumulate(retval, s);
+ accumulate(retval, t);
+ accumulate(retval, u);
+ accumulate(retval, v);
+ return retval;
+}
+
+#if defined(_MSC_VER)
+#pragma warning(push) // Save warning settings.
+#pragma warning(disable : 4244) // Disable possible loss of data warning
+
+#endif
+A::A() :
+ b(true),
+ #ifndef BOOST_NO_INT64_T
+ f(std::rand() * std::rand()),
+ g(std::rand() * std::rand()),
+ #endif
+ l(static_cast<enum h>(std::rand() % 3)),
+ m(std::rand()),
+ n(std::rand()),
+ o(std::rand()),
+ p(std::rand()),
+ q(std::rand()),
+ #ifndef BOOST_NO_CWCHAR
+ r(std::rand()),
+ #endif
+ c(0xff & std::rand()),
+ s(0xff & std::rand()),
+ t(0xff & std::rand()),
+ u(std::rand()),
+ v(std::rand()),
+ w((float)std::rand()),
+ x((double)std::rand())
+{
+ randomize(y);
+ #ifndef BOOST_NO_STD_WSTRING
+ randomize(z);
+ #endif
+}
+
+#if defined(_MSC_VER)
+#pragma warning(pop) // Restore warnings to previous state.
+#endif
+
+bool A::operator==(const A &rhs) const
+{
+ if(b != rhs.b)
+ return false;
+ if(l != rhs.l)
+ return false;
+ #ifndef BOOST_NO_INT64_T
+ if(f != rhs.f)
+ return false;
+ if(g != rhs.g)
+ return false;
+ #endif
+ if(m != rhs.m)
+ return false;
+ if(n != rhs.n)
+ return false;
+ if(o != rhs.o)
+ return false;
+ if(p != rhs.p)
+ return false;
+ if(q != rhs.q)
+ return false;
+ #ifndef BOOST_NO_CWCHAR
+ if(r != rhs.r)
+ return false;
+ #endif
+ if(c != rhs.c)
+ return false;
+ if(s != rhs.s)
+ return false;
+ if(t != rhs.t)
+ return false;
+ if(u != rhs.u)
+ return false;
+ if(v != rhs.v)
+ return false;
+ if(w == 0 && std::fabs(rhs.w) > std::numeric_limits<float>::epsilon())
+ return false;
+ if(std::fabs(rhs.w/w - 1.0) > std::numeric_limits<float>::epsilon())
+ return false;
+ if(x == 0 && std::fabs(rhs.x - x) > std::numeric_limits<float>::epsilon())
+ return false;
+ if(std::fabs(rhs.x/x - 1.0) > std::numeric_limits<float>::epsilon())
+ return false;
+ if(0 != y.compare(rhs.y))
+ return false;
+ #ifndef BOOST_NO_STD_WSTRING
+ if(0 != z.compare(rhs.z))
+ return false;
+ #endif
+ return true;
+}
+
+bool A::operator!=(const A &rhs) const
+{
+ return ! (*this == rhs);
+}
+
+bool A::operator<(const A &rhs) const
+{
+ if(b != rhs.b)
+ return b < rhs.b;
+ #ifndef BOOST_NO_INT64_T
+ if(f != rhs.f)
+ return f < rhs.f;
+ if(g != rhs.g)
+ return g < rhs.g;
+ #endif
+ if(l != rhs.l )
+ return l < rhs.l;
+ if(m != rhs.m )
+ return m < rhs.m;
+ if(n != rhs.n )
+ return n < rhs.n;
+ if(o != rhs.o )
+ return o < rhs.o;
+ if(p != rhs.p )
+ return p < rhs.p;
+ if(q != rhs.q )
+ return q < rhs.q;
+ #ifndef BOOST_NO_CWCHAR
+ if(r != rhs.r )
+ return r < rhs.r;
+ #endif
+ if(c != rhs.c )
+ return c < rhs.c;
+ if(s != rhs.s )
+ return s < rhs.s;
+ if(t != rhs.t )
+ return t < rhs.t;
+ if(u != rhs.u )
+ return u < rhs.u;
+ if(v != rhs.v )
+ return v < rhs.v;
+ if(w != rhs.w )
+ return w < rhs.w;
+ if(x != rhs.x )
+ return x < rhs.x;
+ int i = y.compare(rhs.y);
+ if(i != 0 )
+ return i < 0;
+ #ifndef BOOST_NO_STD_WSTRING
+ int j = z.compare(rhs.z);
+ if(j != 0 )
+ return j < 0;
+ #endif
+ return false;
+}
--- /dev/null
+#ifndef BOOST_SERIALIZATION_TEST_A_HPP
+#define BOOST_SERIALIZATION_TEST_A_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
+// A.hpp simple class test
+
+// (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 <ostream> // for friend output operators
+#include <cstddef> // size_t
+#include <string>
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+}
+#endif
+
+#include <boost/detail/workaround.hpp>
+#include <boost/limits.hpp>
+#include <boost/cstdint.hpp>
+
+#include <boost/serialization/access.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ #include <boost/detail/workaround.hpp>
+ #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+ #include <boost/archive/dinkumware.hpp>
+ #endif
+#endif
+
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/string.hpp>
+
+#include <boost/preprocessor/facilities/empty.hpp>
+
+#include "test_decl.hpp"
+
+#if defined(A_IMPORT)
+ #define DLL_DECL IMPORT_DECL
+#elif defined(A_EXPORT)
+ #define DLL_DECL EXPORT_DECL
+#else
+ #define DLL_DECL(x)
+#endif
+
+class DLL_DECL(BOOST_PP_EMPTY()) A
+{
+private:
+ friend class boost::serialization::access;
+ // note: from an aesthetic perspective, I would much prefer to have this
+ // defined out of line. Unfortunately, this trips a bug in the VC 6.0
+ // compiler. So hold our nose and put it her to permit running of tests.
+ // mscvc 6.0 requires template functions to be implemented. For this
+ // reason we can't make abstract.
+ #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ template<class Archive>
+ void serialize(
+ Archive &ar,
+ const unsigned int /* file_version */
+ ){
+ ar & BOOST_SERIALIZATION_NVP(b);
+ #ifndef BOOST_NO_INT64_T
+ ar & BOOST_SERIALIZATION_NVP(f);
+ ar & BOOST_SERIALIZATION_NVP(g);
+ #endif
+ #if BOOST_WORKAROUND(__BORLANDC__, <= 0x551 )
+ int i;
+ if(BOOST_DEDUCED_TYPENAME Archive::is_saving::value){
+ i = l;
+ ar & BOOST_SERIALIZATION_NVP(i);
+ }
+ else{
+ ar & BOOST_SERIALIZATION_NVP(i);
+ l = i;
+ }
+ #else
+ ar & BOOST_SERIALIZATION_NVP(l);
+ #endif
+ ar & BOOST_SERIALIZATION_NVP(m);
+ ar & BOOST_SERIALIZATION_NVP(n);
+ ar & BOOST_SERIALIZATION_NVP(o);
+ ar & BOOST_SERIALIZATION_NVP(p);
+ ar & BOOST_SERIALIZATION_NVP(q);
+ #ifndef BOOST_NO_CWCHAR
+ ar & BOOST_SERIALIZATION_NVP(r);
+ #endif
+ ar & BOOST_SERIALIZATION_NVP(c);
+ ar & BOOST_SERIALIZATION_NVP(s);
+ ar & BOOST_SERIALIZATION_NVP(t);
+ ar & BOOST_SERIALIZATION_NVP(u);
+ ar & BOOST_SERIALIZATION_NVP(v);
+ ar & BOOST_SERIALIZATION_NVP(w);
+ ar & BOOST_SERIALIZATION_NVP(x);
+ ar & BOOST_SERIALIZATION_NVP(y);
+ #ifndef BOOST_NO_STD_WSTRING
+ ar & BOOST_SERIALIZATION_NVP(z);
+ #endif
+ }
+ #else
+ template<class Archive>
+ void serialize(
+ Archive &ar,
+ const unsigned int /* file_version */
+ );
+ #endif
+ bool b;
+ #ifndef BOOST_NO_INT64_T
+ boost::int64_t f;
+ boost::uint64_t g;
+ #endif
+ enum h {
+ i = 0,
+ j,
+ k
+ } l;
+ std::size_t m;
+ signed long n;
+ unsigned long o;
+ signed short p;
+ unsigned short q;
+ #ifndef BOOST_NO_CWCHAR
+ wchar_t r;
+ #endif
+ char c;
+ signed char s;
+ unsigned char t;
+ signed int u;
+ unsigned int v;
+ float w;
+ double x;
+ std::string y;
+ #ifndef BOOST_NO_STD_WSTRING
+ std::wstring z;
+ #endif
+public:
+ A();
+ bool operator==(const A &rhs) const;
+ bool operator!=(const A &rhs) const;
+ bool operator<(const A &rhs) const; // used by less
+ // hash function for class A
+ operator std::size_t () const;
+ friend std::ostream & operator<<(std::ostream & os, A const & a);
+};
+
+#undef DLL_DECL
+
+#endif // BOOST_SERIALIZATION_TEST_A_HPP
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// A.ipp simple class test
+
+// (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 <boost/detail/workaround.hpp>
+#if ! BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+#include <boost/archive/dinkumware.hpp>
+#endif
+
+#include "A.hpp"
+
+template<class Archive>
+void A::serialize(
+ Archive &ar,
+ const unsigned int /* file_version */
+){
+ ar & BOOST_SERIALIZATION_NVP(b);
+ #ifndef BOOST_NO_INT64_T
+ ar & BOOST_SERIALIZATION_NVP(f);
+ ar & BOOST_SERIALIZATION_NVP(g);
+ #endif
+ #if BOOST_WORKAROUND(__BORLANDC__, <= 0x551 )
+ int i;
+ if(BOOST_DEDUCED_TYPENAME Archive::is_saving::value){
+ i = l;
+ ar & BOOST_SERIALIZATION_NVP(i);
+ }
+ else{
+ ar & BOOST_SERIALIZATION_NVP(i);
+ l = i;
+ }
+ #else
+ ar & BOOST_SERIALIZATION_NVP(l);
+ #endif
+ ar & BOOST_SERIALIZATION_NVP(m);
+ ar & BOOST_SERIALIZATION_NVP(n);
+ ar & BOOST_SERIALIZATION_NVP(o);
+ ar & BOOST_SERIALIZATION_NVP(p);
+ ar & BOOST_SERIALIZATION_NVP(q);
+ #ifndef BOOST_NO_CWCHAR
+ ar & BOOST_SERIALIZATION_NVP(r);
+ #endif
+ ar & BOOST_SERIALIZATION_NVP(c);
+ ar & BOOST_SERIALIZATION_NVP(s);
+ ar & BOOST_SERIALIZATION_NVP(t);
+ ar & BOOST_SERIALIZATION_NVP(u);
+ ar & BOOST_SERIALIZATION_NVP(v);
+ ar & BOOST_SERIALIZATION_NVP(w);
+ ar & BOOST_SERIALIZATION_NVP(x);
+ ar & BOOST_SERIALIZATION_NVP(y);
+ #ifndef BOOST_NO_STD_WSTRING
+ ar & BOOST_SERIALIZATION_NVP(z);
+ #endif
+}
+
+#endif // workaround BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
--- /dev/null
+#ifndef BOOST_SERIALIZATION_TEST_B_HPP
+#define BOOST_SERIALIZATION_TEST_B_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
+// B.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 <cstdlib> // for rand()
+#include <cmath>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::rand;
+}
+#endif
+
+#include <boost/serialization/version.hpp>
+#include <boost/serialization/split_member.hpp>
+#include <boost/serialization/base_object.hpp>
+
+#include "A.hpp"
+
+///////////////////////////////////////////////////////
+// Derived class test
+class B : public A
+{
+private:
+ friend class boost::serialization::access;
+ template<class Archive>
+ void save(Archive &ar, const unsigned int /* file_version */) const
+ {
+ // write any base class info to the archive
+ ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(A);
+
+ // write out members
+ ar << BOOST_SERIALIZATION_NVP(s);
+ ar << BOOST_SERIALIZATION_NVP(t);
+ ar << BOOST_SERIALIZATION_NVP(u);
+ ar << BOOST_SERIALIZATION_NVP(v);
+ ar << BOOST_SERIALIZATION_NVP(w);
+ ar << BOOST_SERIALIZATION_NVP(x);
+ }
+
+ template<class Archive>
+ void load(Archive & ar, const unsigned int file_version)
+ {
+ // read any base class info to the archive
+ ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(A);
+ switch(file_version){
+ case 1:
+ case 2:
+ ar >> BOOST_SERIALIZATION_NVP(s);
+ ar >> BOOST_SERIALIZATION_NVP(t);
+ ar >> BOOST_SERIALIZATION_NVP(u);
+ ar >> BOOST_SERIALIZATION_NVP(v);
+ ar >> BOOST_SERIALIZATION_NVP(w);
+ ar >> BOOST_SERIALIZATION_NVP(x);
+ default:
+ break;
+ }
+ }
+
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+ signed char s;
+ unsigned char t;
+ signed int u;
+ unsigned int v;
+ float w;
+ double x;
+public:
+ B();
+ virtual ~B(){};
+ bool operator==(const B &rhs) const;
+};
+
+B::B() :
+ s(static_cast<signed char>(std::rand())),
+ t(static_cast<unsigned char>(std::rand())),
+ u(std::rand()),
+ v(std::rand()),
+ w((float)std::rand() / std::rand()),
+ x((double)std::rand() / std::rand())
+{
+}
+
+BOOST_CLASS_VERSION(B, 2)
+
+inline bool B::operator==(const B &rhs) const
+{
+ return
+ A::operator==(rhs)
+ && s == rhs.s
+ && t == rhs.t
+ && u == rhs.u
+ && v == rhs.v
+ && std::fabs(w - rhs.w) <= std::numeric_limits<float>::round_error()
+ && std::fabs(x - rhs.x) <= std::numeric_limits<float>::round_error()
+ ;
+}
+
+#endif // BOOST_SERIALIZATION_TEST_B_HPP
--- /dev/null
+#ifndef BOOST_SERIALIZATION_TEST_A_HPP
+#define BOOST_SERIALIZATION_TEST_A_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
+// C.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 <boost/config.hpp>
+#include <boost/serialization/traits.hpp>
+#include <boost/serialization/split.hpp>
+
+#include "B.hpp"
+
+///////////////////////////////////////////////////////
+// Contained class
+class C
+{
+private:
+ friend class boost::serialization::access;
+ template<class Archive>
+ void save(Archive &ar, boost::archive::version_type file_version) const;
+ template<class Archive>
+ void load(Archive & ar, boost::archive::version_type file_version);
+ BOOST_SERIALIZATION_MEMBER_SPLIT()
+ B b;
+public:
+ bool operator==(const C &rhs) const;
+};
+
+BOOST_CLASS_VERSION(C, 1)
+
+inline bool C::operator==(const C &rhs) const
+{
+ return b == rhs.b;
+}
+
+template<class Archive>
+inline void save(Archive &ar, boost::archive::version_type file_version) const
+{
+ ar << b;
+}
+
+template<class Archive>
+inline void load(Archive & ar, boost::archive::version_type file_version){
+{
+ switch(file_version){
+ case 1:
+ ar >> b;
+ break;
+ case 2:
+ default:
+ assert(false);
+ break;
+ }
+}
+
+#endif // BOOST_SERIALIZATION_TEST_C_HPP
--- /dev/null
+#ifndef BOOST_SERIALIZATION_TEST_D_HPP
+#define BOOST_SERIALIZATION_TEST_D_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
+// D.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 <cstddef> // NULL
+
+#include "test_tools.hpp"
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/serialization/throw_exception.hpp>
+#include <boost/serialization/split_member.hpp>
+
+#include "B.hpp"
+
+///////////////////////////////////////////////////////
+// Contained class with multiple identical pointers
+class D
+{
+private:
+ friend class boost::serialization::access;
+ B *b1;
+ B *b2;
+ template<class Archive>
+ void save(Archive &ar, const unsigned int file_version) const{
+ ar << BOOST_SERIALIZATION_NVP(b1);
+ ar << BOOST_SERIALIZATION_NVP(b2);
+ }
+
+ template<class Archive>
+ void load(Archive & ar, const unsigned int file_version){
+ BOOST_TRY {
+ ar >> boost::serialization::make_nvp("b", b1);
+ ar >> boost::serialization::make_nvp("b", b2);
+ }
+ BOOST_CATCH (...){
+ // eliminate invalid pointers
+ b1 = NULL;
+ b2 = NULL;
+ BOOST_FAIL( "multiple identical pointers failed to load" );
+ }
+ BOOST_CATCH_END
+ // check that loading was correct
+ BOOST_CHECK(b1 == b2);
+ }
+
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+public:
+ D();
+ ~D();
+ bool operator==(const D &rhs) const;
+};
+
+BOOST_CLASS_VERSION(D, 3)
+
+D::D()
+{
+ b1 = new B();
+ b2 = b1;
+}
+
+D::~D()
+{
+ delete b1;
+}
+
+bool D::operator==(const D &rhs) const
+{
+ if(! (*b1 == *(rhs.b1)) )
+ return false;
+ if(! (*b2 == *(rhs.b2)) )
+ return false;
+ return true;
+}
+
+#endif // BOOST_SERIALIZATION_TEST_D_HPP
--- /dev/null
+#ifndef BOOST_SERIALIZATION_TEST_J_HPP
+#define BOOST_SERIALIZATION_TEST_J_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
+// J.hpp simple class test
+
+// (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 <boost/serialization/base_object.hpp>
+
+#include "A.hpp"
+
+///////////////////////////////////////////////////////
+// class with a member which refers to itself
+class J : public A
+{
+private:
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(
+ Archive &ar,
+ const unsigned int /* file_version */
+ ){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(A);
+ ar & BOOST_SERIALIZATION_NVP(j);
+ }
+public:
+ bool operator==(const J &rhs) const;
+ J *j;
+ J(J *_j) : j(_j) {}
+ J() : j(NULL){}
+};
+
+BOOST_CLASS_VERSION(J, 6)
+
+bool J::operator==(const J &rhs) const
+{
+ return static_cast<const A &>(*this) == static_cast<const A &>(rhs);
+}
+
+#endif // BOOST_SERIALIZATION_TEST_J_HPP
--- /dev/null
+# Boost serialization Library test Jamfile
+
+# (C) Copyright Robert Ramey 2002-2004.
+# Use, modification, and distribution are 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)
+#
+
+project libs/serialization/test
+ : id serialization_test
+ ;
+
+# import rules from the boost serialization test
+# import ../util/test : test-bsl-run-no-lib ;
+import ../util/test :
+ run-template
+ run-invoke
+ run-winvoke
+ test-bsl-run-no-lib
+ test-bsl-run
+ test-bsl-run_archive
+ test-bsl-run_files
+ test-bsl-run_polymorphic_archive
+;
+
+BOOST_ARCHIVE_LIST = [ modules.peek : BOOST_ARCHIVE_LIST ] ;
+
+lib dll_a_lib
+ :
+ dll_a.cpp
+ ../build//boost_serialization
+ :
+ <link>shared
+ ;
+
+lib dll_base_lib
+ :
+ dll_base.cpp
+ ../build//boost_serialization
+ :
+ <link>shared
+ ;
+
+lib dll_derived2_lib
+ :
+ dll_derived2.cpp
+ dll_base_lib
+ ../build//boost_serialization
+ :
+ <link>shared
+ ;
+
+lib dll_polymorphic_derived2_lib
+ :
+ polymorphic_derived2.cpp
+ ../build//boost_serialization
+ :
+ <link>shared
+ ;
+
+test-suite "serialization" :
+ [ test-bsl-run_files test_array : A ]
+ [ test-bsl-run_files test_binary ]
+ [ test-bsl-run_files test_bitset ]
+ [ test-bsl-run_files test_complex ]
+ [ test-bsl-run_files test_contained_class : A ]
+ [ test-bsl-run_files test_cyclic_ptrs : A ]
+ [ test-bsl-run_files test_delete_pointer ]
+ [ test-bsl-run_files test_deque : A ]
+ [ test-bsl-run_files test_derived ]
+ [ test-bsl-run_files test_derived_class : A ]
+ [ test-bsl-run_files test_derived_class_ptr : A ]
+ [ test-bsl-run_files test_diamond ]
+ [ test-bsl-run_files test_exported : polymorphic_base ]
+ [ test-bsl-run_files test_class_info_load ]
+ [ test-bsl-run_files test_class_info_save ]
+ [ test-bsl-run_files test_object ]
+ [ test-bsl-run_files test_primitive ]
+ [ test-bsl-run_files test_list : A ]
+ [ test-bsl-run_files test_list_ptrs : A ]
+ [ test-bsl-run_files test_map : A ]
+ [ test-bsl-run_files test_mi ]
+ [ test-bsl-run_files test_multiple_ptrs : A ]
+ [ test-bsl-run_files test_multiple_inheritance ]
+ [ test-bsl-run_files test_no_rtti : polymorphic_base polymorphic_derived1 ]
+ [ test-bsl-run_files test_non_intrusive ]
+ [ test-bsl-run_files test_non_default_ctor ]
+ [ test-bsl-run_files test_non_default_ctor2 ]
+ [ test-bsl-run_files test_null_ptr ]
+ [ test-bsl-run_files test_nvp : A ]
+ [ test-bsl-run_files test_recursion : A ]
+ [ test-bsl-run_files test_registered ]
+ [ test-bsl-run_files test_set : A ]
+ [ test-bsl-run_files test_simple_class : A ]
+ [ test-bsl-run_files test_simple_class_ptr : A ]
+ [ test-bsl-run_files test_split ]
+ [ test-bsl-run_files test_tracking ]
+ [ test-bsl-run_files test_unregistered ]
+ [ test-bsl-run_files test_valarray ]
+ [ test-bsl-run_files test_variant : A ]
+ [ test-bsl-run_files test_vector : A ]
+ [ test-bsl-run_files test_new_operator : A ]
+ [ test-bsl-run_files test_optional ]
+ [ test-bsl-run_files test_shared_ptr ]
+ [ test-bsl-run_files test_shared_ptr_multi_base ]
+ [ test-bsl-run_files test_shared_ptr_132 ]
+ [ test-bsl-run_polymorphic_archive test_polymorphic : test_polymorphic_A A ]
+ [ test-bsl-run_polymorphic_archive test_polymorphic2 : test_polymorphic2imp ]
+ ;
+
+if ! $(BOOST_ARCHIVE_LIST) {
+ test-suite "serialization2" :
+ [ test-bsl-run test_dll_exported : : dll_polymorphic_derived2_lib : <runtime-link>shared ]
+ [ test-bsl-run test_dll_simple : : dll_a_lib : <runtime-link>shared ]
+ [ compile test_dll_plugin.cpp ]
+ [ test-bsl-run test_private_ctor ]
+ [ test-bsl-run test_reset_object_address : A ]
+ [ test-bsl-run test_void_cast ]
+ [ test-bsl-run test_mult_archive_types ]
+
+ [ test-bsl-run-no-lib test_iterators ]
+ [ test-bsl-run-no-lib test_iterators_base64 ]
+ [ test-bsl-run-no-lib test_inclusion ]
+ [ test-bsl-run-no-lib test_smart_cast ]
+
+ [ test-bsl-run-no-lib test_utf8_codecvt
+ : ../src/utf8_codecvt_facet
+ : <dependency>../../config/test/all//BOOST_NO_STD_WSTREAMBUF
+ ]
+ [ test-bsl-run-no-lib test_codecvt_null
+ : ../src/codecvt_null
+ : <dependency>../../config/test/all//BOOST_NO_STD_WSTREAMBUF
+ ]
+
+ # should fail compilation
+ [ compile-fail test_not_serializable.cpp ]
+ [ compile-fail test_traits_fail.cpp ]
+ [ compile-fail test_const_load_fail1.cpp ]
+ [ compile-fail test_const_load_fail2.cpp ]
+ [ compile-fail test_const_load_fail3.cpp ]
+ [ compile-fail test_const_load_fail1_nvp.cpp ]
+ [ compile-fail test_const_load_fail2_nvp.cpp ]
+ [ compile-fail test_const_load_fail3_nvp.cpp ]
+ [ compile-fail test_check.cpp ]
+
+ # should compile with a warning message
+ [ compile test_static_warning.cpp ]
+ [ compile test_const_save_warn1.cpp ]
+ [ compile test_const_save_warn2.cpp ]
+ [ compile test_const_save_warn3.cpp ]
+ # note - library unable to detect these errors for now
+ #[ compile test_const_save_warn1_nvp.cpp ]
+ #[ compile test_const_save_warn2_nvp.cpp ]
+ #[ compile test_const_save_warn3_nvp.cpp ]
+
+ # should compile
+ [ compile test_traits_pass.cpp ]
+ [ compile test_const_pass.cpp ]
+ ;
+}
--- /dev/null
+#ifndef BOOST_SERIALIZATION_TEST_BASE_HPP
+#define BOOST_SERIALIZATION_TEST_BASE_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
+// base.hpp simple class test
+
+// (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 <boost/serialization/access.hpp>
+#include <boost/serialization/assume_abstract.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+
+#include "test_decl.hpp"
+
+#if defined(BASE_IMPORT)
+ #define DLL_DECL IMPORT_DECL
+#elif defined(BASE_EXPORT)
+ #define DLL_DECL EXPORT_DECL
+#else
+ #define DLL_DECL(x)
+#endif
+
+class DLL_DECL(BOOST_PP_EMPTY()) base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & /* ar */, const unsigned int /* file_version */);
+public:
+ virtual ~base(){};
+};
+
+BOOST_SERIALIZATION_ASSUME_ABSTRACT(base)
+
+#undef DLL_DECL
+
+#endif // BOOST_SERIALIZATION_TEST_BASE_HPP
--- /dev/null
+// (C) Copyright 2002-4 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.
+// (C) Copyright 2002-4 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.
+
+// binary_archive
+#include <boost/archive/binary_oarchive.hpp>
+typedef boost::archive::binary_oarchive test_oarchive;
+typedef std::ofstream test_ostream;
+
+#include <boost/archive/binary_iarchive.hpp>
+typedef boost::archive::binary_iarchive test_iarchive;
+typedef std::ifstream test_istream;
+
+//#define TEST_STREAM_FLAGS (std::ios::binary | std::ios::in | std::ios::out)
+#define TEST_STREAM_FLAGS (std::ios::binary)
--- /dev/null
+// (C) Copyright 2002-4 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.
+// binary_warchive
+#include <boost/archive/binary_woarchive.hpp>
+typedef boost::archive::binary_woarchive test_oarchive;
+typedef std::wofstream test_ostream;
+#include <boost/archive/binary_wiarchive.hpp>
+typedef boost::archive::binary_wiarchive test_iarchive;
+typedef std::wifstream test_istream;
+#define TEST_STREAM_FLAGS std::wios::binary
--- /dev/null
+#ifndef BOOST_SERIALIZATION_TEST_DERIVED2_HPP
+#define BOOST_SERIALIZATION_TEST_DERIVED2_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
+// derived2.hpp simple class test
+
+// (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 <boost/serialization/export.hpp>
+#include <boost/serialization/access.hpp>
+
+#define BASE_IMPORT
+#include "base.hpp"
+
+#include "test_decl.hpp"
+
+#if defined(DERIVED2_IMPORT)
+ #define DLL_DECL IMPORT_DECL
+#elif defined(DERIVED2_EXPORT)
+ #define DLL_DECL EXPORT_DECL
+#else
+ #define DLL_DECL(x)
+#endif
+
+class DLL_DECL(BOOST_PP_EMPTY()) derived2 :
+ public base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */);
+public:
+ ~derived2(){}
+};
+
+#undef DLL_DECL
+
+// MWerks users can do this to make their code work
+BOOST_SERIALIZATION_MWERKS_BASE_AND_DERIVED(base, derived2)
+
+#endif // BOOST_SERIALIZATION_TEST_DERIVED2_HPP
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// dll_a.cpp
+
+// (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)
+
+// Build a dll which contains the serialization for a class A
+// used in testing distribution of serialization code in DLLS
+
+#define A_EXPORT
+#include "A.hpp"
+#include "A.ipp"
+#include "A.cpp"
+
+// instantiate code for text archives
+
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
+
+template
+EXPORT_DECL(void) A::serialize(
+ boost::archive::text_oarchive &ar,
+ const unsigned int /* file_version */
+);
+template
+EXPORT_DECL(void) A::serialize(
+ boost::archive::text_iarchive &ar,
+ const unsigned int /* file_version */
+);
+
+// instantiate code for polymorphic archives
+
+#include <boost/archive/polymorphic_oarchive.hpp>
+#include <boost/archive/polymorphic_iarchive.hpp>
+
+template
+EXPORT_DECL(void) A::serialize(
+ boost::archive::polymorphic_oarchive &ar,
+ const unsigned int /* file_version */
+);
+template
+EXPORT_DECL(void) A::serialize(
+ boost::archive::polymorphic_iarchive &ar,
+ const unsigned int /* file_version */
+);
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// dll_base.cpp
+
+// (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)
+
+// Build a dll which contains the serialization for a class A
+// used in testing distribution of serialization code in DLLS
+#include <boost/serialization/export.hpp>
+
+#define BASE_EXPORT
+#include "base.hpp"
+
+template<class Archive>
+void base::serialize(
+ Archive &ar,
+ const unsigned int /* file_version */){
+}
+
+// for some reason this is required at least by MSVC
+// given that its declared virtual .. = 0; This
+// seems wrong to me but here it is.
+//polymorphic_base::~polymorphic_base(){}
+
+// instantiate code for text archives
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
+
+// instantiate code for polymorphic archives
+#include <boost/archive/polymorphic_oarchive.hpp>
+#include <boost/archive/polymorphic_iarchive.hpp>
+
+// note: BOOST_CLASS_EXPORT cannot be used to instantiate
+// serialization code for an abstract base class. So use
+// explicit instantiation in this case.
+//BOOST_CLASS_EXPORT(polymorphic_base)
+
+template EXPORT_DECL(void) base::serialize(
+ boost::archive::text_oarchive & ar,
+ const unsigned int version
+);
+template EXPORT_DECL(void) base::serialize(
+ boost::archive::text_iarchive & ar,
+ const unsigned int version
+);
+template EXPORT_DECL(void) base::serialize(
+ boost::archive::polymorphic_oarchive & ar,
+ const unsigned int version
+);
+template EXPORT_DECL(void) base::serialize(
+ boost::archive::polymorphic_iarchive & ar,
+ const unsigned int version
+);
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// dll_derived2.cpp
+
+// (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)
+
+// Build a dll which contains the serialization for a class A
+// used in testing distribution of serialization code in DLLS
+
+#include <boost/serialization/nvp.hpp>
+
+#define DERIVED2_EXPORT
+#include "derived2.hpp"
+
+template<class Archive>
+void derived2::serialize(
+ Archive &ar,
+ const unsigned int /* file_version */
+){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(base);
+}
+
+// instantiate code for text archives
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
+
+template EXPORT_DECL(void) derived2::serialize(
+ boost::archive::text_oarchive & ar,
+ const unsigned int version
+);
+template EXPORT_DECL(void) derived2::serialize(
+ boost::archive::text_iarchive & ar,
+ const unsigned int version
+);
+
+#include <boost/archive/polymorphic_oarchive.hpp>
+#include <boost/archive/polymorphic_iarchive.hpp>
+
+template EXPORT_DECL(void) derived2::serialize(
+ boost::archive::polymorphic_oarchive & ar,
+ const unsigned int version
+);
+template EXPORT_DECL(void) derived2::serialize(
+ boost::archive::polymorphic_iarchive & ar,
+ const unsigned int version
+);
+
+// note: export has to be AFTER #includes for all archive classes
+
+#include <boost/serialization/factory.hpp>
+BOOST_SERIALIZATION_FACTORY_0(derived2)
+BOOST_CLASS_EXPORT(derived2)
--- /dev/null
+// (C) Copyright 2002-4 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 <boost/archive/polymorphic_binary_oarchive.hpp>
+typedef boost::archive::polymorphic_binary_oarchive test_oarchive;
+typedef std::ofstream test_ostream;
+#include <boost/archive/polymorphic_binary_iarchive.hpp>
+typedef boost::archive::polymorphic_binary_iarchive test_iarchive;
+typedef std::ifstream test_istream;
+#define TEST_STREAM_FLAGS std::ios::binary
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_base.cpp
+
+// (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 <boost/serialization/export.hpp>
+#include "polymorphic_base.hpp"
+
+BOOST_CLASS_EXPORT_IMPLEMENT(polymorphic_base)
+
+const char * polymorphic_base::get_key() const{
+ return
+ boost::serialization::type_info_implementation<
+ polymorphic_base
+ >::type::get_const_instance().get_key();
+}
--- /dev/null
+#ifndef POLYMORPHIC_BASE_HPP
+#define POLYMORPHIC_BASE_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
+// polymorphic_base.hpp simple class test
+
+// (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 <boost/serialization/access.hpp>
+#include <boost/serialization/assume_abstract.hpp>
+#include <boost/serialization/export.hpp>
+#include <boost/serialization/type_info_implementation.hpp>
+#include <boost/serialization/extended_type_info_no_rtti.hpp>
+
+class polymorphic_base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(
+ Archive & /* ar */,
+ const unsigned int /* file_version */
+ ){}
+public:
+ // note that since this class uses the "no_rtti"
+ // extended_type_info implementation, it MUST
+ // implement this function
+ virtual const char * get_key() const = 0;
+ virtual ~polymorphic_base(){};
+};
+
+BOOST_SERIALIZATION_ASSUME_ABSTRACT(polymorphic_base)
+
+// the no_rtti system requires this !!!
+BOOST_CLASS_EXPORT_KEY(polymorphic_base)
+
+BOOST_CLASS_TYPE_INFO(
+ polymorphic_base,
+ boost::serialization::extended_type_info_no_rtti<polymorphic_base>
+)
+
+#endif // POLYMORPHIC_BASE_HPP
--- /dev/null
+// (C) Copyright 2002-4 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 <boost/archive/polymorphic_binary_oarchive.hpp>
+typedef boost::archive::polymorphic_binary_oarchive test_oarchive;
+typedef std::ofstream test_ostream;
+#include <boost/archive/polymorphic_binary_iarchive.hpp>
+typedef boost::archive::polymorphic_binary_iarchive test_iarchive;
+typedef std::ifstream test_istream;
+#define TEST_STREAM_FLAGS std::ios::binary
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_derived1.cpp
+
+// (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 <boost/serialization/type_info_implementation.hpp>
+#include <boost/serialization/export.hpp>
+
+#include "polymorphic_derived1.hpp"
+
+const char * polymorphic_derived1::get_key() const {
+ return
+ boost::serialization::type_info_implementation<
+ polymorphic_derived1
+ >::type::get_const_instance().get_key();
+}
+
+BOOST_CLASS_EXPORT_IMPLEMENT(polymorphic_derived1)
--- /dev/null
+#ifndef POLYMORPHIC_DERIVED1_HPP
+#define POLYMORPHIC_DERIVED1_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
+// polymorphic_derived1.hpp simple class test
+
+// (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 <boost/serialization/access.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/base_object.hpp>
+#include <boost/serialization/type_info_implementation.hpp>
+#include <boost/serialization/extended_type_info_no_rtti.hpp>
+
+#include "polymorphic_base.hpp"
+
+class polymorphic_derived1 : public polymorphic_base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(polymorphic_base);
+ }
+public:
+ virtual const char * get_key() const ;
+};
+
+BOOST_CLASS_EXPORT_KEY(polymorphic_derived1)
+
+BOOST_CLASS_TYPE_INFO(
+ polymorphic_derived1,
+ extended_type_info_no_rtti<polymorphic_derived1>
+)
+
+#endif // POLYMORPHIC_DERIVED1_HPP
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_derived2.cpp
+
+// (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 <boost/serialization/type_info_implementation.hpp>
+#include <boost/serialization/extended_type_info_no_rtti.hpp>
+#include <boost/serialization/export.hpp>
+
+#define POLYMORPHIC_DERIVED2_EXPORT
+#include "polymorphic_derived2.hpp"
+
+template<class Archive>
+void polymorphic_derived2::serialize(
+ Archive &ar,
+ const unsigned int /* file_version */
+){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(polymorphic_base);
+}
+
+// instantiate code for text archives
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
+
+template EXPORT_DECL(void) polymorphic_derived2::serialize(
+ boost::archive::text_oarchive & ar,
+ const unsigned int version
+);
+template EXPORT_DECL(void) polymorphic_derived2::serialize(
+ boost::archive::text_iarchive & ar,
+ const unsigned int version
+);
+
+// instantiate code for polymorphic archives
+#include <boost/archive/polymorphic_iarchive.hpp>
+#include <boost/archive/polymorphic_oarchive.hpp>
+
+template EXPORT_DECL(void) polymorphic_derived2::serialize(
+ boost::archive::polymorphic_oarchive & ar,
+ const unsigned int version
+);
+template EXPORT_DECL(void) polymorphic_derived2::serialize(
+ boost::archive::polymorphic_iarchive & ar,
+ const unsigned int version
+);
+
+// MWerks users can do this to make their code work
+BOOST_SERIALIZATION_MWERKS_BASE_AND_DERIVED(polymorphic_base, polymorphic_derived2)
+
+// note: export has to be AFTER #includes for all archive classes
+BOOST_CLASS_EXPORT_IMPLEMENT(polymorphic_derived2)
+
+#if 0
+#include <boost/serialization/factory.hpp>
+BOOST_SERIALIZATION_FACTORY_0(polymorphic_derived2)
+
+template
+EXPORT_DECL(polymorphic_derived2 *)
+boost::serialization::factory<polymorphic_derived2, 0>(std::va_list ap);
+#endif
--- /dev/null
+#ifndef POLYMORPHIC_DERIVED2_HPP
+#define POLYMORPHIC_DERIVED2_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
+// polymorphic_derived2.hpp simple class test
+
+// (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 <boost/serialization/access.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/base_object.hpp>
+#include <boost/serialization/type_info_implementation.hpp>
+#include <boost/serialization/extended_type_info_typeid.hpp>
+
+#include <boost/preprocessor/empty.hpp>
+
+#include "polymorphic_base.hpp"
+
+#include "test_decl.hpp"
+
+#if defined(POLYMORPHIC_DERIVED2_IMPORT)
+ #define DLL_DECL IMPORT_DECL
+#elif defined(POLYMORPHIC_DERIVED2_EXPORT)
+ #define DLL_DECL EXPORT_DECL
+#else
+ #define DLL_DECL(x)
+#endif
+
+class DLL_DECL(BOOST_PP_EMPTY()) polymorphic_derived2 :
+ public polymorphic_base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(
+ Archive &ar,
+ const unsigned int /* file_version */
+ );
+ virtual const char * get_key() const {
+ return "polymorphic_derived2";
+ }
+};
+
+// we use this because we want to assign a key to this type
+// but we don't want to explicitly instantiate code every time
+// we do so!!!. If we don't do this, we end up with the same
+// code in BOTH the DLL which implements polymorphic_derived2
+// as well as the main program.
+BOOST_CLASS_EXPORT_KEY(polymorphic_derived2)
+
+// note the mixing of type_info systems is supported.
+BOOST_CLASS_TYPE_INFO(
+ polymorphic_derived2,
+ boost::serialization::extended_type_info_typeid<polymorphic_derived2>
+)
+
+#undef DLL_DECL
+
+#endif // POLYMORPHIC_DERIVED2_HPP
+
--- /dev/null
+// (C) Copyright 2002-4 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 <boost/archive/polymorphic_text_oarchive.hpp>
+typedef boost::archive::polymorphic_text_oarchive test_oarchive;
+typedef std::ofstream test_ostream;
+#include <boost/archive/polymorphic_text_iarchive.hpp>
+typedef boost::archive::polymorphic_text_iarchive test_iarchive;
+typedef std::ifstream test_istream;
--- /dev/null
+// (C) Copyright 2002-4 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 <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+#include <boost/archive/polymorphic_text_woarchive.hpp>
+typedef boost::archive::polymorphic_text_woarchive test_oarchive;
+typedef std::wofstream test_ostream;
+#include <boost/archive/polymorphic_text_wiarchive.hpp>
+typedef boost::archive::polymorphic_text_wiarchive test_iarchive;
+typedef std::wifstream test_istream;
+#endif
--- /dev/null
+// (C) Copyright 2002-4 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 <boost/archive/polymorphic_xml_oarchive.hpp>
+typedef boost::archive::polymorphic_xml_oarchive test_oarchive;
+typedef std::ofstream test_ostream;
+#include <boost/archive/polymorphic_xml_iarchive.hpp>
+typedef boost::archive::polymorphic_xml_iarchive test_iarchive;
+typedef std::ifstream test_istream;
--- /dev/null
+// (C) Copyright 2002-4 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 <boost/archive/polymorphic_xml_woarchive.hpp>
+typedef boost::archive::polymorphic_xml_woarchive test_oarchive;
+typedef std::wofstream test_ostream;
+#include <boost/archive/polymorphic_xml_wiarchive.hpp>
+typedef boost::archive::polymorphic_xml_wiarchive test_iarchive;
+typedef std::wifstream test_istream;
--- /dev/null
+// (C) Copyright 2002-4 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.
+// file includes for testing a custom archive.
+// as an example this tests the portable binary archive
+
+#include <fstream>
+
+// #include output archive header
+#include "../example/portable_binary_oarchive.hpp"
+// define output archive class to be used
+typedef portable_binary_oarchive test_oarchive;
+// and corresponding stream
+typedef std::ofstream test_ostream;
+
+// repeat the above for correspondng input archive
+#include "../example/portable_binary_iarchive.hpp"
+typedef portable_binary_iarchive test_iarchive;
+typedef std::ifstream test_istream;
+
+// since this archive class isn't compiled into the
+// boost serialization library, include this here
+// so that things get instantiated
+#include "../example/portable_binary_oarchive.cpp"
+#include "../example/portable_binary_iarchive.cpp"
+
+// and stream open flags
+#define TEST_STREAM_FLAGS std::ios::binary
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_array.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef>
+#include <fstream>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/archive/archive_exception.hpp>
+#include <boost/array.hpp>
+
+#include "A.hpp"
+#include "A.ipp"
+
+struct array_equal_to //: public std::binary_function<T, T, bool>
+{
+template<class T, class U>
+ bool operator()(const T & _Left, const U & _Right) const
+ {
+ // consider alignment
+ int count_left = sizeof(_Left) / (
+ static_cast<const char *>(static_cast<const void *>(&_Left[1]))
+ - static_cast<const char *>(static_cast<const void *>(&_Left[0]))
+ );
+ int count_right = sizeof(_Right) / (
+ static_cast<const char *>(static_cast<const void *>(&_Right[1]))
+ - static_cast<const char *>(static_cast<const void *>(&_Right[0]))
+ );
+ if(count_right != count_left)
+ return false;
+ while(count_left-- > 0){
+ if(_Left[count_left] == _Right[count_left])
+ continue;
+ return false;
+ }
+ return true;
+ }
+};
+
+template <class T>
+int test_array(T)
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ // test array of objects
+ const T a_array[10]={T(),T(),T(),T(),T(),T(),T(),T(),T(),T()};
+ const T b_array[2][3]={{T(),T(),T()},{T(),T(),T()}};
+ const boost::array<T,10> c_array = boost::array<T,10>();
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("a_array", a_array);
+ oa << boost::serialization::make_nvp("b_array", b_array);
+ oa << boost::serialization::make_nvp("c_array", c_array);
+ }
+ {
+ T a_array1[10];
+ T b_array1[2][3];
+ boost::array<T,10> c_array1;
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("a_array", a_array1);
+ ia >> boost::serialization::make_nvp("b_array", b_array1);
+ ia >> boost::serialization::make_nvp("c_array", c_array1);
+
+ array_equal_to/*<A[10]>*/ Compare;
+ BOOST_CHECK(Compare(a_array, a_array1));
+ BOOST_CHECK(Compare(b_array[0], b_array1[0]));
+ BOOST_CHECK(Compare(b_array[1], b_array1[1]));
+ BOOST_CHECK(Compare(c_array, c_array1));
+ }
+ {
+ T a_array1[9];
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ BOOST_TRY {
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ bool exception_invoked = false;
+ BOOST_TRY {
+ ia >> boost::serialization::make_nvp("a_array", a_array1);
+ }
+ BOOST_CATCH (boost::archive::archive_exception ae){
+ BOOST_CHECK(
+ boost::archive::archive_exception::array_size_too_short
+ == ae.code
+ );
+ exception_invoked = true;
+ }
+ BOOST_CATCH_END
+ BOOST_CHECK(exception_invoked);
+ }
+ BOOST_CATCH (boost::archive::archive_exception ae){}
+ BOOST_CATCH_END
+ }
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ int res = test_array(A());
+ // test an int array for which optimized versions should be available
+ if (res == EXIT_SUCCESS)
+ res = test_array(0);
+ return res;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_simple_class.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstdlib> // for rand(), NULL, size_t
+
+#include <fstream>
+#include <boost/config.hpp>
+
+#include <cstdio> // remove
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::rand;
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/binary_object.hpp>
+
+class A {
+ friend class boost::serialization::access;
+ char data[150];
+ // note: from an aesthetic perspective, I would much prefer to have this
+ // defined out of line. Unfortunately, this trips a bug in the VC 6.0
+ // compiler. So hold our nose and put it her to permit running of tests.
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* file_version */){
+ ar & boost::serialization::make_nvp(
+ "data",
+ boost::serialization::make_binary_object(data, sizeof(data))
+ );
+ }
+
+public:
+ A();
+ bool operator==(const A & rhs) const;
+};
+
+A::A(){
+ int i = sizeof(data);
+ while(i-- > 0)
+ data[i] = static_cast<char>(0xff & std::rand());
+}
+
+bool A::operator==(const A & rhs) const {
+ int i = sizeof(data);
+ while(i-- > 0)
+ if(data[i] != rhs.data[i])
+ return false;
+ return true;
+}
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ const A a;
+ char s1[] = "a";
+ char s2[] = "ab";
+ char s3[] = "abc";
+ char s4[] = "abcd";
+ const int i = 12345;
+ A a1;
+ char s1_1[10];
+ char s1_2[10];
+ char s1_3[10];
+ char s1_4[10];
+ int i1 = 34790;
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ boost::serialization::make_nvp(
+ "s1",
+ boost::serialization::make_binary_object(
+ s1,
+ sizeof(s1)
+ )
+ );
+ oa << boost::serialization::make_nvp(
+ "s2",
+ boost::serialization::make_binary_object(
+ s2,
+ sizeof(s2)
+ )
+ );
+ oa << boost::serialization::make_nvp(
+ "s3",
+ boost::serialization::make_binary_object(
+ s3,
+ sizeof(s3)
+ )
+ );
+ oa << boost::serialization::make_nvp(
+ "s4",
+ boost::serialization::make_binary_object(
+ s4,
+ sizeof(s4)
+ )
+ );
+ oa << BOOST_SERIALIZATION_NVP(a);
+ // note: add a little bit on the end of the archive to detect
+ // failure of text mode binary.
+ oa << BOOST_SERIALIZATION_NVP(i);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ boost::serialization::make_nvp(
+ "s1",
+ boost::serialization::make_binary_object(
+ s1_1,
+ sizeof(s1)
+ )
+ );
+ ia >> boost::serialization::make_nvp(
+ "s2",
+ boost::serialization::make_binary_object(
+ s1_2,
+ sizeof(s2)
+ )
+ );
+ ia >> boost::serialization::make_nvp(
+ "s3",
+ boost::serialization::make_binary_object(
+ s1_3,
+ sizeof(s3)
+ )
+ );
+ ia >> boost::serialization::make_nvp(
+ "s4",
+ boost::serialization::make_binary_object(
+ s1_4,
+ sizeof(s4)
+ )
+ );
+ ia >> BOOST_SERIALIZATION_NVP(a1);
+ // note: add a little bit on the end of the archive to detect
+ // failure of text mode binary.
+ ia >> BOOST_SERIALIZATION_NVP(i1);
+ }
+ BOOST_CHECK(i == i1);
+ BOOST_CHECK(a == a1);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+// (C) Copyright 2009 Brian Ravnsgaard and Kenneth Riddile
+// Use, modification and distribution are 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 most recent version including documentation.
+
+// Test that serialization of std::bitset works.
+// Should pass compilation and execution
+// 16.09.2004, updated 04.03.2009
+
+#include <cstddef> // NULL
+#include <cstdio> // remove
+#include <fstream>
+
+#include <boost/config.hpp>
+
+#if defined( BOOST_NO_STDC_NAMESPACE )
+namespace std
+{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include <boost/serialization/bitset.hpp>
+#include <boost/serialization/nvp.hpp>
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ const char* testfile = boost::archive::tmpnam( NULL );
+ BOOST_REQUIRE( NULL != testfile );
+
+ std::bitset<8> bitsetA;
+ bitsetA.set( 0, false );
+ bitsetA.set( 1, true );
+ bitsetA.set( 2, false );
+ bitsetA.set( 3, true );
+ bitsetA.set( 4, false );
+ bitsetA.set( 5, false );
+ bitsetA.set( 6, true );
+ bitsetA.set( 7, true );
+
+ {
+ test_ostream os( testfile, TEST_STREAM_FLAGS );
+ test_oarchive oa( os );
+ oa << boost::serialization::make_nvp( "bitset", bitsetA );
+ }
+
+ std::bitset<8> bitsetB;
+ {
+ test_istream is( testfile, TEST_STREAM_FLAGS );
+ test_iarchive ia( is );
+ ia >> boost::serialization::make_nvp( "bitset", bitsetB );
+ }
+
+ BOOST_CHECK( bitsetA == bitsetB );
+
+ std::remove( testfile );
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+// (C) Copyright 2009 Robert Ramey
+// Use, modification and distribution are 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 most recent version including documentation.
+
+// note: this is a compile only test.
+#include <sstream>
+#include <boost/config.hpp> // BOOST_STATIC_CONST
+
+#include <boost/serialization/static_warning.hpp>
+#include <boost/serialization/tracking.hpp>
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/version.hpp>
+#include <boost/serialization/nvp.hpp>
+
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/text_oarchive.hpp>
+
+// track_selectivly with class information in the archive
+// is unsafe when used with a pointer and should trigger a warning
+struct check1 {
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int version);
+};
+
+BOOST_CLASS_IMPLEMENTATION(check1, boost::serialization::object_serializable)
+BOOST_CLASS_TRACKING(check1, boost::serialization::track_selectively)
+
+// the combination of versioning + no class information
+// should trigger a warning
+struct check2 {
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int version);
+};
+
+BOOST_CLASS_IMPLEMENTATION(check2, boost::serialization::object_serializable)
+BOOST_CLASS_VERSION(check2, 1)
+// use track always to turn off warning tested above
+BOOST_CLASS_TRACKING(check2, boost::serialization::track_always)
+
+// serializing a type marked as "track_never" through a pointer
+// is likely an error
+struct check3 {
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int version);
+};
+
+BOOST_CLASS_TRACKING(check3, boost::serialization::track_never)
+
+template<class T>
+int f(){
+ BOOST_STATIC_WARNING(T::value);
+ BOOST_STATIC_ASSERT(T::value);
+ return 0;
+}
+
+/////////////////////////////////////////////////////////////////////////
+// compilation of this program should show a total of 10 warning messages
+int main(int /* argc */, char * /* argv */[]){
+ std::stringstream s;
+ {
+ boost::archive::text_oarchive oa(s);
+
+ check1 const c1_out;
+ oa << c1_out;
+
+ check1 c1_non_const_out;
+ oa << c1_non_const_out; // warn check_object_tracking
+
+ check1 * const c1_ptr_out = 0;
+ oa << c1_ptr_out; // warn check_pointer_level
+
+ check2 const * c2_ptr_out;
+ oa << c2_ptr_out; // error check_object_versioning
+
+ check3 * const c3_ptr_out = 0;
+ oa << c3_ptr_out; // warning check_pointer_tracking
+
+ check2 const c2_out;
+ oa << c2_out; // error check_object_versioning
+ }
+ {
+ boost::archive::text_iarchive ia(s);
+
+ check1 const c1_in;
+ ia >> c1_in; // check_const_loading
+
+ check1 * c1_ptr_in = 0;
+ ia >> c1_ptr_in; // warn check_pointer_level
+
+ check2 * c2_ptr_in;
+ ia >> c2_ptr_in; // error check_object_versioning
+
+ check3 * c3_ptr_in = 0;
+ ia >> c3_ptr_in; // warning check_pointer_tracking
+
+ check2 c2_in;
+ ia >> c2_in; // error check_object_versioning
+ }
+ {
+ boost::archive::text_oarchive oa(s);
+
+ check1 const c1_out;
+ oa << BOOST_SERIALIZATION_NVP(c1_out);
+
+ check1 c1_non_const_out;
+ oa << BOOST_SERIALIZATION_NVP(c1_non_const_out); // warn check_object_tracking
+
+ check1 * const c1_ptr_out = 0;
+ oa << BOOST_SERIALIZATION_NVP(c1_ptr_out); // warn check_pointer_level
+
+ check2 const * c2_ptr_out;
+ oa << BOOST_SERIALIZATION_NVP(c2_ptr_out); // error check_object_versioning
+
+ check3 * const c3_ptr_out = 0;
+ oa << BOOST_SERIALIZATION_NVP(c3_ptr_out); // warning check_pointer_tracking
+
+ check2 const c2_out;
+ oa << BOOST_SERIALIZATION_NVP(c2_out); // error check_object_versioning
+ }
+ {
+ boost::archive::text_iarchive ia(s);
+
+ check1 const c1_in;
+ ia >> BOOST_SERIALIZATION_NVP(c1_in); // check_const_loading
+
+ check1 * c1_ptr_in = 0;
+ ia >> BOOST_SERIALIZATION_NVP(c1_ptr_in); // warn check_pointer_level
+
+ check2 * c2_ptr_in;
+ ia >> BOOST_SERIALIZATION_NVP(c2_ptr_in); // error check_object_versioning
+
+ check3 * c3_ptr_in = 0;
+ ia >> BOOST_SERIALIZATION_NVP(c3_ptr_in); // warning check_pointer_tracking
+
+ check2 c2_in;
+ ia >> BOOST_SERIALIZATION_NVP(c2_in); // error check_object_versioning
+ }
+ return 0;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_class_info_load.cpp: test implementation level trait
+
+// (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)
+
+// test implementation level "object_class_info"
+// should pass compilation and execution
+
+#include <string>
+#include <fstream>
+
+#include <boost/archive/tmpdir.hpp>
+#include <boost/preprocessor/stringize.hpp>
+#include "test_tools.hpp"
+
+#include <boost/static_assert.hpp>
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/tracking.hpp>
+#include <boost/serialization/version.hpp>
+#include <boost/serialization/nvp.hpp>
+
+class A
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & /*ar*/, const unsigned int file_version){
+ // class that don't save class info always have a version number of 0
+ BOOST_CHECK(file_version == 0);
+ BOOST_STATIC_ASSERT(0 == ::boost::serialization::version<A>::value);
+ ++count;
+ }
+public:
+ unsigned int count;
+ A() : count(0) {}
+};
+
+BOOST_CLASS_IMPLEMENTATION(A, ::boost::serialization::object_serializable)
+BOOST_CLASS_TRACKING(A, ::boost::serialization::track_never)
+
+// second case : serialize WITH class information
+class B
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & /*ar*/, const unsigned int file_version){
+ // verify at execution that the version number corresponds to the saved
+ // one
+ BOOST_CHECK(file_version == 2);
+ ++count;
+ }
+public:
+ unsigned int count;
+ B() : count(0) {}
+};
+
+BOOST_CLASS_IMPLEMENTATION(B, ::boost::serialization::object_class_info)
+BOOST_CLASS_TRACKING(B, ::boost::serialization::track_never)
+BOOST_CLASS_VERSION(B, 4)
+
+void in(const char *testfile, A & a, B & b)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> BOOST_SERIALIZATION_NVP(a);
+ ia >> BOOST_SERIALIZATION_NVP(a);
+ BOOST_CHECK(a.count == 2); // no tracking => redundant loads
+ ia >> BOOST_SERIALIZATION_NVP(b);
+ ia >> BOOST_SERIALIZATION_NVP(b);
+ // note: archive was saved with tracking so that is what determines
+ // whether tracking is perform on load - regardless of the latest
+ // tracking setting.
+ BOOST_CHECK(b.count == 1);
+}
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ A a;
+ B b;
+ std::string filename;
+ filename += boost::archive::tmpdir();
+ filename += '/';
+ filename += BOOST_PP_STRINGIZE(testfile_);
+ filename += BOOST_PP_STRINGIZE(BOOST_ARCHIVE_TEST);
+ in(filename.c_str(), a, b);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_class_info_save.cpp: test implementation level trait
+
+// (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)
+
+// test implementation level "object_class_info"
+// should pass compilation and execution
+
+#include <fstream>
+#include <string>
+
+#include <boost/static_assert.hpp>
+#include <boost/archive/tmpdir.hpp>
+#include <boost/preprocessor/stringize.hpp>
+#include "test_tools.hpp"
+
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/version.hpp>
+#include <boost/serialization/tracking.hpp>
+#include <boost/serialization/nvp.hpp>
+
+// first case : serialize WITHOUT class information
+class A
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & /*ar*/, const unsigned int file_version){
+ // class that don't save class info always have a version number of 0
+ BOOST_CHECK(file_version == 0);
+ BOOST_STATIC_ASSERT(0 == ::boost::serialization::version<A>::value);
+ ++count;
+ }
+public:
+ unsigned int count;
+ A() : count(0) {}
+};
+
+BOOST_CLASS_IMPLEMENTATION(A, ::boost::serialization::object_serializable)
+BOOST_CLASS_TRACKING(A, ::boost::serialization::track_never)
+
+// second case : serialize WITH class information
+// note: GCC compile fails if this is after the class declaration
+class B;
+BOOST_CLASS_VERSION(B, 2)
+
+class B
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & /*ar*/, const unsigned int file_version){
+ // verify at execution that correct version number is passed on save
+ BOOST_CHECK(file_version == ::boost::serialization::version<B>::value);
+ ++count;
+ }
+public:
+ unsigned int count;
+ B() : count(0) {}
+};
+
+BOOST_CLASS_IMPLEMENTATION(B, ::boost::serialization::object_class_info)
+BOOST_CLASS_TRACKING(B, boost::serialization::track_always)
+
+#include <iostream>
+
+void out(const char *testfile, const A & a, const B & b)
+{
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ // write object twice to check tracking
+ oa << BOOST_SERIALIZATION_NVP(a);
+ oa << BOOST_SERIALIZATION_NVP(a);
+ BOOST_CHECK(a.count == 2); // no tracking => redundant saves
+ std::cout << "a.count=" << a.count << '\n' ;
+ oa << BOOST_SERIALIZATION_NVP(b);
+ oa << BOOST_SERIALIZATION_NVP(b);
+ BOOST_CHECK(b.count == 1); // tracking => no redundant saves
+ std::cout << "b.count=" << b.count << '\n' ;
+}
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ A a;
+ B b;
+ std::string filename;
+ filename += boost::archive::tmpdir();
+ filename += '/';
+ filename += BOOST_PP_STRINGIZE(testfile_);
+ filename += BOOST_PP_STRINGIZE(BOOST_ARCHIVE_TEST);
+ out(filename.c_str(), a, b);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_codecvt_null.cpp
+
+// (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)
+
+// should pass compilation and execution. Note: compilation with compilers
+// which use wchar_t as 2 byte objects will emit warnings. These should be
+// ignored.
+
+#include <algorithm>
+#include <fstream>
+#include <iostream>
+#include <iterator>
+#include <locale>
+#include <vector>
+#include <cstdio> // remove
+#include <cstddef> // NULL, size_t
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include <boost/archive/add_facet.hpp>
+#include <boost/archive/codecvt_null.hpp>
+#include <boost/archive/iterators/ostream_iterator.hpp>
+#include <boost/archive/iterators/istream_iterator.hpp>
+
+template<std::size_t S>
+struct test_data
+{
+ static wchar_t wchar_encoding[];
+};
+
+template<>
+wchar_t test_data<2>::wchar_encoding[] = {
+ 0x0001,
+ 0x007f,
+ 0x0080,
+ 0x07ff,
+ 0x0800,
+ 0x7fff
+};
+
+template<>
+wchar_t test_data<4>::wchar_encoding[] = {
+ 0x00000001,
+ 0x0000007f,
+ 0x00000080,
+ 0x000007ff,
+ 0x00000800,
+ 0x0000ffff,
+ 0x00010000,
+ 0x0010ffff,
+ 0x001fffff,
+ 0x00200000,
+ 0x03ffffff,
+ 0x04000000,
+ 0x7fffffff
+};
+
+#include <iostream>
+
+int test_main( int /* argc */, char* /* argv */[] ) {
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ std::locale old_loc;
+ std::locale * null_locale =
+ boost::archive::add_facet(old_loc, new boost::archive::codecvt_null<wchar_t>);
+
+ typedef test_data<sizeof(wchar_t)> td;
+ {
+ std::wofstream ofs;
+ ofs.imbue(*null_locale);
+ ofs.open(testfile, std::ios::binary);
+ std::copy(
+ td::wchar_encoding,
+ #if ! defined(__BORLANDC__)
+ // borland 5.60 complains about this
+ td::wchar_encoding + sizeof(td::wchar_encoding)/sizeof(wchar_t),
+ #else
+ // so use this instead
+ td::wchar_encoding + 6,
+ #endif
+ boost::archive::iterators::ostream_iterator<wchar_t>(ofs)
+ );
+ }
+ bool ok = false;
+ {
+ std::wifstream ifs;
+ ifs.imbue(*null_locale);
+ ifs.open(testfile, std::ios::binary);
+ ok = std::equal(
+ td::wchar_encoding,
+ #if ! defined(__BORLANDC__)
+ // borland 5.60 complains about this
+ td::wchar_encoding + sizeof(td::wchar_encoding)/sizeof(wchar_t),
+ #else
+ // so use this instead
+ td::wchar_encoding + 6,
+ #endif
+ boost::archive::iterators::istream_iterator<wchar_t>(ifs)
+ );
+ }
+
+ BOOST_CHECK(ok);
+ {
+ std::wofstream ofs("testfile2");
+ ofs.imbue(*null_locale);
+ int i = 10;
+ ofs << i;
+ ofs.close();
+
+ std::wifstream ifs("testfile2");
+ ifs.imbue(*null_locale);
+ int i2;
+ ifs >> i2;
+ std::cout << "i=" << i << std::endl;
+ std::cout << "i2=" << i2 << std::endl;
+ BOOST_CHECK(i == i2);
+ ifs.close();
+ }
+
+ delete null_locale;
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_complex.cpp
+
+// (C) Copyright 2005 Matthias Troyer .
+// 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)
+
+// should pass compilation and execution
+
+#include <fstream>
+
+#include <cstddef> // NULL
+#include <cstdlib> // rand
+#include <limits>
+#include <boost/config.hpp>
+
+#include <cstdio> // remove
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+#ifndef UNDER_CE
+ using ::numeric_limits;
+#endif
+}
+#endif
+
+#include "test_tools.hpp"
+#include <boost/preprocessor/stringize.hpp>
+#include BOOST_PP_STRINGIZE(BOOST_ARCHIVE_TEST)
+
+#include <boost/serialization/complex.hpp>
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ // test array of objects
+ std::complex<float> a(
+ static_cast<float>(std::rand()),
+ static_cast<float>(std::rand())
+ );
+ std::complex<double> b(
+ static_cast<double>(std::rand()),
+ static_cast<double>(std::rand())
+ );
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os);
+ oa << boost::serialization::make_nvp("afloatcomplex", a);
+ oa << boost::serialization::make_nvp("adoublecomplex", b);
+ }
+ std::complex<float> a1;
+ std::complex<double> b1;
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is);
+ ia >> boost::serialization::make_nvp("afloatcomplex", a1);
+ ia >> boost::serialization::make_nvp("adoublecomplex", b1);
+ }
+
+ BOOST_CHECK(std::abs(a-a1) <= 2.*std::numeric_limits<float>::round_error());
+ BOOST_CHECK(std::abs(b-b1) <= 2.*std::numeric_limits<double>::round_error());
+
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_const.cpp
+
+// (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)
+
+// compile only
+
+#include <boost/archive/text_iarchive.hpp>
+
+using namespace boost::archive;
+
+struct A {
+ template<class Archive>
+ void serialize(Archive & ar, unsigned int version) {
+ }
+};
+
+void f1(text_iarchive & ia, const A & a){
+ ia >> a;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_const.cpp
+
+// (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)
+
+// compile only
+
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/serialization/nvp.hpp>
+
+using namespace boost::archive;
+
+struct A {
+ template<class Archive>
+ void serialize(Archive & ar, unsigned int version) {
+ }
+};
+
+void f1(text_iarchive & ia, const A & a){
+ ia >> BOOST_SERIALIZATION_NVP(a);
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_const.cpp
+
+// (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)
+
+// compile only
+
+#include <boost/archive/text_iarchive.hpp>
+
+using namespace boost::archive;
+
+struct A {
+ template<class Archive>
+ void serialize(Archive & ar, unsigned int version) {
+ }
+};
+
+void f2(text_iarchive & ia, A * const & a){
+ ia >> a;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_const.cpp
+
+// (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)
+
+// compile only
+
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/serialization/nvp.hpp>
+
+using namespace boost::archive;
+
+struct A {
+ template<class Archive>
+ void serialize(Archive & ar, unsigned int version) {
+ }
+};
+
+void f2(text_iarchive & ia, A * const & a){
+ ia >> BOOST_SERIALIZATION_NVP(a);
+}
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_const.cpp
+
+// (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)
+
+// compile only
+
+#include <boost/archive/text_iarchive.hpp>
+using namespace boost::archive;
+
+struct A {
+ template<class Archive>
+ void serialize(Archive & ar, unsigned int version) {
+ }
+};
+
+void f2(text_iarchive & ia, const A * const & a){
+ ia >> a;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_const.cpp
+
+// (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)
+
+// compile only
+
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/serialization/nvp.hpp>
+
+using namespace boost::archive;
+
+struct A {
+ template<class Archive>
+ void serialize(Archive & ar, unsigned int version) {
+ }
+};
+
+void f2(text_iarchive & ia, const A * const & a){
+ ia >> BOOST_SERIALIZATION_NVP(a);
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_const.cpp
+
+// (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)
+
+// compile only
+
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/serialization/nvp.hpp>
+
+struct A {
+ template<class Archive>
+ void serialize(Archive & ar, unsigned int version) {
+ }
+};
+
+// should compile w/o problem
+void f1(boost::archive::text_oarchive & oa, const A & a){
+ oa & a;
+ oa & BOOST_SERIALIZATION_NVP(a);
+ oa << a;
+ oa << BOOST_SERIALIZATION_NVP(a);
+}
+void f2(boost::archive::text_oarchive & oa, const A * const & a){
+ oa & a;
+ oa & BOOST_SERIALIZATION_NVP(a);
+ oa << a;
+ oa << BOOST_SERIALIZATION_NVP(a);
+}
+void f3(boost::archive::text_iarchive & ia, A & a){
+ ia & a;
+ ia & BOOST_SERIALIZATION_NVP(a);
+ ia >> a;
+ ia >> BOOST_SERIALIZATION_NVP(a);
+}
+void f4(boost::archive::text_iarchive & ia, A * & a){
+ ia & a;
+ ia & BOOST_SERIALIZATION_NVP(a);
+ ia >> a;
+ ia >> BOOST_SERIALIZATION_NVP(a);
+}
+#if 0
+void f5(boost::archive::text_oarchive & oa, const A * & a){
+ oa & a;
+ oa & BOOST_SERIALIZATION_NVP(a);
+ oa << a;
+ oa << BOOST_SERIALIZATION_NVP(a);
+}
+#endif
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_const.cpp
+
+// (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)
+
+// compile only
+
+#include <boost/archive/text_oarchive.hpp>
+
+using namespace boost::archive;
+
+struct A {
+ template<class Archive>
+ void serialize(Archive & ar, unsigned int version) {
+ }
+};
+
+// should fail to compile
+void f1(text_oarchive & oa, A & a){
+ oa << a;
+}
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_const.cpp
+
+// (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)
+
+// compile only
+
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/tracking.hpp>
+
+using namespace boost::archive;
+
+struct A {
+ template<class Archive>
+ void serialize(Archive & ar, unsigned int version) {
+ }
+};
+
+void f1(text_oarchive & oa, A & a){
+ oa << BOOST_SERIALIZATION_NVP(a);
+}
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_const.cpp
+
+// (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)
+
+// compile only
+
+#include <boost/archive/text_oarchive.hpp>
+
+using namespace boost::archive;
+
+struct A {
+ template<class Archive>
+ void serialize(Archive & ar, unsigned int version) {
+ }
+};
+
+void f2(text_oarchive & oa, A * & a){
+ oa << a;
+}
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_const.cpp
+
+// (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)
+
+// compile only
+
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/serialization/nvp.hpp>
+
+using namespace boost::archive;
+
+struct A {
+ template<class Archive>
+ void serialize(Archive & ar, unsigned int version) {
+ }
+};
+
+void f2(text_oarchive & oa, A * & a){
+ oa << BOOST_SERIALIZATION_NVP(a);
+}
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_const.cpp
+
+// (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)
+
+// compile only
+
+#include <boost/archive/text_oarchive.hpp>
+
+using namespace boost::archive;
+
+struct A {
+ template<class Archive>
+ void serialize(Archive & ar, unsigned int version) {
+ }
+};
+
+void f3(text_oarchive & oa, const A * & a){
+ oa << a;
+}
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_const.cpp
+
+// (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)
+
+// compile only
+
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/serialization/nvp.hpp>
+
+using namespace boost::archive;
+
+struct A {
+ template<class Archive>
+ void serialize(Archive & ar, unsigned int version) {
+ }
+};
+
+void f3(text_oarchive & oa, const A * & a){
+ oa << BOOST_SERIALIZATION_NVP(a);
+}
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_const.cpp
+
+// (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)
+
+// compile only
+
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/serialization/nvp.hpp>
+
+using namespace boost::archive;
+
+struct A {
+ template<class Archive>
+ void serialize(Archive & ar, unsigned int version) {
+ }
+};
+
+// comment out this test case as a reminder not to keep inserting it !!!
+// we don't trap this as an error in order to permit things like
+// X * xptr;
+// save(..){
+// ar << xptr;
+// }
+//
+// for rational - consider the following example from demo.cpp
+// std::list<pair<trip_info, bus_route_info *> > schedule
+// its not obvious to me how this can be cast to:
+// std::list<pair<trip_info, const bus_route_info * const> > schedule
+
+void f4(text_oarchive & oa, A * const & a){
+ oa << a;
+}
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_const.cpp
+
+// (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)
+
+// compile only
+
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/serialization/nvp.hpp>
+
+using namespace boost::archive;
+
+struct A {
+ template<class Archive>
+ void serialize(Archive & ar, unsigned int version) {
+ }
+};
+
+// comment out this test case as a reminder not to keep inserting it !!!
+// we don't trap this as an error in order to permit things like
+// X * xptr;
+// save(..){
+// ar << xptr;
+// }
+//
+// for rational - consider the following example from demo.cpp
+//
+// std::list<pair<trip_info, bus_route_info *> > schedule
+//
+// its not obvious to me how this can be cast to:
+//
+// std::list<pair<trip_info, const bus_route_info * const> > schedule
+
+void f4(text_oarchive & oa, A * const & a){
+ oa << BOOST_SERIALIZATION_NVP(a);
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_contained_class.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef>
+#include <fstream>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+#include <boost/serialization/nvp.hpp>
+
+#include "B.hpp"
+#include "A.ipp"
+
+///////////////////////////////////////////////////////
+// Contained class
+class C
+{
+private:
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_NVP(b);
+ }
+ B b;
+public:
+ bool operator==(const C &rhs) const
+ {
+ return b == rhs.b;
+ }
+ C(){}
+};
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ const C c;
+ C c1;
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("c", c);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("c", c1);
+ }
+ BOOST_CHECK(c == c1);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_cyclic_ptrs.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef> // NULL
+#include <fstream>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+
+#include "test_tools.hpp"
+#include <boost/detail/no_exceptions_support.hpp>
+
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/version.hpp>
+#include <boost/serialization/base_object.hpp>
+
+#include "A.hpp"
+#include "A.ipp"
+
+///////////////////////////////////////////////////////
+// class with a member which refers to itself
+class J : public A
+{
+private:
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(A);
+ ar & BOOST_SERIALIZATION_NVP(j);
+ }
+public:
+ bool operator==(const J &rhs) const;
+ J *j;
+ J(J *_j) : j(_j) {}
+ J() : j(NULL){}
+};
+
+BOOST_CLASS_VERSION(J, 6)
+
+bool J::operator==(const J &rhs) const
+{
+ return static_cast<const A &>(*this) == static_cast<const A &>(rhs);
+}
+
+///////////////////////////////////////////////////////
+// class with members that refer to each other
+// this is an example of a class that, as written, cannot
+// be serialized with this system. The problem is that the
+// serialization of the first member - j1 , provokes serialization
+// of those objects which it points to either directly or indirectly.
+// When those objects are subsequently serialized, it is discovered
+// that have already been serialized through pointers. This is
+// detected by the system and an exception - pointer_conflict -
+// is thrown. Permiting this to go undetected would result in the
+// creation of multiple equal objects rather than the original
+// structure.
+class K
+{
+ J j1;
+ J j2;
+ J j3;
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(
+ Archive &ar,
+ const unsigned int /* file_version */
+ ){
+ ar & BOOST_SERIALIZATION_NVP(j1);
+ ar & BOOST_SERIALIZATION_NVP(j2);
+ ar & BOOST_SERIALIZATION_NVP(j3);
+ }
+public:
+ bool operator==(const K &rhs) const;
+ K();
+};
+
+K::K()
+: j1(&j2), j2(&j3), j3(&j1)
+{
+}
+
+bool K::operator==(const K &rhs) const
+{
+ return
+ j1.j == & j2
+ && j2.j == & j3
+ && j3.j == & j1
+ && j1 == rhs.j1
+ && j2 == rhs.j2
+ && j3 == rhs.j3
+ ;
+}
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ K k;
+ boost::archive::archive_exception exception(
+ boost::archive::archive_exception::no_exception
+ );
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ BOOST_TRY {
+ oa << BOOST_SERIALIZATION_NVP(k);
+ }
+ BOOST_CATCH (boost::archive::archive_exception ae){
+ exception = ae;
+ }
+ BOOST_CATCH_END
+ BOOST_CHECK(
+ exception.code == boost::archive::archive_exception::pointer_conflict
+ );
+ }
+ // if exception wasn't invoked
+ if(exception.code == boost::archive::archive_exception::no_exception){
+ // try to read the archive
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ exception = boost::archive::archive_exception(
+ boost::archive::archive_exception::no_exception
+ );
+ BOOST_TRY {
+ ia >> BOOST_SERIALIZATION_NVP(k);
+ }
+ BOOST_CATCH (boost::archive::archive_exception ae){
+ exception = ae;
+ }
+ BOOST_CATCH_END
+ BOOST_CHECK(
+ exception.code == boost::archive::archive_exception::pointer_conflict
+ );
+ }
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+#ifndef BOOST_TEST_DECL_HPP
+#define BOOST_TEST_DECL_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
+// test_decl.hpp
+//
+// (c) Copyright Robert Ramey 2004
+// 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 library home page at http://www.boost.org/libs/serialization
+// export if this is our own source, otherwise import:
+
+// usage:
+//
+// class header declarations should look something like:
+//
+// #include "test_decl.hpp"
+// #if defined(A_CPP)
+// #define DLL_DECL IMPORT_DECL(BOOST_PP_EMPTY())
+// #else
+// #define DLL_DECL EXPORT_DECL(BOOST_PP_EMPTY())
+// #endif
+//
+// class DLL_DECL A {
+// ...
+// };
+//
+// #undef DLL_DECL
+//
+// code which includes such headers should look something like:
+//
+// #include "A.hpp"
+//
+// code which builds dll should like like
+//
+// #define A_CPP
+// #include "A.hpp"
+//
+// A::A(){
+// ...
+// }
+// ...
+//
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_HAS_DECLSPEC // defined in config system
+ #if ! defined(EXPORT_DECL)
+ #if defined(__BORLANDC__)
+ #define EXPORT_DECL(T) T __export
+ #else
+ #define EXPORT_DECL(T) __declspec(dllexport) T
+ #endif
+ #endif
+ #if ! defined(IMPORT_DECL)
+ #if defined(__BORLANDC__)
+ #define IMPORT_DECL(T) T __import
+ #else
+ #define IMPORT_DECL(T) __declspec(dllimport) T
+ #endif
+ #endif
+#else
+ #define IMPORT_DECL(T) T
+ #define EXPORT_DECL(T) T
+#endif // BOOST_HAS_DECLSPEC
+
+#endif // BOOST_TEST_DECL_HPP
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_delete_pointer.cpp
+
+// (C) Copyright 2002 Vahan Margaryan.
+// 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)
+//
+
+#include <cstddef> // NULL
+#include <fstream>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/serialization/throw_exception.hpp>
+
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/split_member.hpp>
+#include <boost/serialization/vector.hpp>
+
+//A holds a pointer to another A, but doesn't own the pointer.
+//objCount
+class A
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void save(Archive &ar, const unsigned int /* file_version */) const
+ {
+ ar << BOOST_SERIALIZATION_NVP(next_);
+ }
+ template<class Archive>
+ void load(Archive & ar, const unsigned int /* file_version */)
+ {
+ static int i = 0;
+ ar >> BOOST_SERIALIZATION_NVP(next_);
+ if(++i == 3)
+ boost::serialization::throw_exception(boost::archive::archive_exception(
+ boost::archive::archive_exception::no_exception
+ ));
+ }
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+public:
+ A()
+ {
+ next_ = 0;
+ ++objcount;
+ }
+ A(const A& a)
+ {
+ next_ = a.next_; ++objcount;
+ }
+ ~A()
+ {
+ --objcount;
+ }
+ A* next_;
+ static int objcount;
+};
+
+
+int A::objcount = 0;
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ std::vector<A*> vec;
+ A* a = new A;
+ a->next_ = 0;
+ vec.push_back(a);
+
+ //fill the vector with chained A's. The vector is assumed
+ //to own the objects - we will destroy the objects through this vector.
+ unsigned int i;
+ for(i = 1; i < 10; ++i)
+ {
+ a = new A;
+ vec[i - 1]->next_ = a;
+ a->next_ = 0;
+ vec.push_back(a);
+ }
+
+ const char * testfile = boost::archive::tmpnam(0);
+ BOOST_REQUIRE(NULL != testfile);
+
+ //output the vector
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << BOOST_SERIALIZATION_NVP(vec);
+ }
+
+ //erase the objects
+ for(i = 0; i < vec.size(); ++i)
+ delete vec[i];
+ vec.clear();
+
+ //read the vector back
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ BOOST_TRY {
+ ia >> BOOST_SERIALIZATION_NVP(vec);
+ }
+ BOOST_CATCH (...){
+ ia.delete_created_pointers();
+ vec.clear();
+ }
+ BOOST_CATCH_END
+ }
+
+ //delete the objects
+ for(i = 0; i < vec.size(); ++i)
+ delete vec[i];
+ vec.clear();
+
+ //identify the leaks
+ BOOST_CHECK(A::objcount == 0);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_deque.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef>
+#include <fstream>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include <boost/archive/archive_exception.hpp>
+#include "test_tools.hpp"
+
+#include <boost/serialization/deque.hpp>
+
+#include "A.hpp"
+#include "A.ipp"
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ // test array of objects
+ std::deque<A> adeque, adeque1;
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("adeque",adeque);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("adeque",adeque1);
+ }
+ BOOST_CHECK(adeque == adeque1);
+
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_derived.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef> // NULL
+#include <fstream>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include <boost/archive/archive_exception.hpp>
+#include "test_tools.hpp"
+
+#include <boost/serialization/base_object.hpp>
+#include <boost/serialization/type_info_implementation.hpp>
+
+class base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & /* ar */, const unsigned int /* file_version */){
+ }
+protected:
+ virtual ~base(){};
+};
+
+class derived1 : public base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(base);
+ }
+};
+
+class derived2 : public base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(base);
+ }
+};
+
+// save non-polymorphic classes through a base class pointer
+void save_derived(const char *testfile)
+{
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+
+ // registration not necessary when serializing the most derived pointer
+ derived1 *d1 = new derived1;
+ derived2 *d2 = new derived2;
+ oa << BOOST_SERIALIZATION_NVP(d1) << BOOST_SERIALIZATION_NVP(d2);
+
+ // upcasting non-polymorphic pointers may not lead to the expected
+ // result. In the current type id system
+ base *b1 = d1;
+ base *b2 = d2;
+
+ // Warning, the current type id system does not yield true
+ // type id for non-polymorphic types
+ const boost::serialization::extended_type_info & this_type
+ = boost::serialization::type_info_implementation<base>::type
+ ::get_const_instance();
+ // retrieve the true type of the object pointed to
+ const boost::serialization::extended_type_info & true_type
+ = * boost::serialization::type_info_implementation<base>::type
+ ::get_const_instance().get_derived_extended_type_info(*b1);
+
+ BOOST_WARN_MESSAGE(
+ !(this_type == true_type),
+ "current type id system does not support non-polymorphic types"
+ );
+
+ oa << BOOST_SERIALIZATION_NVP(b1);
+ oa << BOOST_SERIALIZATION_NVP(b2);
+
+ delete d1;
+ delete d2;
+}
+
+// save non-polymorphic classes through a base class pointer
+void load_derived(const char *testfile)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+
+ // registration not necessary when serializing the most derived pointer
+ derived1 *d1 = NULL;
+ derived2 *d2 = NULL;
+ ia >> BOOST_SERIALIZATION_NVP(d1) >> BOOST_SERIALIZATION_NVP(d2);
+
+ // upcasting non-polymorphic pointers may not lead to the expected
+ // result. In the current type id system
+ base *b1 = NULL;
+ base *b2 = NULL;
+
+ // note: this will produce incorrect results for non-polymorphic classes
+ ia >> BOOST_SERIALIZATION_NVP(b1);
+ ia >> BOOST_SERIALIZATION_NVP(b2);
+
+ // Warning, the current type id system does not yield true
+ // type id for non-polymorphic types
+ const boost::serialization::extended_type_info & this_type
+ = boost::serialization::type_info_implementation<base>::type
+ ::get_const_instance();
+ // retrieve the true type of the object pointed to
+ const boost::serialization::extended_type_info & true_type
+ = * boost::serialization::type_info_implementation<base>::type
+ ::get_const_instance().get_derived_extended_type_info(*b1);
+
+ BOOST_WARN_MESSAGE(
+ ! (this_type == true_type),
+ "current type id system does fails for non-polymorphic types"
+ );
+
+ BOOST_CHECK(b1 == static_cast<base *>(d1));
+ BOOST_CHECK(b2 == static_cast<base *>(d2));
+
+ delete d1;
+ delete d2;
+}
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ save_derived(testfile);
+ load_derived(testfile);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_derived_class.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <fstream>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include "B.hpp"
+#include "A.ipp"
+
+int test_main( int /*argc*/, char* /*argv*/[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+
+ BOOST_REQUIRE(NULL != testfile);
+
+ B b, b1;
+
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("b", b);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("b1", b1);
+ }
+ BOOST_CHECK(b == b1);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_deriviec_class_.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef> // NULL
+#include <fstream>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include "B.hpp"
+#include "A.ipp"
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ B * tb = new B;
+ B * tb1 = NULL;
+
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("tb", tb);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("tb",tb1);
+ }
+ BOOST_CHECK(tb != tb1);
+ BOOST_CHECK(*tb == *tb1);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_diamond.cpp
+
+// (C) Copyright 2002-2009 Vladimir Prus and Robert Ramey.
+// 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)
+
+// test of serialization library for diamond inheritence situations
+
+#include <cstddef> // NULL
+#include <fstream>
+#include <iostream>
+
+#include <boost/config.hpp>
+#include <cstdio> // remove
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include <boost/serialization/map.hpp>
+#include <boost/serialization/utility.hpp>
+#include <boost/serialization/split_member.hpp>
+#include <boost/serialization/tracking.hpp>
+#include <boost/serialization/base_object.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/export.hpp>
+
+int save_count = 0; // used to detect when base class is saved multiple times
+int load_count = 0; // used to detect when base class is loaded multiple times
+
+class base {
+public:
+ base() : i(0) {}
+ base(int i) : i(i)
+ {
+ m[i] = "text";
+ }
+
+ template<class Archive>
+ void save(Archive &ar, const unsigned int /* file_version */) const
+ {
+ std::cout << "Saving base\n";
+ ar << BOOST_SERIALIZATION_NVP(i);
+ ar << BOOST_SERIALIZATION_NVP(m);
+ ++save_count;
+ }
+
+ template<class Archive>
+ void load(Archive & ar, const unsigned int /* file_version */)
+ {
+ std::cout << "Restoring base\n";
+ ar >> BOOST_SERIALIZATION_NVP(i);
+ ar >> BOOST_SERIALIZATION_NVP(m);
+ ++load_count;
+ }
+
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+
+ bool operator==(const base& another) const
+ {
+ return i == another.i && m == another.m;
+ }
+ // make polymorphic by marking at least one function virtual
+ virtual ~base() {};
+private:
+ int i;
+ std::map<int, std::string> m;
+};
+
+// note: the default is for object tracking to be performed if and only
+// if and object of the corresponding class is anywhere serialized
+// through a pointer. In this example, that doesn't occur so
+// by default, the shared base object wouldn't normally be tracked.
+// This would leave to multiple save/load operation of the data in
+// this shared base class. This wouldn't cause an error, but it would
+// be a waste of time. So set the tracking behavior trait of the base
+// class to always track serialized objects of that class. This permits
+// the system to detect and elminate redundent save/load operations.
+// (It is concievable that this might someday be detected automatically
+// but for now, this is not done so we have to rely on the programmer
+// to specify this trait)
+BOOST_CLASS_TRACKING(base, track_always)
+
+class derived1 : virtual public base {
+public:
+ template<class Archive>
+ void save(Archive &ar, const unsigned int /* file_version */) const
+ {
+ std::cout << "Saving derived1\n";
+ ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(base);
+ }
+
+ template<class Archive>
+ void load(Archive & ar, const unsigned int /* file_version */)
+ {
+ std::cout << "Restoring derived1\n";
+ ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(base);
+ }
+
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+};
+
+class derived2 : virtual public base {
+public:
+ template<class Archive>
+ void save(Archive &ar, const unsigned int /* file_version */) const
+ {
+ std::cout << "Saving derived2\n";
+ ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(base);
+ }
+
+ template<class Archive>
+ void load(Archive & ar, const unsigned int /* file_version */)
+ {
+ std::cout << "Restoring derived2\n";
+ ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(base);
+ }
+
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+};
+
+class final : public derived1, public derived2 {
+public:
+ final() {}
+ final(int i) : base(i) {}
+
+ template<class Archive>
+ void save(Archive &ar, const unsigned int /* file_version */) const
+ {
+ std::cout << "Saving final\n";
+ ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(derived1);
+ ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(derived2);
+ }
+
+ template<class Archive>
+ void load(Archive & ar, const unsigned int /* file_version */)
+ {
+ std::cout << "Restoring final\n";
+ ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(derived1);
+ ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(derived2);
+ }
+
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+};
+
+BOOST_CLASS_EXPORT(final)
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ const final b(3);
+ {
+ test_ostream ofs(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(ofs);
+ oa << boost::serialization::make_nvp("b", b);
+ }
+
+ final b2;
+ {
+ test_istream ifs(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(ifs);
+ ia >> boost::serialization::make_nvp("b2", b2);
+ }
+ BOOST_CHECK(1 == save_count);
+ BOOST_CHECK(1 == load_count);
+ BOOST_CHECK(b2 == b);
+ std::remove(testfile);
+
+ // do the same test with pointers
+ testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ save_count = 0;
+ load_count = 0;
+
+ const base* bp = new final( 3 );
+ {
+ test_ostream ofs(testfile);
+ test_oarchive oa(ofs);
+ oa << BOOST_SERIALIZATION_NVP(bp);
+ }
+
+ base* bp2;
+ {
+ test_istream ifs(testfile);
+ test_iarchive ia(ifs);
+ ia >> BOOST_SERIALIZATION_NVP(bp2);
+ }
+
+ BOOST_CHECK(1 == save_count);
+ BOOST_CHECK(1 == load_count);
+ BOOST_CHECK(*bp2 == *bp);
+ std::remove(testfile);
+
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_dll_exported.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+// This is an overly complex test. The purpose of this test is to
+// demostrate and test the ability to serialize a hiarchy of class
+// through a base class pointer even though those class might be
+// implemente in different dlls and use different extended type info
+// systems.
+//
+// polymorphic_ base is locally declared and defined. It use the
+// "no_rtti" extended type info system.
+
+// polymorphic_derived1 is locally declared and defined. It uses
+// the default "type_id" extended type info system
+
+// polymorphic_derived2 is declared in polymorphic_derived.hpp
+// and defined in dll_polymorphic_derived2. It uses the typeid
+// system.
+
+#include <cstddef> // NULL
+#include <fstream>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+// for now, only test with simple text archive
+#define BOOST_ARCHIVE_TEST text_archive.hpp
+#include "test_tools.hpp"
+
+#include <boost/archive/archive_exception.hpp>
+
+#include <boost/serialization/base_object.hpp>
+#include <boost/serialization/export.hpp>
+#include <boost/serialization/access.hpp>
+
+#include "polymorphic_base.hpp"
+
+class polymorphic_derived1 : public polymorphic_base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(polymorphic_base);
+ }
+ virtual const char * get_key() const {
+ return "polymorphic_derived1";
+ }
+public:
+ virtual ~polymorphic_derived1(){}
+};
+
+BOOST_CLASS_EXPORT(polymorphic_derived1)
+
+// MWerks users can do this to make their code work
+BOOST_SERIALIZATION_MWERKS_BASE_AND_DERIVED(polymorphic_base, polymorphic_derived1)
+
+#define POLYMORPHIC_DERIVED2_IMPORT
+#include "polymorphic_derived2.hpp"
+
+// save exported polymorphic class
+void save_exported(const char *testfile)
+{
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+
+ polymorphic_base *rb1 = new polymorphic_derived1;
+ polymorphic_base *rb2 = new polymorphic_derived2;
+ polymorphic_derived2 *rd21 = new polymorphic_derived2;
+
+ // export will permit correct serialization
+ // through a pointer to a base class
+ oa << BOOST_SERIALIZATION_NVP(rb1);
+ oa << BOOST_SERIALIZATION_NVP(rb2);
+ oa << BOOST_SERIALIZATION_NVP(rd21);
+
+ delete rb1;
+ delete rb2;
+}
+
+// save exported polymorphic class
+void load_exported(const char *testfile)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+
+ polymorphic_base *rb1 = NULL;
+ polymorphic_base *rb2 = NULL;
+ polymorphic_derived2 *rd21 = NULL;
+
+ // export will permit correct serialization
+ // through a pointer to a base class
+ ia >> BOOST_SERIALIZATION_NVP(rb1);
+ BOOST_CHECK_MESSAGE(
+ boost::serialization::type_info_implementation<polymorphic_derived1>
+ ::type::get_const_instance()
+ ==
+ * boost::serialization::type_info_implementation<polymorphic_base>
+ ::type::get_const_instance().get_derived_extended_type_info(*rb1),
+ "restored pointer b1 not of correct type"
+ );
+ ia >> BOOST_SERIALIZATION_NVP(rb2);
+ BOOST_CHECK_MESSAGE(
+ boost::serialization::type_info_implementation<polymorphic_derived2>
+ ::type::get_const_instance()
+ ==
+ * boost::serialization::type_info_implementation<polymorphic_base>
+ ::type::get_const_instance().get_derived_extended_type_info(*rb2),
+ "restored pointer b2 not of correct type"
+ );
+ ia >> BOOST_SERIALIZATION_NVP(rd21);
+ BOOST_CHECK_MESSAGE(
+ boost::serialization::type_info_implementation<polymorphic_derived2>
+ ::type::get_const_instance()
+ ==
+ * boost::serialization::type_info_implementation<polymorphic_derived2>
+ ::type::get_const_instance().get_derived_extended_type_info(*rd21),
+ "restored pointer d2 not of correct type"
+ );
+ delete rb1;
+ delete rb2;
+ delete rd21;
+}
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ save_exported(testfile);
+ load_exported(testfile);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_plugin.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+// Note this test creates, serializes, and destroys
+// a class instance while knowing nothing more than its
+// exported class ID (GUID) and a base class from which
+// it is derived. This is referred to as a "plugin"
+// since the same program could, without recompilation,
+// manipulate any number of derived types - even those
+// which have not been yet been created.
+
+#include <fstream>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include <boost/archive/archive_exception.hpp>
+
+// for now, only test with simple text and polymorphic archive
+#include "test_tools.hpp"
+
+#include <boost/serialization/base_object.hpp>
+#include <boost/serialization/export.hpp>
+#include <boost/serialization/type_info_implementation.hpp>
+#include <boost/serialization/access.hpp>
+#include <boost/serialization/void_cast.hpp>
+#include <boost/serialization/extended_type_info.hpp>
+
+#include "polymorphic_base.hpp"
+
+// declare and implement a derived class in our own executable
+class polymorphic_derived1 : public polymorphic_base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(polymorphic_base);
+ }
+ const char * get_key() const{
+ return
+ boost::serialization::type_info_implementation<
+ polymorphic_derived1
+ >::type::get_const_instance().get_key();
+ }
+public:
+ virtual ~polymorphic_derived1(){}
+};
+
+// This class is derived from polymorphic_base which uses the no_rtti system
+// rather than the typeid system. This system uses the exported name as the
+// type identifier key. This MUST be exported!!!
+BOOST_CLASS_EXPORT(polymorphic_derived1)
+
+// MWerks users can do this to make their code work
+BOOST_SERIALIZATION_MWERKS_BASE_AND_DERIVED(polymorphic_base, polymorphic_derived1)
+
+// save exported polymorphic class
+void save_exported(const char *testfile)
+{
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+
+ polymorphic_base *rb1 = new polymorphic_derived1;
+
+ // get the eti record for the exported type "polymorphic_derived2"
+ boost::serialization::extended_type_info const * const d2_eti =
+ boost::serialization::extended_type_info::find(
+ "polymorphic_derived2"
+ );
+ assert(NULL != d2_eti);
+
+ // create a new instance of the type referred to by this record.
+ // in this example, we happen to know that the class constructor
+ // takes no arguments.
+ void const * const rd2 = d2_eti->construct();
+ assert(NULL != rd2);
+
+ // transform the pointer to a pointer to the base class
+ polymorphic_base const * const rb2
+ = static_cast<polymorphic_base const *>(
+ boost::serialization::void_upcast(
+ * d2_eti,
+ boost::serialization::type_info_implementation<polymorphic_base>
+ ::type::get_const_instance(),
+ rd2
+ )
+ );
+
+ // export will permit correct serialization
+ // through a pointer to a base class
+ oa << BOOST_SERIALIZATION_NVP(rb1);
+ oa << BOOST_SERIALIZATION_NVP(rb2);
+
+ // don't need these any more - don't leak memory
+ delete rb1;
+ // note delete original handle - not runtime cast one !!!
+ //delete rb2;
+ d2_eti->destroy(rd2);
+}
+
+// save exported polymorphic class
+void load_exported(const char *testfile)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+
+ polymorphic_base *rb1 = NULL;
+ polymorphic_base *rb2 = NULL;
+
+ // export will permit correct serialization
+ // through a pointer to a base class
+ ia >> BOOST_SERIALIZATION_NVP(rb1);
+
+ BOOST_CHECK_MESSAGE(
+ boost::serialization::type_info_implementation<polymorphic_derived1>
+ ::type::get_const_instance()
+ ==
+ * boost::serialization::type_info_implementation<polymorphic_base>
+ ::type::get_const_instance().get_derived_extended_type_info(*rb1),
+ "restored pointer b1 not of correct type"
+ );
+ ia >> BOOST_SERIALIZATION_NVP(rb2);
+
+ // get the eti record for the exported type "polymorphic_derived2"
+ boost::serialization::extended_type_info const * const d2_eti =
+ boost::serialization::extended_type_info::find(
+ "polymorphic_derived2"
+ );
+ assert(NULL != d2_eti);
+
+ BOOST_CHECK_MESSAGE(
+ * d2_eti
+ ==
+ * boost::serialization::type_info_implementation<polymorphic_base>
+ ::type::get_const_instance().get_derived_extended_type_info(*rb2),
+ "restored pointer b2 not of correct type"
+ );
+
+ delete rb1;
+ delete rb2;
+}
+
+#ifdef BOOST_WINDOWS
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ HINSTANCE hDLL; // Handle to DLL
+ hDLL = LoadLibrary("plugin_polymorphic_derived2.dll");
+ BOOST_CHECK_MESSAGE((0 != hDLL), "Failed to find/load plugin_polymorphic_derived2" );
+ if(0 == hDLL)
+ return EXIT_FAILURE;
+
+ save_exported(testfile);
+ load_exported(testfile);
+ FreeLibrary(hDLL);
+
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+#else // presume *nix
+
+#include <dlfcn.h>
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ void * hDLL; // Handle to DLL
+ hDLL = dlopen("plugin_polymorphic_derived2.so", RTLD_NOW | RTLD_GLOBAL);
+ BOOST_CHECK_MESSAGE((0 != hDLL), "Failed to find/load plugin_polymorphic_derived2" );
+ if(0 == hDLL)
+ return EXIT_FAILURE;
+
+ save_exported(testfile);
+ load_exported(testfile);
+ dlclose(hDLL);
+
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+#endif
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_dll_simple.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+// invoke header for a custom archive test.
+
+#include <cstddef> // NULL
+#include <fstream>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+// for now, only test with simple text and polymorphic archive
+#include "test_tools.hpp"
+#include "text_archive.hpp"
+
+#include <boost/archive/polymorphic_text_oarchive.hpp>
+#include <boost/archive/polymorphic_text_iarchive.hpp>
+
+#define A_IMPORT
+#include "A.hpp"
+
+// simple class with text archive compiled in dll
+void
+test1(){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ const A a;
+ A a1;
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ boost::archive::text_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("a", a);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ boost::archive::text_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("a", a1);
+ }
+ BOOST_CHECK_EQUAL(a, a1);
+
+ std::remove(testfile);
+}
+
+// simple class with polymorphic archive compiled in dll
+void
+test2(){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ const A a;
+ A a1;
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ boost::archive::polymorphic_text_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ boost::archive::polymorphic_oarchive & poa(oa);
+ poa << boost::serialization::make_nvp("a", a);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ boost::archive::polymorphic_text_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ boost::archive::polymorphic_iarchive & pia(ia);
+ pia >> boost::serialization::make_nvp("a", a1);
+ }
+ BOOST_CHECK_EQUAL(a, a1);
+
+ std::remove(testfile);
+}
+
+// simple class pointer with text archive compiled in dll
+void
+test3(){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ const A *a = new A;
+ A *a1;
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ boost::archive::text_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("a", a);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ boost::archive::text_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("a", a1);
+ }
+ BOOST_CHECK_EQUAL(*a, *a1);
+
+ std::remove(testfile);
+ delete a;
+}
+
+// simple class pointer with polymorphic archive compiled in dll
+void
+test4(){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ const A *a = new A;
+ A *a1;
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ boost::archive::polymorphic_text_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ boost::archive::polymorphic_oarchive & poa(oa);
+ poa << boost::serialization::make_nvp("a", a);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ boost::archive::polymorphic_text_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ boost::archive::polymorphic_iarchive & pia(ia);
+ pia >> boost::serialization::make_nvp("a", a1);
+ }
+ BOOST_CHECK_EQUAL(*a, *a1);
+
+ std::remove(testfile);
+ delete a;
+}
+
+#include "B.hpp"
+
+// derived class with base text archive compiled in dll
+void
+test5(){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ const B b;
+ B b1;
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ boost::archive::text_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("b", b);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ boost::archive::text_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("b", b1);
+ }
+ BOOST_CHECK_EQUAL(b, b1);
+
+ std::remove(testfile);
+}
+
+// derived class with base base compiled with polymorphic archive in dll
+void
+test6(){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ const B b;
+ B b1;
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ boost::archive::polymorphic_text_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ boost::archive::polymorphic_oarchive & poa(oa);
+ poa << boost::serialization::make_nvp("b", b);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ boost::archive::polymorphic_text_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ boost::archive::polymorphic_iarchive & pia(ia);
+ pia >> boost::serialization::make_nvp("b", b1);
+ }
+ BOOST_CHECK_EQUAL(b, b1);
+
+ std::remove(testfile);
+}
+
+// derived class pointer with base text archive compiled in dll
+void
+test7(){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ const B *b = new B;
+ B *b1;
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ boost::archive::text_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("b", b);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ boost::archive::text_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("b", b1);
+ }
+ BOOST_CHECK_EQUAL(*b, *b1);
+
+ std::remove(testfile);
+ delete b;
+}
+
+// derived class pointer with base polymorphic archive compiled in dll
+void
+test8(){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ const B *b = new B;
+ B *b1;
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ boost::archive::polymorphic_text_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ boost::archive::polymorphic_oarchive & poa(oa);
+ poa << boost::serialization::make_nvp("b", b);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ boost::archive::polymorphic_text_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ boost::archive::polymorphic_iarchive & pia(ia);
+ pia >> boost::serialization::make_nvp("b", b1);
+ }
+ BOOST_CHECK_EQUAL(*b, *b1);
+
+ std::remove(testfile);
+ delete b;
+}
+
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ test1();
+ test2();
+ test3();
+ test4();
+ test5();
+ test6();
+ test7();
+ test8();
+ return EXIT_SUCCESS;
+}
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_exported.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef>
+#include <fstream>
+
+#include <boost/config.hpp>
+#include <cstdio> // remove
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include <boost/serialization/export.hpp>
+#include <boost/serialization/base_object.hpp>
+#include <boost/serialization/type_info_implementation.hpp>
+#include <boost/serialization/extended_type_info_typeid.hpp>
+
+#include <boost/serialization/force_include.hpp>
+
+#include <boost/archive/archive_exception.hpp>
+#include "test_tools.hpp"
+
+#include "polymorphic_base.hpp"
+
+class polymorphic_derived1 :
+ public polymorphic_base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(polymorphic_base);
+ }
+ virtual const char * get_key() const {
+ return "polymorphic_derived1";
+ }
+public:
+ ~polymorphic_derived1(){}
+};
+
+BOOST_CLASS_EXPORT(polymorphic_derived1)
+
+// MWerks users can do this to make their code work
+BOOST_SERIALIZATION_MWERKS_BASE_AND_DERIVED(polymorphic_base, polymorphic_derived1)
+
+#include "polymorphic_derived2.hpp"
+
+// MWerks users can do this to make their code work
+BOOST_SERIALIZATION_MWERKS_BASE_AND_DERIVED(polymorphic_base, polymorphic_derived2)
+
+template<class Archive>
+void polymorphic_derived2::serialize(
+ Archive &ar,
+ const unsigned int /* file_version */
+){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(polymorphic_base);
+}
+
+BOOST_CLASS_EXPORT_IMPLEMENT(polymorphic_derived2)
+
+template EXPORT_DECL(void) polymorphic_derived2::serialize(
+ test_oarchive & ar,
+ const unsigned int version
+);
+template EXPORT_DECL(void) polymorphic_derived2::serialize(
+ test_iarchive & ar,
+ const unsigned int version
+);
+
+// save exported polymorphic class
+void save_exported(const char *testfile)
+{
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+
+ polymorphic_base *rb1 = new polymorphic_derived1;
+ polymorphic_base *rb2 = new polymorphic_derived2;
+
+ // export will permit correct serialization
+ // through a pointer to a base class
+ oa << BOOST_SERIALIZATION_NVP(rb1);
+ oa << BOOST_SERIALIZATION_NVP(rb2);
+
+ delete rb1;
+ delete rb2;
+}
+
+// save exported polymorphic class
+void load_exported(const char *testfile)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+
+ polymorphic_base *rb1 = NULL;
+ polymorphic_base *rb2 = NULL;
+
+ // export will permit correct serialization
+ // through a pointer to a base class
+ ia >> BOOST_SERIALIZATION_NVP(rb1);
+ BOOST_CHECK_MESSAGE(
+ boost::serialization::type_info_implementation<polymorphic_derived1>
+ ::type::get_const_instance()
+ ==
+ * boost::serialization::type_info_implementation<polymorphic_base>
+ ::type::get_const_instance().get_derived_extended_type_info(*rb1),
+ "restored pointer b1 not of correct type"
+ );
+
+ ia >> BOOST_SERIALIZATION_NVP(rb2);
+ BOOST_CHECK_MESSAGE(
+ boost::serialization::type_info_implementation<polymorphic_derived2>
+ ::type::get_const_instance()
+ ==
+ * boost::serialization::type_info_implementation<polymorphic_base>
+ ::type::get_const_instance().get_derived_extended_type_info(*rb2),
+ "restored pointer b2 not of correct type"
+ );
+
+ delete rb1;
+ delete rb2;
+}
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ save_exported(testfile);
+ load_exported(testfile);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_const.cpp
+
+// (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)
+
+#include <boost/serialization/access.hpp>
+#include <boost/serialization/base_object.hpp>
+#include <boost/serialization/export.hpp>
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/level_enum.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/split_free.hpp>
+#include <boost/serialization/split_member.hpp>
+#include <boost/serialization/tracking.hpp>
+#include <boost/serialization/tracking_enum.hpp>
+#include <boost/serialization/traits.hpp>
+#include <boost/serialization/type_info_implementation.hpp>
+#include <boost/serialization/version.hpp>
+
+struct foo
+{
+ int x;
+private:
+ friend class boost::serialization::access;
+
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int version)
+ {
+ // In compilers implementing 2-phase lookup, the call to
+ // make_nvp is resolved even if foo::serialize() is never
+ // instantiated.
+ ar & boost::serialization::make_nvp("x",x);
+ }
+};
+
+int
+main(int /*argc*/, char * /*argv*/[]){
+ return 0;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_iterators.cpp
+
+// (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)
+
+#include <algorithm>
+#include <vector>
+#include <cstdlib> // for rand
+#include <functional>
+#include <sstream> // used to test stream iterators
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{
+ using ::rand;
+}
+#endif
+
+#include <boost/detail/workaround.hpp>
+#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+#include <boost/archive/dinkumware.hpp>
+#endif
+
+#ifndef BOOST_NO_CWCHAR
+#include <boost/archive/iterators/mb_from_wchar.hpp>
+#include <boost/archive/iterators/wchar_from_mb.hpp>
+#endif
+#include <boost/archive/iterators/xml_escape.hpp>
+#include <boost/archive/iterators/xml_unescape.hpp>
+#include <boost/archive/iterators/transform_width.hpp>
+#include <boost/archive/iterators/istream_iterator.hpp>
+#include <boost/archive/iterators/ostream_iterator.hpp>
+
+#include "test_tools.hpp"
+
+#ifndef BOOST_NO_CWCHAR
+
+void test_wchar_from_mb(const wchar_t *la, const char * a, const unsigned int size){
+ typedef boost::archive::iterators::wchar_from_mb<const char *> translator;
+ BOOST_CHECK((
+ std::equal(
+ translator(BOOST_MAKE_PFTO_WRAPPER(a)),
+ translator(BOOST_MAKE_PFTO_WRAPPER(a + size)),
+ la
+ )
+ ));
+}
+
+void test_mb_from_wchar(const char * a, const wchar_t *la, const unsigned int size){
+ typedef boost::archive::iterators::mb_from_wchar<const wchar_t *> translator;
+ BOOST_CHECK(
+ std::equal(
+ translator(BOOST_MAKE_PFTO_WRAPPER(la)),
+ translator(BOOST_MAKE_PFTO_WRAPPER(la + size)),
+ a
+ )
+ );
+}
+
+#endif
+
+template<class CharType>
+void test_xml_escape(
+ const CharType * xml_escaped,
+ const CharType * xml,
+ unsigned int size
+){
+ typedef boost::archive::iterators::xml_escape<const CharType *> translator;
+
+ BOOST_CHECK(
+ std::equal(
+ translator(BOOST_MAKE_PFTO_WRAPPER(xml)),
+ translator(BOOST_MAKE_PFTO_WRAPPER(xml + size)),
+ xml_escaped
+ )
+ );
+}
+
+template<class CharType>
+void test_xml_unescape(
+ const CharType * xml,
+ const CharType * xml_escaped,
+ unsigned int size
+){
+
+ // test xml_unescape
+ typedef boost::archive::iterators::xml_unescape<const CharType *> translator;
+
+ BOOST_CHECK(
+ std::equal(
+ translator(BOOST_MAKE_PFTO_WRAPPER(xml_escaped)),
+ translator(BOOST_MAKE_PFTO_WRAPPER(xml_escaped + size)),
+ xml
+ )
+ );
+}
+
+template<int BitsOut, int BitsIn>
+void test_transform_width(unsigned int size){
+ // test transform_width
+ char rawdata[8];
+
+ char * rptr;
+ for(rptr = rawdata + 6; rptr-- > rawdata;)
+ *rptr = static_cast<char>(0xff & std::rand());
+
+ // convert 8 to 6 bit characters
+ typedef boost::archive::iterators::transform_width<
+ char *, BitsOut, BitsIn
+ > translator1;
+
+ std::vector<char> v6;
+
+ std::copy(
+ translator1(BOOST_MAKE_PFTO_WRAPPER(static_cast<char *>(rawdata))),
+ translator1(BOOST_MAKE_PFTO_WRAPPER(rawdata + size)),
+ std::back_inserter(v6)
+ );
+
+ // check to see we got the expected # of characters out
+ if(0 == size)
+ BOOST_CHECK(v6.size() == 0);
+ else
+ BOOST_CHECK(v6.size() == (size * BitsIn - 1 ) / BitsOut + 1);
+
+ typedef boost::archive::iterators::transform_width<
+ std::vector<char>::iterator, BitsIn, BitsOut
+ > translator2;
+
+ BOOST_CHECK(
+ std::equal(
+ rawdata,
+ rawdata + size,
+ translator2(BOOST_MAKE_PFTO_WRAPPER(v6.begin()))
+ )
+ );
+
+}
+
+template<class CharType>
+void test_stream_iterators(
+ const CharType * test_data,
+ unsigned int size
+){
+ std::basic_stringstream<CharType> ss;
+ boost::archive::iterators::ostream_iterator<CharType> osi =
+ boost::archive::iterators::ostream_iterator<CharType>(ss);
+ std::copy(test_data, test_data + size, osi);
+
+ BOOST_CHECK(size == ss.str().size());
+
+ boost::archive::iterators::istream_iterator<CharType> isi =
+ boost::archive::iterators::istream_iterator<CharType>(ss);
+ BOOST_CHECK(std::equal(test_data, test_data + size,isi));
+}
+
+int
+test_main(int /* argc */, char* /* argv */ [] )
+{
+ const char xml[] = "<+>+&+\"+'";
+ const char xml_escaped[] = "<+>+&+"+'";
+ test_xml_escape<const char>(
+ xml_escaped,
+ xml,
+ sizeof(xml) / sizeof(char) - 1
+ );
+ test_xml_unescape<const char>(
+ xml,
+ xml_escaped,
+ sizeof(xml_escaped) / sizeof(char) - 1
+ );
+
+ const char a[] = "abcdefghijklmnopqrstuvwxyz";
+
+ #ifndef BOOST_NO_CWCHAR
+ const wchar_t wxml[] = L"<+>+&+\"+'";
+ const wchar_t wxml_escaped[] = L"<+>+&+"+'";
+ test_xml_escape<const wchar_t>(
+ wxml_escaped,
+ wxml,
+ sizeof(wxml) / sizeof(wchar_t) - 1
+ );
+ test_xml_unescape<const wchar_t>(
+ wxml,
+ wxml_escaped,
+ sizeof(wxml_escaped) / sizeof(wchar_t) - 1
+ );
+
+ const wchar_t la[] = L"abcdefghijklmnopqrstuvwxyz";
+
+ test_wchar_from_mb(la, a, sizeof(a) / sizeof(char) - 1);
+ test_mb_from_wchar(a, la, sizeof(la) / sizeof(wchar_t) - 1);
+
+ test_stream_iterators<wchar_t>(la, sizeof(la)/sizeof(wchar_t) - 1);
+ #endif
+
+ test_stream_iterators<char>(a, sizeof(a) - 1);
+
+ test_transform_width<6, 8>(0);
+ test_transform_width<6, 8>(1);
+ test_transform_width<6, 8>(2);
+ test_transform_width<6, 8>(3);
+ test_transform_width<6, 8>(4);
+ test_transform_width<6, 8>(5);
+ test_transform_width<6, 8>(6);
+ test_transform_width<6, 8>(7);
+ test_transform_width<6, 8>(8);
+
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_iterators.cpp
+
+// (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)
+
+#include <algorithm>
+#include <list>
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <cstdlib>
+#include <cstddef> // size_t
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{
+ using ::rand;
+ using ::size_t;
+}
+#endif
+
+#include <boost/serialization/pfto.hpp>
+
+#include <boost/archive/iterators/binary_from_base64.hpp>
+#include <boost/archive/iterators/base64_from_binary.hpp>
+#include <boost/archive/iterators/insert_linebreaks.hpp>
+#include <boost/archive/iterators/remove_whitespace.hpp>
+#include <boost/archive/iterators/transform_width.hpp>
+
+#include "test_tools.hpp"
+
+#include <iostream>
+
+template<typename CharType>
+void test_base64(){
+ CharType rawdata[150];
+ std::size_t size = sizeof(rawdata) / sizeof(CharType);
+ CharType * rptr;
+ for(rptr = rawdata + size; rptr-- > rawdata;)
+ *rptr = static_cast<CharType>(std::rand());
+
+ // convert to base64
+ typedef std::list<CharType> text_base64_type;
+ text_base64_type text_base64;
+
+ typedef
+ boost::archive::iterators::insert_linebreaks<
+ boost::archive::iterators::base64_from_binary<
+ boost::archive::iterators::transform_width<
+ CharType *
+ ,6
+ ,sizeof(CharType) * 8
+ >
+ >
+ ,72
+ >
+ translate_out;
+
+ std::copy(
+ translate_out(BOOST_MAKE_PFTO_WRAPPER(static_cast<CharType *>(rawdata))),
+ translate_out(BOOST_MAKE_PFTO_WRAPPER(rawdata + size)),
+ std::back_inserter(text_base64)
+ );
+
+ // convert from base64 to binary and compare with the original
+ typedef
+ boost::archive::iterators::transform_width<
+ boost::archive::iterators::binary_from_base64<
+ boost::archive::iterators::remove_whitespace<
+ BOOST_DEDUCED_TYPENAME text_base64_type::iterator
+ >
+ >,
+ sizeof(CharType) * 8,
+ 6
+ > translate_in;
+
+ BOOST_CHECK(
+ std::equal(
+ rawdata,
+ rawdata + size,
+ translate_in(BOOST_MAKE_PFTO_WRAPPER(text_base64.begin()))
+ )
+ );
+
+}
+
+int
+test_main( int /*argc*/, char* /*argv*/[] )
+{
+ test_base64<char>();
+ #ifndef BOOST_NO_CWCHAR
+ test_base64<wchar_t>();
+ #endif
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_list.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef> // NULL
+#include <fstream>
+
+#include <boost/config.hpp>
+#include <cstdio> // remove
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include <boost/archive/archive_exception.hpp>
+#include "test_tools.hpp"
+
+#include <boost/serialization/list.hpp>
+#ifdef BOOST_HAS_SLIST
+#include <boost/serialization/slist.hpp>
+#endif
+
+#include "A.hpp"
+#include "A.ipp"
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ std::list<A> alist;
+ alist.push_back(A());
+ alist.push_back(A());
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("alist",alist);
+ }
+
+ std::list<A> alist1;
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("alist",alist1);
+ }
+ BOOST_CHECK(alist == alist1);
+
+ #ifdef BOOST_HAS_SLIST
+ BOOST_STD_EXTENSION_NAMESPACE::slist<A> aslist;
+ aslist.push_front(A());
+ aslist.push_front(A());
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("aslist", aslist);
+ }
+ BOOST_STD_EXTENSION_NAMESPACE::slist<A> aslist1;{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("aslist", aslist1);
+ }
+ BOOST_CHECK(aslist == aslist1);
+
+ #endif
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_list.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef>
+#include <fstream>
+
+#include <boost/config.hpp>
+#include <cstdio> // remove
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/checked_delete.hpp>
+
+#include <boost/archive/archive_exception.hpp>
+#include "test_tools.hpp"
+
+#include <boost/serialization/list.hpp>
+#ifdef BOOST_HAS_SLIST
+#include <boost/serialization/slist.hpp>
+#endif
+#include <boost/serialization/nvp.hpp>
+
+#include "A.hpp"
+#include "A.ipp"
+
+template<class T>
+struct ptr_equal_to : public std::binary_function<T, T, bool>
+{
+ BOOST_STATIC_ASSERT(::boost::is_pointer<T>::value);
+ bool operator()(T const _Left, T const _Right) const
+ {
+ if(NULL == _Left && NULL == _Right)
+ return true;
+ if(typeid(*_Left) != typeid(*_Right))
+ return false;
+ return *_Left == *_Right;
+ }
+};
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ std::list<A *> alist;
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ A * free_a_ptr = new A;
+ alist.push_back(free_a_ptr);
+ alist.push_back(new A);
+ // verify that first element is the same as the free pointer
+ BOOST_CHECK((*alist.begin()) == free_a_ptr);
+ oa << boost::serialization::make_nvp("alist", alist);
+ oa << boost::serialization::make_nvp("free_a_ptr", free_a_ptr);
+ }
+ std::list<A *> alist1;
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ A * free_a_ptr1;
+ ia >> boost::serialization::make_nvp("alist", alist1);
+ ia >> boost::serialization::make_nvp("free_a_ptr", free_a_ptr1);
+ BOOST_CHECK(
+ alist.size() == alist1.size()
+ && std::equal(alist.begin(),alist.end(),alist1.begin(),ptr_equal_to<A *>())
+ );
+ // verify that first element is the same as the free pointer
+ BOOST_CHECK((*alist1.begin()) == free_a_ptr1);
+ }
+
+ std::for_each(
+ alist.begin(),
+ alist.end(),
+ boost::checked_deleter<A>()
+ );
+ std::for_each(
+ alist1.begin(),
+ alist1.end(),
+ boost::checked_deleter<A>()
+ );
+
+ #ifdef BOOST_HAS_SLIST
+ std::list<A *> aslist;
+ {
+ aslist.push_back(new A);
+ aslist.push_back(new A);
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ aslist.push_back(new A);
+ aslist.push_back(new A);
+ oa << boost::serialization::make_nvp("aslist", aslist);
+ }
+ std::list<A *> aslist1;
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("aslist", aslist1);
+ BOOST_CHECK(aslist.size() == aslist1.size() &&
+ std::equal(aslist.begin(),aslist.end(),aslist1.begin(),ptr_equal_to<A *>())
+ );
+ }
+ std::for_each(
+ aslist.begin(),
+ aslist.end(),
+ boost::checked_deleter<A>()
+ );
+ std::for_each(
+ aslist1.begin(),
+ aslist1.end(),
+ boost::checked_deleter<A>()
+ );
+ #endif
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_map.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <algorithm>
+#include <vector>
+#include <fstream>
+#include <cstddef> // size_t, NULL
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <cstdio>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::rand;
+ using ::size_t;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/map.hpp>
+
+#include "A.hpp"
+#include "A.ipp"
+
+///////////////////////////////////////////////////////
+// a key value initialized with a random value for use
+// in testing STL map serialization
+struct random_key {
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(
+ Archive & ar,
+ const unsigned int /* file_version */
+ ){
+ ar & boost::serialization::make_nvp("random_key", m_i);
+ }
+ int m_i;
+ random_key() : m_i(std::rand()){};
+ bool operator<(const random_key &rhs) const {
+ return m_i < rhs.m_i;
+ }
+ bool operator==(const random_key &rhs) const {
+ return m_i == rhs.m_i;
+ }
+ operator std::size_t () const { // required by hash_map
+ return m_i;
+ }
+};
+
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(random_key)
+
+void
+test_map(){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ BOOST_MESSAGE("map");
+ // test map of objects
+ std::map<random_key, A> amap;
+ amap.insert(std::make_pair(random_key(), A()));
+ amap.insert(std::make_pair(random_key(), A()));
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("amap", amap);
+ }
+ std::map<random_key, A> amap1;
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("amap", amap1);
+ }
+ BOOST_CHECK(amap == amap1);
+ std::remove(testfile);
+}
+
+void
+test_map_2(){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ BOOST_MESSAGE("map_2");
+ std::pair<int, int> a(11, 22);
+ std::map<int, int> b;
+ b[0] = 0;
+ b[-1] = -1;
+ b[1] = 1;
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ std::pair<int, int> * const pa = &a;
+ std::map<int, int> * const pb = &b;
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << BOOST_SERIALIZATION_NVP(pb);
+ oa << BOOST_SERIALIZATION_NVP(pa);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ std::pair<int, int> *pa = 0;
+ std::map<int, int> *pb = 0;
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> BOOST_SERIALIZATION_NVP(pb);
+ ia >> BOOST_SERIALIZATION_NVP(pa);
+ delete pa;
+ delete pb;
+ }
+ std::remove(testfile);
+}
+
+void
+test_multimap(){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ BOOST_MESSAGE("multimap");
+ std::multimap<random_key, A> amultimap;
+ amultimap.insert(std::make_pair(random_key(), A()));
+ amultimap.insert(std::make_pair(random_key(), A()));
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("amultimap", amultimap);
+ }
+ std::multimap<random_key, A> amultimap1;
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("amultimap", amultimap1);
+ }
+ BOOST_CHECK(amultimap == amultimap1);
+ std::remove(testfile);
+}
+
+#ifdef BOOST_HAS_HASH
+#include <boost/serialization/hash_map.hpp>
+
+namespace BOOST_STD_EXTENSION_NAMESPACE {
+ template<>
+ struct hash<random_key>{
+ std::size_t operator()(const random_key& r) const {
+ return (std::size_t)r;
+ }
+ };
+} // namespace BOOST_STD_EXTENSION_NAMESPACE
+
+void
+test_hash_map(){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ BOOST_CHECKPOINT("hash_map");
+ // test hash_map of objects
+ BOOST_STD_EXTENSION_NAMESPACE::hash_map<random_key, A> ahash_map;
+ ahash_map.insert(std::make_pair(random_key(), A()));
+ ahash_map.insert(std::make_pair(random_key(), A()));
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("ahashmap",ahash_map);
+ }
+ BOOST_STD_EXTENSION_NAMESPACE::hash_map<random_key, A> ahash_map1;
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("ahashmap",ahash_map1);
+ }
+
+ std::vector< std::pair<random_key, A> > tvec, tvec1;
+ std::copy(ahash_map.begin(), ahash_map.end(), std::back_inserter(tvec));
+ std::sort(tvec.begin(), tvec.end());
+ std::copy(ahash_map1.begin(), ahash_map1.end(), std::back_inserter(tvec1));
+ std::sort(tvec1.begin(), tvec1.end());
+ BOOST_CHECK(tvec == tvec1);
+
+ std::remove(testfile);
+}
+
+void
+test_hash_multimap(){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ BOOST_CHECKPOINT("hash_multimap");
+ BOOST_STD_EXTENSION_NAMESPACE::hash_multimap<random_key, A> ahash_multimap;
+ ahash_multimap.insert(std::make_pair(random_key(), A()));
+ ahash_multimap.insert(std::make_pair(random_key(), A()));
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("ahash_multimap", ahash_multimap);
+ }
+ BOOST_STD_EXTENSION_NAMESPACE::hash_multimap<random_key, A> ahash_multimap1;
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("ahash_multimap", ahash_multimap1);
+ }
+ std::vector< std::pair<random_key, A> > tvec, tvec1;
+ tvec.clear();
+ tvec1.clear();
+ std::copy(ahash_multimap.begin(), ahash_multimap.end(), std::back_inserter(tvec));
+ std::sort(tvec.begin(), tvec.end());
+ std::copy(ahash_multimap1.begin(), ahash_multimap1.end(), std::back_inserter(tvec1));
+ std::sort(tvec1.begin(), tvec1.end());
+ BOOST_CHECK(tvec == tvec1);
+ std::remove(testfile);
+}
+#endif
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ test_map();
+ test_map_2();
+ test_multimap();
+ #ifdef BOOST_HAS_HASH
+ test_hash_map();
+ test_hash_multimap();
+ #endif
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_mi.cpp
+
+// (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)
+
+// test of serialization of base classes with multiple inheritance
+// contributed by Peter Dimov
+
+#include <cstddef>
+#include <iostream>
+#include <fstream>
+
+#include <boost/config.hpp>
+#include <cstdio> // remove
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/base_object.hpp>
+
+class A
+{
+private:
+ friend class boost::serialization::access;
+ int x;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_NVP(x);
+ }
+public:
+ explicit A(int x = 0): x(x) {}
+ virtual ~A(); // = 0;
+ int get_x() const
+ {
+ return x;
+ }
+};
+
+inline A::~A()
+{
+}
+
+class B
+{
+private:
+ int y;
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_NVP(y);
+ }
+public:
+ explicit B(int y = 0): y(y) {}
+ virtual ~B(){}
+ int get_y() const
+ {
+ return y;
+ }
+};
+
+class C: public A, public B
+{
+private:
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(A);
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(B);
+ }
+public:
+ C(){}
+ C(int x, int y): A(x), B(y){}
+};
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ C * pc = new C(1, 2);
+ A * pa = pc;
+ B * pb = pc;
+
+ BOOST_CHECK(pa == pc);
+ BOOST_CHECK(pb == pc);
+
+ int x = pa->get_x();
+ int y = pb->get_y();
+
+ std::cout << "pa->get_x(): " << pa->get_x() << std::endl;
+ std::cout << "pb->get_y(): " << pb->get_y() << std::endl;
+
+ {
+ test_ostream ofs(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(ofs);
+ oa << BOOST_SERIALIZATION_NVP(pc);
+ oa << BOOST_SERIALIZATION_NVP(pa);
+ oa << BOOST_SERIALIZATION_NVP(pb);
+ }
+
+ delete pc;
+ pc = NULL;
+ pa = NULL;
+ pb = NULL;
+
+ {
+ test_istream ifs(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(ifs);
+ ia >> BOOST_SERIALIZATION_NVP(pc);
+ ia >> BOOST_SERIALIZATION_NVP(pa);
+ ia >> BOOST_SERIALIZATION_NVP(pb);
+ }
+
+ BOOST_CHECK(pa == pc);
+ BOOST_CHECK(pb == pc);
+
+ BOOST_CHECK(x == pa->get_x());
+ BOOST_CHECK(y == pb->get_y());
+
+ std::cout << "pa->get_x(): " << pa->get_x() << std::endl;
+ std::cout << "pb->get_y(): " << pb->get_y() << std::endl;
+
+ delete pc;
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_mult_archive_types.cpp
+
+// (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)
+
+#include <cstddef>
+#include <fstream>
+
+#include <boost/config.hpp>
+#include <cstdio> // remove
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/xml_oarchive.hpp>
+#include <boost/archive/xml_iarchive.hpp>
+#include "test_tools.hpp"
+
+#include <boost/serialization/export.hpp>
+#include <boost/serialization/nvp.hpp>
+
+// This is a simple class. It contains a counter of the number
+// of objects of this class which have been instantiated.
+class A
+{
+private:
+ friend class boost::serialization::access;
+ int x;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_NVP(x);
+ }
+public:
+ static int count;
+ A(){++count;} // default constructor
+ virtual ~A(){--count;} // default destructor
+};
+
+BOOST_CLASS_EXPORT(A)
+
+// B is a subclass of A
+class B : public A
+{
+private:
+ friend class boost::serialization::access;
+ int y;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(A);
+ }
+public:
+ static int count;
+ B() : A() {};
+ virtual ~B() {};
+};
+
+BOOST_CLASS_EXPORT(B)
+
+int A::count = 0;
+
+// Run tests by serializing two shared_ptrs into an archive of type
+// OARCH, clearing them (deleting the objects) and then reloading the
+// objects back from an archive of type OARCH.
+template<class OA, class IA>
+void test_save_and_load(A * first, A * second)
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ // Save
+ {
+ std::ofstream os(testfile);
+ OA oa(os);
+ oa << BOOST_SERIALIZATION_NVP(first);
+ oa << BOOST_SERIALIZATION_NVP(second);
+ }
+
+ // Clear the pointers, thereby destroying the objects they contain
+ first = NULL;
+ second = NULL;
+
+ // Load
+ {
+ std::ifstream is(testfile);
+ IA ia(is);
+ ia >> BOOST_SERIALIZATION_NVP(first);
+ ia >> BOOST_SERIALIZATION_NVP(second);
+ }
+ BOOST_CHECK(first == second);
+ std::remove(testfile);
+}
+
+using namespace boost::archive;
+
+// This does the tests
+int test_main(int /* argc */, char * /* argv */[])
+{
+ // Try to save and load pointers to As, to a text archive
+ A * a = new A;
+ A * a1 = a;
+ test_save_and_load<text_oarchive, text_iarchive>(a, a1);
+
+ // Try to save and load pointers to Bs, to a text archive
+ B * b = new B;
+ B * b1 = b;
+ test_save_and_load<text_oarchive, text_iarchive>(b, b1);
+
+ // Try to save and load pointers to As, to an xml archive
+ test_save_and_load<xml_oarchive, xml_iarchive>(a, a1);
+
+ // Try to save and load pointers to Bs, to an xml archive
+ test_save_and_load<xml_oarchive, xml_iarchive>(b, b1);
+
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_multiple_inheritance.cpp
+
+// (C) Copyright 2009 Robert Ramey.
+// 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)
+
+// test of serialization library for multiple inheritence situations
+
+#include <cassert>
+#include <fstream>
+
+#include <boost/config.hpp>
+#include <cstdio> // remove
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include <boost/serialization/access.hpp>
+#include <boost/serialization/base_object.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/export.hpp>
+
+struct Base1 {
+ int m_x;
+ Base1(){}
+ Base1(int x) : m_x(1 + x) {}
+ virtual ~Base1() {}
+ bool operator==(Base1 & rhs) const {
+ return m_x == rhs.m_x;
+ }
+ // serialize
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* file_version */) {
+ ar & BOOST_SERIALIZATION_NVP(m_x);
+ }
+};
+
+//BOOST_CLASS_EXPORT(Base1)
+
+struct Base2 {
+ int m_x;
+ Base2(){}
+ Base2(int x) : m_x(2 + x) {}
+ virtual ~Base2() {}
+ bool operator==(Base2 & rhs) const {
+ return m_x == rhs.m_x;
+ }
+ // serialize
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* file_version */) {
+ ar & BOOST_SERIALIZATION_NVP(m_x);
+ }
+};
+
+//BOOST_CLASS_EXPORT(Base2)
+
+struct Sub :
+ public Base1,
+ public Base2
+{
+ int m_x;
+ Sub(){}
+ Sub(int x) :
+ Base1(x),
+ Base2(x),
+ m_x(x)
+ {}
+ bool operator==(Sub & rhs) const {
+ if(! Base2::operator==(rhs))
+ return false;
+ if(! Base1::operator==(rhs))
+ return false;
+ return m_x == rhs.m_x;
+ }
+ virtual ~Sub() {}
+
+ // serialize
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */)
+ {
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base1);
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base2);
+ ar & BOOST_SERIALIZATION_NVP(m_x);
+ }
+};
+
+BOOST_CLASS_EXPORT(Sub)
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+ Base2 * pb2;
+ {
+ // serialize
+ pb2 = new Sub(2);
+
+ test_ostream ofs(testfile);
+ test_oarchive oa(ofs);
+ oa << boost::serialization::make_nvp("Base2", pb2);
+ }
+ Base2 * pb2_1;
+ {
+ // de-serialize
+ test_istream ifs(testfile);
+ test_iarchive ia(ifs);
+ ia >> boost::serialization::make_nvp("Base2", pb2_1);
+ }
+ Sub *s1 = dynamic_cast<Sub *>(pb2);
+ BOOST_CHECK(0 != s1);
+ Sub *s2 = dynamic_cast<Sub *>(pb2_1);
+ BOOST_CHECK(0 != s2);
+ BOOST_CHECK(*s1 == *s2);
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_archive_derivation.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef>
+#include <fstream>
+
+#include <boost/config.hpp>
+#include <cstdio> // remove
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include "D.hpp"
+#include "A.ipp"
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ const A a;
+ A a1;
+
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("a", a);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("a", a1);
+ }
+ BOOST_CHECK(a == a1);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_new_operator.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef> // NULL
+#include <cstdio> // remove
+#include <fstream>
+#include <new>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include <boost/serialization/access.hpp>
+
+#include "test_tools.hpp"
+
+#include "A.hpp"
+#include "A.ipp"
+
+class ANew : public A {
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned /*file_version*/){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(A);
+ }
+public:
+ static unsigned int m_new_calls;
+ static unsigned int m_delete_calls;
+ // implement class specific new/delete in terms standard
+ // implementation - we're testing serialization
+ // not "new" here.
+ static void * operator new(size_t s){
+ ++m_new_calls;
+ return ::operator new(s);
+ }
+ static void operator delete(void *p, std::size_t /*s*/){
+ ++m_delete_calls;
+ ::operator delete(p);
+ }
+};
+
+unsigned int ANew::m_new_calls = 0;
+unsigned int ANew::m_delete_calls = 0;
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+
+ BOOST_REQUIRE(NULL != testfile);
+
+ ANew *ta = new ANew();
+
+ BOOST_CHECK(1 == ANew::m_new_calls);
+ BOOST_CHECK(0 == ANew::m_delete_calls);
+
+ ANew *ta1 = NULL;
+
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("ta", ta);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("ta", ta1);
+ }
+ BOOST_CHECK(ta != ta1);
+ BOOST_CHECK(*ta == *ta1);
+
+ BOOST_CHECK(2 == ANew::m_new_calls);
+ BOOST_CHECK(0 == ANew::m_delete_calls);
+
+ std::remove(testfile);
+
+ delete ta;
+ delete ta1;
+
+ BOOST_CHECK(2 == ANew::m_new_calls);
+ BOOST_CHECK(2 == ANew::m_delete_calls);
+
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_no_rtti.cpp
+
+// (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)
+
+// note: this program tests the inter-operability of different
+// extended typeinfo systems. In this example, one class is
+// identified using the default RTTI while the other uses a custom
+// system based on the export key.
+//
+// As this program uses RTTI for one of the types, the test will fail
+// on a system for which RTTI is not enabled or not existent.
+
+#include <cstddef>
+#include <fstream>
+#include <iostream>
+
+#include <boost/config.hpp>
+#include <cstdio> // remove
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/archive/archive_exception.hpp>
+
+#include <boost/serialization/type_info_implementation.hpp>
+#include <boost/serialization/extended_type_info_no_rtti.hpp>
+#include <boost/serialization/export.hpp>
+#include <boost/serialization/nvp.hpp>
+
+#include "test_tools.hpp"
+#include <boost/preprocessor/stringize.hpp>
+#include BOOST_PP_STRINGIZE(BOOST_ARCHIVE_TEST)
+
+#include "polymorphic_base.hpp"
+#include "polymorphic_derived1.hpp"
+#include "polymorphic_derived2.hpp"
+
+template<class Archive>
+void polymorphic_derived2::serialize(
+ Archive &ar,
+ const unsigned int /* file_version */
+){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(polymorphic_base);
+}
+
+template void polymorphic_derived2::serialize(
+ test_oarchive & ar,
+ const unsigned int version
+);
+template void polymorphic_derived2::serialize(
+ test_iarchive & ar,
+ const unsigned int version
+);
+
+// save derived polymorphic class
+void save_derived(const char *testfile)
+{
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os);
+
+ polymorphic_derived1 *rd1 = new polymorphic_derived1;
+ polymorphic_derived2 *rd2 = new polymorphic_derived2;
+
+ std::cout << "saving polymorphic_derived1 (no_rtti)\n";
+ oa << BOOST_SERIALIZATION_NVP(rd1);
+
+ std::cout << "saving polymorphic_derived2\n";
+ oa << BOOST_SERIALIZATION_NVP(rd2);
+
+ const polymorphic_base *rb1 = rd1;
+ polymorphic_base *rb2 = rd2;
+ std::cout << "saving polymorphic_derived1 (no_rtti) through base (no_rtti)\n";
+ oa << BOOST_SERIALIZATION_NVP(rb1);
+ std::cout << "saving polymorphic_derived2 through base\n";
+ oa << BOOST_SERIALIZATION_NVP(rb2);
+
+ delete rd1;
+ delete rd2;
+}
+
+void load_derived(const char *testfile)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is);
+
+ polymorphic_derived1 *rd1 = NULL;
+ polymorphic_derived2 *rd2 = NULL;
+
+ std::cout << "loading polymorphic_derived1 (no_rtti)\n";
+ ia >> BOOST_SERIALIZATION_NVP(rd1);
+ BOOST_CHECK_MESSAGE(
+ boost::serialization::type_info_implementation<
+ polymorphic_derived1
+ >::type::get_const_instance()
+ ==
+ * boost::serialization::type_info_implementation<
+ polymorphic_derived1
+ >::type::get_const_instance().get_derived_extended_type_info(*rd1)
+ ,
+ "restored pointer d1 not of correct type"
+ );
+
+ std::cout << "loading polymorphic_derived2\n";
+ ia >> BOOST_SERIALIZATION_NVP(rd2);
+ BOOST_CHECK_MESSAGE(
+ boost::serialization::type_info_implementation<
+ polymorphic_derived2
+ >::type::get_const_instance()
+ ==
+ * boost::serialization::type_info_implementation<
+ polymorphic_derived2
+ >::type::get_const_instance().get_derived_extended_type_info(*rd2)
+ ,
+ "restored pointer d2 not of correct type"
+ );
+ polymorphic_base *rb1 = NULL;
+ polymorphic_base *rb2 = NULL;
+
+ // the above opereration registers the derived classes as a side
+ // effect. Hence, instances can now be correctly serialized through
+ // a base class pointer.
+ std::cout << "loading polymorphic_derived1 (no_rtti) through base (no_rtti)\n";
+ ia >> BOOST_SERIALIZATION_NVP(rb1);
+
+ BOOST_CHECK_MESSAGE(
+ rb1 == dynamic_cast<polymorphic_base *>(rd1),
+ "serialized pointers not correctly restored"
+ );
+
+ BOOST_CHECK_MESSAGE(
+ boost::serialization::type_info_implementation<
+ polymorphic_derived1
+ >::type::get_const_instance()
+ ==
+ * boost::serialization::type_info_implementation<
+ polymorphic_base
+ >::type::get_const_instance().get_derived_extended_type_info(*rb1)
+ ,
+ "restored pointer b1 not of correct type"
+ );
+ std::cout << "loading polymorphic_derived2 through base (no_rtti)\n";
+ ia >> BOOST_SERIALIZATION_NVP(rb2);
+
+ BOOST_CHECK_MESSAGE(
+ rb2 == dynamic_cast<polymorphic_base *>(rd2),
+ "serialized pointers not correctly restored"
+ );
+ BOOST_CHECK_MESSAGE(
+ boost::serialization::type_info_implementation<
+ polymorphic_derived2
+ >::type::get_const_instance()
+ ==
+ * boost::serialization::type_info_implementation<
+ polymorphic_base
+ >::type::get_const_instance().get_derived_extended_type_info(*rb2)
+ ,
+ "restored pointer b2 not of correct type"
+ );
+ delete rb1;
+ delete rb2;
+}
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+
+ BOOST_REQUIRE(NULL != testfile);
+
+ save_derived(testfile);
+ load_derived(testfile);
+
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_non_default_ctor.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+// this tests:
+// a) non-intrusive method of implementing serialization
+// b) usage of a non-default constructor
+
+#include <cstddef> // NULL
+#include <cstdio> // remove()
+#include <fstream>
+#include <cstdlib> // for rand()
+#include <cmath> // for fabs()
+#include <limits>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::rand;
+ using ::fabs;
+ using ::remove;
+#ifndef UNDER_CE
+ using ::numeric_limits;
+#endif
+}
+#endif
+
+#include <boost/archive/archive_exception.hpp>
+#include "test_tools.hpp"
+
+///////////////////////////////////////////////////////
+// simple class test - using non-intrusive syntax
+// illustrates the usage of the non-intrusve syntax
+class A
+{
+ friend class boost::serialization::access;
+
+ // note const values can only be initialized with a non
+ // non-default constructor
+ const int i;
+
+ signed char s;
+ unsigned char t;
+ signed int u;
+ unsigned int v;
+ float w;
+ double x;
+ bool operator==(const A & rhs) const;
+ bool operator<(const A & rhs) const;
+
+ template<class Archive>
+ void serialize(Archive & ar,const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_NVP(s);
+ ar & BOOST_SERIALIZATION_NVP(t);
+ ar & BOOST_SERIALIZATION_NVP(u);
+ ar & BOOST_SERIALIZATION_NVP(v);
+ ar & BOOST_SERIALIZATION_NVP(w);
+ ar & BOOST_SERIALIZATION_NVP(x);
+ }
+ A(const A & rhs);
+ A & operator=(const A & rhs);
+public:
+ static int count;
+ const int & get_i() const {
+ return i;
+ }
+ A(int i_);
+ ~A();
+};
+
+int A::count = 0;
+
+A::A(int i_) :
+ i(i_),
+ s(static_cast<signed char>(0xff & std::rand())),
+ t(static_cast<signed char>(0xff & std::rand())),
+ u(std::rand()),
+ v(std::rand()),
+ w((float)std::rand() / std::rand()),
+ x((double)std::rand() / std::rand())
+{
+ ++count;
+}
+
+A::~A(){
+ --count;
+}
+
+bool A::operator==(const A &rhs) const
+{
+ return
+ s == rhs.s
+ && t == rhs.t
+ && u == rhs.u
+ && v == rhs.v
+ && std::fabs(w - rhs.w) <= std::numeric_limits<float>::round_error()
+ && std::fabs(x - rhs.x) <= std::numeric_limits<float>::round_error()
+ ;
+}
+
+bool A::operator<(const A &rhs) const
+{
+ if(! (s == rhs.s) )
+ return s < rhs.s;
+ if(! (t == rhs.t) )
+ return t < rhs.t;
+ if(! (u == rhs.u) )
+ return t < rhs.u;
+ if(! (v == rhs.v) )
+ return t < rhs.v;
+ if(! (std::fabs(w - rhs.w) < std::numeric_limits<float>::round_error() ) )
+ return t < rhs.w;
+ if(! (std::fabs(x - rhs.x) < std::numeric_limits<float>::round_error() ) )
+ return t < rhs.x;
+ return false;
+}
+
+namespace boost {
+namespace serialization {
+
+template<class Archive>
+inline void save_construct_data(
+ Archive & ar,
+ const A * a,
+ const BOOST_PFTO unsigned int /* file_version */
+){
+ // variable used for construction
+ ar << boost::serialization::make_nvp("i", a->get_i());
+}
+
+template<class Archive>
+inline void load_construct_data(
+ Archive & ar,
+ A * a,
+ const unsigned int /* file_version */
+){
+ int i;
+ ar >> boost::serialization::make_nvp("i", i);
+ ::new(a)A(i);
+}
+
+} // serialization
+} // namespace boost
+
+void save(const char * testfile){
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ A a(2);
+
+ oa << BOOST_SERIALIZATION_NVP(a);
+
+ // save a copy pointer to this item
+ A *pa1 = &a;
+ oa << BOOST_SERIALIZATION_NVP(pa1);
+
+ // save pointer to a new object
+ A *pa2 = new A(4);
+ oa << BOOST_SERIALIZATION_NVP(pa2);
+
+ delete pa2;
+}
+void load(const char * testfile){
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+
+ A a(4);
+ ia >> BOOST_SERIALIZATION_NVP(a);
+
+ A *pa1;
+ ia >> BOOST_SERIALIZATION_NVP(pa1);
+ BOOST_CHECK_MESSAGE(pa1 == &a, "Copy of pointer not correctly restored");
+
+ A *pa2;
+ ia >> BOOST_SERIALIZATION_NVP(pa2);
+ BOOST_CHECK_MESSAGE(pa2 != &a, "Pointer not correctly restored");
+
+ delete pa2;
+}
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+ save(testfile);
+ load(testfile);
+ BOOST_CHECK(0 == A::count);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_non_default_ctor2.cpp
+
+// (C) Copyright 2002 Martin Ecker.
+// 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)
+
+// should pass compilation and execution
+
+// this tests complex usage of non-default constructor. Specifically
+// the case where a constructor serializes a pointer member.
+
+#include <fstream>
+
+#include <boost/config.hpp>
+
+#include "test_tools.hpp"
+
+class IntValueHolder
+{
+public:
+ IntValueHolder()
+ : value(0)
+ {}
+
+ IntValueHolder(int newvalue)
+ : value(newvalue)
+ {}
+
+ int GetValue() const { return value; }
+
+private:
+ int value;
+
+ friend class boost::serialization::access;
+
+ template <class ArchiveT>
+ void serialize(ArchiveT& ar, const unsigned int /* file_version */)
+ {
+ ar & BOOST_SERIALIZATION_NVP(value);
+ }
+};
+
+class FloatValueHolder
+{
+public:
+ FloatValueHolder()
+ : value(0)
+ {}
+
+ FloatValueHolder(float newvalue)
+ : value(newvalue)
+ {}
+
+ float GetValue() const { return value; }
+
+private:
+ float value;
+
+ friend class boost::serialization::access;
+
+ template <class ArchiveT>
+ void serialize(ArchiveT& ar, const unsigned int /* file_version */)
+ {
+ ar & BOOST_SERIALIZATION_NVP(value);
+ }
+};
+
+class A
+{
+public:
+ A(const IntValueHolder& initialValue)
+ : value(initialValue), floatValue(new FloatValueHolder(10.0f))
+ {}
+
+ ~A()
+ {
+ delete floatValue;
+ }
+
+ IntValueHolder value;
+ FloatValueHolder* floatValue;
+
+private:
+ friend class boost::serialization::access;
+
+ template <class ArchiveT>
+ void serialize(ArchiveT& ar, const unsigned int /* file_version */)
+ {
+ ar & BOOST_SERIALIZATION_NVP(floatValue);
+ }
+};
+
+namespace boost {
+namespace serialization {
+
+template <class ArchiveT>
+void save_construct_data(
+ ArchiveT& archive,
+ const A* p,
+ const BOOST_PFTO unsigned int /*version*/
+){
+ archive & boost::serialization::make_nvp("initialValue", p->value);
+}
+
+template <class ArchiveT>
+void load_construct_data(
+ ArchiveT& archive,
+ A* p,
+ const unsigned int /*version*/
+){
+ IntValueHolder initialValue;
+ archive & boost::serialization::make_nvp("initialValue", initialValue);
+
+ ::new (p) A(initialValue);
+}
+
+} // serialization
+} // namespace boost
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+ A* a = new A(5);
+
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << BOOST_SERIALIZATION_NVP(a);
+ }
+
+ A* a_new;
+
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> BOOST_SERIALIZATION_NVP(a_new);
+ }
+ delete a;
+ delete a_new;
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_non_intrursive.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+// this tests:
+// a) non-intrusive method of implementing serialization
+// b) usage of a non-default constructor
+
+#include <fstream>
+#include <cstdlib> // for rand()
+#include <cstdio> // remove
+#include <cmath> // for fabs()
+#include <limits>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::rand;
+ using ::fabs;
+ using ::remove;
+#ifndef UNDER_CE
+ using ::numeric_limits;
+#endif
+}
+#endif
+
+#include <boost/archive/archive_exception.hpp>
+#include "test_tools.hpp"
+
+///////////////////////////////////////////////////////
+// simple class test - using non-intrusive syntax
+// illustrates the usage of the non-intrusve syntax
+class A
+{
+public:
+ signed char s;
+ unsigned char t;
+ signed int u;
+ unsigned int v;
+ float w;
+ double x;
+ A();
+ bool operator==(const A & rhs) const;
+ bool operator<(const A & rhs) const;
+};
+
+A::A() :
+ s(static_cast<signed char>(0xff & std::rand())),
+ t(static_cast<signed char>(0xff & std::rand())),
+ u(std::rand()),
+ v(std::rand()),
+ w((float)std::rand() / std::rand()),
+ x((double)std::rand() / std::rand())
+{
+}
+
+bool A::operator==(const A &rhs) const
+{
+ return
+ s == rhs.s
+ && t == rhs.t
+ && u == rhs.u
+ && v == rhs.v
+ && std::fabs(w - rhs.w) <= std::numeric_limits<float>::round_error()
+ && std::fabs(x - rhs.x) <= std::numeric_limits<float>::round_error()
+ ;
+}
+
+bool A::operator<(const A &rhs) const
+{
+ if(! (s == rhs.s) )
+ return s < rhs.s;
+ if(! (t == rhs.t) )
+ return t < rhs.t;
+ if(! (u == rhs.u) )
+ return t < rhs.u;
+ if(! (v == rhs.v) )
+ return t < rhs.v;
+ if(! (std::fabs(w - rhs.w) < std::numeric_limits<float>::round_error() ) )
+ return t < rhs.w;
+ if(! (std::fabs(x - rhs.x) < std::numeric_limits<float>::round_error() ) )
+ return t < rhs.x;
+ return false;
+}
+
+// note the following:
+
+// function specializations must be defined in the appropriate
+// namespace - boost::serialization
+namespace boost {
+namespace serialization {
+
+// This first set of overrides should work with all compilers.
+
+// The last argument is int while the default versions
+// defined in serialization.hpp have long as the last argument.
+// This is part of the work around for compilers that don't
+// support correct function template ordering. These functions
+// are always called with 0 (i.e. an int) as the last argument.
+// Our specialized versions also have int as the last argument
+// while the default versions have a long as the last argument.
+// This makes our specialized versions a better match than the
+// default ones as no argument conversion is required to make a match
+template<class Archive>
+void serialize(
+ Archive & ar,
+ A & a,
+ const unsigned int /* file_version */
+){
+ ar & boost::serialization::make_nvp("s", a.s);
+ ar & boost::serialization::make_nvp("t", a.t);
+ ar & boost::serialization::make_nvp("u", a.u);
+ ar & boost::serialization::make_nvp("v", a.v);
+ ar & boost::serialization::make_nvp("w", a.w);
+ ar & boost::serialization::make_nvp("x", a.x);
+}
+
+} // serialization
+} // namespace boost
+
+void save(const char * testfile){
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ A a;
+
+ oa << BOOST_SERIALIZATION_NVP(a);
+
+ // save a copy pointer to this item
+ A *pa1 = &a;
+ oa << BOOST_SERIALIZATION_NVP(pa1);
+
+ // save pointer to a new object
+ A *pa2 = new A();
+ oa << BOOST_SERIALIZATION_NVP(pa2);
+
+ delete pa2;
+}
+
+void load(const char * testfile){
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+
+ A a;
+ ia >> BOOST_SERIALIZATION_NVP(a);
+
+ A *pa1;
+ ia >> BOOST_SERIALIZATION_NVP(pa1);
+ BOOST_CHECK_MESSAGE(pa1 == &a, "Copy of pointer not correctly restored");
+
+ A *pa2;
+ ia >> BOOST_SERIALIZATION_NVP(pa2);
+ BOOST_CHECK_MESSAGE(pa2 != &a, "Pointer not correctly restored");
+
+ delete pa2;
+}
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+ save(testfile);
+ load(testfile);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_non_serializable.cpp: test implementation level trait
+
+// (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)
+
+// test implementation level "not_serializable"
+// should fail compilation
+
+#include <fstream>
+
+#include "test_tools.hpp"
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/nvp.hpp>
+
+class A
+{
+};
+
+BOOST_CLASS_IMPLEMENTATION(A, boost::serialization::not_serializable)
+
+void out(A & a)
+{
+ test_ostream os("testfile", TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << BOOST_SERIALIZATION_NVP(a);
+}
+
+void in(A & a)
+{
+ test_istream is("testfile", TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> BOOST_SERIALIZATION_NVP(a);
+}
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ A a;
+ out(a);
+ in(a);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_null_ptr.cpp: test implementation level trait
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef> // NULL
+#include <cstdio> // remove
+#include <fstream>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+#include <boost/serialization/base_object.hpp>
+
+class polymorphic_base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & /* ar */, const unsigned int /* file_version */){
+ }
+public:
+ virtual ~polymorphic_base(){};
+};
+
+class polymorphic_derived1 : public polymorphic_base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(polymorphic_base);
+ }
+};
+
+// save unregistered polymorphic classes
+void save(const char *testfile)
+{
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+
+ polymorphic_base *rb1 = NULL;
+ polymorphic_derived1 *rd1 = NULL;
+
+ oa << BOOST_SERIALIZATION_NVP(rb1);
+ oa << BOOST_SERIALIZATION_NVP(rd1);
+}
+
+// load unregistered polymorphic classes
+void load(const char *testfile)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+
+ polymorphic_derived1 dummy;
+
+ polymorphic_base *rb1 = & dummy;
+ polymorphic_derived1 *rd1 = & dummy;
+
+ ia >> BOOST_SERIALIZATION_NVP(rb1);
+ BOOST_CHECK_MESSAGE(NULL == rb1, "Null pointer not restored");
+
+ ia >> BOOST_SERIALIZATION_NVP(rd1);
+ BOOST_CHECK_MESSAGE(NULL == rd1, "Null pointer not restored");
+
+ delete rb1;
+ delete rd1;
+}
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+ save(testfile);
+ load(testfile);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_nvp.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef> // NULL
+#include <cstdio> // remove
+#include <fstream>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include <boost/serialization/nvp.hpp>
+
+#include "B.hpp"
+#include "A.ipp"
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ B b, b1;
+
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << BOOST_SERIALIZATION_NVP(b);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> BOOST_SERIALIZATION_NVP(b1);
+ }
+ BOOST_CHECK(b == b1);
+
+ B *bptr = &b;
+ B *bptr1;
+
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << BOOST_SERIALIZATION_NVP(bptr);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> BOOST_SERIALIZATION_NVP(bptr1);
+ }
+ BOOST_CHECK(b == *bptr1);
+
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_object.cpp
+
+// (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)
+
+// test implementation level "object_serializable"
+// should pass compilation and execution
+
+#include <cstddef> // NULL
+#include <cstdio> // remove
+#include <fstream>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/nvp.hpp>
+
+class A
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & /* ar */, const unsigned int /* file_version */){
+ }
+};
+
+BOOST_CLASS_IMPLEMENTATION(A, boost::serialization::object_serializable)
+
+// note: version can be assigned only to objects whose implementation
+// level is object_class_info. So, doing the following will result in
+// a static assertion
+// BOOST_CLASS_VERSION(A, 2);
+
+void out(const char *testfile, A & a)
+{
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << BOOST_SERIALIZATION_NVP(a);
+}
+
+void in(const char *testfile, A & a)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> BOOST_SERIALIZATION_NVP(a);
+}
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ A a;
+ out(testfile, a);
+ in(testfile, a);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_optional.cpp
+
+// (C) Copyright 2004 Pavel Vozenilek
+// 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)
+
+// should pass compilation and execution
+
+#include <cstddef> // NULL
+#include <cstdio> // remove
+#include <fstream>
+
+#include <boost/config.hpp>
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+
+#include <boost/archive/archive_exception.hpp>
+#include "test_tools.hpp"
+
+#include <boost/serialization/optional.hpp>
+
+#include "A.hpp"
+#include "A.ipp"
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ const boost::optional<int> aoptional1;
+ const boost::optional<int> aoptional2(123);
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("aoptional1",aoptional1);
+ oa << boost::serialization::make_nvp("aoptional2",aoptional2);
+ }
+
+ boost::optional<int> aoptional1a(999);
+ boost::optional<int> aoptional2a;
+
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("aoptional1",aoptional1a);
+ ia >> boost::serialization::make_nvp("aoptional2",aoptional2a);
+ }
+ BOOST_CHECK(aoptional1 == aoptional1a);
+ BOOST_CHECK(aoptional2 == aoptional2a);
+
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_pimpl.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <boost/compatibility/cpp_c_headers/cstdio> // for tmpnam
+
+#include <fstream>
+#include <boost/serialization/nvp.hpp>
+
+#include "test_tools.hpp"
+
+class B;
+
+class A {
+^ friend boost::serialization::access;
+^ B *pimpl;
+^ template<class Archive>
+^ void serialize(Archive & ar, const unsigned int file_version);
+};
+
+int test_main( int argc, char* argv[] )
+{
+ char testfile[TMP_MAX];
+ std::tmpnam(testfile);
+// BOOST_REQUIRE(NULL != testfile);
+
+ A a, a1;
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os);
+ oa << BOOST_SERIALIZATION_NVP(a);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is);
+ BOOST_SERIALIZATION_NVP(a1);
+ }
+// BOOST_CHECK(a != a1);
+ return 0;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_polymorphic.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef> // NULL
+#include <cstdio> // remove
+#include <fstream>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+// the following is to ensure that when one of the libraries changes
+// BJAM rebuilds and relinks the test.
+/*
+#include "polymorphic_text_archive.hpp"
+#include "polymorphic_text_warchive.hpp"
+#include "polymorphic_binary_archive.hpp"
+#include "polymorphic_xml_archive.hpp"
+#include "polymorphic_xml_warchive.hpp"
+*/
+
+#include "test_tools.hpp"
+
+#include <boost/archive/polymorphic_oarchive.hpp>
+#include <boost/archive/polymorphic_iarchive.hpp>
+
+#include <boost/serialization/nvp.hpp>
+#include "test_polymorphic_A.hpp"
+
+int test_main(int /* argc */, char * /* argv */ [])
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+ const data d;
+ data d1;
+ // test using using polymorphic interface
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa_implementation(os, TEST_ARCHIVE_FLAGS);
+ boost::archive::polymorphic_oarchive & oa_interface = oa_implementation;
+ oa_interface << BOOST_SERIALIZATION_NVP(d);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia_implementation(is, TEST_ARCHIVE_FLAGS);
+ boost::archive::polymorphic_iarchive & ia_interface = ia_implementation;
+ ia_interface >> BOOST_SERIALIZATION_NVP(d1);
+ }
+ BOOST_CHECK(d == d1);
+ std::remove(testfile);
+
+ // test using using polymorphic implementation.
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa_implementation(os, TEST_ARCHIVE_FLAGS);
+ oa_implementation << BOOST_SERIALIZATION_NVP(d);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia_implementation(is, TEST_ARCHIVE_FLAGS);
+ ia_implementation >> BOOST_SERIALIZATION_NVP(d1);
+ }
+ BOOST_CHECK(d == d1);
+ std::remove(testfile);
+
+ // test using using polymorphic implementation.
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ boost::archive::polymorphic_oarchive * oa_implementation
+ = new test_oarchive(os, TEST_ARCHIVE_FLAGS);
+ *oa_implementation << BOOST_SERIALIZATION_NVP(d);
+ delete oa_implementation;
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ boost::archive::polymorphic_iarchive * ia_implementation
+ = new test_iarchive(is, TEST_ARCHIVE_FLAGS);
+ *ia_implementation >> BOOST_SERIALIZATION_NVP(d1);
+ delete ia_implementation;
+ }
+ BOOST_CHECK(d == d1);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_polymorphic2.cpp
+
+// (C) Copyright 2009 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)
+
+// should pass compilation and execution
+#include <fstream>
+
+#include "test_tools.hpp"
+
+#include "test_polymorphic2.hpp"
+
+int test_main(int /*argc*/, char* /*argv*/[])
+{
+ A *a = new B();
+ a->i = 3;
+
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa_implementation(os, TEST_ARCHIVE_FLAGS);
+ boost::archive::polymorphic_oarchive & opa = oa_implementation;
+ opa << BOOST_SERIALIZATION_NVP(a);
+ }
+ A *loaded = 0;
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia_implementation(is, TEST_ARCHIVE_FLAGS);
+ boost::archive::polymorphic_iarchive & ipa = ia_implementation;
+ ipa >> BOOST_SERIALIZATION_NVP(loaded);
+ }
+ BOOST_CHECK(a->i == loaded->i);
+ delete a;
+ delete loaded;
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_polymorphic2.hpp
+
+// (C) Copyright 2009 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)
+
+// should pass compilation and execution
+namespace boost {
+namespace archive {
+ class polymorphic_oarchive;
+ class polymorphic_iarchive;
+}
+}
+
+struct A {
+public:
+ A() {}
+ virtual ~A() {}
+
+ void serialize(
+ boost::archive::polymorphic_oarchive &ar,
+ const unsigned int /*version*/
+ );
+ void serialize(
+ boost::archive::polymorphic_iarchive &ar,
+ const unsigned int /*version*/
+ );
+
+ int i;
+};
+
+struct B : A {
+ void serialize(
+ boost::archive::polymorphic_oarchive &ar,
+ const unsigned int /*version*/
+ );
+ void serialize(
+ boost::archive::polymorphic_iarchive &ar,
+ const unsigned int /*version*/
+ );
+};
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_polymorphic2imp.cpp
+
+// (C) Copyright 2009 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)
+
+// should pass compilation and execution
+
+#include <boost/serialization/export.hpp>
+#include <boost/archive/polymorphic_oarchive.hpp>
+#include <boost/archive/polymorphic_iarchive.hpp>
+
+#include "test_polymorphic2.hpp"
+
+void A::serialize(
+ boost::archive::polymorphic_oarchive &ar,
+ const unsigned int /*version*/
+){
+ ar & BOOST_SERIALIZATION_NVP(i);
+}
+void A::serialize(
+ boost::archive::polymorphic_iarchive &ar,
+ const unsigned int /*version*/
+){
+ ar & BOOST_SERIALIZATION_NVP(i);
+}
+// note: only the most derived classes need be exported
+// BOOST_CLASS_EXPORT(A)
+
+void B::serialize(
+ boost::archive::polymorphic_oarchive &ar,
+ const unsigned int /*version*/
+){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(A);
+}
+void B::serialize(
+ boost::archive::polymorphic_iarchive &ar,
+ const unsigned int /*version*/
+){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(A);
+}
+BOOST_CLASS_EXPORT(B)
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_polymorphic_A.cpp
+
+// (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)
+
+#include "test_polymorphic_A.hpp"
+#include <boost/serialization/nvp.hpp>
+
+#include "A.hpp"
+#include "A.ipp"
+
+data::data() :
+ a(new A)
+{}
+data::~data(){
+ delete a;
+}
+
+bool data::operator==(const data & rhs) const {
+ return * (a) == *(rhs.a);
+}
+
+#if 0 // this method fails with msvc 6.0 and borland
+// now we can define the serialization for class A
+template<class Archive>
+void data::serialize(Archive & ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_NVP(a);
+}
+
+// without the explicit instantiations below, the program will
+// fail to link for lack of instantiantiation of the above function
+// note: the following failed to fix link errors for vc 7.0 !
+#include <boost/archive/polymorphic_oarchive.hpp>
+
+template void data::serialize<boost::archive::polymorphic_oarchive>(
+ boost::archive::polymorphic_oarchive & ar,
+ const unsigned int file_version
+);
+
+#include <boost/archive/polymorphic_iarchive.hpp>
+
+template void data::serialize<boost::archive::polymorphic_iarchive>(
+ boost::archive::polymorphic_iarchive & ar,
+ const unsigned int file_version
+);
+#endif
+
+// so use this
+void data::serialize(boost::archive::polymorphic_oarchive & ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_NVP(a);
+}
+
+void data::serialize(boost::archive::polymorphic_iarchive & ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_NVP(a);
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_polymorphic_A.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)
+
+// class whose declaration is hidden by a pointer
+// #include <boost/serialization/scoped_ptr.hpp>
+
+#include <boost/archive/polymorphic_oarchive.hpp>
+#include <boost/archive/polymorphic_iarchive.hpp>
+
+class A;
+
+struct data {
+ // class a contains a pointer to a "hidden" declaration
+ // borland scoped_ptr doesn't work !!!
+ // boost::scoped_ptr<A> a;
+ A * a;
+// template<class Archive>
+// void serialize(Archive & ar, const unsigned int file_version);
+ void serialize(boost::archive::polymorphic_oarchive & ar, const unsigned int file_version);
+ void serialize(boost::archive::polymorphic_iarchive & ar, const unsigned int file_version);
+ data();
+ ~data();
+ bool operator==(const data & rhs) const;
+};
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_primitive.cpp
+
+// (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)
+
+// test implementation level "primitive_type"
+
+#include <cstddef> // NULL
+#include <fstream>
+
+#include "test_tools.hpp"
+
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/nvp.hpp>
+
+struct A
+{
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */){
+ // note: should never fail here
+ BOOST_STATIC_ASSERT(0 == sizeof(Archive));
+ }
+};
+
+std::ostream & operator<<(std::ostream &os, const A & /* a */){ return os;}
+std::istream & operator>>(std::istream &is, A & /* a */){return is;}
+
+#ifndef BOOST_NO_STD_WSTREAMBUF
+std::wostream & operator<<(std::wostream &os, const A & /* a */){ return os;}
+std::wistream & operator>>(std::wistream &is, A & /* a */){return is;}
+#endif
+
+BOOST_CLASS_IMPLEMENTATION(A, boost::serialization::primitive_type)
+
+void out(const char *testfile, A & a)
+{
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << BOOST_SERIALIZATION_NVP(a);
+}
+
+void in(const char *testfile, A & a)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> BOOST_SERIALIZATION_NVP(a);
+}
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ A a;
+ out(testfile, a);
+ in(testfile, a);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_private_base.cpp
+
+// (C) Copyright 2009 Eric Moyer - 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)
+
+// should pass compilation and execution
+
+// invoke header for a custom archive test.
+
+#include <fstream>
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include <boost/serialization/access.hpp>
+#include <boost/serialization/base_object.hpp>
+#include <boost/serialization/export.hpp>
+
+#include "test_tools.hpp"
+
+class Base {
+ friend class boost::serialization::access;
+ int m_i;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int version){
+ ar & m_i;
+ }
+protected:
+ bool operator==(const Base &rhs) const {
+ return m_i == rhs.m_i;
+ }
+ Base(int i = 0) :
+ m_i(i)
+ {}
+ virtual ~Base();
+};
+
+class Derived : public Base {
+ friend class boost::serialization::access;
+private:
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int version){
+ ar & boost::serialization::base_object<Base>(*this);
+ }
+public:
+ bool operator==(const Derived &rhs) const {
+ return Base::operator==(rhs);
+ }
+ Derived(int i = 0) :
+ Base(i)
+ {}
+};
+
+BOOST_CLASS_EXPORT(Derived)
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ Derived a(1), a1(2);
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("a", a);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("a", a1);
+ }
+ BOOST_CHECK_EQUAL(a, a1);
+ std::remove(testfile);
+
+ Base *ta = new Derived(1);
+ Base *ta1 = NULL;
+
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("ta", ta);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("ta", ta1);
+ }
+ BOOST_CHECK(ta != ta1);
+ BOOST_CHECK(*static_cast<Derived *>(ta) == *static_cast<Derived *>(ta1));
+ std::remove(testfile);
+ return 0;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_private_ctor.cpp
+
+// (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)
+
+#include <sstream>
+
+#include "test_tools.hpp"
+
+#include <boost/serialization/vector.hpp>
+
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/text_oarchive.hpp>
+
+class V {
+ friend int test_main(int /* argc */, char * /* argv */[]);
+ friend class boost::serialization::access;
+ int m_i;
+ V() :
+ m_i(0)
+ {}
+ ~V(){}
+ template<class Archive>
+ void serialize(Archive& ar, unsigned /*version*/)
+ {
+ ar & m_i;
+ }
+ bool operator==(const V & v) const {
+ return m_i == v.m_i;
+ }
+};
+
+int test_main(int /* argc */, char * /* argv */[])
+{
+ std::stringstream ss;
+ const V v;
+ {
+ boost::archive::text_oarchive oa(ss);
+ oa << v;
+ }
+ V v1;
+ {
+ boost::archive::text_iarchive ia(ss);
+ ia >> v1;
+ }
+ BOOST_CHECK(v == v1);
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_recurrsion.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef> // NULL
+#include <cstdio> // remove
+#include <fstream>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include "J.hpp"
+#include "A.ipp"
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ // test recursive structure
+ J j, j1;
+ j.j = &j;
+
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << BOOST_SERIALIZATION_NVP(j);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> BOOST_SERIALIZATION_NVP(j1);
+ }
+ BOOST_CHECK(j == j1);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_registered.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef> // NULL
+#include <cstdio> // remove
+#include <fstream>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include <boost/archive/archive_exception.hpp>
+#include "test_tools.hpp"
+
+#include <boost/serialization/base_object.hpp>
+#include <boost/serialization/type_info_implementation.hpp>
+
+class polymorphic_base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & /* ar */, const unsigned int /* file_version */){
+ }
+public:
+ virtual ~polymorphic_base(){};
+};
+
+class polymorphic_derived1 : public polymorphic_base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(polymorphic_base);
+ }
+};
+
+class polymorphic_derived2 : public polymorphic_base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(polymorphic_base);
+ }
+};
+
+// save derived polymorphic class
+void save_derived(const char *testfile)
+{
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+
+ polymorphic_derived1 *rd1 = new polymorphic_derived1;
+ polymorphic_derived2 *rd2 = new polymorphic_derived2;
+
+ // registration IS necessary when serializing pointers of
+ // polymorphic classes
+ oa.register_type(static_cast<polymorphic_derived1 *>(NULL));
+ oa.register_type(static_cast<polymorphic_derived2 *>(NULL));
+ oa << BOOST_SERIALIZATION_NVP(rd1);
+ oa << BOOST_SERIALIZATION_NVP(rd2);
+
+ // the above opereration registers the derived classes as a side
+ // effect. Hence, instances can now be correctly serialized through
+ // a base class pointer.
+ polymorphic_base *rb1 = rd1;
+ polymorphic_base *rb2 = rd2;
+ oa << BOOST_SERIALIZATION_NVP(rb1);
+ oa << BOOST_SERIALIZATION_NVP(rb2);
+
+ delete rd1;
+ delete rd2;
+}
+
+// save derived polymorphic class
+void load_derived(const char *testfile)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+
+ polymorphic_derived1 *rd1 = NULL;
+ polymorphic_derived2 *rd2 = NULL;
+
+ // registration IS necessary when serializing pointers of
+ // polymorphic classes
+ ia.register_type(static_cast<polymorphic_derived1 *>(NULL));
+ ia.register_type(static_cast<polymorphic_derived2 *>(NULL));
+
+ ia >> BOOST_SERIALIZATION_NVP(rd1);
+
+ const boost::serialization::extended_type_info * p1;
+ p1 = & boost::serialization::type_info_implementation<polymorphic_derived1>
+ ::type::get_const_instance();
+
+ BOOST_CHECK(NULL != p1);
+
+ const boost::serialization::extended_type_info * p2;
+ p2 = boost::serialization::type_info_implementation<polymorphic_derived1>
+ ::type::get_const_instance().get_derived_extended_type_info(*rd1);
+
+ BOOST_CHECK(NULL != p2);
+
+ BOOST_CHECK_MESSAGE(p1 == p2, "restored pointer d1 not of correct type");
+
+ ia >> BOOST_SERIALIZATION_NVP(rd2);
+
+ BOOST_CHECK_MESSAGE(
+ & boost::serialization::type_info_implementation<polymorphic_derived2>
+ ::type::get_const_instance()
+ ==
+ boost::serialization::type_info_implementation<polymorphic_derived2>
+ ::type::get_const_instance().get_derived_extended_type_info(*rd2),
+ "restored pointer d2 not of correct type"
+ );
+
+ polymorphic_base *rb1 = NULL;
+ polymorphic_base *rb2 = NULL;
+
+ // the above opereration registers the derived classes as a side
+ // effect. Hence, instances can now be correctly serialized through
+ // a base class pointer.
+ ia >> BOOST_SERIALIZATION_NVP(rb1);
+
+ BOOST_CHECK_MESSAGE(
+ rb1 == dynamic_cast<polymorphic_base *>(rd1),
+ "serialized pointers not correctly restored"
+ );
+
+ p1 = & boost::serialization::type_info_implementation<polymorphic_derived1>
+ ::type::get_const_instance();
+
+ BOOST_CHECK(NULL != p1);
+
+ p2 = boost::serialization::type_info_implementation<polymorphic_base>
+ ::type::get_const_instance().get_derived_extended_type_info(*rb1);
+
+ BOOST_CHECK(NULL != p2);
+
+ BOOST_CHECK_MESSAGE(p1 == p2, "restored pointer b1 not of correct type");
+
+ ia >> BOOST_SERIALIZATION_NVP(rb2);
+
+ BOOST_CHECK_MESSAGE(
+ rb2 == dynamic_cast<polymorphic_base *>(rd2),
+ "serialized pointers not correctly restored"
+ );
+
+ BOOST_CHECK_MESSAGE(
+ & boost::serialization::type_info_implementation<polymorphic_derived2>
+ ::type::get_const_instance()
+ == boost::serialization::type_info_implementation<polymorphic_base>
+ ::type::get_const_instance().get_derived_extended_type_info(*rb2),
+ "restored pointer b2 not of correct type"
+ );
+
+ delete rb1;
+ delete rb2;
+}
+
+// save registered polymorphic class
+void save_registered(const char *testfile)
+{
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+
+ polymorphic_base *rb1 = new polymorphic_derived1;
+ polymorphic_base *rb2 = new polymorphic_derived2;
+
+ // registration (forward declaration) will permit correct serialization
+ // through a pointer to a base class
+ oa.register_type(static_cast<polymorphic_derived1 *>(NULL));
+ oa.register_type(static_cast<polymorphic_derived2 *>(NULL));
+ oa << BOOST_SERIALIZATION_NVP(rb1) << BOOST_SERIALIZATION_NVP(rb2);
+
+ delete rb1;
+ delete rb2;
+}
+
+// save registered polymorphic class
+void load_registered(const char *testfile)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+
+ polymorphic_base *rb1 = NULL;
+ polymorphic_base *rb2 = NULL;
+
+ // registration (forward declaration) will permit correct serialization
+ // through a pointer to a base class
+ ia.register_type(static_cast<polymorphic_derived1 *>(NULL));
+ ia.register_type(static_cast<polymorphic_derived2 *>(NULL));
+ ia >> BOOST_SERIALIZATION_NVP(rb1) >> BOOST_SERIALIZATION_NVP(rb2);
+
+ BOOST_CHECK_MESSAGE(
+ & boost::serialization::type_info_implementation<polymorphic_derived1>
+ ::type::get_const_instance()
+ == boost::serialization::type_info_implementation<polymorphic_base>
+ ::type::get_const_instance().get_derived_extended_type_info(*rb1),
+ "restored pointer b1 not of correct type"
+ );
+
+ BOOST_CHECK_MESSAGE(
+ & boost::serialization::type_info_implementation<polymorphic_derived2>
+ ::type::get_const_instance()
+ == boost::serialization::type_info_implementation<polymorphic_base>
+ ::type::get_const_instance().get_derived_extended_type_info(*rb2),
+ "restored pointer b2 not of correct type"
+ );
+
+ delete rb1;
+ delete rb2;
+}
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+
+ BOOST_REQUIRE(NULL != testfile);
+
+ save_derived(testfile);
+ load_derived(testfile);
+ save_registered(testfile);
+ load_registered(testfile);
+
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_reset_object_address.cpp
+
+// (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)
+
+#include <sstream>
+#include <cassert>
+#include <cstdlib> // for rand()
+#include <cstddef> // size_t
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::rand;
+ using ::size_t;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/polymorphic_text_oarchive.hpp>
+#include <boost/archive/polymorphic_text_iarchive.hpp>
+
+#include <boost/serialization/list.hpp>
+#include <boost/serialization/access.hpp>
+
+// Someday, maybe all tests will be converted to the unit test framework.
+// but for now use the text execution monitor to be consistent with all
+// the other tests.
+
+// simple test of untracked value
+#include "A.hpp"
+#include "A.ipp"
+
+void test1(){
+ std::stringstream ss;
+ const A a;
+ {
+ boost::archive::text_oarchive oa(ss);
+ oa << a;
+ }
+ A a1;
+ {
+ boost::archive::text_iarchive ia(ss);
+ // load to temporary
+ A a2;
+ ia >> a2;
+ BOOST_CHECK_EQUAL(a, a2);
+ // move to final destination
+ a1 = a2;
+ ia.reset_object_address(& a1, & a2);
+ }
+ BOOST_CHECK_EQUAL(a, a1);
+}
+
+// simple test of tracked value
+class B {
+ friend class boost::serialization::access;
+ int m_i;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /*file_version*/){
+ ar & m_i;
+ }
+public:
+ bool operator==(const B & rhs) const {
+ return m_i == rhs.m_i;
+ }
+ B() :
+ m_i(std::rand())
+ {}
+};
+
+//BOOST_TEST_DONT_PRINT_LOG_VALUE( B )
+
+void test2(){
+ std::stringstream ss;
+ B const b;
+ B const * const b_ptr = & b;
+ BOOST_CHECK_EQUAL(& b, b_ptr);
+ {
+ boost::archive::text_oarchive oa(ss);
+ oa << b;
+ oa << b_ptr;
+ }
+ B b1;
+ B * b1_ptr;
+ {
+ boost::archive::text_iarchive ia(ss);
+ // load to temporary
+ B b2;
+ ia >> b2;
+ BOOST_CHECK_EQUAL(b, b2);
+ // move to final destination
+ b1 = b2;
+ ia.reset_object_address(& b1, & b2);
+ ia >> b1_ptr;
+ }
+ BOOST_CHECK_EQUAL(b, b1);
+ BOOST_CHECK_EQUAL(& b1, b1_ptr);
+}
+
+// check that nested member values are properly moved
+class D {
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /*file_version*/){
+ ar & m_b;
+ }
+public:
+ B m_b;
+ bool operator==(const D & rhs) const {
+ return m_b == rhs.m_b;
+ }
+ D(){}
+};
+
+//BOOST_TEST_DONT_PRINT_LOG_VALUE( D )
+
+void test3(){
+ std::stringstream ss;
+ D const d;
+ B const * const b_ptr = & d.m_b;
+ {
+ boost::archive::text_oarchive oa(ss);
+ oa << d;
+ oa << b_ptr;
+ }
+ D d1;
+ B * b1_ptr;
+ {
+ boost::archive::text_iarchive ia(ss);
+ D d2;
+ ia >> d2;
+ d1 = d2;
+ ia.reset_object_address(& d1, & d2);
+ ia >> b1_ptr;
+ }
+ BOOST_CHECK_EQUAL(d, d1);
+ BOOST_CHECK_EQUAL(* b_ptr, * b1_ptr);
+}
+
+// check that data pointed to by pointer members is NOT moved
+class E {
+ int m_i;
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /*file_version*/){
+ ar & m_i;
+ }
+public:
+ bool operator==(const E &rhs) const {
+ return m_i == rhs.m_i;
+ }
+ E() :
+ m_i(std::rand())
+ {}
+ E(const E & rhs) :
+ m_i(rhs.m_i)
+ {}
+};
+//BOOST_TEST_DONT_PRINT_LOG_VALUE( E )
+
+// check that moves don't move stuff pointed to
+class F {
+ friend class boost::serialization::access;
+ E * m_eptr;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /*file_version*/){
+ ar & m_eptr;
+ }
+public:
+ bool operator==(const F &rhs) const {
+ return *m_eptr == *rhs.m_eptr;
+ }
+ F & operator=(const F & rhs) {
+ * m_eptr = * rhs.m_eptr;
+ return *this;
+ }
+ F(){
+ m_eptr = new E;
+ }
+ F(const F & rhs){
+ *this = rhs;
+ }
+ ~F(){
+ delete m_eptr;
+ }
+};
+
+//BOOST_TEST_DONT_PRINT_LOG_VALUE( F )
+
+void test4(){
+ std::stringstream ss;
+ const F f;
+ {
+ boost::archive::text_oarchive oa(ss);
+ oa << f;
+ }
+ F f1;
+ {
+ boost::archive::text_iarchive ia(ss);
+ F f2;
+ ia >> f2;
+ f1 = f2;
+ ia.reset_object_address(& f1, & f2);
+ }
+ BOOST_CHECK_EQUAL(f, f1);
+}
+
+// check that multiple moves keep track of the correct target
+class G {
+ friend class boost::serialization::access;
+ A m_a1;
+ A m_a2;
+ A *m_pa2;
+ template<class Archive>
+ void save(Archive &ar, const unsigned int /*file_version*/) const {
+ ar << m_a1;
+ ar << m_a2;
+ ar << m_pa2;
+ }
+ template<class Archive>
+ void load(Archive &ar, const unsigned int /*file_version*/){
+ A a; // temporary A
+ ar >> a;
+ m_a1 = a;
+ ar.reset_object_address(& m_a1, & a);
+ ar >> a;
+ m_a2 = a;
+ ar.reset_object_address(& m_a2, & a);
+ ar & m_pa2;
+ }
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+public:
+ bool operator==(const G &rhs) const {
+ return
+ m_a1 == rhs.m_a1
+ && m_a2 == rhs.m_a2
+ && *m_pa2 == *rhs.m_pa2;
+ }
+ G & operator=(const G & rhs) {
+ m_a1 = rhs.m_a1;
+ m_a2 = rhs.m_a2;
+ m_pa2 = & m_a2;
+ return *this;
+ }
+ G(){
+ m_pa2 = & m_a2;
+ }
+ G(const G & rhs){
+ *this = rhs;
+ }
+ ~G(){}
+};
+
+//BOOST_TEST_DONT_PRINT_LOG_VALUE( G )
+
+void test5(){
+ std::stringstream ss;
+ const G g;
+ {
+ boost::archive::text_oarchive oa(ss);
+ oa << g;
+ }
+ G g1;
+ {
+ boost::archive::text_iarchive ia(ss);
+ ia >> g1;
+ }
+ BOOST_CHECK_EQUAL(g, g1);
+}
+
+// joaquin's test - this tests the case where rest_object_address
+// is applied to an item which in fact is not tracked so that
+// the call is in fact superfluous.
+struct foo
+{
+ int x;
+
+private:
+ friend class boost::serialization::access;
+
+ template<class Archive>
+ void serialize(Archive &,const unsigned int)
+ {
+ }
+};
+
+struct bar
+{
+ foo f[2];
+ foo* pf[2];
+
+private:
+ friend class boost::serialization::access;
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+
+ template<class Archive>
+ void save(Archive& ar,const unsigned int)const
+ {
+ for(int i=0;i<2;++i){
+ ar<<f[i].x;
+ ar<<f[i];
+ }
+ for(int j=0;j<2;++j){
+ ar<<pf[j];
+ }
+ }
+
+ template<class Archive>
+ void load(Archive& ar,const unsigned int)
+ {
+ for(int i=0;i<2;++i){
+ int x;
+ ar>>x;
+ f[i].x=x;
+ ar.reset_object_address(&f[i].x,&x);
+ ar>>f[i];
+ }
+ for(int j=0;j<2;++j){
+ ar>>pf[j];
+ }
+ }
+};
+
+int test6()
+{
+ bar b;
+ b.f[0].x=0;
+ b.f[1].x=1;
+ b.pf[0]=&b.f[0];
+ b.pf[1]=&b.f[1];
+
+ std::ostringstream oss;
+ {
+ boost::archive::text_oarchive oa(oss);
+ oa<<const_cast<const bar&>(b);
+ }
+
+ bar b1;
+ b1.pf[0]=0;
+ b1.pf[1]=0;
+
+ std::istringstream iss(oss.str());
+ boost::archive::text_iarchive ia(iss);
+ ia>>b1;
+ BOOST_CHECK(b1.pf[0]==&b1.f[0]&&b1.pf[1]==&b1.f[1]);
+
+ return 0;
+}
+
+// test one of the collections
+void test7(){
+ std::stringstream ss;
+ B const b;
+ B const * const b_ptr = & b;
+ BOOST_CHECK_EQUAL(& b, b_ptr);
+ {
+ std::list<const B *> l;
+ l.push_back(b_ptr);
+ boost::archive::text_oarchive oa(ss);
+ oa << const_cast<const std::list<const B *> &>(l);
+ }
+ B b1;
+ {
+ std::list<B *> l;
+ boost::archive::text_iarchive ia(ss);
+ ia >> l;
+ delete l.front(); // prevent memory leak
+ }
+}
+
+// test one of the collections with polymorphic archive
+void test8(){
+ std::stringstream ss;
+ B const b;
+ B const * const b_ptr = & b;
+ BOOST_CHECK_EQUAL(& b, b_ptr);
+ {
+ std::list<const B *> l;
+ l.push_back(b_ptr);
+ boost::archive::polymorphic_text_oarchive oa(ss);
+ boost::archive::polymorphic_oarchive & poa = oa;
+ poa << const_cast<const std::list<const B *> &>(l);
+ }
+ B b1;
+ {
+ std::list<B *> l;
+ boost::archive::polymorphic_text_iarchive ia(ss);
+ boost::archive::polymorphic_iarchive & pia = ia;
+ pia >> l;
+ delete l.front(); // prevent memory leak
+ }
+}
+
+int test_main(int /* argc */, char * /* argv */[])
+{
+ test1();
+ test2();
+ test3();
+ test4();
+ test5();
+ test6();
+ test7();
+ test8();
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_set.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef> // NULLsize_t
+#include <cstdio> // remove
+#include <fstream>
+
+#include <algorithm>
+#include <vector>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+}
+#endif
+
+#include <boost/detail/workaround.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include <boost/archive/archive_exception.hpp>
+
+#include "test_tools.hpp"
+
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/set.hpp>
+
+#include "A.hpp"
+#include "A.ipp"
+
+void
+test_set(){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ // test array of objects
+ std::set<A> aset;
+ aset.insert(A());
+ aset.insert(A());
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("aset", aset);
+ }
+ std::set<A> aset1;
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("aset", aset1);
+ }
+ BOOST_CHECK(aset == aset1);
+ std::remove(testfile);
+}
+
+void
+test_multiset(){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ std::multiset<A> amultiset;
+ amultiset.insert(A());
+ amultiset.insert(A());
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("amultiset", amultiset);
+ }
+ std::multiset<A> amultiset1;
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("amultiset", amultiset1);
+ }
+ BOOST_CHECK(amultiset == amultiset1);
+ std::remove(testfile);
+}
+
+#ifdef BOOST_HAS_HASH
+
+#include <boost/serialization/hash_set.hpp>
+
+namespace BOOST_STD_EXTENSION_NAMESPACE {
+ template<>
+ struct hash<A> {
+ std::size_t operator()(const A& a) const {
+ return (std::size_t)a;
+ }
+ };
+}
+
+void
+test_hash_set(){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ // test array of objects
+ BOOST_STD_EXTENSION_NAMESPACE::hash_set<A> ahash_set;
+ A a, a1;
+ ahash_set.insert(a);
+ ahash_set.insert(a1);
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("ahash_set", ahash_set);
+ }
+ BOOST_STD_EXTENSION_NAMESPACE::hash_set<A> ahash_set1;
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("ahash_set", ahash_set1);
+ }
+ std::vector<A> tvec, tvec1;
+ tvec.clear();
+ tvec1.clear();
+ std::copy(ahash_set.begin(), ahash_set.end(), std::back_inserter(tvec));
+ std::sort(tvec.begin(), tvec.end());
+ std::copy(ahash_set1.begin(), ahash_set1.end(), std::back_inserter(tvec1));
+ std::sort(tvec1.begin(), tvec1.end());
+ BOOST_CHECK(tvec == tvec1);
+ std::remove(testfile);
+}
+
+void
+test_hash_multiset(){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<A> ahash_multiset;
+ ahash_multiset.insert(A());
+ ahash_multiset.insert(A());
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("ahash_multiset", ahash_multiset);
+ }
+ BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<A> ahash_multiset1;
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("ahash_multiset", ahash_multiset1);
+ }
+
+ std::vector<A> tvec, tvec1;
+ tvec.clear();
+ tvec1.clear();
+ std::copy(ahash_multiset.begin(), ahash_multiset.end(), std::back_inserter(tvec));
+ std::sort(tvec.begin(), tvec.end());
+ std::copy(ahash_multiset1.begin(), ahash_multiset1.end(), std::back_inserter(tvec1));
+ std::sort(tvec1.begin(), tvec1.end());
+ BOOST_CHECK(tvec == tvec1);
+
+ std::remove(testfile);
+}
+#endif
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ test_set();
+ test_multiset();
+ #ifdef BOOST_HAS_HASH
+ test_hash_set();
+ test_hash_multiset();
+ #endif
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_shared_ptr.cpp
+
+// (C) Copyright 2002 Robert Ramey- http://www.rrsd.com - David Tonge .
+// 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 <cstdio> // remove
+#include <fstream>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+#include <boost/type_traits/broken_compiler_spec.hpp>
+
+#include <boost/serialization/shared_ptr.hpp>
+#include <boost/serialization/weak_ptr.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/export.hpp>
+
+#include "test_tools.hpp"
+
+// This is a simple class. It contains a counter of the number
+// of objects of this class which have been instantiated.
+class A
+{
+private:
+ friend class boost::serialization::access;
+ int x;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_NVP(x);
+ }
+ A(A const & rhs);
+ A& operator=(A const & rhs);
+public:
+ static int count;
+ bool operator==(const A & rhs) const {
+ return x == rhs.x;
+ }
+ A(){++count;} // default constructor
+ virtual ~A(){--count;} // default destructor
+};
+
+BOOST_SERIALIZATION_SHARED_PTR(A)
+
+int A::count = 0;
+
+// B is a subclass of A
+class B : public A
+{
+private:
+ friend class boost::serialization::access;
+ int y;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(A);
+ }
+public:
+ static int count;
+ B() : A() {};
+ virtual ~B() {};
+};
+
+// B needs to be exported because its serialized via a base class pointer
+BOOST_CLASS_EXPORT(B)
+BOOST_SERIALIZATION_SHARED_PTR(B)
+
+// test a non-polymorphic class
+class C
+{
+private:
+ friend class boost::serialization::access;
+ int z;
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_NVP(z);
+ }
+public:
+ static int count;
+ bool operator==(const C & rhs) const {
+ return z == rhs.z;
+ }
+ C() :
+ z(++count) // default constructor
+ {}
+ virtual ~C(){--count;} // default destructor
+};
+
+int C::count = 0;
+
+void save(const char * testfile, const boost::shared_ptr<A>& spa)
+{
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << BOOST_SERIALIZATION_NVP(spa);
+}
+
+void load(const char * testfile, boost::shared_ptr<A>& spa)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> BOOST_SERIALIZATION_NVP(spa);
+}
+
+// trivial test
+void save_and_load(boost::shared_ptr<A>& spa)
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+ save(testfile, spa);
+ boost::shared_ptr<A> spa1;
+ load(testfile, spa1);
+
+ BOOST_CHECK(
+ (spa.get() == NULL && spa1.get() == NULL)
+ || * spa == * spa1
+ );
+ std::remove(testfile);
+}
+
+void save2(
+ const char * testfile,
+ const boost::shared_ptr<A>& first,
+ const boost::shared_ptr<A>& second
+){
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << BOOST_SERIALIZATION_NVP(first);
+ oa << BOOST_SERIALIZATION_NVP(second);
+}
+
+void load2(
+ const char * testfile,
+ boost::shared_ptr<A>& first,
+ boost::shared_ptr<A>& second)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> BOOST_SERIALIZATION_NVP(first);
+ ia >> BOOST_SERIALIZATION_NVP(second);
+}
+
+// Run tests by serializing two shared_ptrs into an archive,
+// clearing them (deleting the objects) and then reloading the
+// objects back from an archive.
+void save_and_load2(boost::shared_ptr<A>& first, boost::shared_ptr<A>& second)
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ save2(testfile, first, second);
+
+ // Clear the pointers, thereby destroying the objects they contain
+ first.reset();
+ second.reset();
+
+ load2(testfile, first, second);
+
+ BOOST_CHECK(first == second);
+ std::remove(testfile);
+}
+
+void save3(
+ const char * testfile,
+ boost::shared_ptr<A>& first,
+ boost::shared_ptr<A>& second,
+ boost::weak_ptr<A>& third
+){
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << BOOST_SERIALIZATION_NVP(third);
+ oa << BOOST_SERIALIZATION_NVP(first);
+ oa << BOOST_SERIALIZATION_NVP(second);
+}
+
+void load3(
+ const char * testfile,
+ boost::shared_ptr<A>& first,
+ boost::shared_ptr<A>& second,
+ boost::weak_ptr<A>& third
+){
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ // note that we serialize the weak pointer first
+ ia >> BOOST_SERIALIZATION_NVP(third);
+ // inorder to test that a temporarily solitary weak pointer
+ // correcttly restored.
+ ia >> BOOST_SERIALIZATION_NVP(first);
+ ia >> BOOST_SERIALIZATION_NVP(second);
+}
+
+void save_and_load3(
+ boost::shared_ptr<A>& first,
+ boost::shared_ptr<A>& second,
+ boost::weak_ptr<A>& third
+){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ save3(testfile, first, second, third);
+
+ // Clear the pointers, thereby destroying the objects they contain
+ first.reset();
+ second.reset();
+ third.reset();
+
+ load3(testfile, first, second, third);
+
+ BOOST_CHECK(first == second);
+ BOOST_CHECK(first == third.lock());
+ std::remove(testfile);
+}
+
+void save4(const char * testfile, const boost::shared_ptr<C>& spc)
+{
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << BOOST_SERIALIZATION_NVP(spc);
+}
+
+void load4(const char * testfile, boost::shared_ptr<C>& spc)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> BOOST_SERIALIZATION_NVP(spc);
+}
+
+// trivial test
+void save_and_load4(boost::shared_ptr<C>& spc)
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+ save4(testfile, spc);
+ boost::shared_ptr<C> spc1;
+ load4(testfile, spc1);
+
+ BOOST_CHECK(
+ (spc.get() == NULL && spc1.get() == NULL)
+ || * spc == * spc1
+ );
+ std::remove(testfile);
+}
+
+// This does the tests
+int test_main(int /* argc */, char * /* argv */[])
+{
+ {
+ boost::shared_ptr<A> spa;
+ // These are our shared_ptrs
+ spa = boost::shared_ptr<A>(new A);
+ boost::shared_ptr<A> spa1 = spa;
+ spa1 = spa;
+ }
+ {
+ // These are our shared_ptrs
+ boost::shared_ptr<A> spa;
+
+ // trivial test 1
+ save_and_load(spa);
+
+ //trivival test 2
+ spa = boost::shared_ptr<A>(new A);
+ save_and_load(spa);
+
+ // Try to save and load pointers to As
+ spa = boost::shared_ptr<A>(new A);
+ boost::shared_ptr<A> spa1 = spa;
+ save_and_load2(spa, spa1);
+
+ // Try to save and load pointers to Bs
+ spa = boost::shared_ptr<A>(new B);
+ spa1 = spa;
+ save_and_load2(spa, spa1);
+
+ // test a weak pointer
+ spa = boost::shared_ptr<A>(new A);
+ spa1 = spa;
+ boost::weak_ptr<A> wp = spa;
+ save_and_load3(spa, spa1, wp);
+
+ // obj of type B gets destroyed
+ // as smart_ptr goes out of scope
+ }
+ BOOST_CHECK(A::count == 0);
+ {
+ // Try to save and load pointers to Cs
+ boost::shared_ptr<C> spc;
+ spc = boost::shared_ptr<C>(new C);
+ save_and_load4(spc);
+ }
+ BOOST_CHECK(C::count == 0);
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_shared_ptr.cpp
+
+// (C) Copyright 2002 Robert Ramey- http://www.rrsd.com - David Tonge .
+// 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 <fstream>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include <boost/serialization/shared_ptr_132.hpp>
+#include <boost/serialization/shared_ptr.hpp>
+#include <boost/serialization/weak_ptr.hpp>
+#include <boost/serialization/split_member.hpp>
+
+#include <boost/preprocessor/stringize.hpp>
+
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/export.hpp>
+#include <boost/type_traits/broken_compiler_spec.hpp>
+
+// This is a simple class. It contains a counter of the number
+// of objects of this class which have been instantiated.
+class A
+{
+private:
+ friend class boost::serialization::access;
+ int x;
+ template<class Archive>
+ void save(Archive & ar, const unsigned int /* file_version */) const {
+ ar << BOOST_SERIALIZATION_NVP(x);
+ }
+ template<class Archive>
+ void load(Archive & ar, const unsigned int /* file_version */) {
+ ar >> BOOST_SERIALIZATION_NVP(x);
+ }
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+public:
+ static int count;
+ bool operator==(const A & rhs) const {
+ return x == rhs.x;
+ }
+ A(){++count;} // default constructor
+ virtual ~A(){--count;} // default destructor
+};
+
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(A)
+BOOST_SERIALIZATION_SHARED_PTR(A)
+
+// B is a subclass of A
+class B : public A
+{
+private:
+ friend class boost::serialization::access;
+ int y;
+ template<class Archive>
+ void save(Archive & ar, const unsigned int /* file_version */ )const {
+ ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(A);
+ }
+ template<class Archive>
+ void load(Archive & ar, const unsigned int /* file_version */){
+ ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(A);
+ }
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+public:
+ static int count;
+ B() : A() {};
+ virtual ~B() {};
+};
+
+// B needs to be exported because its serialized via a base class pointer
+BOOST_SHARED_POINTER_EXPORT(B)
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(B)
+BOOST_SERIALIZATION_SHARED_PTR(B)
+
+int A::count = 0;
+
+template<class T>
+void save(const char * testfile, const T & spa)
+{
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << BOOST_SERIALIZATION_NVP(spa);
+}
+
+template<class T>
+void load(const char * testfile, T & spa)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> BOOST_SERIALIZATION_NVP(spa);
+}
+
+// trivial test
+template<class T>
+void save_and_load(const T & spa)
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+ save(testfile, spa);
+
+ // note that we're loading to a current version of shared_ptr
+ // regardless of the orignal saved type - this tests backward
+ // archive compatibility
+ boost::shared_ptr<A> spa1;
+ load(testfile, spa1);
+
+ BOOST_CHECK(
+ (spa.get() == NULL && spa1.get() == NULL)
+ || * spa == * spa1
+ );
+ std::remove(testfile);
+}
+
+template<class T>
+void save2(
+ const char * testfile,
+ const T & first,
+ const T & second
+){
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << BOOST_SERIALIZATION_NVP(first);
+ oa << BOOST_SERIALIZATION_NVP(second);
+}
+
+template<class T>
+void load2(
+ const char * testfile,
+ T & first,
+ T & second)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> BOOST_SERIALIZATION_NVP(first);
+ ia >> BOOST_SERIALIZATION_NVP(second);
+}
+
+// Run tests by serializing two shared_ptrs into an archive,
+// clearing them (deleting the objects) and then reloading the
+// objects back from an archive.
+template<class T>
+void save_and_load2(T & first, T & second)
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ save2(testfile, first, second);
+
+ // Clear the pointers, thereby destroying the objects they contain
+ first.reset();
+ second.reset();
+
+ boost::shared_ptr<A> first1, second1;
+ load2(testfile, first1, second1);
+
+ BOOST_CHECK(first1 == second1);
+ std::remove(testfile);
+}
+
+template<class T>
+void save3(
+ const char * testfile,
+ const T & first,
+ const T & second,
+ const T & third
+){
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << BOOST_SERIALIZATION_NVP(third);
+ oa << BOOST_SERIALIZATION_NVP(first);
+ oa << BOOST_SERIALIZATION_NVP(second);
+}
+
+template<class T>
+void load3(
+ const char * testfile,
+ T & first,
+ T & second,
+ T & third
+){
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ // note that we serialize the weak pointer first
+ ia >> BOOST_SERIALIZATION_NVP(third);
+ // inorder to test that a temporarily solitary weak pointer
+ // correcttly restored.
+ ia >> BOOST_SERIALIZATION_NVP(first);
+ ia >> BOOST_SERIALIZATION_NVP(second);
+}
+
+// This does the tests
+int test_main(int /* argc */, char * /* argv */[])
+{
+ // These are our shared_ptrs
+ boost_132::shared_ptr<A> spa;
+
+ // trivial test 1
+ save_and_load(spa);
+
+ //trivial test 2
+ spa.reset();
+ spa = boost_132::shared_ptr<A>(new A);
+ save_and_load(spa);
+
+ // Try to save and load pointers to As, to a text archive
+ spa = boost_132::shared_ptr<A>(new A);
+ boost_132::shared_ptr<A> spa1 = spa;
+ save_and_load2(spa, spa1);
+
+ // Try to save and load pointers to Bs, to a text archive
+ spa = boost_132::shared_ptr<A>(new B);
+ save_and_load(spa);
+
+ spa1 = spa;
+ save_and_load2(spa, spa1);
+
+ // obj of type B gets destroyed
+ // as smart_ptr goes out of scope
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_shared_ptr_multi_base.cpp
+
+// (C) Copyright 2002 Robert Ramey- http://www.rrsd.com 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 <cstddef> // NULL
+#include <cstdio> // remove
+#include <fstream>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+#include <boost/type_traits/broken_compiler_spec.hpp>
+
+#include <boost/serialization/shared_ptr.hpp>
+#include <boost/serialization/weak_ptr.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/export.hpp>
+
+#include "test_tools.hpp"
+
+struct Base1 {
+ Base1() {}
+ Base1(int x) : m_x(1 + x) {}
+ virtual ~Base1(){
+ }
+ int m_x;
+ // serialize
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */)
+ {
+ ar & BOOST_SERIALIZATION_NVP(m_x);
+ }
+};
+
+struct Base2 {
+ Base2() {}
+ Base2(int x) : m_x(2 + x) {}
+ int m_x;
+ virtual ~Base2(){
+ }
+ // serialize
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */)
+ {
+ ar & BOOST_SERIALIZATION_NVP(m_x);
+ }
+};
+
+struct Base3 {
+ Base3() {}
+ Base3(int x) : m_x(3 + x) {}
+ virtual ~Base3(){
+ }
+ int m_x;
+ // serialize
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */)
+ {
+ ar & BOOST_SERIALIZATION_NVP(m_x);
+ }
+};
+
+// Sub is a subclass of Base1, Base1 and Base3.
+struct Sub:public Base1, public Base2, public Base3 {
+ static int count;
+ Sub() {
+ ++count;
+ }
+ Sub(int x) :
+ Base1(x),
+ Base2(x),
+ m_x(x)
+ {
+ ++count;
+ }
+ Sub(const Sub & rhs) :
+ m_x(rhs.m_x)
+ {
+ ++count;
+ }
+ virtual ~Sub() {
+ assert(0 < count);
+ --count;
+ }
+ int m_x;
+ // serialize
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */)
+ {
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base1);
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base2);
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base3);
+ ar & BOOST_SERIALIZATION_NVP(m_x);
+ }
+};
+
+// Sub needs to be exported because its serialized via a base class pointer
+BOOST_CLASS_EXPORT(Sub)
+BOOST_SERIALIZATION_SHARED_PTR(Sub)
+
+int Sub::count = 0;
+
+template <class FIRST, class SECOND>
+void save2(
+ const char * testfile,
+ const FIRST& first,
+ const SECOND& second
+){
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << BOOST_SERIALIZATION_NVP(first);
+ oa << BOOST_SERIALIZATION_NVP(second);
+}
+
+template <class FIRST, class SECOND>
+void load2(
+ const char * testfile,
+ FIRST& first,
+ SECOND& second)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> BOOST_SERIALIZATION_NVP(first);
+ ia >> BOOST_SERIALIZATION_NVP(second);
+}
+
+// Run tests by serializing two shared_ptrs into an archive,
+// clearing them (deleting the objects) and then reloading the
+// objects back from an archive.
+
+// Serialization sequence
+// First, shared_ptr
+// Second, weak_ptr
+template <class FIRST, class SECOND>
+void shared_weak(
+ boost::shared_ptr<FIRST>& first,
+ boost::weak_ptr<SECOND>& second
+){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+ int firstm = first->m_x;
+ int secondm = second.lock()->m_x;
+ save2(testfile, first, second);
+
+ // Clear the pointers, thereby destroying the objects they contain
+ second.reset();
+ first.reset();
+
+ load2(testfile, first, second);
+
+ // Check data member
+ BOOST_CHECK(firstm == first->m_x);
+ BOOST_CHECK(secondm == second.lock()->m_x);
+ // Check pointer to vtable
+ BOOST_CHECK(boost::dynamic_pointer_cast<Sub>(first));
+ BOOST_CHECK(boost::dynamic_pointer_cast<Sub>(second.lock()));
+
+ std::remove(testfile);
+}
+
+// Serialization sequence
+// First, weak_ptr
+// Second, shared_ptr
+template <class FIRST, class SECOND>
+void weak_shared(
+ boost::weak_ptr<FIRST>& first,
+ boost::shared_ptr<SECOND>& second
+){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+ int firstm = first.lock()->m_x;
+ int secondm = second->m_x;
+ save2(testfile, first, second);
+
+ // Clear the pointers, thereby destroying the objects they contain
+ first.reset();
+ second.reset();
+
+ load2(testfile, first, second);
+
+ // Check data member
+ BOOST_CHECK(firstm == first.lock()->m_x);
+ BOOST_CHECK(secondm == second->m_x);
+ // Check pointer to vtable
+ BOOST_CHECK(boost::dynamic_pointer_cast<Sub>(first.lock()));
+ BOOST_CHECK(boost::dynamic_pointer_cast<Sub>(second));
+
+ std::remove(testfile);
+}
+
+// This does the tests
+int test_main(int /* argc */, char * /* argv */[])
+{
+
+ // Both Sub
+ boost::shared_ptr<Sub> tc1_sp(new Sub(10));
+ boost::weak_ptr<Sub> tc1_wp(tc1_sp);
+ shared_weak(tc1_sp, tc1_wp);
+ weak_shared(tc1_wp, tc1_sp);
+ tc1_sp.reset();
+ BOOST_CHECK(0 == Sub::count);
+
+ // Sub and Base1
+ boost::shared_ptr<Sub> tc2_sp(new Sub(10));
+ boost::weak_ptr<Base1> tc2_wp(tc2_sp);
+ shared_weak(tc2_sp, tc2_wp);
+ weak_shared(tc2_wp, tc2_sp);
+ tc2_sp.reset();
+ BOOST_CHECK(0 == Sub::count);
+
+ // Sub and Base2
+ boost::shared_ptr<Sub> tc3_sp(new Sub(10));
+ boost::weak_ptr<Base2> tc3_wp(tc3_sp);
+ shared_weak(tc3_sp, tc3_wp);
+ weak_shared(tc3_wp, tc3_sp);
+ tc3_sp.reset();
+ BOOST_CHECK(0 == Sub::count);
+
+ // Sub and Base3
+ boost::shared_ptr<Sub> tc4_sp(new Sub(10));
+ boost::weak_ptr<Base3> tc4_wp(tc4_sp);
+ shared_weak(tc4_sp, tc4_wp);
+ weak_shared(tc4_wp, tc4_sp);
+ tc4_sp.reset();
+ BOOST_CHECK(0 == Sub::count);
+
+ // Base1 and Base2
+ boost::shared_ptr<Sub> tc5_sp_tmp(new Sub(10));
+ boost::shared_ptr<Base1> tc5_sp(tc5_sp_tmp);
+ boost::weak_ptr<Base2> tc5_wp(tc5_sp_tmp);
+ tc5_sp_tmp.reset();
+ shared_weak(tc5_sp, tc5_wp);
+ weak_shared(tc5_wp, tc5_sp);
+ tc5_sp.reset();
+ BOOST_CHECK(0 == Sub::count);
+
+ // Base2 and Base3
+ boost::shared_ptr<Sub> tc6_sp_tmp(new Sub(10));
+ boost::shared_ptr<Base2> tc6_sp(tc6_sp_tmp);
+ boost::weak_ptr<Base3> tc6_wp(tc6_sp_tmp);
+ tc6_sp_tmp.reset();
+ shared_weak(tc6_sp, tc6_wp);
+ weak_shared(tc6_wp, tc6_sp);
+ tc6_sp.reset();
+ BOOST_CHECK(0 == Sub::count);
+
+ // Base3 and Base1
+ boost::shared_ptr<Sub> tc7_sp_tmp(new Sub(10));
+ boost::shared_ptr<Base3> tc7_sp(tc7_sp_tmp);
+ boost::weak_ptr<Base1> tc7_wp(tc7_sp_tmp);
+ tc7_sp_tmp.reset();
+ shared_weak(tc7_sp, tc7_wp);
+ weak_shared(tc7_wp, tc7_sp);
+ tc7_sp.reset();
+ BOOST_CHECK(0 == Sub::count);
+
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_simple_class.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+// invoke header for a custom archive test.
+
+#include <cstddef> // NULL
+#include <cstdio> // remove
+#include <fstream>
+
+#include <boost/config.hpp>
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include "A.hpp"
+#include "A.ipp"
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ A a, a1;
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("a", a);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("a", a1);
+ }
+ BOOST_CHECK_EQUAL(a, a1);
+ std::remove(testfile);
+ return 0;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_simple_class_ptr.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef> // NULL
+#include <cstdio> // remove
+#include <fstream>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include "A.hpp"
+#include "A.ipp"
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+
+ BOOST_REQUIRE(NULL != testfile);
+
+ const A *ta = new A();
+ A *ta1 = NULL;
+
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("ta", ta);
+ }
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("ta", ta1);
+ }
+ BOOST_CHECK(ta != ta1);
+ BOOST_CHECK(*ta == *ta1);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_singleton.cpp: test implementation of run-time casting of void pointers
+
+// (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)
+// <gennadiy.rozental@tfn.com>
+
+#include "test_tools.hpp"
+#include <boost/serialization/singleton.hpp>
+
+class x {
+};
+
+void
+test1(const x & x1, const x & x2){
+ BOOST_CHECK(& x1 == & x2);
+}
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const x & x1 = boost::serialization::singleton<x>::get_const_instance();
+ const x & x2 = boost::serialization::singleton<x>::get_const_instance();
+
+ BOOST_CHECK(& x1 == & x2);
+
+ test1(
+ boost::serialization::singleton<x>::get_const_instance(),
+ boost::serialization::singleton<x>::get_const_instance()
+ );
+
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_smart_cast.cpp:
+
+// (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)
+// <gennadiy.rozental@tfn.com>
+
+#include <exception>
+#include <boost/serialization/smart_cast.hpp>
+
+#include "test_tools.hpp"
+#include <boost/noncopyable.hpp>
+
+using namespace boost::serialization;
+
+class Base1 : public boost::noncopyable
+{
+ char a;
+};
+
+class Base2
+{
+ int b;
+};
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable : 4511 4512)
+#endif
+
+class Derived : public Base1, public Base2
+{
+ long c;
+};
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(Base1)
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(Base2)
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(Derived)
+
+// if compiler doesn't support TPS, the smart_cast syntax doesn't
+// work for references. One has to use the smart_cast_reference
+// syntax (tested below ) instead.
+
+void test_static_reference_cast_2(){
+ Derived d;
+ Base1 & b1 = static_cast<Base1 &>(d);
+ Base2 & b2 = static_cast<Base2 &>(d);
+
+ Base1 & scb1 = smart_cast<Base1 &, Derived &>(d);
+ Base2 & scb2 = smart_cast<Base2 &, Derived &>(d);
+ BOOST_CHECK_EQUAL(& b1, & scb1);
+ BOOST_CHECK_EQUAL(& b2, & scb2);
+
+ // downcast
+// BOOST_CHECK_EQUAL(& d, & (smart_cast<Derived &, Base1 &>(b1)));
+// BOOST_CHECK_EQUAL(& d, & (smart_cast<Derived &, Base2 &>(b2)));
+
+ // crosscast pointers fails at compiler time
+ // BOOST_CHECK_EQUAL(pB2,smart_cast<B2 *>(pB1));
+ // though explicit cross cast will always work
+ BOOST_CHECK_EQUAL(& b2,(
+ & smart_cast<Base2 &, Derived &>(
+ smart_cast<Derived &, Base1 &>(b1)
+ ))
+ );
+}
+
+void test_static_reference_cast_1(){
+ Derived d;
+ Base1 & b1 = static_cast<Base1 &>(d);
+ Base2 & b2 = static_cast<Base2 &>(d);
+
+ Base1 & scb1 = smart_cast_reference<Base1 &>(d);
+ Base2 & scb2 = smart_cast_reference<Base2 &>(d);
+ BOOST_CHECK_EQUAL(& b1, & scb1);
+ BOOST_CHECK_EQUAL(& b2, & scb2);
+
+ // downcast
+ BOOST_CHECK_EQUAL(& d, & (smart_cast_reference<Derived &>(b1)));
+ BOOST_CHECK_EQUAL(& d, & (smart_cast_reference<Derived &>(b2)));
+
+ // crosscast pointers fails at compiler time
+ // BOOST_CHECK_EQUAL(pB2,smart_cast<B2 *>(pB1));
+ // though explicit cross cast will always work
+ BOOST_CHECK_EQUAL(& b2,(
+ & smart_cast_reference<Base2 &>(
+ smart_cast_reference<Derived &>(b1)
+ ))
+ );
+}
+
+void test_static_pointer_cast(){
+ // pointers
+ Derived d;
+ Derived *pD = & d;
+ Base1 *pB1 = pD;
+ Base2 *pB2 = pD;
+
+ // upcast
+ BOOST_CHECK_EQUAL(pB1, smart_cast<Base1 *>(pD));
+ BOOST_CHECK_EQUAL(pB2, smart_cast<Base2 *>(pD));
+
+ // downcast
+ BOOST_CHECK_EQUAL(pD, smart_cast<Derived *>(pB1));
+ BOOST_CHECK_EQUAL(pD, smart_cast<Derived *>(pB2));
+
+ // crosscast pointers fails at compiler time
+ // BOOST_CHECK_EQUAL(pB2, smart_cast<Base2 *>(pB1));
+
+ // though explicit cross cast will always work
+ BOOST_CHECK_EQUAL(pB2,
+ smart_cast<Base2 *>(
+ smart_cast<Derived *>(pB1)
+ )
+ );
+}
+
+class VBase1 : public boost::noncopyable
+{
+ char a;
+public:
+ virtual ~VBase1(){};
+};
+
+class VBase2
+{
+ int b;
+public:
+ virtual ~VBase2(){};
+};
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable : 4511 4512)
+#endif
+
+class VDerived : public VBase1, public VBase2
+{
+ long c;
+public:
+ virtual ~VDerived(){};
+};
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(VBase1)
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(VBase2)
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(VDerived)
+
+// see above
+
+void test_dynamic_reference_cast_2(){
+ VDerived d;
+ VBase1 &b1 = dynamic_cast<VBase1 &>(d);
+ VBase2 &b2 = static_cast<VBase2 &>(d);
+
+ VBase1 & vb1 = smart_cast<VBase1 &, VDerived &>(d);
+ BOOST_CHECK_EQUAL(& b1, & vb1);
+ BOOST_CHECK_EQUAL(& b2, (& smart_cast<VBase2 &, VDerived &>(d)));
+
+ // downcast
+ BOOST_CHECK_EQUAL(& d, (& smart_cast<VDerived &, VBase1 &>(b1)));
+ BOOST_CHECK_EQUAL(& d, (& smart_cast<VDerived &, VBase2 &>(b2)));
+
+ // crosscast
+ BOOST_CHECK_EQUAL(& b2, (& smart_cast<VBase2 &, VBase1 &>(b1)));
+
+ // explicit cross cast should always work
+ BOOST_CHECK_EQUAL(& b2, (
+ & smart_cast<VBase2 &, VDerived &>(
+ smart_cast<VDerived &, VBase1 &>(b1)
+ ))
+ );
+}
+
+void test_dynamic_reference_cast_1(){
+ VDerived d;
+ VBase1 &b1 = dynamic_cast<VBase1 &>(d);
+ VBase2 &b2 = static_cast<VBase2 &>(d);
+
+ VBase1 & vb1 = smart_cast_reference<VBase1 &>(d);
+ BOOST_CHECK_EQUAL(& b1, & vb1);
+ BOOST_CHECK_EQUAL(& b2, (& smart_cast_reference<VBase2 &>(d)));
+
+ // downcast
+ BOOST_CHECK_EQUAL(& d, (& smart_cast_reference<VDerived &>(b1)));
+ BOOST_CHECK_EQUAL(& d, (& smart_cast_reference<VDerived &>(b2)));
+
+ // crosscast
+ BOOST_CHECK_EQUAL(& b2, (& smart_cast_reference<VBase2 &>(b1)));
+
+ // explicit cross cast should always work
+ BOOST_CHECK_EQUAL(& b2, (
+ & smart_cast_reference<VBase2 &>(
+ smart_cast_reference<VDerived &>(b1)
+ ))
+ );
+}
+
+void test_dynamic_pointer_cast(){
+ // pointers
+ VDerived d;
+ VDerived *pD = & d;
+ VBase1 *pB1 = pD;
+ VBase2 *pB2 = pD;
+
+ // upcast
+ BOOST_CHECK_EQUAL(pB1, smart_cast<VBase1 *>(pD));
+ BOOST_CHECK_EQUAL(pB2, smart_cast<VBase2 *>(pD));
+
+ // downcast
+ BOOST_CHECK_EQUAL(pD, smart_cast<VDerived *>(pB1));
+ BOOST_CHECK_EQUAL(pD, smart_cast<VDerived *>(pB2));
+
+ // crosscast pointers fails at compiler time
+ BOOST_CHECK_EQUAL(pB2, smart_cast<VBase2 *>(pB1));
+ // though explicit cross cast will always work
+ BOOST_CHECK_EQUAL(pB2,
+ smart_cast<VBase2 *>(
+ smart_cast<VDerived *>(pB1)
+ )
+ );
+}
+
+int
+test_main(int /* argc */, char * /* argv */[])
+{
+ test_static_reference_cast_2();
+ test_static_reference_cast_1();
+ test_static_pointer_cast();
+ test_dynamic_reference_cast_2();
+ test_dynamic_reference_cast_1();
+ test_dynamic_pointer_cast();
+
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_split.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef> // NULL
+#include <cstdio> // remove
+#include <fstream>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include <boost/serialization/split_member.hpp>
+#include <boost/serialization/split_free.hpp>
+
+class A
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void save(
+ Archive & /* ar */,
+ const unsigned int /* file_version */
+ ) const {
+ ++(const_cast<A &>(*this).count);
+ }
+ template<class Archive>
+ void load(
+ Archive & /* ar */,
+ const unsigned int /* file_version */
+ ){
+ --count;
+ }
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+ int count;
+public:
+ A() : count(0) {}
+ ~A() {
+ BOOST_CHECK(0 == count);
+ }
+};
+
+class B
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void save(
+ Archive & /* ar */,
+ const unsigned int /* file_version */
+ ) const {
+ ++(const_cast<B &>(*this).count);
+ }
+ template<class Archive>
+ void load(
+ Archive & /* ar */,
+ const unsigned int /* file_version */
+ ){
+ --count;
+ }
+ int count;
+public:
+ B() : count(0) {}
+ ~B() {
+ BOOST_CHECK(0 == count);
+ }
+};
+
+// function specializations must be defined in the appropriate
+// namespace - boost::serialization
+namespace boost {
+namespace serialization {
+
+template<class Archive>
+void serialize(
+ Archive & ar,
+ B & b,
+ const unsigned int file_version
+){
+ boost::serialization::split_member(ar, b, file_version);
+}
+
+} // serialization
+} // namespace boost
+
+class C
+{
+public:
+ int count;
+ C() : count(0) {}
+ ~C() {
+ BOOST_CHECK(0 == count);
+ }
+};
+
+namespace boost {
+namespace serialization {
+
+template<class Archive>
+void save(
+ Archive & /* ar */,
+ const C & c,
+ const unsigned int /* file_version */
+){
+ ++(const_cast<C &>(c).count);
+}
+
+template<class Archive>
+void load(
+ Archive & /* ar */,
+ C & c,
+ const unsigned int /* file_version */
+){
+ --c.count;
+}
+
+} // serialization
+} // namespace boost
+
+BOOST_SERIALIZATION_SPLIT_FREE(C)
+
+void out(const char *testfile, A & a, B & b, C & c)
+{
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << BOOST_SERIALIZATION_NVP(a);
+ oa << BOOST_SERIALIZATION_NVP(b);
+ oa << BOOST_SERIALIZATION_NVP(c);
+}
+
+void in(const char *testfile, A & a, B & b, C & c)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> BOOST_SERIALIZATION_NVP(a);
+ ia >> BOOST_SERIALIZATION_NVP(b);
+ ia >> BOOST_SERIALIZATION_NVP(c);
+}
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ A a;
+ B b;
+ C c;
+
+ out(testfile, a, b, c);
+ in(testfile, a, b, c);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+// (C) Copyright Jonathan Turkanis 2004.
+// Use, modification and distribution are 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 most recent version including documentation.
+
+// note: this is a compile only test.
+
+#include <boost/config.hpp> // BOOST_STATIC_CONST
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_polymorphic.hpp>
+
+#include <boost/serialization/static_warning.hpp>
+
+typedef char a1[2];
+typedef char a2[3];
+
+class polymorphic {
+ virtual ~polymorphic();
+};
+
+class non_polymorphic {
+};
+
+template<class T>
+int f(){
+ BOOST_STATIC_WARNING(T::value);
+ return 0;
+}
+
+struct A {
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+/////////////////////////////////////////////////////////////////////////
+// compilation of this program should show a total of 10 warning messages
+
+// should show NO warning message
+BOOST_STATIC_WARNING(true);
+
+// the following should show 5 warning message
+int x = f<A>(); // Warn
+int y = f<boost::is_polymorphic<non_polymorphic> >(); // Warn.
+int z = f<boost::is_polymorphic<polymorphic> >();
+
+BOOST_STATIC_WARNING(sizeof(a1) == sizeof(a2)); // Warn.
+BOOST_STATIC_WARNING(sizeof(a1) != sizeof(a1)); // Warn.
+BOOST_STATIC_WARNING(! boost::is_polymorphic<polymorphic>::value); // Warn.
+BOOST_STATIC_WARNING(boost::is_polymorphic<non_polymorphic>::value); // Warn.
+
+int main(int /* argc */, char * /* argv */[]){
+ // should show NO warning message
+ BOOST_STATIC_WARNING(true);
+
+ // the following should show 5 warning message
+ f<A>();
+ BOOST_STATIC_WARNING(sizeof(a1) == sizeof(a2)); // Warn.
+ BOOST_STATIC_WARNING(sizeof(a1) != sizeof(a1)); // Warn.
+ BOOST_STATIC_WARNING(! boost::is_polymorphic<polymorphic>::value); // Warn.
+ BOOST_STATIC_WARNING(boost::is_polymorphic<non_polymorphic>::value); // Warn.
+ return 0;
+}
--- /dev/null
+#ifndef BOOST_SERIALIZATION_TEST_TOOLS_HPP
+#define BOOST_SERIALIZATION_TEST_TOOLS_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
+// test_tools.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 <cstdio> // remove, tmpnam
+#include <cstddef> // size_t
+#ifndef BOOST_NO_EXCEPTION_STD_NAMESPACE
+ #include <exception>
+#endif
+#include <boost/config.hpp>
+#include <boost/detail/no_exceptions_support.hpp>
+
+#if defined(UNDER_CE)
+
+// Windows CE does not supply the tmpnam function in its CRT.
+// Substitute a primitive implementation here.
+namespace boost {
+namespace archive {
+ const char * tmpnam(char * buffer){
+ static char ibuffer [512];
+ if(NULL == buffer)
+ buffer = ibuffer;
+
+ static unsigned short index = 0;
+ std::sprintf(buffer, "\\tmpfile%05X.tmp", index++);
+ return buffer;
+ }
+} // archive
+} // boost
+
+#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+// win32 has a brain-dead tmpnam implementation.
+// which leaves temp files in root directory
+// regardless of environmental settings
+
+#include <cstdlib>
+#include <cstring>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+ using ::strcpy;
+ using ::strcat;
+ using ::tmpnam;
+}
+#endif // defined(BOOST_NO_STDC_NAMESPACE)
+
+#include <direct.h>
+#include <boost/archive/tmpdir.hpp>
+
+#if defined(__COMO__)
+ #define chdir _chdir
+#endif
+
+#if defined(NDEBUG) && defined(__BORLANDC__)
+ #define STRCPY strcpy
+#else
+ #define STRCPY std::strcpy
+#endif
+
+namespace boost {
+namespace archive {
+ const char * test_filename(const char * dir = NULL, char *fname = NULL){
+ static char ibuffer [512];
+ std::size_t i;
+ ibuffer[0] = '\0';
+ if(NULL == dir){
+ dir = boost::archive::tmpdir();
+ }
+ STRCPY(ibuffer, dir);
+ std::strcat(ibuffer, "/");
+ i = std::strlen(ibuffer);
+ if(NULL == fname){
+ char old_dir[256];
+ _getcwd(old_dir, sizeof(old_dir) - 1);
+ chdir(dir);
+ std::tmpnam(ibuffer + i);
+ chdir(old_dir);
+ }
+ else{
+ std::strcat(ibuffer, fname);
+ }
+ return ibuffer;
+ }
+ const char * tmpnam(char * buffer){
+ const char * name = test_filename(NULL, NULL);
+ if(NULL != buffer){
+ STRCPY(buffer, name);
+ }
+ return name;
+ }
+} // archive
+} // boost
+
+#else // defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+#if defined(__hpux)
+// (C) Copyright 2006 Boris Gubenko.
+// HP-UX has a restriction that for multi-thread applications, (i.e.
+// the ones compiled -mt) if argument to tmpnam is a NULL pointer, then,
+// citing the tmpnam(3S) manpage, "the operation is not performed and a
+// NULL pointer is returned". tempnam does not have this restriction, so,
+// let's use tempnam instead.
+
+#define tmpnam(X) tempnam(NULL,X)
+
+namespace boost {
+namespace archive {
+ using ::tempnam;
+} // archive
+} // boost
+
+#else // defined(__hpux)
+
+namespace boost {
+namespace archive {
+ using std::tmpnam;
+} // archive
+} // boost
+
+#endif // defined(__hpux)
+#endif // defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+
+//#include <boost/test/test_tools.hpp>
+#include <boost/detail/lightweight_test.hpp>
+
+#define BOOST_CHECK( P ) \
+ BOOST_TEST( (P) )
+#define BOOST_REQUIRE( P ) \
+ BOOST_TEST( (P) )
+#define BOOST_CHECK_MESSAGE( P, M ) \
+ ((P)? (void)0 : ::boost::detail::error_impl( (M) , __FILE__, __LINE__, BOOST_CURRENT_FUNCTION))
+#define BOOST_REQUIRE_MESSAGE( P, M ) \
+ BOOST_CHECK_MESSAGE( (P), (M) )
+#define BOOST_CHECK_EQUAL( A , B ) \
+ BOOST_TEST( (A) == (B) )
+
+namespace boost { namespace detail {
+inline void msg_impl(char const * msg, char const * file, int line, char const * function)
+{
+ std::cerr << file << "(" << line << "): " << msg << " in function '" << function << "'" << std::endl;
+}
+} } // boost::detail
+
+#define BOOST_WARN_MESSAGE( P, M ) \
+ ((P)? (void)0 : ::boost::detail::msg_impl( (M) , __FILE__, __LINE__, BOOST_CURRENT_FUNCTION))
+#define BOOST_MESSAGE( M ) \
+ BOOST_WARN_MESSAGE( true , (M) )
+
+#define BOOST_CHECKPOINT( M ) \
+ BOOST_WARN_MESSAGE( true , (M) )
+
+//#define BOOST_TEST_DONT_PRINT_LOG_VALUE( T )
+
+#define BOOST_FAIL( M ) BOOST_REQUIRE_MESSAGE( false, (M) )
+#define EXIT_SUCCESS 0
+
+int test_main(int argc, char * argv[]);
+
+#include <boost/serialization/singleton.hpp>
+
+int
+main(int argc, char * argv[]){
+
+ boost::serialization::singleton_module::lock();
+
+ BOOST_TRY{
+ test_main(argc, argv);
+ }
+ #ifndef BOOST_NO_EXCEPTION_STD_NAMESPACE
+ BOOST_CATCH(const std::exception & e){
+ BOOST_ERROR(e.what());
+ }
+ #endif
+ BOOST_CATCH(...){
+ BOOST_ERROR("failed with uncaught exception:");
+ }
+ BOOST_CATCH_END
+
+ boost::serialization::singleton_module::unlock();
+
+ return boost::report_errors();
+}
+
+// the following is to ensure that when one of the libraries changes
+// BJAM rebuilds and relinks the test.
+/*
+#include "text_archive.hpp"
+#include "text_warchive.hpp"
+#include "binary_archive.hpp"
+#include "xml_archive.hpp"
+#include "xml_warchive.hpp"
+*/
+
+/////////////////////////////////////////////
+// invoke header for a custom archive test.
+
+/////////////////////////////////////////////
+// invoke header for a custom archive test.
+#if ! defined(BOOST_ARCHIVE_TEST)
+#define BOOST_ARCHIVE_TEST text_archive.hpp
+#endif
+
+#include <boost/preprocessor/stringize.hpp>
+#include BOOST_PP_STRINGIZE(BOOST_ARCHIVE_TEST)
+
+#ifndef TEST_STREAM_FLAGS
+ #define TEST_STREAM_FLAGS (std::ios_base::openmode)0
+#endif
+
+#ifndef TEST_ARCHIVE_FLAGS
+ #define TEST_ARCHIVE_FLAGS 0
+#endif
+
+#ifndef TEST_DIRECTORY
+#define TEST_DIRECTORY
+#else
+#define __x__ TEST_DIRECTORY
+#undef TEST_DIRECTORY
+#define TEST_DIRECTORY BOOST_PP_STRINGIZE(__x__)
+#endif
+
+#endif // BOOST_SERIALIZATION_TEST_TOOLS_HPP
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_tracking_save.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef> // NULL
+#include <fstream>
+
+#include <boost/config.hpp>
+#include <cstdio> // remove
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+#include <boost/serialization/tracking.hpp>
+#include <boost/serialization/nvp.hpp>
+
+#define TEST_CLASS(N, TRACKING) \
+class N \
+{ \
+ friend class boost::serialization::access; \
+ template<class Archive> \
+ void serialize(Archive & /* ar */, const unsigned int /* file_version */){ \
+ ++count; \
+ } \
+public: \
+ static unsigned int count; \
+}; \
+unsigned int N::count = 0;\
+BOOST_CLASS_TRACKING(N, TRACKING)
+
+TEST_CLASS(AN, ::boost::serialization::track_never)
+TEST_CLASS(AS, ::boost::serialization::track_selectively)
+TEST_CLASS(AA, ::boost::serialization::track_always)
+
+// test pointers
+TEST_CLASS(PAN, ::boost::serialization::track_never)
+TEST_CLASS(PAS, ::boost::serialization::track_selectively)
+TEST_CLASS(PAA, ::boost::serialization::track_always)
+
+void out(const char *testfile)
+{
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ // write object twice to check tracking
+ AN an;
+ AS as;
+ AA aa;
+ oa << BOOST_SERIALIZATION_NVP(an) << BOOST_SERIALIZATION_NVP(an);
+ BOOST_CHECK(an.count == 2);
+ oa << BOOST_SERIALIZATION_NVP(as) << BOOST_SERIALIZATION_NVP(as);
+ BOOST_CHECK(as.count == 2);
+ oa << BOOST_SERIALIZATION_NVP(aa) << BOOST_SERIALIZATION_NVP(aa);
+ BOOST_CHECK(aa.count == 1);
+
+ PAN *pan = new PAN;
+ PAS *pas = new PAS;
+ PAA *paa = new PAA;
+ oa << BOOST_SERIALIZATION_NVP(pan) << BOOST_SERIALIZATION_NVP(pan);
+ BOOST_CHECK(pan->count == 2);
+ oa << BOOST_SERIALIZATION_NVP(pas) << BOOST_SERIALIZATION_NVP(pas);
+ BOOST_CHECK(pas->count == 1);
+ oa << BOOST_SERIALIZATION_NVP(paa) << BOOST_SERIALIZATION_NVP(paa);
+ BOOST_CHECK(paa->count == 1);
+ delete pan;
+ delete pas;
+ delete paa;
+}
+
+void in(const char *testfile)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ // read object twice to check tracking
+ AN an;
+ AS as;
+ AA aa;
+
+ AN::count = 0;
+ AS::count = 0;
+ AA::count = 0;
+
+ ia >> BOOST_SERIALIZATION_NVP(an) >> BOOST_SERIALIZATION_NVP(an);
+ BOOST_CHECK(an.count == 2);
+ ia >> BOOST_SERIALIZATION_NVP(as) >> BOOST_SERIALIZATION_NVP(as);
+ BOOST_CHECK(as.count == 2);
+ ia >> BOOST_SERIALIZATION_NVP(aa) >> BOOST_SERIALIZATION_NVP(aa);
+ BOOST_CHECK(aa.count == 1);
+
+ PAN::count = 0;
+ PAS::count = 0;
+ PAA::count = 0;
+
+ PAN *pan = NULL;
+ PAS *pas = NULL;
+ PAA *paa = NULL;
+ ia >> BOOST_SERIALIZATION_NVP(pan);
+ ia >> BOOST_SERIALIZATION_NVP(pan);
+ BOOST_CHECK(pan->count == 2);
+ ia >> BOOST_SERIALIZATION_NVP(pas);
+ ia >> BOOST_SERIALIZATION_NVP(pas);
+ BOOST_CHECK(pas->count == 1);
+ ia >> BOOST_SERIALIZATION_NVP(paa);
+ ia >> BOOST_SERIALIZATION_NVP(paa);
+ BOOST_CHECK(paa->count == 1);
+ delete pan;
+ delete pas;
+ delete paa;
+}
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ out(testfile);
+ in(testfile);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_traits_fail.cpp: test implementation level trait
+
+// (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)
+
+// compile test for traits
+#include "test_tools.hpp"
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/version.hpp>
+
+class A
+{
+};
+
+BOOST_CLASS_IMPLEMENTATION(A, boost::serialization::not_serializable)
+// It can make no sense to assign a version number to a class that
+// is not serialized with class information
+BOOST_CLASS_VERSION(A, 2) // should fail during compile
+// It can make no sense to assign tracking behavior to a class that
+// is not serializable. Should fail during compile.
+BOOST_CLASS_TRACKING(A, boost::serialization::track_never)
+
+class B
+{
+};
+
+BOOST_CLASS_IMPLEMENTATION(B, boost::serialization::object_class_info)
+BOOST_CLASS_VERSION(B, 2)
+BOOST_CLASS_TRACKING(B, boost::serialization::track_always)
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ return boost::exit_failure;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_traits_pass.cpp: test implementation level trait
+
+// (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)
+
+// compile test for traits
+#include "test_tools.hpp"
+
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/tracking.hpp>
+#include <boost/serialization/version.hpp>
+
+class B
+{
+};
+
+BOOST_CLASS_IMPLEMENTATION(B, boost::serialization::object_class_info)
+BOOST_CLASS_VERSION(B, 2)
+BOOST_CLASS_TRACKING(B, boost::serialization::track_always)
+
+int
+test_main( int argc, char* argv[] )
+{
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_unregistered.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <fstream>
+
+#include <cstddef> // NULL
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include <boost/archive/archive_exception.hpp>
+#include <boost/serialization/base_object.hpp>
+#include <boost/serialization/type_info_implementation.hpp>
+#include <boost/detail/no_exceptions_support.hpp>
+
+class polymorphic_base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive & /* ar */, const unsigned int /* file_version */){
+ }
+public:
+ virtual ~polymorphic_base(){};
+};
+
+class polymorphic_derived1 : public polymorphic_base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(polymorphic_base);
+ }
+};
+
+class polymorphic_derived2 : public polymorphic_base
+{
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive &ar, const unsigned int /* file_version */){
+ ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(polymorphic_base);
+ }
+};
+
+// save unregistered polymorphic classes
+void save_unregistered1(const char *testfile)
+{
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+
+ polymorphic_base *rb1 = new polymorphic_derived1;
+
+ // registration IS necessary when serializing a polymorphic class
+ // through pointer to the base class
+ bool except = false;
+ BOOST_TRY {
+ oa << BOOST_SERIALIZATION_NVP(rb1);
+ }
+ BOOST_CATCH(boost::archive::archive_exception aex){
+ except = true;
+ }
+ BOOST_CATCH_END
+ BOOST_CHECK_MESSAGE(except, "lack of registration not detected !");
+
+ delete rb1;
+}
+
+// note: the corresponding save function above will not result in
+// valid archive - hence, the following code which attempts to load
+// and archive will fail. Leave this as a reminder not to do this
+#if 0
+// load unregistered polymorphic classes
+void load_unregistered1(const char *testfile)
+{
+ std::ifstream is(testfile);
+ boost::archive::iarchive ia(is);
+
+ polymorphic_base *rb1(NULL);
+
+ // registration IS necessary when serializing a polymorphic class
+ // through pointer to the base class
+ bool except = false;
+ BOOST_TRY {
+ ia >> BOOST_SERIALIZATION_NVP(rb1);
+ }
+ BOOST_CATCH(boost::archive::archive_exception aex){
+ except = true;
+ BOOST_CHECK_MESSAGE(
+ NULL == rb1,
+ "failed load resulted in a non-null pointer"
+ );
+ }
+ BOOST_CATCH_END
+ BOOST_CHECK_MESSAGE(except, "lack of registration not detected !");
+
+ delete rb1;
+}
+#endif
+
+// save unregistered polymorphic classes
+void save_unregistered2(const char *testfile)
+{
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+
+ polymorphic_derived1 *rd1 = new polymorphic_derived1;
+
+ // registration is NOT necessary when serializing a polymorphic class
+ // through pointer to a derived class
+ bool except = false;
+ BOOST_TRY {
+ oa << BOOST_SERIALIZATION_NVP(rd1);
+ }
+ BOOST_CATCH(boost::archive::archive_exception aex){
+ except = true;
+ }
+ BOOST_CATCH_END
+ BOOST_CHECK_MESSAGE(! except, "registration not detected !");
+
+ delete rd1;
+}
+
+// note: the corresponding save function above will not result in
+// valid archive - hence, the following code which attempts to load
+// and archive will fail. Leave this as a reminder not to do this
+// load unregistered polymorphic classes
+void load_unregistered2(const char *testfile)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+
+ polymorphic_derived1 *rd1 = NULL;
+
+ // registration is NOT necessary when serializing a polymorphic class
+ // or through pointer to a derived class
+ bool except = false;
+ BOOST_TRY {
+ ia >> BOOST_SERIALIZATION_NVP(rd1);
+ }
+ BOOST_CATCH(boost::archive::archive_exception aex){
+ except = true;
+ BOOST_CHECK_MESSAGE(
+ NULL == rd1,
+ "failed load resulted in a non-null pointer"
+ );
+ }
+ BOOST_CATCH_END
+ BOOST_CHECK_MESSAGE(! except, "registration not detected !");
+
+ delete rd1;
+}
+
+// save registered polymorphic class
+void save_registered(const char *testfile)
+{
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+
+ polymorphic_base *rb1 = new polymorphic_derived1;
+ polymorphic_base *rb2 = new polymorphic_derived2;
+
+ // registration (forward declaration) will permit correct serialization
+ // through a pointer to a base class
+ oa.register_type(static_cast<polymorphic_derived1 *>(NULL));
+ oa.register_type(static_cast<polymorphic_derived2 *>(NULL));
+ oa << BOOST_SERIALIZATION_NVP(rb1);
+ oa << BOOST_SERIALIZATION_NVP(rb2);
+
+ delete rb1;
+ delete rb2;
+}
+
+// load registered polymorphic class
+void load_registered(const char *testfile)
+{
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+
+ polymorphic_base *rb1 = NULL;
+ polymorphic_base *rb2 = NULL;
+
+ // registration (forward declaration) will permit correct serialization
+ // through a pointer to a base class
+ ia.register_type(static_cast<polymorphic_derived1 *>(NULL));
+ ia.register_type(static_cast<polymorphic_derived2 *>(NULL));
+
+ ia >> BOOST_SERIALIZATION_NVP(rb1);
+
+ BOOST_CHECK_MESSAGE(NULL != rb1, "Load resulted in NULL pointer");
+ BOOST_CHECK_MESSAGE(
+ boost::serialization::type_info_implementation<
+ polymorphic_derived1
+ >::type::get_const_instance()
+ ==
+ * boost::serialization::type_info_implementation<
+ polymorphic_base
+ >::type::get_const_instance().get_derived_extended_type_info(*rb1),
+ "restored pointer b1 not of correct type"
+ );
+
+ ia >> BOOST_SERIALIZATION_NVP(rb2);
+ BOOST_CHECK_MESSAGE(NULL != rb2, "Load resulted in NULL pointer");
+ BOOST_CHECK_MESSAGE(
+ boost::serialization::type_info_implementation<
+ polymorphic_derived2
+ >::type::get_const_instance()
+ ==
+ * boost::serialization::type_info_implementation<
+ polymorphic_base
+ >::type::get_const_instance().get_derived_extended_type_info(*rb2),
+ "restored pointer b2 not of correct type"
+ );
+
+ delete rb1;
+ delete rb2;
+}
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+ save_unregistered1(testfile);
+// load_unregistered1(testfile);
+ save_unregistered2(testfile);
+ load_unregistered2(testfile);
+ save_registered(testfile);
+ load_registered(testfile);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_utf8_codecvt.cpp
+
+// (C) Copyright 2002-4 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)
+
+#include <algorithm>
+#include <fstream>
+#include <iostream>
+#include <iterator>
+#include <locale>
+#include <vector>
+#include <string>
+
+#include <cstddef> // size_t
+#include <cwchar>
+#include <boost/config.hpp>
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+ using ::wcslen;
+#ifndef UNDER_CE
+ using ::w_int;
+#endif
+} // namespace std
+#endif
+
+// Note: copied from boost/iostreams/char_traits.hpp
+//
+// Dinkumware that comes with QNX Momentics 6.3.0, 4.0.2, incorrectly defines
+// the EOF and WEOF macros to not std:: qualify the wint_t type (and so does
+// Sun C++ 5.8 + STLport 4). Fix by placing the def in this scope.
+// NOTE: Use BOOST_WORKAROUND?
+#if (defined(__QNX__) && defined(BOOST_DINKUMWARE_STDLIB)) \
+ || defined(__SUNPRO_CC)
+using ::std::wint_t;
+#endif
+
+#include "test_tools.hpp"
+#include <boost/archive/iterators/istream_iterator.hpp>
+#include <boost/archive/iterators/ostream_iterator.hpp>
+
+#include <boost/archive/add_facet.hpp>
+#include <boost/archive/detail/utf8_codecvt_facet.hpp>
+
+template<std::size_t s>
+struct test_data
+{
+ static unsigned char utf8_encoding[];
+ static wchar_t wchar_encoding[];
+};
+
+template<>
+unsigned char test_data<2>::utf8_encoding[] = {
+ 0x01,
+ 0x7f,
+ 0xc2, 0x80,
+ 0xdf, 0xbf,
+ 0xe0, 0xa0, 0x80,
+ 0xe7, 0xbf, 0xbf
+};
+
+template<>
+wchar_t test_data<2>::wchar_encoding[] = {
+ 0x0001,
+ 0x007f,
+ 0x0080,
+ 0x07ff,
+ 0x0800,
+ 0x7fff
+};
+
+template<>
+unsigned char test_data<4>::utf8_encoding[] = {
+ 0x01,
+ 0x7f,
+ 0xc2, 0x80,
+ 0xdf, 0xbf,
+ 0xe0, 0xa0, 0x80,
+ 0xef, 0xbf, 0xbf,
+ 0xf0, 0x90, 0x80, 0x80,
+ 0xf4, 0x8f, 0xbf, 0xbf,
+ 0xf7, 0xbf, 0xbf, 0xbf,
+ 0xf8, 0x88, 0x80, 0x80, 0x80,
+ 0xfb, 0xbf, 0xbf, 0xbf, 0xbf,
+ 0xfc, 0x84, 0x80, 0x80, 0x80, 0x80,
+ 0xfd, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf
+};
+
+template<>
+wchar_t test_data<4>::wchar_encoding[] = {
+ 0x00000001,
+ 0x0000007f,
+ 0x00000080,
+ 0x000007ff,
+ 0x00000800,
+ 0x0000ffff,
+ 0x00010000,
+ 0x0010ffff,
+ 0x001fffff,
+ 0x00200000,
+ 0x03ffffff,
+ 0x04000000,
+ 0x7fffffff
+};
+
+int
+test_main(int /* argc */, char * /* argv */[]) {
+ std::locale old_loc;
+ std::locale * utf8_locale
+ = boost::archive::add_facet(
+ old_loc,
+ new boost::archive::detail::utf8_codecvt_facet
+ );
+
+ typedef char utf8_t;
+ typedef test_data<sizeof(wchar_t)> td;
+
+ // Send our test UTF-8 data to file
+ {
+ std::ofstream ofs;
+ ofs.open("test.dat", std::ios::binary);
+ std::copy(
+ td::utf8_encoding,
+ #if ! defined(__BORLANDC__)
+ // borland 5.60 complains about this
+ td::utf8_encoding + sizeof(td::utf8_encoding) / sizeof(unsigned char),
+ #else
+ // so use this instead
+ td::utf8_encoding + 12,
+ #endif
+ boost::archive::iterators::ostream_iterator<utf8_t>(ofs)
+ );
+ }
+
+ // Read the test data back in, converting to UCS-4 on the way in
+ std::vector<wchar_t> from_file;
+ {
+ std::wifstream ifs;
+ ifs.imbue(*utf8_locale);
+ ifs.open("test.dat");
+
+ wchar_t item = 0;
+ // note can't use normal vector from iterator constructor because
+ // dinkumware doesn't have it.
+ for(;;){
+ item = ifs.get();
+ if(item == WEOF)
+ break;
+ //ifs >> item;
+ //if(ifs.eof())
+ // break;
+ from_file.push_back(item);
+ }
+ }
+
+ // compare the data read back in with the orginal
+ #if ! defined(__BORLANDC__)
+ // borland 5.60 complains about this
+ BOOST_CHECK(from_file.size() == sizeof(td::wchar_encoding)/sizeof(wchar_t));
+ #else
+ // so use this instead
+ BOOST_CHECK(from_file.size() == 6);
+ #endif
+
+ BOOST_CHECK(std::equal(from_file.begin(), from_file.end(), td::wchar_encoding));
+
+ // Send the UCS4_data back out, converting to UTF-8
+ {
+ std::wofstream ofs;
+ ofs.imbue(*utf8_locale);
+ ofs.open("test2.dat");
+ std::copy(
+ from_file.begin(),
+ from_file.end(),
+ boost::archive::iterators::ostream_iterator<wchar_t>(ofs)
+ );
+ }
+
+ // Make sure that both files are the same
+ {
+ typedef boost::archive::iterators::istream_iterator<utf8_t> is_iter;
+ is_iter end_iter;
+
+ std::ifstream ifs1("test.dat");
+ is_iter it1(ifs1);
+ std::vector<utf8_t> data1;
+ std::copy(it1, end_iter, std::back_inserter(data1));
+
+ std::ifstream ifs2("test2.dat");
+ is_iter it2(ifs2);
+ std::vector<utf8_t> data2;
+ std::copy(it2, end_iter, std::back_inserter(data2));
+
+ BOOST_CHECK(data1 == data2);
+ }
+
+ // some libraries have trouble that only shows up with longer strings
+
+ wchar_t * test3_data = L"\
+ <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>\
+ <!DOCTYPE boost_serialization>\
+ <boost_serialization signature=\"serialization::archive\" version=\"3\">\
+ <a class_id=\"0\" tracking_level=\"0\">\
+ <b>1</b>\
+ <f>96953204</f>\
+ <g>177129195</g>\
+ <l>1</l>\
+ <m>5627</m>\
+ <n>23010</n>\
+ <o>7419</o>\
+ <p>16212</p>\
+ <q>4086</q>\
+ <r>2749</r>\
+ <c>-33</c>\
+ <s>124</s>\
+ <t>28</t>\
+ <u>32225</u>\
+ <v>17543</v>\
+ <w>0.84431422</w>\
+ <x>1.0170664757130923</x>\
+ <y>tjbx</y>\
+ <z>cuwjentqpkejp</z>\
+ </a>\
+ </boost_serialization>\
+ ";
+
+ // Send the UCS4_data back out, converting to UTF-8
+ std::size_t l = std::wcslen(test3_data);
+ {
+ std::wofstream ofs;
+ ofs.imbue(*utf8_locale);
+ ofs.open("test3.dat");
+ std::copy(
+ test3_data,
+ test3_data + l,
+ boost::archive::iterators::ostream_iterator<wchar_t>(ofs)
+ );
+ }
+
+ // Make sure that both files are the same
+ {
+ std::wifstream ifs;
+ ifs.imbue(*utf8_locale);
+ ifs.open("test3.dat");
+ BOOST_CHECK(
+ std::equal(
+ test3_data,
+ test3_data + l,
+ boost::archive::iterators::istream_iterator<wchar_t>(ifs)
+ )
+ );
+ }
+
+ delete utf8_locale;
+ return EXIT_SUCCESS;
+}
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_valarrray.cpp
+
+// (C) Copyright 2005 Matthias Troyer .
+// 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)
+
+// should pass compilation and execution
+
+#include <cstddef> // NULL
+#include <fstream>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include <boost/serialization/valarray.hpp>
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ // test array of objects
+ std::valarray<int> avalarray(2);
+ avalarray[0] = 42;
+ avalarray[1] = -42;
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("avalarray", avalarray);
+ }
+ std::valarray<int> avalarray1;
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("avalarray", avalarray1);
+ }
+ bool equal = ( avalarray.size() == avalarray1.size()
+ && avalarray[0] == avalarray1[0]
+ && avalarray[1] == avalarray1[1]
+ );
+
+ BOOST_CHECK(equal);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_variant.cpp
+// test of non-intrusive serialization of variant types
+//
+// copyright (c) 2005
+// troy d. straszheim <troy@resophonic.com>
+// http://www.resophonic.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.
+//
+// thanks to Robert Ramey and Peter Dimov.
+//
+
+#include <cstddef> // NULL
+#include <cstdio> // remove
+#include <fstream>
+#include <cmath> // for fabs()
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/serialization/throw_exception.hpp>
+
+#if defined(_MSC_VER) && (_MSC_VER <= 1020)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include "test_tools.hpp"
+
+#include <boost/archive/archive_exception.hpp>
+
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/variant.hpp>
+
+#include "A.hpp"
+#include "A.ipp"
+
+class are_equal
+ : public boost::static_visitor<bool>
+{
+public:
+ // note extra rigamorole for compilers which don't support
+ // partial function template ordering - specfically msvc 6.x
+ struct same {
+ template<class T, class U>
+ static bool invoke(const T & t, const U & u){
+ return t == u;
+ }
+ };
+
+ struct not_same {
+ template<class T, class U>
+ static bool invoke(const T &, const U &){
+ return false;
+ }
+ };
+
+ template <class T, class U>
+ bool operator()( const T & t, const U & u) const
+ {
+ typedef BOOST_DEDUCED_TYPENAME boost::mpl::eval_if<boost::is_same<T, U>,
+ boost::mpl::identity<same>,
+ boost::mpl::identity<not_same>
+ >::type type;
+ return type::invoke(t, u);
+ }
+
+ bool operator()( const float & lhs, const float & rhs ) const
+ {
+ return std::fabs(lhs- rhs) < std::numeric_limits<float>::round_error();
+ }
+ bool operator()( const double & lhs, const double & rhs ) const
+ {
+ return std::fabs(lhs - rhs) < std::numeric_limits<float>::round_error();
+ }
+};
+
+template <class T>
+void test_type(const T& gets_written){
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(testfile != NULL);
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("written", gets_written);
+ }
+
+ T got_read;
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("written", got_read);
+ }
+ BOOST_CHECK(boost::apply_visitor(are_equal(), gets_written, got_read));
+
+ std::remove(testfile);
+}
+
+// this verifies that if you try to read in a variant from a file
+// whose "which" is illegal for the one in memory (that is, you're
+// reading in to a different variant than you wrote out to) the load()
+// operation will throw. One could concievably add checking for
+// sequence length as well, but this would add size to the archive for
+// dubious benefit.
+//
+void do_bad_read()
+{
+ // Compiling this test invokes and ICE on msvc 6
+ // So, we'll just to skip it for this compiler
+ #if defined(_MSC_VER) && (_MSC_VER <= 1020)
+ boost::variant<bool, float, int, std::string> big_variant;
+ big_variant = std::string("adrenochrome");
+
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(testfile != NULL);
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << BOOST_SERIALIZATION_NVP(big_variant);
+ }
+ boost::variant<bool, float, int> little_variant;
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ bool exception_invoked = false;
+ BOOST_TRY {
+ ia >> BOOST_SERIALIZATION_NVP(little_variant);
+ } BOOST_CATCH (boost::archive::archive_exception e) {
+ BOOST_CHECK(boost::archive::archive_exception::unsupported_version == e.code);
+ exception_invoked = true;
+ }
+ BOOST_CATCH_END
+ BOOST_CHECK(exception_invoked);
+ }
+ #endif
+}
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ {
+ boost::variant<bool, int, float, double, A, std::string> v;
+ v = false;
+ test_type(v);
+ v = 1;
+ test_type(v);
+ v = (float) 2.3;
+ test_type(v);
+ v = (double) 6.4;
+ test_type(v);
+ v = std::string("we can't stop here, this is Bat Country");
+ test_type(v);
+ v = A();
+ test_type(v);
+ }
+ do_bad_read();
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_vector.cpp
+
+// (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)
+
+// should pass compilation and execution
+
+#include <cstddef> // NULL
+#include <fstream>
+
+#include <cstdio> // remove
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include <boost/serialization/vector.hpp>
+
+#include "A.hpp"
+#include "A.ipp"
+
+template <class T>
+int test_vector(T)
+{
+ const char * testfile = boost::archive::tmpnam(NULL);
+ BOOST_REQUIRE(NULL != testfile);
+
+ // test array of objects
+ std::vector<T> avector;
+ avector.push_back(T());
+ avector.push_back(T());
+ {
+ test_ostream os(testfile, TEST_STREAM_FLAGS);
+ test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
+ oa << boost::serialization::make_nvp("avector", avector);
+ }
+ std::vector<T> avector1;
+ {
+ test_istream is(testfile, TEST_STREAM_FLAGS);
+ test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
+ ia >> boost::serialization::make_nvp("avector", avector1);
+ }
+ BOOST_CHECK(avector == avector1);
+ std::remove(testfile);
+ return EXIT_SUCCESS;
+}
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+ int res = test_vector(A());
+ // test an int vector for which optimized versions should be available
+ if (res == EXIT_SUCCESS)
+ res = test_vector(0);
+ // test a bool vector
+ if (res == EXIT_SUCCESS)
+ res = test_vector(false);
+ return res;
+}
+
+// EOF
--- /dev/null
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_void_cast.cpp: test implementation of run-time casting of void pointers
+
+// (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)
+// <gennadiy.rozental@tfn.com>
+
+#include <cstddef> // NULL
+#include "test_tools.hpp"
+#include <boost/serialization/extended_type_info_typeid.hpp>
+#include <boost/serialization/void_cast.hpp>
+#include <boost/serialization/singleton.hpp>
+
+class Base1
+{
+ char a;
+};
+
+class Base2
+{
+ int b;
+};
+
+class Derived : public Base1, public Base2
+{
+ long c;
+};
+
+class MostDerived : public Derived
+{
+ char d[32];
+};
+
+template<class T>
+const boost::serialization::extended_type_info & eti(){
+ return boost::serialization::singleton<
+ boost::serialization::extended_type_info_typeid<T>
+ >::get_const_instance();
+}
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+ MostDerived md;
+ MostDerived* pmd =& md;
+ Derived* pd = static_cast<Derived*>(pmd);
+
+ Base2* pb2 = static_cast<Base2*>(pmd);
+ Base1* pb1 = static_cast<Base1*>(pd);
+
+ void* vpmd = static_cast<void*>(pmd);
+ void* vpb1 = static_cast<void*>(pb1);
+ void* vpb2 = static_cast<void*>(pb2);
+ void* vpd = static_cast<void*>(pd);
+
+ // simple casts only requiring table lookup
+ BOOST_CHECK(vpd == boost::serialization::void_downcast(
+ eti<Derived>(),
+ eti<Base1>(),
+ vpb1
+ ));
+ BOOST_CHECK(vpb1 == boost::serialization::void_upcast(
+ eti<Derived>(),
+ eti<Base1>(),
+ vpd
+ ));
+ BOOST_CHECK(vpd == boost::serialization::void_downcast(
+ eti<Derived>(),
+ eti<Base2>(),
+ vpb2
+ ));
+ BOOST_CHECK(vpb2 == boost::serialization::void_upcast(
+ eti<Derived>(),
+ eti<Base2>(),
+ vpd
+ ));
+ BOOST_CHECK(vpmd == boost::serialization::void_downcast(
+ eti<MostDerived>(),
+ eti<Derived>(),
+ vpd
+ ));
+ BOOST_CHECK(vpd == boost::serialization::void_upcast(
+ eti<MostDerived>(),
+ eti<Derived>(),
+ vpmd
+ ));
+ // note relationship between MostDerived and Base1 is automatically derived
+ BOOST_CHECK(vpmd == boost::serialization::void_downcast(
+ eti<MostDerived>(),
+ eti<Base1>(),
+ vpb1
+ ));
+ BOOST_CHECK(vpb1 == boost::serialization::void_upcast(
+ eti<MostDerived>(),
+ eti<Base1>(),
+ vpmd
+ ));
+
+ // note relationship between MostDerived and Base2 is automatically derived
+ BOOST_CHECK(vpmd == boost::serialization::void_downcast(
+ eti<MostDerived>(),
+ eti<Base2>(),
+ vpb2
+ ));
+ BOOST_CHECK(vpb2 == boost::serialization::void_upcast(
+ eti<MostDerived>(),
+ eti<Base2>(),
+ vpmd
+ ));
+
+ // note: currently derivations are not optimised. See void_cast.cpp
+ // for and explanation. These should still work though.
+
+ // need to double check to validate speed up optimization of derivations
+ BOOST_CHECK(vpmd == boost::serialization::void_downcast(
+ eti<MostDerived>(),
+ eti<Base1>(),
+ vpb1
+ ));
+ BOOST_CHECK(vpb1 == boost::serialization::void_upcast(
+ eti<MostDerived>(),
+ eti<Base1>(),
+ vpmd
+ ));
+ BOOST_CHECK(vpmd == boost::serialization::void_downcast(
+ eti<MostDerived>(),
+ eti<Base2>(),
+ vpb2
+ ));
+ BOOST_CHECK(vpb2 == boost::serialization::void_upcast(
+ eti<MostDerived>(),
+ eti<Base2>(),
+ vpmd
+ ));
+
+ // check things that should fail
+ BOOST_CHECK(NULL == boost::serialization::void_downcast(
+ eti<Base2>(),
+ eti<Base1>(),
+ vpb1
+ ));
+
+ // note that a fundamental feature is that derived/base pairs are created
+ // at compiler time so that all are registered before the main program starts
+ // so leave the registration here at the end to verify this. Note bogus arguments
+ // to workaround msvc 6 bug
+ boost::serialization::void_cast_register<Derived, Base1>(
+ static_cast<Derived *>(NULL),
+ static_cast<Base1 *>(NULL)
+ );
+ boost::serialization::void_cast_register<Derived, Base2>(
+ static_cast<Derived *>(NULL),
+ static_cast<Base2 *>(NULL)
+ );
+ boost::serialization::void_cast_register<MostDerived, Derived>(
+ static_cast<MostDerived *>(NULL),
+ static_cast<Derived *>(NULL)
+ );
+
+ return EXIT_SUCCESS;
+}
+
+// EOF
--- /dev/null
+// (C) Copyright 2002-4 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.
+// text_archive
+#include <boost/archive/text_oarchive.hpp>
+typedef boost::archive::text_oarchive test_oarchive;
+typedef std::ofstream test_ostream;
+#include <boost/archive/text_iarchive.hpp>
+typedef boost::archive::text_iarchive test_iarchive;
+typedef std::ifstream test_istream;
--- /dev/null
+// (C) Copyright 2002-4 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.
+// text_warchive
+#include <boost/archive/text_woarchive.hpp>
+typedef boost::archive::text_woarchive test_oarchive;
+typedef std::wofstream test_ostream;
+#include <boost/archive/text_wiarchive.hpp>
+typedef boost::archive::text_wiarchive test_iarchive;
+typedef std::wifstream test_istream;
--- /dev/null
+// (C) Copyright 2002-4 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.
+// xml_archive
+#include <boost/archive/xml_oarchive.hpp>
+typedef boost::archive::xml_oarchive test_oarchive;
+typedef std::ofstream test_ostream;
+#include <boost/archive/xml_iarchive.hpp>
+typedef boost::archive::xml_iarchive test_iarchive;
+typedef std::ifstream test_istream;
--- /dev/null
+// (C) Copyright 2002-4 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.
+// xml_warchive
+#include <boost/archive/xml_woarchive.hpp>
+typedef boost::archive::xml_woarchive test_oarchive;
+typedef std::wofstream test_ostream;
+#include <boost/archive/xml_wiarchive.hpp>
+typedef boost::archive::xml_wiarchive test_iarchive;
+typedef std::wifstream test_istream;
--- /dev/null
+# Boost serialization Library utility test Jamfile
+
+# (C) Copyright Robert Ramey 2002-2004.
+# Use, modification, and distribution are 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)
+#
+
+# the file contains Jam rules which are used in both the normal
+# boost test, as well as the performance test and comprehensive
+# tests.
+
+BOOST_ARCHIVE_LIST = [ modules.peek : BOOST_ARCHIVE_LIST ] ;
+
+# these are used to shorten testing while in development. It permits
+# testing to be applied to just a particular type of archive
+if ! $(BOOST_ARCHIVE_LIST) {
+ BOOST_ARCHIVE_LIST =
+ "text_archive.hpp"
+ "text_warchive.hpp"
+ "binary_archive.hpp"
+ "xml_archive.hpp"
+ "xml_warchive.hpp"
+ ;
+ # enable the tests which don't depend on a particular archive
+ BOOST_SERIALIZATION_TEST = true ;
+}
+
+rule run-template ( test-name : sources * : requirements * ) {
+ return [
+ run
+ $(sources)
+ : # command
+ : # input files
+ : # requirements
+ # toolset warnings
+ # <toolset>gcc:<cxxflags>"-Wno-non-virtual-dtor -Wno-ctor-dtor-privacy"
+ <toolset>borland:<cxxflags>"-w-8080 -w-8071 -w-8057 -w-8062 -w-8008 -w-0018 -w-8066"
+ <toolset>gcc:<warnings>all # ?
+ <toolset>gcc:<cxxflags>"-Wno-long-long"
+ <toolset>msvc:<warnings>all # == /W4
+ <toolset>msvc:<define>_SCL_SECURE_NO_WARNINGS
+ <toolset>msvc:<define>_SCL_SECURE_NO_DEPRECATE
+ <toolset>msvc:<define>_CRT_SECURE_NO_WARNINGS
+ <toolset>msvc:<define>_CRT_SECURE_NO_DEPRECATE
+ <toolset>msvc:<cxxflags>"-wd4996"
+ # toolset optimizations
+ <toolset>gcc:<cxxflags>"-ftemplate-depth-255"
+ <toolset>msvc:<cxxflags>"-Gy"
+ $(requirements)
+ : # test name
+ $(test-name)
+ ] ;
+}
+
+# Given a name of test, return the 'save' test that must be run
+# before the named test, or empty string if there's no such test.
+rule dependency-save-test ( test )
+{
+ local m = [ MATCH (.*)load(.*) : $(test) ] ;
+ if $(m)
+ {
+ return $(m[1])save$(m[2]) ;
+ }
+}
+
+# each of the following tests is run with each type of archive
+rule run-invoke ( test-name : sources * : requirements * )
+{
+ local save-test = [ dependency-save-test $(test-name) ] ;
+
+ local tests ;
+ tests += [
+ run-template $(test-name)
+ : # sources
+ $(sources)
+ ../build//boost_serialization
+ : # requirements
+ $(requirements)
+ <define>BOOST_LIB_DIAGNOSTIC=1
+ <dependency>$(save-test)
+ ] ;
+ return $(tests) ;
+}
+
+# each of the following tests is run with each type of archive
+rule run-winvoke ( test-name : sources * : requirements * )
+{
+ local save-test = [ dependency-save-test $(test-name) ] ;
+
+ local tests ;
+ tests += [
+ run-template $(test-name)
+ : # sources
+ $(sources)
+ ../build//boost_serialization
+ ../build//boost_wserialization
+ : # requirements
+ $(requirements)
+ <define>BOOST_LIB_DIAGNOSTIC=1
+ # both stlport and msvc6 define iswspace
+ <toolset>msvc,<stdlib>stlport:<linkflags>"-force:multiple"
+ <dependency>$(save-test)
+ <dependency>../../config/test/all//BOOST_NO_STD_WSTREAMBUF
+ ] ;
+ return $(tests) ;
+}
+
+# for tests which don't use library code - usually just headers
+rule test-bsl-run-no-lib ( test-name : sources * : requirements * )
+{
+ local tests ;
+ tests += [
+ run-template $(test-name)
+ : # sources
+ $(test-name).cpp $(sources).cpp
+ :
+ $(requirements)
+ ] ;
+ return $(tests) ;
+}
+
+# for tests which are run just once rather than for every archive
+rule test-bsl-run ( test-name : sources * : libs * : requirements * )
+{
+ local tests ;
+ tests += [
+ run-invoke $(test-name)
+ : # sources
+ $(test-name).cpp $(sources).cpp $(libs)
+ :
+ $(requirements)
+ ] ;
+ return $(tests) ;
+}
+
+rule test-bsl-run_archive ( test-name : archive-name : sources * : libs * : requirements * ) {
+ local tests ;
+ switch $(archive-name) {
+ case "*_warchive" :
+ tests += [
+ run-winvoke $(test-name)_$(archive-name)
+ :
+ $(sources).cpp $(libs)
+ :
+ <define>BOOST_ARCHIVE_TEST=$(archive-name).hpp
+ $(requirements)
+ ] ;
+ case "*" :
+ tests += [
+ run-invoke $(test-name)_$(archive-name)
+ :
+ $(sources).cpp $(libs)
+ :
+ <define>BOOST_ARCHIVE_TEST=$(archive-name).hpp
+ $(requirements)
+ ] ;
+ }
+ return $(tests) ;
+}
+
+rule test-bsl-run_files ( test-name : sources * : libs * : requirements * ) {
+ local tests ;
+ for local defn in $(BOOST_ARCHIVE_LIST) {
+ tests += [
+ test-bsl-run_archive $(test-name)
+ : $(defn:LB)
+ : $(test-name) $(sources)
+ : $(libs)
+ : $(requirements)
+ ] ;
+ }
+ return $(tests) ;
+}
+
+rule test-bsl-run_polymorphic_archive ( test-name : sources * ) {
+ local tests ;
+ for local defn in $(BOOST_ARCHIVE_LIST) {
+ tests += [
+ test-bsl-run_archive $(test-name)
+ : polymorphic_$(defn:LB)
+ : $(test-name) $(sources)
+ ] ;
+ }
+ return $(tests) ;
+}
+
+
--- /dev/null
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_map", "test_map.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_mi", "test_mi.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_multiple_ptrs", "test_multiple_ptrs.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_no_rtti", "test_no_rtti.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_non_default_ctor", "test_non_default_ctor.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_non_default_ctor2", "test_non_default_ctor2.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_non_intrusive", "test_non_intrusive.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_null_ptr", "test_null_ptr.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_nvp", "test_nvp.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_object", "test_object.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_optional", "test_optional.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_polymorphic", "test_polymorphic.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_primitive", "test_primitive.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_private_ctor", "test_private_ctor.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_recursion", "test_recursion.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_registered", "test_registered.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_set", "test_set.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_shared_ptr", "test_shared_ptr.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_simple_class_ptr", "test_simple_class_ptr.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_split", "test_split.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_static_warning", "test_static_warning.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_tracking", "test_tracking.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_traits_fail", "test_traits_fail.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_traits_pass", "test_traits_pass.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_unregistered", "test_unregistered.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_utf8_codecvt", "test_utf8_codecvt.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_vector", "test_vector.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_void_cast", "test_void_cast.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo_auto_ptr", "demo_auto_ptr.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo_exception", "demo_exception.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo_pimpl", "demo_pimpl.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo_polymorphic", "demo_polymorphic.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo_shared_ptr", "demo_shared_ptr.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo_xml", "demo_xml.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo_xml_load", "demo_xml_load.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo_xml_save", "demo_xml_save.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_not_serializable", "test_not_serializable.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_variant", "test_variant.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_derived", "test_derived.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_const_pass", "test_const_pass.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_derived_class", "test_derived_class.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_const_warn", "test_const_fail.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_shared_ptr_132", "test_shared_ptr_132.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_inclusion", "test_inclusion.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_reset_object_address", "test_reset_object_addr.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_strong_typedef", "test_strong_typedef.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibraryW", "LibraryW.vcproj", "{30E10563-960A-11D7-9FE9-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_valarray", "test_valarray.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo_dll", "demo_dll.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dll_a", "dll_a.vcproj", "{CED1BD64-563F-485D-AE69-668797013AA0}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_dll_exported", "test_dll_exported.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_dll_simple", "test_dll_simple.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_dll_plugin", "test_dll_plugin.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_complex", "test_complex.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_simple_class", "test_simple_class.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_new_operator", "test_new_operator.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_bitset", "test_bitset.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_private_base", "test_private_base.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_shared_ptr_multi_base", "test_shared_ptr_multi_base.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_array", "test_array.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dll_base", "dll_base.vcproj", "{CED1BD64-563F-485D-AE69-668797013AA0}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dll_derived2", "dll_derived2.vcproj", "{CED1BD64-563F-485D-AE69-668797013AA0}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dll_polymorphic_derived2", "polymorphic_derived2.vcproj", "{CED1BD64-563F-485D-AE69-668797013AA0}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_multiple_inheritance", "test_multiple_inheritance.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_check", "test_check.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_polymorphic2", "test_polymorphic2.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_const", "test_const.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Library", "Library.vcproj", "{30E10563-960A-11D7-9FE9-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo_portable_archive", "demo_portable_archive.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo_log", "demo_log.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo_simple_log", "demo_simple_log.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo_trivial_archive", "demo_trivial_archive.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_exported", "test_exported.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo", "demo.vcproj", "{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Debug runtime-dynamic = Debug runtime-dynamic
+ Debug runtime-static = Debug runtime-static
+ Debug runtime-static threading-multi = Debug runtime-static threading-multi
+ Release = Release
+ Release runtime-dynamic = Release runtime-dynamic
+ Release runtime-static = Release runtime-static
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Debug.Build.0 = Debug runtime-static|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Release.ActiveCfg = Release runtime-static|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Release.Build.0 = Release runtime-static|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug.ActiveCfg = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug.Build.0 = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release.ActiveCfg = Release|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release.Build.0 = Release|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release runtime-static.ActiveCfg = Release runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release runtime-static.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug.ActiveCfg = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug.Build.0 = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release.ActiveCfg = Release|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release.Build.0 = Release|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release runtime-static.ActiveCfg = Release runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release runtime-static.Build.0 = Release runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug.ActiveCfg = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug.Build.0 = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release.ActiveCfg = Release|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release.Build.0 = Release|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release runtime-static.ActiveCfg = Release runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release runtime-static.Build.0 = Release runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug.ActiveCfg = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug.Build.0 = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release.ActiveCfg = Release|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release.Build.0 = Release|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release runtime-static.ActiveCfg = Release runtime-dynamic|Win32
+ {CED1BD64-563F-485D-AE69-668797013AA0}.Release runtime-static.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Debug.Build.0 = Debug runtime-static|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Release.ActiveCfg = Release runtime-static|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Release.Build.0 = Release runtime-static|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static|Win32
+ {30E10563-960A-11D7-9FE9-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.ActiveCfg = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-dynamic.Build.0 = Debug runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.ActiveCfg = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static.Build.0 = Debug runtime-static|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.ActiveCfg = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Debug runtime-static threading-multi.Build.0 = Debug runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release.Build.0 = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.ActiveCfg = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-dynamic.Build.0 = Release runtime-dynamic|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.ActiveCfg = Release runtime-static threading-multi|Win32
+ {A7D4CC95-F2AC-11D6-9E47-525400E2CF85}.Release runtime-static.Build.0 = Release runtime-static threading-multi|Win32
+ EndGlobalSection
+ GlobalSection(SolutionItems) = postSolution
+ ..\test\Jamfile.v2 = ..\test\Jamfile.v2
+ ..\util\test.jam = ..\util\test.jam
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="Library"
+ ProjectGUID="{30E10563-960A-11D7-9FE9-525400E2CF85}"
+ RootNamespace="Library"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ CharacterSet="0">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm800 /Ob0"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ GeneratePreprocessedFile="0"
+ MinimalRebuild="FALSE"
+ BasicRuntimeChecks="0"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(ConfigurationName)\boost_serialization-vc71-mt-gd-1_42.dll"
+ GenerateDebugInformation="TRUE"
+ GenerateMapFile="TRUE"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBRARYTEST_EXPORTS;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ RuntimeLibrary="2"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(ConfigurationName)\boost_serialization-vc71-mt-1_42.dll"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ ImportLibrary="$(OutDir)/$(TargetName).lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="0">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm800 /Ob0"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_LIB;"
+ MinimalRebuild="FALSE"
+ BasicRuntimeChecks="0"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(ConfigurationName)\libboost_serialization-vc71-mt-sgd-1_42.lib"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="0">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm800"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ ImproveFloatingPointConsistency="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB;BOOST_TEST_NO_AUTO_LINK=1 "
+ RuntimeLibrary="4"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)/libboost_serialization-vc71-s-1_39.lib"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Serialization User Headers"
+ Filter="">
+ <File
+ RelativePath="..\..\..\boost\serialization\access.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\archive_exception.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\assume_abstract.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\base_object.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\export.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\level.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\level_enum.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\split_free.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\split_member.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\tracking.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\tracking_enum.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\traits.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\type_info_implementation.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\version.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\wrapper.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\xml_archive_exception.hpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Serialization Implementations"
+ Filter="">
+ <File
+ RelativePath="..\..\..\boost\serialization\array.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\binary_object.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\bitset.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\collection_traits.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\collections_load_imp.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\collections_save_imp.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\complex.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\deque.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\hash_collections_load_imp.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\hash_collections_save_imp.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\hash_map.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\hash_set.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\is_bitwise_serializable.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\list.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\map.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\nvp.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\optional.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\scoped_ptr.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\set.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\shared_ptr.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\shared_ptr_132.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\slist.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\string.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\utility.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\variant.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\vector.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\weak_ptr.hpp">
+ </File>
+ <Filter
+ Name="detail"
+ Filter="">
+ <File
+ RelativePath="..\..\..\boost\serialization\detail\shared_count_132.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\detail\shared_ptr_132.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\shared_ptr_helper.hpp">
+ </File>
+ </Filter>
+ </Filter>
+ <Filter
+ Name="Archive Developer Headers"
+ Filter="">
+ <File
+ RelativePath="..\..\..\boost\archive\basic_archive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\basic_binary_iarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\basic_binary_iprimitive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\basic_binary_oarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\basic_binary_oprimitive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\basic_streambuf_locale_saver.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\basic_text_iarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\basic_text_iprimitive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\basic_text_oarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\basic_text_oprimitive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\basic_xml_archive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\basic_xml_iarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\basic_xml_oarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\polymorphic_iarchive_route.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\polymorphic_oarchive_route.hpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Archive Detail"
+ Filter="">
+ <File
+ RelativePath="..\..\..\boost\archive\detail\archive_serializer_map.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\auto_link_archive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\basic_iarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\basic_iserializer.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\basic_oarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\basic_oserializer.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\basic_pointer_iserializer.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\basic_pointer_oserializer.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\basic_serializer.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\basic_serializer_map.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\check.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\common_iarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\common_oarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\interface_iarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\interface_oarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\iserializer.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\oserializer.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\register_archive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\serialization.hpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Utility Headers"
+ Filter="">
+ <File
+ RelativePath="..\..\..\boost\archive\detail\abi_prefix.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\abi_suffix.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\add_facet.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\codecvt_null.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\collection_size_type.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\config.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\decl.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\dinkumware.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\extended_type_info.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\extended_type_info_no_rtti.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\extended_type_info_typeid.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\factory.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\force_include.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\pfto.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\singleton.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\smart_cast.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\state_saver.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\static_warning.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\strong_typedef.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\throw_exception.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\tmpdir.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\void_cast.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\void_cast_fwd.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\wcslen.hpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Templates"
+ Filter="">
+ <File
+ RelativePath="..\..\..\boost\archive\impl\archive_serializer_map.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_binary_iarchive.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_binary_iprimitive.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_binary_oarchive.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_binary_oprimitive.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_text_iarchive.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_text_iprimitive.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_text_oarchive.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_text_oprimitive.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_xml_grammar.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_xml_iarchive.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_xml_oarchive.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\text_iarchive_impl.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\text_oarchive_impl.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\xml_iarchive_impl.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\xml_oarchive_impl.ipp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Archive Implementations"
+ Filter="">
+ <File
+ RelativePath="..\..\..\boost\archive\binary_iarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\binary_iarchive_impl.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\binary_oarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\binary_oarchive_impl.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\polymorphic_binary_iarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\polymorphic_binary_oarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\polymorphic_iarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\polymorphic_oarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\polymorphic_text_iarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\polymorphic_text_oarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\polymorphic_xml_iarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\polymorphic_xml_oarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\text_iarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\text_oarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\xml_iarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\xml_oarchive.hpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Dataflow Iterators"
+ Filter="">
+ <File
+ RelativePath="..\..\..\boost\archive\iterators\base64_from_binary.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\iterators\binary_from_base64.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\iterators\dataflow.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\iterators\dataflow_exception.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\iterators\escape.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\iterators\head_iterator.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\iterators\insert_linebreaks.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\iterators\istream_iterator.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\iterators\mb_from_wchar.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\iterators\ostream_iterator.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\iterators\remove_whitespace.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\iterators\transform_width.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\iterators\unescape.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\iterators\wchar_from_mb.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\iterators\xml_escape.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\iterators\xml_unescape.hpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Source"
+ Filter="">
+ <File
+ RelativePath="..\src\archive_exception.cpp">
+ </File>
+ <File
+ RelativePath="..\src\basic_archive.cpp">
+ </File>
+ <File
+ RelativePath="..\src\basic_iarchive.cpp">
+ </File>
+ <File
+ RelativePath="..\src\basic_iserializer.cpp">
+ </File>
+ <File
+ RelativePath="..\src\basic_oarchive.cpp">
+ </File>
+ <File
+ RelativePath="..\src\basic_oserializer.cpp">
+ </File>
+ <File
+ RelativePath="..\src\basic_pointer_iserializer.cpp">
+ </File>
+ <File
+ RelativePath="..\src\basic_pointer_oserializer.cpp">
+ </File>
+ <File
+ RelativePath="..\src\basic_serializer_map.cpp">
+ </File>
+ <File
+ RelativePath="..\src\basic_text_iprimitive.cpp">
+ <FileConfiguration
+ Name="Release runtime-dynamic|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="0"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release runtime-static|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="0"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\src\basic_text_oprimitive.cpp">
+ </File>
+ <File
+ RelativePath="..\src\basic_xml_archive.cpp">
+ </File>
+ <File
+ RelativePath="..\src\basic_xml_grammar.ipp">
+ </File>
+ <File
+ RelativePath="..\src\binary_iarchive.cpp">
+ </File>
+ <File
+ RelativePath="..\src\binary_oarchive.cpp">
+ </File>
+ <File
+ RelativePath="..\src\extended_type_info.cpp">
+ </File>
+ <File
+ RelativePath="..\src\extended_type_info_no_rtti.cpp">
+ </File>
+ <File
+ RelativePath="..\src\extended_type_info_typeid.cpp">
+ </File>
+ <File
+ RelativePath="..\src\polymorphic_iarchive.cpp">
+ </File>
+ <File
+ RelativePath="..\src\polymorphic_oarchive.cpp">
+ </File>
+ <File
+ RelativePath="..\src\shared_ptr_helper.cpp">
+ </File>
+ <File
+ RelativePath="..\src\stl_port.cpp">
+ </File>
+ <File
+ RelativePath="..\src\text_iarchive.cpp">
+ </File>
+ <File
+ RelativePath="..\src\text_oarchive.cpp">
+ </File>
+ <File
+ RelativePath="..\src\void_cast.cpp">
+ </File>
+ <File
+ RelativePath="..\src\xml_archive_exception.cpp">
+ </File>
+ <File
+ RelativePath="..\src\xml_grammar.cpp">
+ </File>
+ <File
+ RelativePath="..\src\xml_iarchive.cpp">
+ </File>
+ <File
+ RelativePath="..\src\xml_oarchive.cpp">
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="LibraryW"
+ ProjectGUID="{30E10563-960A-11D7-9FE9-525400E2CF85}"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="2"
+ CharacterSet="0">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm800 /Ob0"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ GeneratePreprocessedFile="0"
+ MinimalRebuild="FALSE"
+ BasicRuntimeChecks="0"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ ObjectFile="$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi"
+ ProgramDataBaseFileName="$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multivc70.pdb"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="boost_serialization-vc71-mt-gd-1_42.lib"
+ OutputFile="$(ConfigurationName)\boost_wserialization-vc71-mt-gd-1_42.dll"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SupportUnloadOfDelayLoadedDLL="FALSE"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="2"
+ CharacterSet="0">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm800"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ ImproveFloatingPointConsistency="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBRARYTEST_EXPORTS;BOOST_LIB_DIAGNOSTIC=1"
+ StringPooling="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static threading-multi|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi/link-static""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="4"
+ CharacterSet="0">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm800 /Ob0"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_LIB;BOOST_TEST_NO_AUTO_LINK=1"
+ MinimalRebuild="FALSE"
+ BasicRuntimeChecks="0"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="5"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-static|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/link-static/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="4"
+ CharacterSet="0">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm800"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ ImproveFloatingPointConsistency="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB;BOOST_TEST_NO_AUTO_LINK=1 "
+ StringPooling="FALSE"
+ RuntimeLibrary="4"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-static threading-multi|Win32"
+ OutputDirectory=""$(ProjectDir)..\..\..\bin\boost\libs\serialization\build\libboost_wserialization.lib\msvc-7.1\release\threading-multi\link-static""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="4"
+ CharacterSet="0">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm800"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ ImproveFloatingPointConsistency="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB;BOOST_TEST_NO_AUTO_LINK=1 "
+ StringPooling="FALSE"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="0">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm800"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_LIB;BOOST_TEST_NO_AUTO_LINK=1"
+ MinimalRebuild="FALSE"
+ BasicRuntimeChecks="0"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="5"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(ConfigurationName)\libboost_wserialization-vc71-mt-sgd-1_41.lib"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic threading-multi|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="0">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm800 /Ob0"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_LIB;BOOST_TEST_NO_AUTO_LINK=1"
+ MinimalRebuild="FALSE"
+ BasicRuntimeChecks="0"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source"
+ Filter="">
+ <File
+ RelativePath="..\src\basic_text_wiprimitive.cpp">
+ <FileConfiguration
+ Name="Debug runtime-dynamic|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)/$(InputName)1.obj"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\src\basic_text_woprimitive.cpp">
+ <FileConfiguration
+ Name="Debug runtime-dynamic|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)/$(InputName)1.obj"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\src\codecvt_null.cpp">
+ <FileConfiguration
+ Name="Debug runtime-dynamic|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)/$(InputName)1.obj"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\src\text_wiarchive.cpp">
+ <FileConfiguration
+ Name="Debug runtime-dynamic|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)/$(InputName)1.obj"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\src\text_woarchive.cpp">
+ <FileConfiguration
+ Name="Debug runtime-dynamic|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)/$(InputName)1.obj"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\src\utf8_codecvt_facet.cpp">
+ <FileConfiguration
+ Name="Debug runtime-dynamic|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)/$(InputName)1.obj"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\src\xml_wgrammar.cpp">
+ <FileConfiguration
+ Name="Debug runtime-dynamic|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)/$(InputName)1.obj"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\src\xml_wiarchive.cpp">
+ <FileConfiguration
+ Name="Debug runtime-dynamic|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)/$(InputName)1.obj"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\src\xml_woarchive.cpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Templates"
+ Filter="">
+ <File
+ RelativePath="..\..\..\boost\archive\impl\archive_serializer_map.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_binary_iarchive.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_binary_iprimitive.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_binary_oarchive.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_binary_oprimitive.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_text_iarchive.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_text_iprimitive.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_text_oarchive.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_text_oprimitive.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_xml_grammar.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_xml_iarchive.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\basic_xml_oarchive.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\text_wiarchive_impl.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\text_woarchive_impl.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\xml_wiarchive_impl.ipp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\impl\xml_woarchive_impl.ipp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Headers"
+ Filter="">
+ <File
+ RelativePath="..\..\..\boost\archive\detail\archive_serializer_map.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\auto_link_warchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\binary_wiarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\binary_woarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\polymorphic_binary_wiarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\polymorphic_binary_woarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\polymorphic_text_wiarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\polymorphic_text_woarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\polymorphic_xml_wiarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\polymorphic_xml_woarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\text_wiarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\text_woarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\detail\utf8_codecvt_facet.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\xml_wiarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\archive\xml_woarchive.hpp">
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="Manual"
+ ProjectGUID="{15EA5B5E-D649-4C1C-80DD-B3CC7FA6658E}"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""$(ProjectDir)/../../..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/Manual.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/Manual.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="2"
+ OmitFramePointers="TRUE"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ StringPooling="TRUE"
+ RuntimeLibrary="4"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/Manual.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="FALSE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="code"
+ Filter="">
+ <File
+ RelativePath="..\doc\special_void_cast.cpp">
+ </File>
+ <File
+ RelativePath="..\doc\trivial_archive.cpp">
+ </File>
+ <File
+ RelativePath="..\doc\tutorial.cpp">
+ </File>
+ <File
+ RelativePath="..\doc\tutorial_array.cpp">
+ </File>
+ <File
+ RelativePath="..\doc\tutorial_array1.cpp">
+ </File>
+ <File
+ RelativePath="..\doc\tutorial_class_versioning.cpp">
+ </File>
+ <File
+ RelativePath="..\doc\tutorial_class_versioning1.cpp">
+ </File>
+ <File
+ RelativePath="..\doc\tutorial_non_intrusive.cpp">
+ </File>
+ <File
+ RelativePath="..\doc\tutorial_split.cpp">
+ </File>
+ <File
+ RelativePath="..\doc\tutorial_stl_containers.cpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Docmentation"
+ Filter="">
+ <File
+ RelativePath="..\doc\acknowledgments.html">
+ </File>
+ <File
+ RelativePath="..\doc\advice.html">
+ </File>
+ <File
+ RelativePath="..\doc\archive_reference.html">
+ </File>
+ <File
+ RelativePath="..\doc\archives.html">
+ </File>
+ <File
+ RelativePath="..\doc\bibliography.html">
+ </File>
+ <File
+ RelativePath="..\doc\class_diagram.html">
+ </File>
+ <File
+ RelativePath="..\doc\codecvt.html">
+ </File>
+ <File
+ RelativePath="..\doc\contents.html">
+ </File>
+ <File
+ RelativePath="..\doc\Copy of contents.html">
+ </File>
+ <File
+ RelativePath="..\doc\dataflow.html">
+ </File>
+ <File
+ RelativePath="..\doc\derivation.html">
+ </File>
+ <File
+ RelativePath="..\doc\exception_safety.html">
+ </File>
+ <File
+ RelativePath="..\doc\exceptions.html">
+ </File>
+ <File
+ RelativePath="..\doc\faq.html">
+ </File>
+ <File
+ RelativePath="..\doc\headers.html">
+ </File>
+ <File
+ RelativePath="..\doc\history.html">
+ </File>
+ <File
+ RelativePath="..\doc\implementation.html">
+ </File>
+ <File
+ RelativePath="..\doc\index.html">
+ </File>
+ <File
+ RelativePath="..\doc\newarchive.html">
+ </File>
+ <File
+ RelativePath="..\doc\overview.html">
+ </File>
+ <File
+ RelativePath="..\doc\pimpl.html">
+ </File>
+ <File
+ RelativePath="..\doc\rationale.html">
+ </File>
+ <File
+ RelativePath="..\doc\release.html">
+ </File>
+ <File
+ RelativePath="..\doc\serialization.html">
+ </File>
+ <File
+ RelativePath="..\doc\shared_ptr.html">
+ </File>
+ <File
+ RelativePath="..\doc\smart_cast.html">
+ </File>
+ <File
+ RelativePath="..\doc\special.html">
+ </File>
+ <File
+ RelativePath="..\doc\state_saver.html">
+ </File>
+ <File
+ RelativePath="..\doc\static_warning.html">
+ </File>
+ <File
+ RelativePath="..\doc\strong_typedef.html">
+ </File>
+ <File
+ RelativePath="..\doc\style.css">
+ </File>
+ <File
+ RelativePath="..\doc\traits.html">
+ </File>
+ <File
+ RelativePath="..\doc\tutorial.html">
+ </File>
+ <File
+ RelativePath="..\doc\xml_archives.html">
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="demo"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="demo"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\example\demo.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="demo_auto_ptr"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="demo_auto_ptr"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\example\demo_auto_ptr.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="demo_dll"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="demo_dll"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Templates"
+ Filter="">
+ <File
+ RelativePath="..\example\demo_dll_a.ipp">
+ </File>
+ <File
+ RelativePath="..\example\demo_dll_b.ipp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Headers"
+ Filter="">
+ <File
+ RelativePath="..\example\demo_dll_a.hpp">
+ </File>
+ <File
+ RelativePath="..\example\demo_dll_b.hpp">
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\example\demo_dll.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="demo_exception"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="demo_exception"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\example\demo_exception.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="demo_fast_archive"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="demo_fast_archive"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\example\demo_fast_archive.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="demo_log"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="demo_log"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\example\demo_gps.hpp">
+ </File>
+ <File
+ RelativePath="..\example\demo_log.cpp">
+ </File>
+ <File
+ RelativePath="..\example\log_archive.cpp">
+ </File>
+ <File
+ RelativePath="..\example\log_archive.hpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="demo_pimpl"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="demo_pimpl"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\example\demo_pimpl.cpp">
+ </File>
+ <File
+ RelativePath="..\example\demo_pimpl_A.cpp">
+ </File>
+ <File
+ RelativePath="..\example\demo_pimpl_A.hpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="demo_polymorphic"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="demo_polymorphic"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\example\demo_polymorphic.cpp">
+ </File>
+ <File
+ RelativePath="..\example\demo_polymorphic_A.cpp">
+ </File>
+ <File
+ RelativePath="..\example\demo_polymorphic_A.hpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="demo_portable_archive"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="demo_portable_archive"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Headers"
+ Filter="">
+ <File
+ RelativePath="..\example\portable_binary_archive.hpp">
+ </File>
+ <File
+ RelativePath="..\example\portable_binary_iarchive.hpp">
+ </File>
+ <File
+ RelativePath="..\example\portable_binary_oarchive.hpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Source"
+ Filter="">
+ <File
+ RelativePath="..\example\demo_portable_archive.cpp">
+ </File>
+ <File
+ RelativePath="..\example\portable_binary_iarchive.cpp">
+ </File>
+ <File
+ RelativePath="..\example\portable_binary_oarchive.cpp">
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="demo_shared_ptr"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="demo_shared_ptr"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\example\demo_shared_ptr.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="demo_simple_log"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="demo_simple_log"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\example\demo_gps.hpp">
+ </File>
+ <File
+ RelativePath="..\example\demo_simple_log.cpp">
+ </File>
+ <File
+ RelativePath="..\example\simple_log_archive.hpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="demo_trivial_archive"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="demo_trivial_archive"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\example\demo_gps.hpp">
+ </File>
+ <File
+ RelativePath="..\example\demo_trivial_archive.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="demo_xml"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="demo_xml"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\example\demo_gps.hpp">
+ </File>
+ <File
+ RelativePath="..\example\demo_xml.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="demo_xml_load"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="demo_xml_load"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\example\demo_gps.hpp">
+ </File>
+ <File
+ RelativePath="..\example\demo_xml_load.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="demo_xml_save"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="demo_xml_save"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\example\demo_gps.hpp">
+ </File>
+ <File
+ RelativePath="..\example\demo_xml_save.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="dll_a"
+ ProjectGUID="{CED1BD64-563F-485D-AE69-668797013AA0}"
+ RootNamespace="dll_a"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DLL_ONE_EXPORTS"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="3"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/dll_a.dll"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ ImportLibrary="$(OutDir)/dll_a.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DLL_ONE_EXPORTS"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="3"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/dll_a.dll"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ ImportLibrary="$(OutDir)/dll_a.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;BOOST_ALL_DYN_LINK=1;BOOST_LIB_DIAGNOSTIC=1;"
+ RuntimeLibrary="3"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/$(ProjectName).dll"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;BOOST_ALL_DYN_LINK=1;BOOST_LIB_DIAGNOSTIC=1;"
+ RuntimeLibrary="3"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/$(ProjectName).dll"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.hpp">
+ </File>
+ <File
+ RelativePath="..\test\A.ipp">
+ </File>
+ <File
+ RelativePath="..\test\dll_a.cpp">
+ </File>
+ <File
+ RelativePath="..\test\test_decl.hpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="dll_base"
+ ProjectGUID="{CED1BD64-563F-485D-AE69-668797013AA0}"
+ RootNamespace="dll_base"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ TreatWChar_tAsBuiltInType="TRUE"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/dll_base.dll"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/dll_base.pdb"
+ SubSystem="2"
+ ImportLibrary="$(OutDir)/dll_base.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DLL_ONE_EXPORTS"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="3"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/dll_base.dll"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ ImportLibrary="$(OutDir)/dll_base.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic threading-multi|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ TreatWChar_tAsBuiltInType="TRUE"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ ExpandAttributedSource="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/base.dll"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/dll_base.pdb"
+ SubSystem="2"
+ ImportLibrary="$(OutDir)/base.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ RuntimeLibrary="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ ReferencesPath="$(ConfigurationName)">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;BOOST_ALL_DYN_LINK=1;BOOST_LIB_DIAGNOSTIC=1;"
+ RuntimeLibrary="3"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DLL_ONE_EXPORTS"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="3"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/dll_base.dll"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ ImportLibrary="$(OutDir)/dll_base.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\base.hpp">
+ </File>
+ <File
+ RelativePath="..\test\dll_base.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="dll_derived2"
+ ProjectGUID="{CED1BD64-563F-485D-AE69-668797013AA0}"
+ RootNamespace="dll_derived2"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ TreatWChar_tAsBuiltInType="TRUE"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile=""
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/dll_derived2.pdb"
+ SubSystem="2"
+ ImportLibrary="$(OutDir)/dll_derived2.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DLL_ONE_EXPORTS"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="3"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile=""
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ ImportLibrary="$(OutDir)/dll_derived2.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ ReferencesPath="$(ConfigurationName)">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;BOOST_ALL_DYN_LINK=1;BOOST_LIB_DIAGNOSTIC=1;"
+ RuntimeLibrary="3"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="dll_base.lib"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ ReferencesPath="$(ConfigurationName)">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;BOOST_ALL_DYN_LINK=1;BOOST_LIB_DIAGNOSTIC=1;"
+ RuntimeLibrary="3"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="dll_base.lib"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DLL_ONE_EXPORTS"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="3"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile=""
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ ImportLibrary="$(OutDir)/dll_derived2.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\derived2.hpp">
+ </File>
+ <File
+ RelativePath="..\test\dll_derived2.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="dll_polymorphic_derived2"
+ ProjectGUID="{CED1BD64-563F-485D-AE69-668797013AA0}"
+ RootNamespace="dll_derived2"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ TreatWChar_tAsBuiltInType="TRUE"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile=""
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/dll_derived2.pdb"
+ SubSystem="2"
+ ImportLibrary="$(OutDir)/dll_derived2.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DLL_ONE_EXPORTS"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="3"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile=""
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ ImportLibrary="$(OutDir)/dll_derived2.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ ReferencesPath="$(ConfigurationName)">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;BOOST_ALL_DYN_LINK=1;BOOST_LIB_DIAGNOSTIC=1;"
+ RuntimeLibrary="3"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ ReferencesPath="$(ConfigurationName)">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;BOOST_ALL_DYN_LINK=1;BOOST_LIB_DIAGNOSTIC=1;"
+ RuntimeLibrary="3"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DLL_ONE_EXPORTS"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="3"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile=""
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ ImportLibrary="$(OutDir)/dll_derived2.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\polymorphic_base.hpp">
+ </File>
+ <File
+ RelativePath="..\test\polymorphic_derived2.cpp">
+ </File>
+ <File
+ RelativePath="..\test\polymorphic_derived2.hpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+Notes on vc 7.1 ide project files
+=================================
+
+These project files use the directory structure created by the Boost Build system.
+This means that BJAM has to have been run at least once for the directories to
+be created in the expected places. Once this has been done, one should be able
+to rebuild/rerun any demo or test from within the VC 7 IDE.
+
+There are a large number of project configurations. There is one for each permitted
+boost configuration. E.G. Debug runtime-dynamic, Debug runtime-static threading-mulit,
+etc. which correspond to boost build configurations.
+
+For tests which are designed to be run with different types of archives, the number
+of project configurations is mulitplied by 5 - one for each type archive. For example, for
+Debug runtime-static there exists Debug runtime-static text_archive,
+Debug runtime-static text_warchive, ... Debug runtime-static xml_warchive.
+
+By selecting the appropriate configuration it should be possible to replicate the
+behavior of the failed test from withing the IDE. This is helpful in debugging.
+
+After each test is built, it is run and the ouput is shown in the IDE Output window.
+
+Note that the fact that all configurations are not valid for all tests precludes building
+the all the tests from withing the IDE in one batch.
+
+(C) Copyright 2008 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)
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_array"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_array"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic text_archive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_text_archive.test/msvc-7.1/debug/threading-multi/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_DYN_LINK=1;BOOST_ARCHIVE_TEST=text_archive.hpp"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi""
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static text_archive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_text_archive.test/msvc-7.1/debug/link-static/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=text_archive.hpp"
+ RuntimeLibrary="5"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/link-static""
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static threading-multi text_archive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_text_archive.test/msvc-7.1/debug/threading-multi/link-static""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=text_archive.hpp"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi/link-static";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi/link-static""
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-dynamic text_archive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_text_archive.test/msvc-7.1/release/threading-multi/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ ImproveFloatingPointConsistency="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=text_archive.hpp"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi""
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-static text_archive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_text_archive.test/msvc-7.1/release/link-static/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ ImproveFloatingPointConsistency="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=text_archive.hpp"
+ RuntimeLibrary="4"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/link-static";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/link-static""
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-static threading-multi text_archive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_text_archive.test/msvc-7.1/release/threading-multi/link-static/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ ImproveFloatingPointConsistency="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=text_archive.hpp"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi/link-static";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi/link-static""
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic text_warchive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_text_warchive.test/msvc-7.1/debug/threading-multi/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=text_warchive.hpp"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi""
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static text_warchive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_text_warchive.test/msvc-7.1/debug/link-static/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=text_warchive.hpp"
+ RuntimeLibrary="5"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/link-static";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/link-static""
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static threading-multi text_warchive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_text_warchive.test/msvc-7.1/debug/threading-multi/link-static""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=text_warchive.hpp"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi/link-static";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi/link-static""
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-dynamic text_warchive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_text_warchive.test/msvc-7.1/release/threading-multi/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ ImproveFloatingPointConsistency="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=text_warchive.hpp"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi""
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-static text_warchive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_text_warchive.test/msvc-7.1/release/link-static/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ ImproveFloatingPointConsistency="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=text_warchive.hpp"
+ RuntimeLibrary="4"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/link-static";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/link-static""
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-static threading-multi text_warchive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_text_warchive.test/msvc-7.1/release/threading-multi/link-static/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ ImproveFloatingPointConsistency="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=text_warchive.hpp"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi/link-static";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi/link-static""
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic xml_archive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_xml_archive.test/msvc-7.1/debug/threading-multi/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=xml_archive.hpp"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi""
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static xml_archive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_xml_archive.test/msvc-7.1/debug/link-static/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=xml_archive.hpp"
+ RuntimeLibrary="5"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/link-static";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/link-static""
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static threading-multi xml_archive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_xml_archive.test/msvc-7.1/debug/threading-multi/link-static""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=xml_archive.hpp"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi/link-static";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi/link-static""
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-dynamic xml_archive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_xml_archive.test/msvc-7.1/release/threading-multi/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ ImproveFloatingPointConsistency="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=xml_archive.hpp"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi""
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-static xml_archive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_xml_archive.test/msvc-7.1/release/link-static/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ ImproveFloatingPointConsistency="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=xml_archive.hpp"
+ RuntimeLibrary="4"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/link-static";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/link-static""
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-static threading-multi xml_archive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_xml_archive.test/msvc-7.1/release/threading-multi/link-static/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ ImproveFloatingPointConsistency="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=xml_archive.hpp"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi/link-static";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi/link-static""
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic xml_warchive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_xml_warchive.test/msvc-7.1/debug/threading-multi/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=xml_warchive.hpp"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi""
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static xml_warchive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_xml_warchive.test/msvc-7.1/debug/link-static/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=xml_warchive.hpp"
+ RuntimeLibrary="5"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/link-static";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/link-static""
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static threading-multi xml_warchive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_xml_warchive.test/msvc-7.1/debug/threading-multi/link-static""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=xml_warchive.hpp"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi/link-static";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi/link-static""
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-dynamic xml_warchive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_xml_warchive.test/msvc-7.1/release/threading-multi/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ ImproveFloatingPointConsistency="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=xml_warchive.hpp"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi""
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-static xml_warchive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_xml_warchive.test/msvc-7.1/release/link-static/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ ImproveFloatingPointConsistency="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=xml_warchive.hpp"
+ RuntimeLibrary="4"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/link-static";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/link-static""
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-static threading-multi xml_warchive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_xml_warchive.test/msvc-7.1/release/threading-multi/link-static/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ ImproveFloatingPointConsistency="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=xml_warchive.hpp"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi/link-static";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi/link-static""
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic binary_archive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_binary_archive.test/msvc-7.1/debug/threading-multi""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_DYN_LINK=1"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/threading-multi""
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static binary_archive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_binary_archive.test/msvc-7.1/debug/link-static/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ARCHIVE_TEST=binary_archive.hpp"
+ RuntimeLibrary="5"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/link-static""
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static threading-multi binary_archive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_binary_archive.test/msvc-7.1/debug/threading-multi/link-static""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=binary_archive.hpp"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/debug/link-static/threading-multi""
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-dynamic binary_archive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_binary_archive.test/msvc-7.1/release/threading-multi/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ ImproveFloatingPointConsistency="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=binary_archive.hpp"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi""
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-static binary_archive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_binary_archive.test/msvc-7.1/release/link-static/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ ImproveFloatingPointConsistency="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=binary_archive.hpp"
+ RuntimeLibrary="4"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/link-static";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/link-static""
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-static threading-multi binary_archive|Win32"
+ OutputDirectory=""$(ProjectDir)../../../bin.v2/libs/serialization/test/$(ProjectName)_binary_archive.test/msvc-7.1/release/threading-multi/link-static/""
+ IntermediateDirectory="$(OutDir)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ ImproveFloatingPointConsistency="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ARCHIVE_TEST=binary_archive.hpp"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories=""$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi/link-static";"$(ProjectDir)../../../bin.v2/libs/serialization/build/msvc-7.1/release/threading-multi/link-static""
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic threading-multi|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ RuntimeTypeInfo="TRUE"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1;BOOST_ARCHIVE_TEST=binary_archive.hpp"
+ BasicRuntimeChecks="0"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="3"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ DebugInformationFormat="1"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.cpp">
+ </File>
+ <File
+ RelativePath="..\test\A.hpp">
+ </File>
+ <File
+ RelativePath="..\test\test_array.cpp">
+ <FileConfiguration
+ Name="Debug runtime-dynamic threading-multi|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""/>
+ </FileConfiguration>
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_binary"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_binary"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1;BOOST_ARCHIVE_TEST=binary_archive.hpp"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_binary.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_bitset"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_bitset"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_bitset.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_check"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_check"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_check.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_class_info_load"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_class_info_load"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1;BOOST_ARCHIVE_TEST=xml_warchive.hpp"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_class_info_load.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_class_info_save"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_class_info_save"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_class_info_save.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_codecvt_null"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_codecvt_null"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\src\codecvt_null.cpp">
+ </File>
+ <File
+ RelativePath="..\test\test_codecvt_null.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_complex"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_complex"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\..\..\boost\serialization\complex.hpp">
+ </File>
+ <File
+ RelativePath="..\test\test_complex.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_const"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_const.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_const_warn"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_const_load_fail1.cpp">
+ </File>
+ <File
+ RelativePath="..\test\test_const_load_fail1_nvp.cpp">
+ </File>
+ <File
+ RelativePath="..\test\test_const_load_fail2.cpp">
+ </File>
+ <File
+ RelativePath="..\test\test_const_load_fail2_nvp.cpp">
+ </File>
+ <File
+ RelativePath="..\test\test_const_load_fail3.cpp">
+ </File>
+ <File
+ RelativePath="..\test\test_const_load_fail3_nvp.cpp">
+ </File>
+ <File
+ RelativePath="..\test\test_const_save_warn1.cpp">
+ </File>
+ <File
+ RelativePath="..\test\test_const_save_warn1_nvp.cpp">
+ </File>
+ <File
+ RelativePath="..\test\test_const_save_warn2.cpp">
+ </File>
+ <File
+ RelativePath="..\test\test_const_save_warn2_nvp.cpp">
+ </File>
+ <File
+ RelativePath="..\test\test_const_save_warn3.cpp">
+ </File>
+ <File
+ RelativePath="..\test\test_const_save_warn3_nvp.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_const_pass"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_const_pass.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_contained_class"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_contained_class"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.cpp">
+ </File>
+ <File
+ RelativePath="..\test\A.hpp">
+ </File>
+ <File
+ RelativePath="..\test\B.hpp">
+ </File>
+ <File
+ RelativePath="..\test\test_contained_class.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_cyclic_ptrs"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_cyclic_ptrs"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.cpp">
+ </File>
+ <File
+ RelativePath="..\test\A.hpp">
+ </File>
+ <File
+ RelativePath="..\test\A.ipp">
+ </File>
+ <File
+ RelativePath="..\test\test_cyclic_ptrs.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_delete_pointer"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_delete_pointer"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_delete_pointer.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_deque"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_deque"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.cpp">
+ </File>
+ <File
+ RelativePath="..\test\A.hpp">
+ </File>
+ <File
+ RelativePath="..\test\A.ipp">
+ </File>
+ <File
+ RelativePath="..\test\test_deque.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_derived"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_derived"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_derived.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_derived_class"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_derived_class"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.cpp">
+ </File>
+ <File
+ RelativePath="..\test\B.hpp">
+ </File>
+ <File
+ RelativePath="..\test\test_derived_class.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_derived_class_ptr"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_derived_class_ptr"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.cpp">
+ </File>
+ <File
+ RelativePath="..\test\B.hpp">
+ </File>
+ <File
+ RelativePath="..\test\test_derived_class_ptr.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_diamond"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_diamond"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_diamond.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_dll_exported"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_dll_exported"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="dll_a.lib dll_polymorphic_derived2.lib"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ <ProjectReference
+ ReferencedProjectIdentifier="{30E10563-960A-11D7-9FE9-525400E2CF85}"
+ Name="Library"/>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\polymorphic_base.hpp">
+ </File>
+ <File
+ RelativePath="..\test\polymorphic_derived2.hpp">
+ </File>
+ <File
+ RelativePath="..\test\test_dll_exported.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_dll_plugin"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_dll_plugin"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\polymorphic_base.hpp">
+ </File>
+ <File
+ RelativePath="..\test\polymorphic_derived2.hpp">
+ </File>
+ <File
+ RelativePath="..\test\test_dll_plugin.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_dll_simple"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_dll_simple"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="dll_a.lib"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ <ProjectReference
+ ReferencedProjectIdentifier="{CED1BD64-563F-485D-AE69-668797013AA0}"
+ Name="dll_a"/>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.hpp">
+ </File>
+ <File
+ RelativePath="..\test\B.hpp">
+ </File>
+ <File
+ RelativePath="..\test\test_dll_simple.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_exported"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_exported"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\polymorphic_base.cpp">
+ </File>
+ <File
+ RelativePath="..\test\polymorphic_base.hpp">
+ </File>
+ <File
+ RelativePath="..\test\polymorphic_derived2.hpp">
+ </File>
+ <File
+ RelativePath="..\test\test_exported.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_inclusion"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_inclusion.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_iterators"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_iterators"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_iterators.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_iterators_base64"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_iterators_base64"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_iterators_base64.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_list"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_list"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.cpp">
+ </File>
+ <File
+ RelativePath="..\test\A.hpp">
+ </File>
+ <File
+ RelativePath="..\test\A.ipp">
+ </File>
+ <File
+ RelativePath="..\test\test_list.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_list_ptrs"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_list_ptrs"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.cpp">
+ </File>
+ <File
+ RelativePath="..\test\A.hpp">
+ </File>
+ <File
+ RelativePath="..\test\A.ipp">
+ </File>
+ <File
+ RelativePath="..\test\test_list_ptrs.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_map"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_map"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.cpp">
+ </File>
+ <File
+ RelativePath="..\test\A.hpp">
+ </File>
+ <File
+ RelativePath="..\test\A.ipp">
+ </File>
+ <File
+ RelativePath="..\test\test_map.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_mi"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_mi"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_mi.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_mult_archive_types"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_mult_archive_types"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_mult_archive_types.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_multiple_inheritance"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_multiple_inheritance"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ARCHIVE_LIST=xml_warchive.hpp"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_multiple_inheritance.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_multiple_ptrs"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_multiple_ptrs"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.cpp">
+ </File>
+ <File
+ RelativePath="..\test\A.hpp">
+ </File>
+ <File
+ RelativePath="..\test\B.hpp">
+ </File>
+ <File
+ RelativePath="..\test\D.hpp">
+ </File>
+ <File
+ RelativePath="..\test\test_multiple_ptrs.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_new_operator"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_new_operator"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.cpp">
+ </File>
+ <File
+ RelativePath="..\test\A.hpp">
+ </File>
+ <File
+ RelativePath="..\test\A.ipp">
+ </File>
+ <File
+ RelativePath="..\test\test_new_operator.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_no_rtti"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_no_rtti"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ EnableIntrinsicFunctions="FALSE"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\polymorphic_base.hpp">
+ </File>
+ <File
+ RelativePath="..\test\polymorphic_derived1.cpp">
+ </File>
+ <File
+ RelativePath="..\test\polymorphic_derived1.hpp">
+ </File>
+ <File
+ RelativePath="..\test\polymorphic_derived2.hpp">
+ </File>
+ <File
+ RelativePath="..\test\test_no_rtti.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_non_default_ctor"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_non_default_ctor"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_non_default_ctor.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_non_default_ctor2"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_non_default_ctor2"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_non_default_ctor2.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_non_intrusive"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_non_intrusive"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_non_intrusive.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_not_serializable"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_not_serializable.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_null_ptr"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_null_ptr"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_null_ptr.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_nvp"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_nvp"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.cpp">
+ </File>
+ <File
+ RelativePath="..\test\test_nvp.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_object"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_object"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_object.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_optional"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_optional"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.cpp">
+ </File>
+ <File
+ RelativePath="..\test\A.ipp">
+ </File>
+ <File
+ RelativePath="..\test\test_optional.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_polymorphic"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_polymorphic"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ 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"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.cpp">
+ </File>
+ <File
+ RelativePath="..\test\A.hpp">
+ </File>
+ <File
+ RelativePath="..\test\A.ipp">
+ </File>
+ <File
+ RelativePath="..\test\test_polymorphic.cpp">
+ </File>
+ <File
+ RelativePath="..\test\test_polymorphic_A.cpp">
+ </File>
+ <File
+ RelativePath="..\test\test_polymorphic_A.hpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_polymorphic2"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_polymorphic2"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ 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"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ <ProjectReference
+ ReferencedProjectIdentifier="{30E10563-960A-11D7-9FE9-525400E2CF85}"
+ Name="Library"/>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_polymorphic2.cpp">
+ </File>
+ <File
+ RelativePath="..\test\test_polymorphic2.hpp">
+ </File>
+ <File
+ RelativePath="..\test\test_polymorphic2imp.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_primitive"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_primitive"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_primitive.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_private_base"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_private_base"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.hpp">
+ </File>
+ <File
+ RelativePath="..\test\A.ipp">
+ </File>
+ <File
+ RelativePath="..\test\test_private_base.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_private_ctor"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_private_ctor"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_private_ctor.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_recursion"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_recursion"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_recursion.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_recusion"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_recusion"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_recusion.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_registered"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_registered"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_registered.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_reset_object_address"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_reset_object_address"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.cpp">
+ </File>
+ <File
+ RelativePath="..\test\A.ipp">
+ </File>
+ <File
+ RelativePath="..\test\test_reset_object_address.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_set"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_set"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.cpp">
+ </File>
+ <File
+ RelativePath="..\test\A.hpp">
+ </File>
+ <File
+ RelativePath="..\test\test_set.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_shared_ptr"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_shared_ptr"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/wd4512 /wd4511"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ <ProjectReference
+ ReferencedProjectIdentifier="{30E10563-960A-11D7-9FE9-525400E2CF85}"
+ Name="Library"/>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\..\..\boost\serialization\shared_ptr.hpp">
+ </File>
+ <File
+ RelativePath="..\test\test_shared_ptr.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_shared_ptr_132"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_shared_ptr_132"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="OriginalSharePtr"
+ Filter="">
+ <File
+ RelativePath="..\..\..\boost\serialization\detail\shared_count_132.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\detail\shared_ptr_132.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\detail\shared_ptr_nmt_132.hpp">
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\..\..\boost\serialization\shared_ptr.hpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\shared_ptr_132.hpp">
+ </File>
+ <File
+ RelativePath="..\test\test_shared_ptr_132.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_shared_ptr_multi_base"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_shared_ptr_multi_base"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1;BOOST_ARCHIVE_TEST=xml_archive.hpp"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ <ProjectReference
+ ReferencedProjectIdentifier="{30E10563-960A-11D7-9FE9-525400E2CF85}"
+ Name="Library"/>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_shared_ptr_multi_base.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_simple_class"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_simple_class"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.cpp">
+ </File>
+ <File
+ RelativePath="..\test\A.hpp">
+ </File>
+ <File
+ RelativePath="..\test\A.ipp">
+ </File>
+ <File
+ RelativePath="..\test\test_simple_class.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_simple_class_ptr"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_simple_class_ptr"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.cpp">
+ <FileConfiguration
+ Name="Debug runtime-dynamic|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ SmallerTypeCheck="FALSE"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\test\A.hpp">
+ </File>
+ <File
+ RelativePath="..\test\A.ipp">
+ </File>
+ <File
+ RelativePath="..\test\test_simple_class_ptr.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_singleton"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_singleton"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\..\..\boost\serialization\singleton.hpp">
+ </File>
+ <File
+ RelativePath="..\test\test_singleton.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_smart_cast"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_smart_cast"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\..\..\boost\smart_cast.hpp">
+ </File>
+ <File
+ RelativePath="..\test\test_smart_cast.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_split"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_split"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_split.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_static_warning"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_static_warning"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_static_warning.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_strong_typedef"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_strong_typedef"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_strong_typedef.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\void_cast.hpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_tracking"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_tracking"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1;BOOST_ARCHIVE_TEST=binary_archive.hpp"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_tracking.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_traits_fail"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_traits_fail.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_traits_pass"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_traits_pass"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_traits_pass.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_unregistered"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_unregistered"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_unregistered.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_utf8_codecvt"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_utf8_codecvt"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\../src/utf8_codecvt_facet.cpp">
+ <FileConfiguration
+ Name="Debug runtime-dynamic|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)/utf8_codecvt_facet"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\test\test_utf8_codecvt.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_valarray"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_valarray"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.hpp">
+ </File>
+ <File
+ RelativePath="..\test\test_valarray.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_variant"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_variant"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_variant.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_vector"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_vector"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\A.cpp">
+ </File>
+ <File
+ RelativePath="..\test\A.hpp">
+ </File>
+ <File
+ RelativePath="..\test\A.ipp">
+ </File>
+ <File
+ RelativePath="..\test\test_vector.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="test_void_cast"
+ ProjectGUID="{A7D4CC95-F2AC-11D6-9E47-525400E2CF85}"
+ RootNamespace="test_void_cast"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="TRUE"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="FALSE"
+ EnableFunctionLevelLinking="TRUE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-dynamic|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1;BOOST_ALL_DYN_LINK=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug runtime-static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ ImproveFloatingPointConsistency="TRUE"
+ AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LIB_DIAGNOSTIC=1"
+ SmallerTypeCheck="TRUE"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ EnableFunctionLevelLinking="FALSE"
+ TreatWChar_tAsBuiltInType="TRUE"
+ ForceConformanceInForLoopScope="TRUE"
+ RuntimeTypeInfo="TRUE"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="1"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="Library"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(ConfigurationName)"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="run $(TargetName) with $(ConfigurationName)"
+ CommandLine=""$(TargetDir)/$(TargetName).exe""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\test\test_void_cast.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\boost\serialization\void_cast.hpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>