|
Boost-Commit : |
From: mconsoni_at_[hidden]
Date: 2007-06-26 18:24:44
Author: mconsoni
Date: 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
New Revision: 7181
URL: http://svn.boost.org/trac/boost/changeset/7181
Log:
- added header with file description, license and "latest version" notice.
Text files modified:
sandbox/libs/extension/doc/Jamfile.v2 | 10 +
sandbox/libs/extension/doc/appendices.qbk | 7 +
sandbox/libs/extension/doc/appendix_a.qbk | 7 +
sandbox/libs/extension/doc/extension.qbk | 7 +
sandbox/libs/extension/doc/factories.qbk | 7 +
sandbox/libs/extension/doc/faq.qbk | 7 +
sandbox/libs/extension/doc/html/HTML.manifest | 1
sandbox/libs/extension/doc/html/boost_extension/appendices.html | 2
sandbox/libs/extension/doc/html/boost_extension/factories.html | 2
sandbox/libs/extension/doc/html/boost_extension/introduction.html | 2
sandbox/libs/extension/doc/html/boost_extension/performance_analysis.html | 8
sandbox/libs/extension/doc/html/boost_extension/shared_libraries.html | 8
sandbox/libs/extension/doc/html/boost_extension/tutorials.html | 2
sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial01.html | 2
sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial02.html | 2
sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial03.html | 8
sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial04.html | 234 +++++++++++++++++++++++++++++++++++++++
sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial05.html | 229 ++++++++++++++++++++++++++++++++++++++
sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial06.html | 2
sandbox/libs/extension/doc/html/index.html | 3
sandbox/libs/extension/doc/info.qbk | 7 +
sandbox/libs/extension/doc/introduction.qbk | 7 +
sandbox/libs/extension/doc/performance_analysis.qbk | 7 +
sandbox/libs/extension/doc/quick_start.qbk | 7 +
sandbox/libs/extension/doc/shared_libraries.qbk | 7 +
sandbox/libs/extension/doc/tutorial1.qbk | 8 +
sandbox/libs/extension/doc/tutorial2.qbk | 7 +
sandbox/libs/extension/doc/tutorial3.qbk | 8 +
sandbox/libs/extension/doc/tutorial4.qbk | 7 +
sandbox/libs/extension/doc/tutorial5.qbk | 7 +
sandbox/libs/extension/doc/tutorial6.qbk | 7 +
sandbox/libs/extension/doc/tutorials.qbk | 7 +
32 files changed, 612 insertions(+), 24 deletions(-)
Modified: sandbox/libs/extension/doc/Jamfile.v2
==============================================================================
--- sandbox/libs/extension/doc/Jamfile.v2 (original)
+++ sandbox/libs/extension/doc/Jamfile.v2 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -1,3 +1,13 @@
+# Boost.Extension - documentation Jamfile
+#
+# Copyright 2007 Jeremy Pack
+# Distributed under the Boost Software License, Version 1.0. (See
+# accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+#
+# See http://www.boost.org/ for latest version.
+#
+
using quickbook ;
xml extension : extension.qbk : : :
<xsl:param>toc.max.depth=5
Modified: sandbox/libs/extension/doc/appendices.qbk
==============================================================================
--- sandbox/libs/extension/doc/appendices.qbk (original)
+++ sandbox/libs/extension/doc/appendices.qbk 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -1,3 +1,10 @@
+[/ Boost.Extension - appendices ]
+[/ Copyright 2007 Jeremy Pack ]
+[/ Distributed under the Boost Software License, Version 1.0. (See]
+[/ accompanying file LICENSE_1_0.txt or copy at ]
+[/ http://www.boost.org/LICENSE_1_0.txt) ]
+[/ See http://www.boost.org/ for latest version. ]
+
[section:appendices Appendices]
[include appendix_a.qbk]
[endsect]
\ No newline at end of file
Modified: sandbox/libs/extension/doc/appendix_a.qbk
==============================================================================
--- sandbox/libs/extension/doc/appendix_a.qbk (original)
+++ sandbox/libs/extension/doc/appendix_a.qbk 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -1,3 +1,10 @@
+[/ Boost.Extension - windows export and import decs ]
+[/ Copyright 2007 Jeremy Pack ]
+[/ Distributed under the Boost Software License, Version 1.0. (See]
+[/ accompanying file LICENSE_1_0.txt or copy at ]
+[/ http://www.boost.org/LICENSE_1_0.txt) ]
+[/ See http://www.boost.org/ for latest version. ]
+
[section:appendix_a Appendix A - Windows Export and Import Declarations]
On the Windows platform, special export declarations are required to make
functions or classes in a .dll file accessible to the outside world. For
Modified: sandbox/libs/extension/doc/extension.qbk
==============================================================================
--- sandbox/libs/extension/doc/extension.qbk (original)
+++ sandbox/libs/extension/doc/extension.qbk 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -1,3 +1,10 @@
+[/ Boost.Extension - main doc ]
+[/ Copyright 2007 Jeremy Pack ]
+[/ Distributed under the Boost Software License, Version 1.0. (See]
+[/ accompanying file LICENSE_1_0.txt or copy at ]
+[/ http://www.boost.org/LICENSE_1_0.txt) ]
+[/ See http://www.boost.org/ for latest version. ]
+
[library Boost.Extension
[quickbook 1.3]
[version 1.0]
Modified: sandbox/libs/extension/doc/factories.qbk
==============================================================================
--- sandbox/libs/extension/doc/factories.qbk (original)
+++ sandbox/libs/extension/doc/factories.qbk 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -1,3 +1,10 @@
+[/ Boost.Extension - factories doc ]
+[/ Copyright 2007 Jeremy Pack ]
+[/ Distributed under the Boost Software License, Version 1.0. (See]
+[/ accompanying file LICENSE_1_0.txt or copy at ]
+[/ http://www.boost.org/LICENSE_1_0.txt) ]
+[/ See http://www.boost.org/ for latest version. ]
+
[section:factories Factories]
Insert content here.
Modified: sandbox/libs/extension/doc/faq.qbk
==============================================================================
--- sandbox/libs/extension/doc/faq.qbk (original)
+++ sandbox/libs/extension/doc/faq.qbk 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -1,3 +1,10 @@
+[/ Boost.Extension - faq ]
+[/ Copyright 2007 Jeremy Pack ]
+[/ Distributed under the Boost Software License, Version 1.0. (See]
+[/ accompanying file LICENSE_1_0.txt or copy at ]
+[/ http://www.boost.org/LICENSE_1_0.txt) ]
+[/ See http://www.boost.org/ for latest version. ]
+
[section:faq FAQ]
Question: What if I have multiple versions of the same interface (I've added new
Modified: sandbox/libs/extension/doc/html/HTML.manifest
==============================================================================
--- sandbox/libs/extension/doc/html/HTML.manifest (original)
+++ sandbox/libs/extension/doc/html/HTML.manifest 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -9,6 +9,7 @@
boost_extension/tutorials/tutorial06.html
boost_extension/factories.html
boost_extension/shared_libraries.html
+boost_extension/info.html
boost_extension/performance_analysis.html
boost_extension/appendices.html
boost_extension/appendices/appendix_a.html
Modified: sandbox/libs/extension/doc/html/boost_extension/appendices.html
==============================================================================
--- sandbox/libs/extension/doc/html/boost_extension/appendices.html (original)
+++ sandbox/libs/extension/doc/html/boost_extension/appendices.html 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -29,7 +29,7 @@
</div>
<table width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2007 Jeremy Pack</small></td>
+<td align="right"><small>Copyright © 2007 Jeremy Pack, Mariano G. Consoni</small></td>
</tr></table>
<hr>
<div class="spirit-nav">
Modified: sandbox/libs/extension/doc/html/boost_extension/factories.html
==============================================================================
--- sandbox/libs/extension/doc/html/boost_extension/factories.html (original)
+++ sandbox/libs/extension/doc/html/boost_extension/factories.html 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -31,7 +31,7 @@
</div>
<table width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2007 Jeremy Pack</small></td>
+<td align="right"><small>Copyright © 2007 Jeremy Pack, Mariano G. Consoni</small></td>
</tr></table>
<hr>
<div class="spirit-nav">
Modified: sandbox/libs/extension/doc/html/boost_extension/introduction.html
==============================================================================
--- sandbox/libs/extension/doc/html/boost_extension/introduction.html (original)
+++ sandbox/libs/extension/doc/html/boost_extension/introduction.html 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -62,7 +62,7 @@
</div>
<table width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2007 Jeremy Pack</small></td>
+<td align="right"><small>Copyright © 2007 Jeremy Pack, Mariano G. Consoni</small></td>
</tr></table>
<hr>
<div class="spirit-nav">
Modified: sandbox/libs/extension/doc/html/boost_extension/performance_analysis.html
==============================================================================
--- sandbox/libs/extension/doc/html/boost_extension/performance_analysis.html (original)
+++ sandbox/libs/extension/doc/html/boost_extension/performance_analysis.html 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -6,7 +6,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
<link rel="start" href="../index.html" title="Chapter 1. Boost.Extension 1.0">
<link rel="up" href="../index.html" title="Chapter 1. Boost.Extension 1.0">
-<link rel="prev" href="shared_libraries.html" title=" Shared Libraries">
+<link rel="prev" href="info.html" title=" Info Classes">
<link rel="next" href="appendices.html" title=" Appendices">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -20,7 +20,7 @@
</table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="shared_libraries.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="appendices.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="info.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="appendices.html"><img src="../images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
@@ -31,11 +31,11 @@
</div>
<table width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2007 Jeremy Pack</small></td>
+<td align="right"><small>Copyright © 2007 Jeremy Pack, Mariano G. Consoni</small></td>
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="shared_libraries.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="appendices.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="info.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="appendices.html"><img src="../images/next.png" alt="Next"></a>
</div>
</body>
</html>
Modified: sandbox/libs/extension/doc/html/boost_extension/shared_libraries.html
==============================================================================
--- sandbox/libs/extension/doc/html/boost_extension/shared_libraries.html (original)
+++ sandbox/libs/extension/doc/html/boost_extension/shared_libraries.html 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -7,7 +7,7 @@
<link rel="start" href="../index.html" title="Chapter 1. Boost.Extension 1.0">
<link rel="up" href="../index.html" title="Chapter 1. Boost.Extension 1.0">
<link rel="prev" href="factories.html" title=" Factories">
-<link rel="next" href="performance_analysis.html" title=" Performance Analysis">
+<link rel="next" href="info.html" title=" Info Classes">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%">
@@ -20,7 +20,7 @@
</table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="factories.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="performance_analysis.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="factories.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="info.html"><img src="../images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
@@ -31,11 +31,11 @@
</div>
<table width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2007 Jeremy Pack</small></td>
+<td align="right"><small>Copyright © 2007 Jeremy Pack, Mariano G. Consoni</small></td>
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="factories.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="performance_analysis.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="factories.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="info.html"><img src="../images/next.png" alt="Next"></a>
</div>
</body>
</html>
Modified: sandbox/libs/extension/doc/html/boost_extension/tutorials.html
==============================================================================
--- sandbox/libs/extension/doc/html/boost_extension/tutorials.html (original)
+++ sandbox/libs/extension/doc/html/boost_extension/tutorials.html 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -44,7 +44,7 @@
</div>
<table width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2007 Jeremy Pack</small></td>
+<td align="right"><small>Copyright © 2007 Jeremy Pack, Mariano G. Consoni</small></td>
</tr></table>
<hr>
<div class="spirit-nav">
Modified: sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial01.html
==============================================================================
--- sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial01.html (original)
+++ sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial01.html 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -163,7 +163,7 @@
</div>
<table width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2007 Jeremy Pack</small></td>
+<td align="right"><small>Copyright © 2007 Jeremy Pack, Mariano G. Consoni</small></td>
</tr></table>
<hr>
<div class="spirit-nav">
Modified: sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial02.html
==============================================================================
--- sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial02.html (original)
+++ sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial02.html 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -165,7 +165,7 @@
</div>
<table width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2007 Jeremy Pack</small></td>
+<td align="right"><small>Copyright © 2007 Jeremy Pack, Mariano G. Consoni</small></td>
</tr></table>
<hr>
<div class="spirit-nav">
Modified: sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial03.html
==============================================================================
--- sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial03.html (original)
+++ sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial03.html 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -28,9 +28,9 @@
<p>
This tutorial shows how to register and instance classes that have multi-argument
constructors (not default constructors) in Boost.Extensions. In the example
- that we will describe in this tutorial we create a dummy class with a constructor
- that have six arguments. We'll register this class in a factory map and then
- get it from the main file.
+ that we will describe in this tutorial (examples/parameters) we create a
+ dummy class with a constructor that have six arguments. We'll register this
+ class in a factory map and then get it from the main file.
</p>
<p>
It is expected that before following this tutorial you have gone trough the
@@ -164,7 +164,7 @@
</div>
<table width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2007 Jeremy Pack</small></td>
+<td align="right"><small>Copyright © 2007 Jeremy Pack, Mariano G. Consoni</small></td>
</tr></table>
<hr>
<div class="spirit-nav">
Modified: sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial04.html
==============================================================================
--- sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial04.html (original)
+++ sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial04.html 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -26,12 +26,242 @@
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_extension.tutorials.tutorial04"></a> Tutorial 4</h3></div></div></div>
<p>
- Insert content here.
+ In this tutorial we will see different features of the library related to
+ multiple loading of the same library, instance or interface.
+ </p>
+<p>
+ We will follow some parts of versions example (<code class="literal">examples/versioning</code>).
+ As we expect that at this point you've gone through the first tutorials we
+ will not enter into specific details of the use of the library.
+ </p>
+<p>
+ First, we want to show that it is possible to load several libraries into
+ one factory map. We'll create a new HelloWorld library very similar to the
+ one that we have described in the first tutorial.
+ </p>
+<p>
+ Let's remember the classes that we have implemented (in <code class="literal">hello_world.cpp</code>)
+ for the "hello world" example:
+ </p>
+<p>
+
+</p>
+<pre class="programlisting">
+<span class="keyword">class</span> <span class="identifier">world</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">word</span>
+<span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keyword">char</span> <span class="special">*</span> <span class="identifier">get_val</span><span class="special">(){</span><span class="keyword">return</span> <span class="string">"world!"</span><span class="special">;}</span>
+<span class="special">};</span>
+
+<span class="keyword">class</span> <span class="identifier">hello</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">word</span>
+<span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keyword">char</span> <span class="special">*</span> <span class="identifier">get_val</span><span class="special">(){</span><span class="keyword">return</span> <span class="string">"hello"</span><span class="special">;}</span>
+<span class="special">};</span>
+
+<span class="keyword">extern</span> <span class="string">"C"</span> <span class="keyword">void</span> <span class="identifier">BOOST_EXTENSION_EXPORT_DECL</span> <span class="identifier">extension_export_word</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">extensions</span><span class="special">::</span><span class="identifier">factory_map</span> <span class="special">&</span> <span class="identifier">fm</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="identifier">fm</span><span class="special">.</span><span class="identifier">add</span><span class="special"><</span><span class="identifier">hello</span><span class="special">,</span> <span class="identifier">word</span><span class="special">,</span> <span class="keyword">int</span><span class="special">>(</span><span class="number">1</span><span class="special">);</span>
+ <span class="identifier">fm</span><span class="special">.</span><span class="identifier">add</span><span class="special"><</span><span class="identifier">world</span><span class="special">,</span> <span class="identifier">word</span><span class="special">,</span> <span class="keyword">int</span><span class="special">>(</span><span class="number">2</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ And now let's see the new version that we've implemented for this example
+ (as defined in <code class="literal">hello_world_versions.cpp</code>). The classes
+ have the same name and methods, both implement the same interface, but the
+ <code class="computeroutput"><span class="identifier">get_val</span><span class="special">()</span></code>
+ methods differ in the returned string (to be able to recognize each one after
+ loading them).
+ </p>
+<p>
+
+</p>
+<pre class="programlisting">
+<span class="keyword">class</span> <span class="identifier">world</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">word</span>
+<span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keyword">char</span> <span class="special">*</span> <span class="identifier">get_val</span><span class="special">(){</span><span class="keyword">return</span> <span class="string">"world! v2"</span><span class="special">;}</span>
+<span class="special">};</span>
+
+<span class="keyword">class</span> <span class="identifier">hello</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">word</span>
+<span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keyword">char</span> <span class="special">*</span> <span class="identifier">get_val</span><span class="special">(){</span><span class="keyword">return</span> <span class="string">"| v2 hello"</span><span class="special">;}</span>
+<span class="special">};</span>
+
+<span class="keyword">extern</span> <span class="string">"C"</span> <span class="keyword">void</span> <span class="identifier">BOOST_EXTENSION_EXPORT_DECL</span> <span class="identifier">extension_export_word</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">extensions</span><span class="special">::</span><span class="identifier">factory_map</span> <span class="special">&</span> <span class="identifier">fm</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="identifier">fm</span><span class="special">.</span><span class="identifier">add</span><span class="special"><</span><span class="identifier">world</span><span class="special">,</span> <span class="identifier">word</span><span class="special">,</span> <span class="keyword">int</span><span class="special">>(</span><span class="number">22</span><span class="special">);</span> <span class="comment">// int could be used as version (v2 word 2)
+</span> <span class="identifier">fm</span><span class="special">.</span><span class="identifier">add</span><span class="special"><</span><span class="identifier">hello</span><span class="special">,</span> <span class="identifier">word</span><span class="special">,</span> <span class="keyword">int</span><span class="special">>(</span><span class="number">21</span><span class="special">);</span> <span class="comment">// int could be used as version (v2 word 1)
+</span><span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ Also note that we are using the Info int to store some kind of "version",
+ and then we could diferrentiate the classes by its int (see Info class tutorial
+ for more information on this).
+ </p>
+<p>
+
+</p>
+<pre class="programlisting">
+<span class="identifier">factory_map</span> <span class="identifier">fm</span><span class="special">;</span>
+
+<span class="comment">// load hello world first version
+</span><span class="identifier">load_single_library</span><span class="special">(</span><span class="identifier">fm</span><span class="special">,</span> <span class="string">"libHelloWorldLib.extension"</span><span class="special">,</span> <span class="string">"extension_export_word"</span><span class="special">);</span>
+
+<span class="comment">// load hello world second version
+</span><span class="identifier">load_single_library</span><span class="special">(</span><span class="identifier">fm</span><span class="special">,</span> <span class="string">"libHelloWorldLibv2.extension"</span><span class="special">,</span> <span class="string">"extension_export_word"</span><span class="special">);</span>
+
+<span class="comment">// load hello world second version again
+</span><span class="identifier">load_single_library</span><span class="special">(</span><span class="identifier">fm</span><span class="special">,</span> <span class="string">"libHelloWorldLibv2.extension"</span><span class="special">,</span> <span class="string">"extension_export_word"</span><span class="special">);</span>
+</pre>
+<p>
+ </p>
+<p>
+ We can see here that loading multiple libraries is as easy as calling <code class="computeroutput"><span class="identifier">load_single_library</span></code> for each one and using
+ the same factory map.
+ </p>
+<p>
+ Then you can access them as any other factory_map:
+ </p>
+<p>
+
+</p>
+<pre class="programlisting">
+<span class="keyword">for</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">list</span><span class="special"><</span><span class="identifier">factory</span><span class="special"><</span><span class="identifier">word</span><span class="special">,</span> <span class="keyword">int</span><span class="special">></span> <span class="special">>::</span><span class="identifier">iterator</span> <span class="identifier">current_word</span> <span class="special">=</span> <span class="identifier">factory_list</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();</span>
+ <span class="identifier">current_word</span> <span class="special">!=</span> <span class="identifier">factory_list</span><span class="special">.</span><span class="identifier">end</span><span class="special">();</span> <span class="special">++</span><span class="identifier">current_word</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">auto_ptr</span><span class="special"><</span><span class="identifier">word</span><span class="special">></span> <span class="identifier">word_ptr</span><span class="special">(</span><span class="identifier">current_word</span><span class="special">-></span><span class="identifier">create</span><span class="special">());</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">word_ptr</span><span class="special">-></span><span class="identifier">get_val</span><span class="special">()</span> <span class="special"><<</span> <span class="string">" "</span><span class="special">;</span>
+<span class="special">}</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+</pre>
+<p>
+ </p>
+<p>
+ We get the following output:
+ </p>
+<div class="informaltable">
+<h4>
+<a name="id2568197"></a>
+ </h4>
+<table class="table">
+<colgroup><col></colgroup>
+<tbody><tr><td>
+<code class="literal">words:</code><br> <code class="literal">hello world! | v2 hello
+ world! v2 | v2 hello world! v2</code>
+</td></tr></tbody>
+</table>
+</div>
+<p>
+ The first "hello world" is returned by the first version of the
+ library, and the second and third retruned by the second version.
+ </p>
+<p>
+ Finally, we will show another example similar to the former but in this case
+ we implement a different interface, same class name ('hello') but with different
+ interface ('salute').
+ </p>
+<p>
+ Let's see the interface:
+ </p>
+<p>
+
+</p>
+<pre class="programlisting">
+<span class="keyword">class</span> <span class="identifier">salute</span>
+<span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">salute</span><span class="special">(){}</span>
+ <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keyword">char</span> <span class="special">*</span> <span class="identifier">say</span><span class="special">(){</span><span class="keyword">return</span> <span class="string">""</span><span class="special">;}</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<p>
+ And the implementations:
+ </p>
+<p>
+
+</p>
+<pre class="programlisting">
+<span class="keyword">class</span> <span class="identifier">hello</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">salute</span>
+<span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keyword">char</span> <span class="special">*</span><span class="identifier">say</span><span class="special">(</span><span class="keyword">void</span><span class="special">)</span> <span class="special">{</span><span class="keyword">return</span> <span class="string">"hello"</span><span class="special">;}</span>
+<span class="special">};</span>
+
+<span class="keyword">class</span> <span class="identifier">bye</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">salute</span>
+<span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keyword">char</span> <span class="special">*</span><span class="identifier">say</span><span class="special">(</span><span class="keyword">void</span><span class="special">)</span> <span class="special">{</span><span class="keyword">return</span> <span class="string">"bye!"</span><span class="special">;}</span>
+<span class="special">};</span>
+
+
+<span class="keyword">extern</span> <span class="string">"C"</span> <span class="keyword">void</span> <span class="identifier">BOOST_EXTENSION_EXPORT_DECL</span> <span class="identifier">extension_export_salute</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">extensions</span><span class="special">::</span><span class="identifier">factory_map</span> <span class="special">&</span> <span class="identifier">fm</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="identifier">fm</span><span class="special">.</span><span class="identifier">add</span><span class="special"><</span><span class="identifier">hello</span><span class="special">,</span> <span class="identifier">salute</span><span class="special">,</span> <span class="keyword">int</span><span class="special">>(</span><span class="number">1</span><span class="special">);</span>
+ <span class="identifier">fm</span><span class="special">.</span><span class="identifier">add</span><span class="special"><</span><span class="identifier">bye</span><span class="special">,</span> <span class="identifier">salute</span><span class="special">,</span> <span class="keyword">int</span><span class="special">>(</span><span class="number">2</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ Note that we are adding a new class called 'hello' too but that implements
+ 'salute' interface.
+ </p>
+<p>
+ <br>
+ </p>
+<p>
+ Finally in the main function we get the factory list specifying that we want
+ the 'salute' factory. We iterate it getting each of the salutes, including
+ hello.
+ </p>
+<p>
+
+</p>
+<pre class="programlisting">
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">list</span><span class="special"><</span><span class="identifier">factory</span><span class="special"><</span><span class="identifier">salute</span><span class="special">,</span> <span class="keyword">int</span><span class="special">></span> <span class="special">></span> <span class="special">&</span> <span class="identifier">salute_factory_list</span> <span class="special">=</span> <span class="identifier">fm</span><span class="special">.</span><span class="identifier">get</span><span class="special"><</span><span class="identifier">salute</span><span class="special">,</span> <span class="keyword">int</span><span class="special">>();</span>
+
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"salutes: "</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">list</span><span class="special"><</span><span class="identifier">factory</span><span class="special"><</span><span class="identifier">salute</span><span class="special">,</span> <span class="keyword">int</span><span class="special">></span> <span class="special">>::</span><span class="identifier">iterator</span> <span class="identifier">current_salute</span> <span class="special">=</span> <span class="identifier">salute_factory_list</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();</span>
+ <span class="identifier">current_salute</span> <span class="special">!=</span> <span class="identifier">salute_factory_list</span><span class="special">.</span><span class="identifier">end</span><span class="special">();</span> <span class="special">++</span><span class="identifier">current_salute</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">auto_ptr</span><span class="special"><</span><span class="identifier">salute</span><span class="special">></span> <span class="identifier">salute_ptr</span><span class="special">(</span><span class="identifier">current_salute</span><span class="special">-></span><span class="identifier">create</span><span class="special">());</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">salute_ptr</span><span class="special">-></span><span class="identifier">say</span><span class="special">()</span> <span class="special"><<</span> <span class="string">" "</span><span class="special">;</span>
+<span class="special">}</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+</pre>
+<p>
+ </p>
+<p>
+ The output is:
+ </p>
+<div class="informaltable">
+<h4>
+<a name="id2569302"></a>
+ </h4>
+<table class="table">
+<colgroup><col></colgroup>
+<tbody><tr><td>
+<code class="literal">salutes:</code> <br> <code class="literal">hello bye!</code>
+</td></tr></tbody>
+</table>
+</div>
+<p>
+ In conclusion, with Boost.Extension we can implement the same class in different
+ libraries, the same class for different interfaces and load multiple libraries
+ into the same factory.
</p>
</div>
<table width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2007 Jeremy Pack</small></td>
+<td align="right"><small>Copyright © 2007 Jeremy Pack, Mariano G. Consoni</small></td>
</tr></table>
<hr>
<div class="spirit-nav">
Modified: sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial05.html
==============================================================================
--- sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial05.html (original)
+++ sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial05.html 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -26,12 +26,237 @@
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_extension.tutorials.tutorial05"></a> Tutorial 5</h3></div></div></div>
<p>
- Insert content here.
+ In this tutorial we will describe an advanced example using the Info class.
+ The basics of Info classes are explained in the specific section. We expect
+ that you've gone through that section before following this example.
+ </p>
+<p>
+ Let's imagine that we are implementing an multi-protocol instant messaging
+ client. Of course we want to support the maximum quantity of protocols, and
+ it would be great if 3rd party programmers can implement new protocols and
+ can add them dynamically.
+ </p>
+<p>
+ So let's define an interface for the protocols, with the expected operations:
+ </p>
+<p>
+
+</p>
+<pre class="programlisting">
+<span class="keyword">class</span> <span class="identifier">protocol</span>
+<span class="special">{</span>
+ <span class="keyword">public</span><span class="special">:</span>
+
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">login</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="identifier">user</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="identifier">pass</span><span class="special">)</span> <span class="special">{}</span>
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">send</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="identifier">msg</span><span class="special">)</span> <span class="special">{}</span>
+ <span class="keyword">virtual</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">receive</span><span class="special">(</span><span class="keyword">void</span><span class="special">)</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">(</span><span class="string">""</span><span class="special">);</span> <span class="special">}</span>
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">change_status</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="identifier">new_status</span><span class="special">)</span> <span class="special">{}</span>
+
+ <span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">protocol</span><span class="special">(</span><span class="keyword">void</span><span class="special">)</span> <span class="special">{}</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<p>
+ Now we will implement some example protocols:
+ </p>
+<p>
+
+</p>
+<pre class="programlisting">
+<span class="comment">// MSN protocol implementation
+</span><span class="keyword">class</span> <span class="identifier">MSN</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">protocol</span>
+<span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">login</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="identifier">user</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="identifier">pass</span><span class="special">)</span> <span class="special">{</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"MSN: Logged In"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="
special">}</span>
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">send</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="identifier">msg</span><span class="special">)</span> <span class="special">{</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"MSN: message ["</span> <span class="special"><<</span> <span class="identifier">msg</span> <span class="special"><<</span> <span class="string">"] sent"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="special">}</span>
+ <span class="keyword">virtual</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">receive</span><span class="special">(</span><span class="keyword">void</span><span class="special">)</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">(</span><span class="string">"MSN: hello! msg received"</span><span class="special">);</span> <span class="special">}</span>
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">change_status</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="identifier">new_status</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"MSN: Status changed to ["</span> <span class="special"><<</span> <span class="identifier">new_status</span> <span class="special"><<</span> <span class="string">"]"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">MSN</span><span class="special">(</span><span class="keyword">void</span><span class="special">)</span> <span class="special">{}</span>
+<span class="special">};</span>
+
+<span class="comment">// Jabber protocol implementation
+</span><span class="keyword">class</span> <span class="identifier">Jabber</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">protocol</span>
+<span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">login</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="identifier">user</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="identifier">pass</span><span class="special">)</span> <span class="special">{</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Jabber: Logged In"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span clas
s="special">}</span>
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">send</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="identifier">msg</span><span class="special">)</span> <span class="special">{</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Jabber: message ["</span> <span class="special"><<</span> <span class="identifier">msg</span> <span class="special"><<</span> <span class="string">"] sent"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="special">}</span>
+ <span class="keyword">virtual</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">receive</span><span class="special">(</span><span class="keyword">void</span><span class="special">)</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">(</span><span class="string">"Jabber: hello! msg received"</span><span class="special">);</span> <span class="special">}</span>
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">change_status</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="identifier">new_status</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Jabber: Status changed to ["</span> <span class="special"><<</span> <span class="identifier">new_status</span> <span class="special"><<</span> <span class="string">"]"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">Jabber</span><span class="special">(</span><span class="keyword">void</span><span class="special">)</span> <span class="special">{}</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<p>
+ Apart from that we need some protocol information like the server address,
+ port or modes. This data is needed for each protocol and each protocol maybe
+ could have differente implementations with different servers or ports.
+ </p>
+<p>
+ Of course our Info class is a perfect solution to store this data. But in
+ this case as the information is needed for each protocol we could define
+ a base class as the info class and then implement specific versions for each
+ protocol (at least one, could be more for each protocol).
+ </p>
+<p>
+ So let's define the base class:
+ </p>
+<p>
+
+</p>
+<pre class="programlisting">
+<span class="comment">// interface for the parameters of each plugin
+</span><span class="keyword">class</span> <span class="identifier">network_parameters</span>
+<span class="special">{</span>
+ <span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">virtual</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">hostname</span><span class="special">(</span><span class="keyword">void</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="keyword">virtual</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">port</span><span class="special">(</span><span class="keyword">void</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">set_http_mode</span><span class="special">(</span><span class="keyword">void</span><span class="special">)=</span> <span class="number">0</span><span class="special">;</span>
+
+ <span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">network_parameters</span><span class="special">(</span><span class="keyword">void</span><span class="special">)</span> <span class="special">{};</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<p>
+ And the implementation for each of the defined plugins (protocols):
+ </p>
+<p>
+
+</p>
+<pre class="programlisting">
+<span class="comment">// MSN implementation
+</span><span class="keyword">class</span> <span class="identifier">MSN_network_parameters</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">network_parameters</span>
+<span class="special">{</span>
+ <span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">virtual</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">hostname</span><span class="special">(</span><span class="keyword">void</span><span class="special">)</span> <span class="special">{</span> <span class="keyword">return</span> <span class="string">"msn.messenger.com"</span><span class="special">;</span> <span class="special">}</span>
+ <span class="keyword">virtual</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">port</span><span class="special">(</span><span class="keyword">void</span><span class="special">)</span> <span class="special">{</span> <span class="keyword">return</span> <span class="string">"1863"</span><span class="special">;</span> <span class="special">}</span>
+
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">set_http_mode</span><span class="special">(</span><span class="keyword">void</span><span class="special">)</span> <span class="special">{</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"http mode set"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="special">}</span>
+
+ <span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">MSN_network_parameters</span><span class="special">()</span> <span class="special">{}</span>
+<span class="special">};</span>
+
+
+<span class="comment">// Jabber implementation
+</span><span class="keyword">class</span> <span class="identifier">Jabber_network_parameters</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">network_parameters</span>
+<span class="special">{</span>
+ <span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">virtual</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">hostname</span><span class="special">(</span><span class="keyword">void</span><span class="special">)</span> <span class="special">{</span> <span class="keyword">return</span> <span class="string">"jabber.org"</span><span class="special">;</span> <span class="special">}</span>
+ <span class="keyword">virtual</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">port</span><span class="special">(</span><span class="keyword">void</span><span class="special">)</span> <span class="special">{</span> <span class="keyword">return</span> <span class="string">"7063"</span><span class="special">;</span> <span class="special">}</span>
+
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">set_http_mode</span><span class="special">(</span><span class="keyword">void</span><span class="special">)</span> <span class="special">{</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"http mode not supported"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="special">}</span>
+
+ <span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">Jabber_network_parameters</span><span class="special">()</span> <span class="special">{}</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<p>
+ Now we can define our Info class as a smart pointer to the <code class="literal">network_parameters</code>
+ class and register it in the factory map:
+ </p>
+<p>
+
+</p>
+<pre class="programlisting">
+<span class="keyword">extern</span> <span class="string">"C"</span> <span class="keyword">void</span> <span class="identifier">BOOST_EXTENSION_EXPORT_DECL</span> <span class="identifier">extension_export_plugins</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">extensions</span><span class="special">::</span><span class="identifier">factory_map</span> <span class="special">&</span> <span class="identifier">fm</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="identifier">fm</span><span class="special">.</span><span class="identifier">add</span><span class="special"><</span> <span class="identifier">MSN</span><span class="special">,</span> <span class="identifier">protocol</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span><span class="special"><</span><span class="identifier">network_parameters</span><span class="special">></span> <span class="special">></span>
+ <span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span><span class="special"><</span><span class="identifier">network_parameters</span><span class="special">>(</span><span class="keyword">new</span> <span class="identifier">MSN_network_parameters</span><span class="special">));</span>
+ <span class="identifier">fm</span><span class="special">.</span><span class="identifier">add</span><span class="special"><</span> <span class="identifier">Jabber</span><span class="special">,</span> <span class="identifier">protocol</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span><span class="special"><</span><span class="identifier">network_parameters</span><span class="special">></span> <span class="special">></span>
+ <span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span><span class="special"><</span><span class="identifier">network_parameters</span><span class="special">>(</span><span class="keyword">new</span> <span class="identifier">Jabber_network_parameters</span><span class="special">));</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ Finally let's use our implementation for an hypotetical connection:
+ </p>
+<p>
+
+</p>
+<pre class="programlisting">
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">list</span><span class="special"><</span><span class="identifier">factory</span><span class="special"><</span> <span class="identifier">protocol</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span><span class="special"><</span><span class="identifier">network_parameters</span><span class="special">></span> <span class="special">></span> <span class="special">>::</span><span class="identifier">iterator</span> <span class="identifier">current_plugin</span> <span class="special">=</span> <span class="identifier">factory_list</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();</span>
+
+<span class="comment">// MSN plugin
+</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">auto_ptr</span><span class="special"><</span><span class="identifier">protocol</span><span class="special">></span> <span class="identifier">MSN_ptr</span><span class="special">(</span><span class="identifier">current_plugin</span><span class="special">-></span><span class="identifier">create</span><span class="special">());</span>
+<span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span><span class="special"><</span><span class="identifier">network_parameters</span><span class="special">></span> <span class="identifier">msn_parameters</span> <span class="special">=</span> <span class="identifier">current_plugin</span><span class="special">-></span><span class="identifier">get_info</span><span class="special">();</span>
+<span class="identifier">current_plugin</span><span class="special">++;</span>
+
+<span class="comment">// Jabber plugin
+</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">auto_ptr</span><span class="special"><</span><span class="identifier">protocol</span><span class="special">></span> <span class="identifier">Jabber_ptr</span><span class="special">(</span><span class="identifier">current_plugin</span><span class="special">-></span><span class="identifier">create</span><span class="special">());</span>
+<span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span><span class="special"><</span><span class="identifier">network_parameters</span><span class="special">></span> <span class="identifier">jabber_parameters</span> <span class="special">=</span> <span class="identifier">current_plugin</span><span class="special">-></span><span class="identifier">get_info</span><span class="special">();</span>
+
+<span class="comment">// server
+</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"MSN hostname: "</span> <span class="special"><<</span> <span class="identifier">msn_parameters</span><span class="special">-></span><span class="identifier">hostname</span><span class="special">()</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Jabber hostname: "</span> <span class="special"><<</span> <span class="identifier">jabber_parameters</span><span class="special">-></span><span class="identifier">hostname</span><span class="special">()</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+
+<span class="comment">// http_mode: note that one of the implementations doesn't support it, having a base class
+</span><span class="comment">// and different specific concrete network parameters allow us to handle this
+</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"MSN: "</span><span class="special">;</span>
+<span class="identifier">msn_parameters</span><span class="special">-></span><span class="identifier">set_http_mode</span><span class="special">();</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Jabber: "</span><span class="special">;</span>
+<span class="identifier">jabber_parameters</span><span class="special">-></span><span class="identifier">set_http_mode</span><span class="special">();</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+
+<span class="comment">// login
+</span><span class="identifier">MSN_ptr</span><span class="special">-></span><span class="identifier">login</span><span class="special">(</span><span class="string">"testuser"</span><span class="special">,</span> <span class="string">"testpass"</span><span class="special">);</span>
+<span class="identifier">Jabber_ptr</span><span class="special">-></span><span class="identifier">login</span><span class="special">(</span><span class="string">"testuser"</span><span class="special">,</span> <span class="string">"testpass"</span><span class="special">);</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+
+<span class="comment">// send message
+</span><span class="identifier">MSN_ptr</span><span class="special">-></span><span class="identifier">send</span><span class="special">(</span><span class="string">"hi"</span><span class="special">);</span>
+<span class="identifier">Jabber_ptr</span><span class="special">-></span><span class="identifier">send</span><span class="special">(</span><span class="string">"hi"</span><span class="special">);</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+
+<span class="comment">// change status
+</span><span class="identifier">MSN_ptr</span><span class="special">-></span><span class="identifier">change_status</span><span class="special">(</span><span class="string">"away"</span><span class="special">);</span>
+<span class="identifier">Jabber_ptr</span><span class="special">-></span><span class="identifier">change_status</span><span class="special">(</span><span class="string">"away"</span><span class="special">);</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+
+<span class="comment">// wait for message
+</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">MSN_ptr</span><span class="special">-></span><span class="identifier">receive</span><span class="special">()</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">Jabber_ptr</span><span class="special">-></span><span class="identifier">receive</span><span class="special">()</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+</pre>
+<p>
+ </p>
+<p>
+ And we get the following output:
+ </p>
+<div class="informaltable">
+<h4>
+<a name="id2573510"></a>
+ </h4>
+<table class="table">
+<colgroup><col></colgroup>
+<tbody><tr><td><code class="literal">MSN hostname: msn.messenger.com<br> Jabber hostname:
+ jabber.org<br> <br> MSN: http mode set<br> Jabber: http mode
+ not supported<br> <br> MSN: Logged In<br> Jabber: Logged In<br>
+ <br> MSN: message [hi] sent<br> Jabber: message [hi] sent<br>
+ <br> MSN: Status changed to [away]<br> Jabber: Status changed to
+ [away]<br> <br> MSN: hello! msg received<br> Jabber: hello! msg
+ received<br> </code></td></tr></tbody>
+</table>
+</div>
+<p>
+ The complete code is in the <code class="literal">examples/info/im</code> directory.
</p>
</div>
<table width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2007 Jeremy Pack</small></td>
+<td align="right"><small>Copyright © 2007 Jeremy Pack, Mariano G. Consoni</small></td>
</tr></table>
<hr>
<div class="spirit-nav">
Modified: sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial06.html
==============================================================================
--- sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial06.html (original)
+++ sandbox/libs/extension/doc/html/boost_extension/tutorials/tutorial06.html 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -31,7 +31,7 @@
</div>
<table width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2007 Jeremy Pack</small></td>
+<td align="right"><small>Copyright © 2007 Jeremy Pack, Mariano G. Consoni</small></td>
</tr></table>
<hr>
<div class="spirit-nav">
Modified: sandbox/libs/extension/doc/html/index.html
==============================================================================
--- sandbox/libs/extension/doc/html/index.html (original)
+++ sandbox/libs/extension/doc/html/index.html 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -22,7 +22,7 @@
<div class="titlepage"><div>
<div><h2 class="title">
<a name="boost_extension"></a>Chapter 1. Boost.Extension 1.0</h2></div>
-<div><p class="copyright">Copyright © 2007 Jeremy Pack</p></div>
+<div><p class="copyright">Copyright © 2007 Jeremy Pack, Mariano G. Consoni</p></div>
<div><div class="legalnotice">
<a name="id2552220"></a><p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
@@ -45,6 +45,7 @@
</dl></dd>
<dt><span class="section"> Factories</span></dt>
<dt><span class="section"> Shared Libraries</span></dt>
+<dt><span class="section"> Info Classes</span></dt>
<dt><span class="section"> Performance Analysis</span></dt>
<dt><span class="section"> Appendices</span></dt>
<dd><dl><dt><span class="section"> Appendix A - Windows Export and Import Declarations</span></dt></dl></dd>
Modified: sandbox/libs/extension/doc/info.qbk
==============================================================================
--- sandbox/libs/extension/doc/info.qbk (original)
+++ sandbox/libs/extension/doc/info.qbk 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -1,3 +1,10 @@
+[/ Boost.Extension - info class doc ]
+[/ Copyright 2007 Marano G. Consoni ]
+[/ Distributed under the Boost Software License, Version 1.0. (See]
+[/ accompanying file LICENSE_1_0.txt or copy at ]
+[/ http://www.boost.org/LICENSE_1_0.txt) ]
+[/ See http://www.boost.org/ for latest version. ]
+
[section:info Info Classes]
In this section we explain how to use Info classes in Boost.Extensions.
Modified: sandbox/libs/extension/doc/introduction.qbk
==============================================================================
--- sandbox/libs/extension/doc/introduction.qbk (original)
+++ sandbox/libs/extension/doc/introduction.qbk 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -1,3 +1,10 @@
+[/ Boost.Extension - intro ]
+[/ Copyright 2007 Jeremy Pack ]
+[/ Distributed under the Boost Software License, Version 1.0. (See]
+[/ accompanying file LICENSE_1_0.txt or copy at ]
+[/ http://www.boost.org/LICENSE_1_0.txt) ]
+[/ See http://www.boost.org/ for latest version. ]
+
[section:introduction Introduction]
Wrappers for loading classes from linked libraries to extend the functionality
of a program. Created to ease the creation of plugins.
Modified: sandbox/libs/extension/doc/performance_analysis.qbk
==============================================================================
--- sandbox/libs/extension/doc/performance_analysis.qbk (original)
+++ sandbox/libs/extension/doc/performance_analysis.qbk 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -1,3 +1,10 @@
+[/ Boost.Extension - performance analysis ]
+[/ Copyright 2007 Jeremy Pack ]
+[/ Distributed under the Boost Software License, Version 1.0. (See]
+[/ accompanying file LICENSE_1_0.txt or copy at ]
+[/ http://www.boost.org/LICENSE_1_0.txt) ]
+[/ See http://www.boost.org/ for latest version. ]
+
[section:performance_analysis Performance Analysis]
Insert content here.
Modified: sandbox/libs/extension/doc/quick_start.qbk
==============================================================================
--- sandbox/libs/extension/doc/quick_start.qbk (original)
+++ sandbox/libs/extension/doc/quick_start.qbk 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -1,3 +1,10 @@
+[/ Boost.Extension - quick start ]
+[/ Copyright 2007 Jeremy Pack ]
+[/ Distributed under the Boost Software License, Version 1.0. (See]
+[/ accompanying file LICENSE_1_0.txt or copy at ]
+[/ http://www.boost.org/LICENSE_1_0.txt) ]
+[/ See http://www.boost.org/ for latest version. ]
+
[section:quick_start Quick Start]
For basic usage of the library, the tutorials
Modified: sandbox/libs/extension/doc/shared_libraries.qbk
==============================================================================
--- sandbox/libs/extension/doc/shared_libraries.qbk (original)
+++ sandbox/libs/extension/doc/shared_libraries.qbk 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -1,3 +1,10 @@
+[/ Boost.Extension - shared libraries ]
+[/ Copyright 2007 Jeremy Pack ]
+[/ Distributed under the Boost Software License, Version 1.0. (See]
+[/ accompanying file LICENSE_1_0.txt or copy at ]
+[/ http://www.boost.org/LICENSE_1_0.txt) ]
+[/ See http://www.boost.org/ for latest version. ]
+
[section:shared_libraries Shared Libraries]
Insert content here.
Modified: sandbox/libs/extension/doc/tutorial1.qbk
==============================================================================
--- sandbox/libs/extension/doc/tutorial1.qbk (original)
+++ sandbox/libs/extension/doc/tutorial1.qbk 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -1,3 +1,11 @@
+[/ Boost.Extension - first tutorial ]
+[/ Copyright 2007 Jeremy Pack ]
+[/ Distributed under the Boost Software License, Version 1.0. (See]
+[/ accompanying file LICENSE_1_0.txt or copy at ]
+[/ http://www.boost.org/LICENSE_1_0.txt) ]
+[/ See http://www.boost.org/ for latest version. ]
+
+
[section:tutorial01 Tutorial 1]
Create a class that we will later subclass and put it into a header file called word.hpp.
Modified: sandbox/libs/extension/doc/tutorial2.qbk
==============================================================================
--- sandbox/libs/extension/doc/tutorial2.qbk (original)
+++ sandbox/libs/extension/doc/tutorial2.qbk 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -1,3 +1,10 @@
+[/ Boost.Extension - second tutorial ]
+[/ Copyright 2007 Jeremy Pack ]
+[/ Distributed under the Boost Software License, Version 1.0. (See]
+[/ accompanying file LICENSE_1_0.txt or copy at ]
+[/ http://www.boost.org/LICENSE_1_0.txt) ]
+[/ See http://www.boost.org/ for latest version. ]
+
[section:tutorial02 Tutorial 2]
This tutorial shows more advanced class loading. The example described here is
Modified: sandbox/libs/extension/doc/tutorial3.qbk
==============================================================================
--- sandbox/libs/extension/doc/tutorial3.qbk (original)
+++ sandbox/libs/extension/doc/tutorial3.qbk 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -1,3 +1,11 @@
+[/ Boost.Extension - third tutorial ]
+[/ Copyright 2007 Mariano G. Consoni ]
+[/ Distributed under the Boost Software License, Version 1.0. (See]
+[/ accompanying file LICENSE_1_0.txt or copy at ]
+[/ http://www.boost.org/LICENSE_1_0.txt) ]
+[/ See http://www.boost.org/ for latest version. ]
+
+
[section:tutorial03 Tutorial 3]
This tutorial shows how to register and instance classes that have multi-argument constructors (not default constructors)
Modified: sandbox/libs/extension/doc/tutorial4.qbk
==============================================================================
--- sandbox/libs/extension/doc/tutorial4.qbk (original)
+++ sandbox/libs/extension/doc/tutorial4.qbk 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -1,3 +1,10 @@
+[/ Boost.Extension - fourth tutorial ]
+[/ Copyright 2007 Mariano G. Consoni ]
+[/ Distributed under the Boost Software License, Version 1.0. (See]
+[/ accompanying file LICENSE_1_0.txt or copy at ]
+[/ http://www.boost.org/LICENSE_1_0.txt) ]
+[/ See http://www.boost.org/ for latest version. ]
+
[section:tutorial04 Tutorial 4]
Modified: sandbox/libs/extension/doc/tutorial5.qbk
==============================================================================
--- sandbox/libs/extension/doc/tutorial5.qbk (original)
+++ sandbox/libs/extension/doc/tutorial5.qbk 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -1,3 +1,10 @@
+[/ Boost.Extension - fifth tutorial ]
+[/ Copyright 2007 Mariano G. Consoni ]
+[/ Distributed under the Boost Software License, Version 1.0. (See]
+[/ accompanying file LICENSE_1_0.txt or copy at ]
+[/ http://www.boost.org/LICENSE_1_0.txt) ]
+[/ See http://www.boost.org/ for latest version. ]
+
[section:tutorial05 Tutorial 5]
In this tutorial we will describe an advanced example using the Info class. The basics of Info classes are explained
Modified: sandbox/libs/extension/doc/tutorial6.qbk
==============================================================================
--- sandbox/libs/extension/doc/tutorial6.qbk (original)
+++ sandbox/libs/extension/doc/tutorial6.qbk 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -1,3 +1,10 @@
+[/ Boost.Extension - sixth tutorial ]
+[/ Copyright 2007 Mariano G. Consoni ]
+[/ Distributed under the Boost Software License, Version 1.0. (See]
+[/ accompanying file LICENSE_1_0.txt or copy at ]
+[/ http://www.boost.org/LICENSE_1_0.txt) ]
+[/ See http://www.boost.org/ for latest version. ]
+
[section:tutorial06 Tutorial 6]
Insert content here.
Modified: sandbox/libs/extension/doc/tutorials.qbk
==============================================================================
--- sandbox/libs/extension/doc/tutorials.qbk (original)
+++ sandbox/libs/extension/doc/tutorials.qbk 2007-06-26 18:24:40 EDT (Tue, 26 Jun 2007)
@@ -1,3 +1,10 @@
+[/ Boost.Extension - tutorials ]
+[/ Copyright 2007 Mariano G. Consoni ]
+[/ Distributed under the Boost Software License, Version 1.0. (See]
+[/ accompanying file LICENSE_1_0.txt or copy at ]
+[/ http://www.boost.org/LICENSE_1_0.txt) ]
+[/ See http://www.boost.org/ for latest version. ]
+
[section Tutorials]
[include tutorial1.qbk]
[include tutorial2.qbk]
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk