$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: oryol_at_[hidden]
Date: 2008-02-09 23:16:16
Author: jeremypack
Date: 2008-02-09 23:16:14 EST (Sat, 09 Feb 2008)
New Revision: 43202
URL: http://svn.boost.org/trac/boost/changeset/43202
Log:
Doc fixes
Text files modified: 
   sandbox/libs/extension/doc/extension.qbk                                    |     2                                         
   sandbox/libs/reflection/doc/extension.qbk                                   |   134 ++++++++++++++++++++++++++++++++++++++++
   sandbox/libs/reflection/doc/html/boost_reflection/introduction.html         |     6                                         
   sandbox/libs/reflection/doc/html/boost_reflection/tutorials.html            |     6                                         
   sandbox/libs/reflection/doc/html/boost_reflection/tutorials/tutorial01.html |     9 --                                      
   sandbox/libs/reflection/doc/html/index.html                                 |     6 +                                       
   sandbox/libs/reflection/doc/html/standalone_HTML.manifest                   |     1                                         
   sandbox/libs/reflection/doc/reflection.qbk                                  |     5 +                                       
   sandbox/libs/reflection/doc/tutorial1.qbk                                   |     3                                         
   sandbox/libs/reflection/examples/Jamfile.v2                                 |     6 -                                       
   sandbox/libs/reflection/examples/extension/car_lib.cpp                      |    14 +++                                     
   sandbox/libs/reflection/examples/extension/extension.cpp                    |    29 +++++++-                                
   sandbox/libs/reflection/examples/main.cpp                                   |    14 ---                                     
   13 files changed, 191 insertions(+), 44 deletions(-)
Modified: sandbox/libs/extension/doc/extension.qbk
==============================================================================
--- sandbox/libs/extension/doc/extension.qbk	(original)
+++ sandbox/libs/extension/doc/extension.qbk	2008-02-09 23:16:14 EST (Sat, 09 Feb 2008)
@@ -1,5 +1,5 @@
 [/ Boost.Extension - main doc ]
-[/ Copyright 2007 Jeremy Pack ]
+[/ Copyright 2007-2008 Jeremy Pack and Mariano 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) ]
Modified: sandbox/libs/reflection/doc/extension.qbk
==============================================================================
--- sandbox/libs/reflection/doc/extension.qbk	(original)
+++ sandbox/libs/reflection/doc/extension.qbk	2008-02-09 23:16:14 EST (Sat, 09 Feb 2008)
@@ -6,5 +6,139 @@
 [/ See http://www.boost.org/ for latest version. ]
 
 [section:extension Boost.Extension Interoperability]
+Reflections are designed to work with Boost.Extension, or with
+shared libraries in general. A simple example is included in
+examples/extension/.
 
+Declaring the reflected class itself is similar to the
+process for doing the same in Boost.Extension.
+
+Here's how the Jamfile for these libraries is defined. Note
+that, like in Boost.Extension, one can rename the shared library
+extensions, for consistency across platforms. Here, we use the
+.reflection suffix for each shared library.
+``
+import type : change-generated-target-suffix ;
+import type : change-generated-target-prefix ;
+type.change-generated-target-suffix SHARED_LIB : : reflection ;
+type.change-generated-target-prefix SHARED_LIB : : lib ;
+exe extension-reflection : extension/extension.cpp ;
+lib car_lib : extension/car_lib.cpp : <link>shared ;
+``
+
+The code in the shared library is defined in car_lib.cpp.
+
+We define two classes to export as reflections.
+Although both of these classes are derived from a common
+base, this is certainly not necessary. If we were using
+Boost.Extension factories, this would be required.
+``
+class suv : public car
+{
+public:
+        suv(const char * name) : car(name) {}
+        virtual const char * get_type(void) { return "It's an SUV."; }
+        virtual ~suv(void) {}
+};
+
+class compact : public car
+{
+public:
+        compact(const char * name) : car(name) {}
+        virtual const char * get_type(void) { return "It's a compact."; }
+        virtual ~compact(void) {}
+};
+``
+
+Just like Boost.Extension, an external function needs to be 
+defined that will be called by the main module.
+
+extern "C" 
+void BOOST_EXTENSION_EXPORT_DECL
+extension_export_car(std::map<std::string, reflection> reflection_map) {
+  reflection & first = reflection_map["suv"];
+  reflection & second = reflection_map["compact"];
+
+  // Create a reflector for each type that is being reflected.
+  reflector<suv> suv_reflector(&first);
+  reflector<compact> compact_reflector(&second);
+
+  // Reflect the constructor with a `const char*` arg
+  suv_reflector.reflect_constructor<const char *>();
+  compact_reflector.reflect_constructor<const char *>();
+
+  // Reflect a function for each
+  suv_reflector.reflect<const char *>(&suv::get_type, "get_type");
+  compact_reflector.reflect<const char *>(&compact::get_type, "get_type");
+}
+
+This is all that is necessary to export one constructor and one
+function for each class.
+
+Now, in extension.cpp, we combine Boost.Extension and
+Boost.Reflection code to load and use the reflections declared
+in the shared library.
+
+Create a mapping of reflections to strings that
+will be populated inside the shared library.
+``
+std::map<std::string, reflection> reflection_map;
+``
+Load the shared library using Boost.Extension.
+``
+boost::extensions::shared_library lib
+  ((std::string(BOOST_EXTENSION_DIR_START) +
+   "libcar_lib.extension").c_str());
+lib.open();
+``
+Call an exported function to populate
+reflection_map.
+``
+lib.get<void, std::map<std::string, 
+  reflection> &>
+  ("extension_export_car")(reflection_map);
+if (reflection_map.size() != size_t(2)) {
+  std::cout << "Could not load reflections!";
+  return 1;
+}
+``
+Pull out two reflections that were named "suv" and
+"compact" respectively.
+``
+reflection & first_reflection =
+  reflection_map["suv"];
+reflection & second_reflection =
+  reflection_map["compact"];
+``
+Use the get_constructor function to find a constructor
+that takes one argument, a const char*.
+``
+instance_constructor<const char *> first_constructor =
+  first_reflection.get_constructor<const char *>();
+``
+Use the constructor retrieved to create an instance.
+Warning! instances should only be used with functions
+and constructors generated by a single reflection object.
+``
+instance first_instance = 
+  first_constructor("First Instance");
+``
+Get a function to call on this instance.
+``
+boost::reflections::function<const char *> first_function =
+  first_reflection.get_function<const char *>("get_type");
+std::cout << "First reflection: " << first_function(first_instance)
+          << std::endl;
+ ``
+Repeat the steps for the second reflection.
+``
+instance_constructor<const char *> second_constructor =
+  second_reflection.get_constructor<const char *>();
+instance second_instance = 
+  second_constructor("Second Instance");
+boost::reflections::function<const char *> second_function =
+  second_reflection.get_function<const char *>("get_type");
+std::cout << "Second reflection: " << second_function(second_instance)
+          << std::endl;
+``
 [endsect]
\ No newline at end of file
Modified: sandbox/libs/reflection/doc/html/boost_reflection/introduction.html
==============================================================================
--- sandbox/libs/reflection/doc/html/boost_reflection/introduction.html	(original)
+++ sandbox/libs/reflection/doc/html/boost_reflection/introduction.html	2008-02-09 23:16:14 EST (Sat, 09 Feb 2008)
@@ -7,7 +7,7 @@
 <link rel="start" href="../index.html" title="Chapter 1. Boost.Reflection 1.0">
 <link rel="up" href="../index.html" title="Chapter 1. Boost.Reflection 1.0">
 <link rel="prev" href="../index.html" title="Chapter 1. Boost.Reflection 1.0">
-<link rel="next" href="tutorials.html" title="Tutorials">
+<link rel="next" href="extension.html" title=" Boost.Extension Interoperability">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -20,7 +20,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="../index.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="tutorials.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
+<a accesskey="p" href="../index.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="extension.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
 </div>
 <div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both">
 <a name="boost_reflection.introduction"></a> Introduction</h2></div></div></div></div>
@@ -34,7 +34,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="../index.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="tutorials.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
+<a accesskey="p" href="../index.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="extension.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
 </div>
 </body>
 </html>
Modified: sandbox/libs/reflection/doc/html/boost_reflection/tutorials.html
==============================================================================
--- sandbox/libs/reflection/doc/html/boost_reflection/tutorials.html	(original)
+++ sandbox/libs/reflection/doc/html/boost_reflection/tutorials.html	2008-02-09 23:16:14 EST (Sat, 09 Feb 2008)
@@ -6,7 +6,7 @@
 <meta name="generator" content="DocBook XSL Stylesheets V1.67.2">
 <link rel="start" href="../index.html" title="Chapter 1. Boost.Reflection 1.0">
 <link rel="up" href="../index.html" title="Chapter 1. Boost.Reflection 1.0">
-<link rel="prev" href="introduction.html" title=" Introduction">
+<link rel="prev" href="extension.html" title=" Boost.Extension Interoperability">
 <link rel="next" href="tutorials/tutorial01.html" title=" Tutorial 1">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -20,7 +20,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="introduction.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="tutorials/tutorial01.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
+<a accesskey="p" href="extension.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="tutorials/tutorial01.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
 </div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
@@ -46,7 +46,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="introduction.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="tutorials/tutorial01.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
+<a accesskey="p" href="extension.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="tutorials/tutorial01.html"><img src="../../../doc/html/images/next.png" alt="Next"></a>
 </div>
 </body>
 </html>
Modified: sandbox/libs/reflection/doc/html/boost_reflection/tutorials/tutorial01.html
==============================================================================
--- sandbox/libs/reflection/doc/html/boost_reflection/tutorials/tutorial01.html	(original)
+++ sandbox/libs/reflection/doc/html/boost_reflection/tutorials/tutorial01.html	2008-02-09 23:16:14 EST (Sat, 09 Feb 2008)
@@ -22,13 +22,8 @@
 <div class="spirit-nav">
 <a accesskey="p" href="../tutorials.html"><img src="../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tutorials.html"><img src="../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="tutorial02.html"><img src="../../../../doc/html/images/next.png" alt="Next"></a>
 </div>
-<div class="section" lang="en">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="boost_reflection.tutorials.tutorial01"></a> Tutorial 1</h3></div></div></div>
-<p>
-        This is a placeholder.
-      </p>
-</div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title">
+<a name="boost_reflection.tutorials.tutorial01"></a> Tutorial 1</h3></div></div></div></div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
 <td align="right"><div class="copyright-footer">Copyright © 2007 -2008 Jeremy Pack, Mariano G. Consoni<p>
Modified: sandbox/libs/reflection/doc/html/index.html
==============================================================================
--- sandbox/libs/reflection/doc/html/index.html	(original)
+++ sandbox/libs/reflection/doc/html/index.html	2008-02-09 23:16:14 EST (Sat, 09 Feb 2008)
@@ -34,6 +34,7 @@
 <p><b>Table of Contents</b></p>
 <dl>
 <dt><span class="section"> Introduction</span></dt>
+<dt><span class="section"> Boost.Extension Interoperability</span></dt>
 <dt><span class="section">Tutorials</span></dt>
 <dd><dl>
 <dt><span class="section"> Tutorial 1</span></dt>
@@ -51,6 +52,11 @@
 </dl></dd>
 </dl>
 </div>
+<p>
+    Note: Only the Boost.Extension interoperability section of the documentation
+    is currently complete. However, it should show enough to begin basic usage of
+    the library.
+  </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"><p><small>Last revised: February 9, 2008 at 18:05:00 GMT</small></p></td>
Modified: sandbox/libs/reflection/doc/html/standalone_HTML.manifest
==============================================================================
--- sandbox/libs/reflection/doc/html/standalone_HTML.manifest	(original)
+++ sandbox/libs/reflection/doc/html/standalone_HTML.manifest	2008-02-09 23:16:14 EST (Sat, 09 Feb 2008)
@@ -1,5 +1,6 @@
 index.html
 boost_reflection/introduction.html
+boost_reflection/extension.html
 boost_reflection/tutorials.html
 boost_reflection/tutorials/tutorial01.html
 boost_reflection/tutorials/tutorial02.html
Modified: sandbox/libs/reflection/doc/reflection.qbk
==============================================================================
--- sandbox/libs/reflection/doc/reflection.qbk	(original)
+++ sandbox/libs/reflection/doc/reflection.qbk	2008-02-09 23:16:14 EST (Sat, 09 Feb 2008)
@@ -18,8 +18,11 @@
     [category Programming Interfaces]
     [last-revision $Date: 2008/2/9 18:05:00 $]
 ]
-
+Note: Only the Boost.Extension interoperability section
+of the documentation is currently complete. However,
+it should show enough to begin basic usage of the library.
 [include introduction.qbk]
+[include extension.qbk]
 [include tutorials.qbk]
 [include performance_analysis.qbk]
 [include appendices.qbk]
Modified: sandbox/libs/reflection/doc/tutorial1.qbk
==============================================================================
--- sandbox/libs/reflection/doc/tutorial1.qbk	(original)
+++ sandbox/libs/reflection/doc/tutorial1.qbk	2008-02-09 23:16:14 EST (Sat, 09 Feb 2008)
@@ -7,7 +7,4 @@
 
 
 [section:tutorial01 Tutorial 1]
-
-This is a placeholder.
-
 [endsect]
\ No newline at end of file
Modified: sandbox/libs/reflection/examples/Jamfile.v2
==============================================================================
--- sandbox/libs/reflection/examples/Jamfile.v2	(original)
+++ sandbox/libs/reflection/examples/Jamfile.v2	2008-02-09 23:16:14 EST (Sat, 09 Feb 2008)
@@ -26,12 +26,6 @@
     :
     ;
 
-# basic example
-# exe reflection : main.cpp ;
-
-# interpreter prototype
-# exe interpreter : interpreter/interpreter.cpp ;
-
 # extension integration example
 exe extension-reflection : extension/extension.cpp ;
 lib car_lib : extension/car_lib.cpp : <link>shared ;
Modified: sandbox/libs/reflection/examples/extension/car_lib.cpp
==============================================================================
--- sandbox/libs/reflection/examples/extension/car_lib.cpp	(original)
+++ sandbox/libs/reflection/examples/extension/car_lib.cpp	2008-02-09 23:16:14 EST (Sat, 09 Feb 2008)
@@ -14,6 +14,10 @@
 #include <boost/reflection/reflection.hpp>
 #include <boost/reflection/reflector.hpp>
 using namespace boost::reflections;
+
+// Although both of these classes are derived from a common
+// base, this is certainly not necessary. If we were using
+// Boost.Extension factories, this would be required.
 class suv : public car
 {
 public:
@@ -32,16 +36,20 @@
 
 
 extern "C" 
-void BOOST_EXTENSION_EXPORT_DECL 
+void BOOST_EXTENSION_EXPORT_DECL
 extension_export_car(std::map<std::string, reflection> reflection_map) {
   reflection & first = reflection_map["suv"];
   reflection & second = reflection_map["compact"];
+
+  // Create a reflector for each type that is being reflected.
   reflector<suv> suv_reflector(&first);
   reflector<compact> compact_reflector(&second);
-  
+
+  // Reflect the constructor with a `const char*` arg
   suv_reflector.reflect_constructor<const char *>();
   compact_reflector.reflect_constructor<const char *>();
-  
+
+  // Reflect a function for each
   suv_reflector.reflect<const char *>(&suv::get_type, "get_type");
   compact_reflector.reflect<const char *>(&compact::get_type, "get_type");
 }
Modified: sandbox/libs/reflection/examples/extension/extension.cpp
==============================================================================
--- sandbox/libs/reflection/examples/extension/extension.cpp	(original)
+++ sandbox/libs/reflection/examples/extension/extension.cpp	2008-02-09 23:16:14 EST (Sat, 09 Feb 2008)
@@ -19,6 +19,8 @@
 #include <boost/reflection/reflector.hpp>
 #include <iostream>
 
+// Define directory locations for cross platform
+// directory traversal.
 #if defined(MSC_VER) || defined(WIN32)
 #define BOOST_EXTENSION_DIR_START "..\\bin\\"
 #else
@@ -31,10 +33,18 @@
   using boost::reflections::instance_constructor;
   using boost::reflections::reflection;
 
+  // Create a mapping of reflections to strings that
+  // will be populated inside the shared library.
   std::map<std::string, reflection> reflection_map;
+
+  // Load the shared library using Boost.Extension
   boost::extensions::shared_library lib
-  ((std::string(BOOST_EXTENSION_DIR_START) + "libcar_lib.extension").c_str());
+    ((std::string(BOOST_EXTENSION_DIR_START) +
+     "libcar_lib.extension").c_str());
   lib.open();
+
+  // Call an exported function to populate
+  // reflection_map
   lib.get<void, std::map<std::string, 
     reflection> &>
     ("extension_export_car")(reflection_map);
@@ -42,21 +52,32 @@
     std::cout << "Could not load reflections!";
     return 1;
   }
-  // Let's create the reflection and add the methods
+
+  // Pull out two reflections that were named "suv" and
+  // "compact" respectively.
   reflection & first_reflection =
     reflection_map["suv"];
   reflection & second_reflection =
     reflection_map["compact"];
-  
+
+  // Use the get_constructor function to find a constructor
+  // that takes one argument, a const char*.
   instance_constructor<const char *> first_constructor =
     first_reflection.get_constructor<const char *>();
+
+  // Use the constructor retrieved to create an instance.
+  // Warning! instances should only be used with functions
+  // and constructors generated by a single reflection object.
   instance first_instance = 
     first_constructor("First Instance");
+
+  // Get a function to call on this instance.
   boost::reflections::function<const char *> first_function =
     first_reflection.get_function<const char *>("get_type");
   std::cout << "First reflection: " << first_function(first_instance)
             << std::endl;
-  
+ 
+  // Repeat the steps for the second reflection.
   instance_constructor<const char *> second_constructor =
     second_reflection.get_constructor<const char *>();
   instance second_instance = 
Modified: sandbox/libs/reflection/examples/main.cpp
==============================================================================
--- sandbox/libs/reflection/examples/main.cpp	(original)
+++ sandbox/libs/reflection/examples/main.cpp	2008-02-09 23:16:14 EST (Sat, 09 Feb 2008)
@@ -10,15 +10,8 @@
  */
 
 
-#include <string>
-
-#include <boost/extension/factory_map.hpp>
-#include <boost/extension/shared_library.hpp>
-#include <boost/extension/convenience.hpp>
-
 #include <iostream>
-
-#define BOOST_EXTENSION_USE_PP 1
+#include <string>
 
 #include "car.hpp"
 #include <boost/reflection/reflection.hpp>
@@ -54,10 +47,5 @@
   car_reflection.call<std::string, bool, 
     float, std::string>(&ferrari_f40, "turn", .10f);
 
-  // prepare the parameter map for a call
-  boost::extension::parameter_map pm;
-  pm.add<float, std::string>(.15f, "turn_angle");
-  pm.add<int, std::string>(50, "aceleration");
-
   return 0;
 }