$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r66388 - in sandbox/SOC/2009/fusion: boost/fusion/support/internal/base libs/fusion/example/extension/struct libs/fusion/example/extension/triple libs/fusion/example/extension/vtuple libs/fusion/example/performance libs/fusion/test/compile_time libs/fusion/test/compile_time/plotter libs/fusion/test/compile_time/testcases libs/fusion/test/compile_time/testcases/detail libs/fusion/test/suite1 libs/fusion/test/suite1/algorithm libs/fusion/test/suite2
From: mr.chr.schmidt_at_[hidden]
Date: 2010-11-03 17:12:02
Author: cschmidt
Date: 2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
New Revision: 66388
URL: http://svn.boost.org/trac/boost/changeset/66388
Log:
new compile time driver
Added:
   sandbox/SOC/2009/fusion/boost/fusion/support/internal/base/ref_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/plotter/
   sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/plotter/main.cpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/testcases/
   sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/testcases/detail/
   sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/testcases/detail/main.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/testcases/reference.cpp   (contents, props changed)
Removed:
   sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/driver.hpp
   sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/fold.cpp
   sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/transform.cpp
   sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_construction.cpp
   sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_intrinsic.cpp
   sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_iteration.cpp
Text files modified: 
   sandbox/SOC/2009/fusion/boost/fusion/support/internal/base/ref.hpp            |   128 -----------------------------------     
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/Jamfile          |     1                                         
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/triple/Jamfile          |     1                                         
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/triple/triple.cpp       |    15 +--                                     
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/vtuple/Jamfile          |     1                                         
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/vtuple/tuple142plus.cpp |    20 ++--                                    
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/vtuple/vtuple_.cpp      |     3                                         
   sandbox/SOC/2009/fusion/libs/fusion/example/performance/Jamfile               |     1                                         
   sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/Jamfile                 |   143 ++++++++++++++++++++++++++++++++++----- 
   sandbox/SOC/2009/fusion/libs/fusion/test/suite1/Jamfile                       |     1                                         
   sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/fold.hpp            |     9 +-                                      
   sandbox/SOC/2009/fusion/libs/fusion/test/suite2/Jamfile                       |     1                                         
   12 files changed, 148 insertions(+), 176 deletions(-)
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/internal/base/ref.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/internal/base/ref.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/internal/base/ref.hpp	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
@@ -15,7 +15,6 @@
 #   include <boost/mpl/or.hpp>
 #   include <boost/mpl/identity.hpp>
 #endif
-#include <boost/mpl/bool.hpp>
 
 #include <boost/type_traits/is_class.hpp>
 #include <boost/type_traits/is_array.hpp>
@@ -36,6 +35,8 @@
 #   include <utility>
 #endif
 
+#include "ref_impl.hpp"
+
 //cschmidt: We ignore volatile in the BOOST_FUSION_ALL_CV_*-Macros, as we would
 //get a lot of problems with older compilers. On top of that, fusion
 //types are not meant to be volatile anyway.
@@ -73,131 +74,6 @@
 
 namespace boost { namespace fusion { namespace detail
 {
-    //cschmidt: workaround until boost::is_reference supports rvalues
-#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)
-    template<typename T>
-    struct is_lrref_stage2
-      : mpl::false_
-    {};
-
-    template<typename T>
-    struct is_lrref_stage2<T&&>
-      : mpl::true_
-    {};
-
-    template<typename T>
-    struct is_lrref
-      : is_lrref_stage2<T>
-    {};
-#else
-    template<typename T>
-    struct is_lrref
-      : mpl::false_
-    {};
-
-#   ifndef BOOST_FUSION_NO_RVALUE_REFERENCES
-    template<typename T>
-    struct is_lrref<T&&>
-      : mpl::true_
-    {};
-#   endif
-#endif
-
-    template<typename T>
-    struct is_lrref<T&>
-      : mpl::true_
-    {};
-
-#ifndef BOOST_FUSION_NO_RVALUE_REFERENCES
-    template<typename T>
-    struct is_rref
-      : mpl::false_
-    {};
-
-    template<typename T>
-    struct is_rref<T&&>
-      : mpl::true_
-    {};
-#endif
-
-#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)
-    template<typename T>
-    struct remove_reference_stage2
-    {
-        typedef T type;
-    };
-
-    template<typename T>
-    struct remove_reference_stage2<T&&>
-    {
-        typedef T type;
-    };
-
-    template<typename T>
-    struct remove_reference
-      : remove_reference_stage2<T>
-    {};
-#else
-    template<typename T>
-    struct remove_reference
-    {
-        typedef T type;
-    };
-
-#   ifndef BOOST_FUSION_NO_RVALUE_REFERENCES
-    template<typename T>
-    struct remove_reference<T&&>
-    {
-        typedef T type;
-    };
-#   endif
-#endif
-
-    template<typename T>
-    struct remove_reference<T&>
-    {
-        typedef T type;
-    };
-
-#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)
-    template<typename T>
-    struct add_lref_stage2
-    {
-        typedef T& type;
-    };
-
-    template<typename T>
-    struct add_lref_stage2<T&&>
-    {
-        typedef T&& type;
-    };
-
-    template<typename T>
-    struct add_lref
-      : add_lref_stage2<T>
-    {};
-#else
-    template<typename T>
-    struct add_lref
-    {
-        typedef T& type;
-    };
-
-#   ifndef BOOST_FUSION_NO_RVALUE_REFERENCES
-    template<typename T>
-    struct add_lref<T&&>
-    {
-        typedef T&& type;
-    };
-#   endif
-#endif
-
-    template<typename T>
-    struct add_lref<T&>
-    {
-        typedef T& type;
-    };
-
     template<typename T>
     struct identity
       :
Added: sandbox/SOC/2009/fusion/boost/fusion/support/internal/base/ref_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/internal/base/ref_impl.hpp	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
@@ -0,0 +1,141 @@
+/*==============================================================================
+    Copyright (c) 2010 Christopher Schmidt
+
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_SUPPORT_INTERNAL_BASE_REF_IMPL_HPP
+#define BOOST_FUSION_SUPPORT_INTERNAL_BASE_REF_IMPL_HPP
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+    //cschmidt: workaround until boost::is_reference supports rvalues
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)
+    template<typename T>
+    struct is_lrref_stage2
+      : mpl::false_
+    {};
+
+    template<typename T>
+    struct is_lrref_stage2<T&&>
+      : mpl::true_
+    {};
+
+    template<typename T>
+    struct is_lrref
+      : is_lrref_stage2<T>
+    {};
+#else
+    template<typename T>
+    struct is_lrref
+      : mpl::false_
+    {};
+
+#   ifndef BOOST_FUSION_NO_RVALUE_REFERENCES
+    template<typename T>
+    struct is_lrref<T&&>
+      : mpl::true_
+    {};
+#   endif
+#endif
+
+    template<typename T>
+    struct is_lrref<T&>
+      : mpl::true_
+    {};
+
+#ifndef BOOST_FUSION_NO_RVALUE_REFERENCES
+    template<typename T>
+    struct is_rref
+      : mpl::false_
+    {};
+
+    template<typename T>
+    struct is_rref<T&&>
+      : mpl::true_
+    {};
+#endif
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)
+    template<typename T>
+    struct remove_reference_stage2
+    {
+        typedef T type;
+    };
+
+    template<typename T>
+    struct remove_reference_stage2<T&&>
+    {
+        typedef T type;
+    };
+
+    template<typename T>
+    struct remove_reference
+      : remove_reference_stage2<T>
+    {};
+#else
+    template<typename T>
+    struct remove_reference
+    {
+        typedef T type;
+    };
+
+#   ifndef BOOST_FUSION_NO_RVALUE_REFERENCES
+    template<typename T>
+    struct remove_reference<T&&>
+    {
+        typedef T type;
+    };
+#   endif
+#endif
+
+    template<typename T>
+    struct remove_reference<T&>
+    {
+        typedef T type;
+    };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)
+    template<typename T>
+    struct add_lref_stage2
+    {
+        typedef T& type;
+    };
+
+    template<typename T>
+    struct add_lref_stage2<T&&>
+    {
+        typedef T&& type;
+    };
+
+    template<typename T>
+    struct add_lref
+      : add_lref_stage2<T>
+    {};
+#else
+    template<typename T>
+    struct add_lref
+    {
+        typedef T& type;
+    };
+
+#   ifndef BOOST_FUSION_NO_RVALUE_REFERENCES
+    template<typename T>
+    struct add_lref<T&&>
+    {
+        typedef T&& type;
+    };
+#   endif
+#endif
+
+    template<typename T>
+    struct add_lref<T&>
+    {
+        typedef T& type;
+    };
+}}}
+
+#endif
Modified: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/Jamfile
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/Jamfile	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/Jamfile	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
@@ -15,7 +15,6 @@
   : requirements
         <define>BOOST_FUSION_ENABLE_STATIC_ASSERTS
         <warnings>all
-        <toolset>gcc:<cxxflags>-Wno-long-long
   ;
     
 {
Modified: sandbox/SOC/2009/fusion/libs/fusion/example/extension/triple/Jamfile
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/example/extension/triple/Jamfile	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/triple/Jamfile	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
@@ -15,7 +15,6 @@
   : requirements
         <define>BOOST_FUSION_ENABLE_STATIC_ASSERTS
         <warnings>all
-        <toolset>gcc:<cxxflags>-Wno-long-long
   ;
     
 {
Modified: sandbox/SOC/2009/fusion/libs/fusion/example/extension/triple/triple.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/example/extension/triple/triple.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/triple/triple.cpp	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
@@ -16,7 +16,6 @@
 
 #include <boost/config.hpp>
 #include <boost/detail/lightweight_test.hpp>
-
 #include <boost/fusion/sequence.hpp>
 #include <boost/fusion/iterator.hpp>
 #include <boost/fusion/support.hpp>
@@ -25,6 +24,7 @@
 #include <boost/mpl/assert.hpp>
 #include <boost/type_traits/is_const.hpp>
 #include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_reference.hpp>
 #include <string>
 
 namespace mpl = boost::mpl;
@@ -41,9 +41,8 @@
     {
         typedef mpl::int_<N> index;
         typedef SeqRef seq_type;
-        //TODO
         typedef typename
-            fusion::detail::remove_reference<SeqRef>::type
+            boost::remove_reference<SeqRef>::type
         seq_nonref_type;
 
         triple_iterator(SeqRef seq)
@@ -167,8 +166,8 @@
         template<typename ItRef1, typename ItRef2>
         struct distance
           : mpl::minus<
-                typename fusion::detail::remove_reference<ItRef2>::type::index
-              , typename fusion::detail::remove_reference<ItRef1>::type::index
+                typename boost::remove_reference<ItRef2>::type::index
+              , typename boost::remove_reference<ItRef1>::type::index
             >
         {};
 
@@ -274,7 +273,7 @@
         template<typename SeqRef>
         struct at<SeqRef, mpl::int_<0> >
         {
-            typedef typename fusion::detail::remove_reference<SeqRef>::type seq;
+            typedef typename boost::remove_reference<SeqRef>::type seq;
 
             typedef typename
                 mpl::if_<boost::is_const<seq>, T0 const&, T0&>::type
@@ -290,7 +289,7 @@
         template<typename SeqRef>
         struct at<SeqRef, mpl::int_<1> >
         {
-            typedef typename fusion::detail::remove_reference<SeqRef>::type seq;
+            typedef typename boost::remove_reference<SeqRef>::type seq;
 
             typedef typename
                 mpl::if_<boost::is_const<seq>, T1 const&, T1&>::type
@@ -306,7 +305,7 @@
         template<typename SeqRef>
         struct at<SeqRef, mpl::int_<2> >
         {
-            typedef typename fusion::detail::remove_reference<SeqRef>::type seq;
+            typedef typename boost::remove_reference<SeqRef>::type seq;
 
             typedef typename
                 mpl::if_<boost::is_const<seq>, T2 const&, T2&>::type
Modified: sandbox/SOC/2009/fusion/libs/fusion/example/extension/vtuple/Jamfile
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/example/extension/vtuple/Jamfile	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/vtuple/Jamfile	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
@@ -13,7 +13,6 @@
   : requirements
         <define>BOOST_FUSION_ENABLE_STATIC_ASSERTS
         <warnings>all
-        <toolset>gcc:<cxxflags>-Wno-long-long
   ;
     
 {
Modified: sandbox/SOC/2009/fusion/libs/fusion/example/extension/vtuple/tuple142plus.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/example/extension/vtuple/tuple142plus.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/vtuple/tuple142plus.cpp	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
@@ -50,7 +50,7 @@
 #include <boost/type_traits/is_reference.hpp>
 #include <boost/type_traits/add_reference.hpp>
 #include <boost/type_traits/is_same.hpp>
-
+#include <boost/type_traits/remove_reference.hpp>
 
 #include <string>
 
@@ -102,7 +102,7 @@
         typedef mpl::int_<NN> index;
         typedef SeqRef sequence_type;
         typedef typename
-            fusion::detail::remove_reference<SeqRef>::type
+            boost::remove_reference<SeqRef>::type
         seq_nonref_type;
 
         vtuple_iterator(SeqRef seq)
@@ -134,7 +134,7 @@
         struct value_of<vtuple_iterator<SeqRef_, N> >
         {
             typedef typename
-            fusion::detail::remove_reference<SeqRef_>::type
+            boost::remove_reference<SeqRef_>::type
             seq_;
             BOOST_MPL_ASSERT_NOT((VARIADIC_TUPLE_INDEX_TOO_LARGE<seq_,N>));
             typedef typename std::tuple_element<N,
@@ -165,7 +165,7 @@
         struct deref<vtuple_iterator<SeqRef_, N> >
         {
             typedef typename
-            fusion::detail::remove_reference<SeqRef_>::type
+            boost::remove_reference<SeqRef_>::type
             seq_;
             BOOST_MPL_ASSERT_NOT((VARIADIC_TUPLE_INDEX_TOO_LARGE<seq_,N>));
             typedef typename std::tuple_element<N,typename seq_::base_type>::type typeN;
@@ -187,8 +187,8 @@
         template<typename ItRef1, typename ItRef2>
         struct distance
           : mpl::minus<
-                typename fusion::detail::remove_reference<ItRef2>::type::index
-              , typename fusion::detail::remove_reference<ItRef1>::type::index
+                typename boost::remove_reference<ItRef2>::type::index
+              , typename boost::remove_reference<ItRef1>::type::index
             >
         {};
 
@@ -355,7 +355,7 @@
         struct end
         {
            typedef typename
-            fusion::detail::remove_reference<Sq>::type
+            boost::remove_reference<Sq>::type
             seq;
             typedef variadic_tuple::vtuple_iterator<
                 Sq, 
@@ -374,7 +374,7 @@
         //    >
         {
             typedef typename
-            fusion::detail::remove_reference<Sq>::type
+            boost::remove_reference<Sq>::type
             seq;
             typedef typename mpl::int_<
           std::tuple_size<typename seq::base_type>::value>::type type;
@@ -388,7 +388,7 @@
         struct value_at<Sq, mpl::int_<N> >
         {
             typedef typename
-            fusion::detail::remove_reference<Sq>::type
+            boost::remove_reference<Sq>::type
             seq;
             BOOST_MPL_ASSERT_NOT((VARIADIC_TUPLE_INDEX_TOO_LARGE<seq,N>));
           typedef typename std::tuple_element<N,
@@ -405,7 +405,7 @@
         struct at<Sq, mpl::int_<N> >
         {
             typedef typename
-            fusion::detail::remove_reference<Sq>::type
+            boost::remove_reference<Sq>::type
             seq;
              BOOST_MPL_ASSERT_NOT((VARIADIC_TUPLE_INDEX_TOO_LARGE<seq,N>));
           typedef typename std::tuple_element<N,
Modified: sandbox/SOC/2009/fusion/libs/fusion/example/extension/vtuple/vtuple_.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/example/extension/vtuple/vtuple_.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/vtuple/vtuple_.cpp	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
@@ -29,6 +29,7 @@
 #   include <boost/type_traits/remove_reference.hpp>
 #   include <boost/type_traits/is_const.hpp>
 #   include <boost/type_traits/is_same.hpp>
+#   include <boost/type_traits/remove_reference.hpp>
 
 #   include <tuple>
 #   include <string>
@@ -327,7 +328,7 @@
         struct end
         {
            typedef typename
-            fusion::detail::remove_reference<Sq>::type
+            boost::remove_reference<Sq>::type
             seq;
             typedef variadic_tuple::vtuple_iterator<
                 Sq, 
Modified: sandbox/SOC/2009/fusion/libs/fusion/example/performance/Jamfile
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/example/performance/Jamfile	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/performance/Jamfile	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
@@ -12,7 +12,6 @@
   : requirements
         <define>BOOST_FUSION_ENABLE_STATIC_ASSERTS
         <warnings>all
-        <toolset>gcc:<cxxflags>-Wno-long-long
   ;
     
 {
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/Jamfile
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/Jamfile	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/Jamfile	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
@@ -1,6 +1,4 @@
 #==============================================================================
-#    Copyright (c) 2003-2006 Joel de Guzman
-#    Copyright (c) 2006 Dan Marsden
 #    Copyright (c) 2010 Christopher Schmidt
 #
 #   Use, modification and distribution is subject to the Boost Software
@@ -8,39 +6,142 @@
 #   http://www.boost.org/LICENSE_1_0.txt)
 #==============================================================================
 
-import notfile ;
+#cschmidt: This is one big, ugly hack!
+
+import targets ;
+import type ;
+import generators ;
+import feature ;
+import common ;
+
+variant minimal
+  : <optimization>off <inlining>off <debug-symbols>off <profiling>off
+  ;
 
 project
   : requirements
-        <define>BOOST_FUSION_ENABLE_STATIC_ASSERTS
+#        <define>BOOST_FUSION_ENABLE_STATIC_ASSERTS
+        <define>BOOST_FUSION_COMPILE_TIME_TEST_RES=35
         <warnings>all
-        <toolset>gcc:<cxxflags>-Wno-long-long
+        <variant>minimal
   ;
-        
+
+#Capturing compile time of an individual source file
+type.register TIMING : timing ;
+generators.register-standard make-timing : OBJ : TIMING ;
+
+feature.feature category : : free ;
+feature.feature desc : : free ;
+
 module timing-module
 {
-    rule timing-callback ( target-id * : target : start end user system )
+    import feature ;
+
+    rule timing-callback ( target : source-id : start end user system )
+    {
+        START on $(target) = $(start) ;
+        END on $(target) = $(end) ;
+    }
+    
+    rule make-timing ( target : source : properties + )
     {
-        echo $(target-id) ":" $(start) $(end) ;
+        CATEGORY on $(target) =
+            [ feature.get-values <category> : $(properties) ] ;
+        DESC on $(target) = [ feature.get-values <desc> : $(properties) ] ;
+
+        ALWAYS $(source) ;
+        __TIMING_RULE__ on $(source) = timing-callback $(target) ;
+        JAM_SEMAPHORE on $(source) = fusion-compile-time-test ;
+    }
+    
+    actions make-timing
+    {
+        echo $(START)> $(<)
+        echo $(END)>> $(<)
+        echo $(CATEGORY)>> $(<)
+        echo $(DESC)>> $(<)
     }
 }
-IMPORT timing-module : timing-callback : : timing-callback ;
+IMPORT timing-module
+  : timing-callback make-timing
+  :
+  : timing-callback make-timing
+  ;
 
-rule report-time ( target * : source * : properties * )
+rule capture-compile-time ( seed : category : desc : source : properties * )
 {
-    ALWAYS $(source) ;
-    __TIMING_RULE__ on $(source) = timing-callback $(target:G=) ;
-    JAM_SEMAPHORE on $(source) = fusion-compile-time-test ;
+    obj $(seed)-$(source:B)-obj : testcases/$(source).cpp : $(properties) ;
+    timing $(seed)-$(source:B)
+      : $(seed)-$(source:B)-obj
+      : <category>$(category) <desc>$(desc)
+      ;
+    return $(seed)-$(source:B) ;
 }
 
-obj fold : fold.cpp ;
-notfile fold.dummy : <action>blub @report-time test : fold ;
+#Composing individual timings to a single report
+type.register RESULT : result ;
+generators.register-composing make-result : EXE TIMING : RESULT ;
 
-#for local test-file in [ glob-tree *.cpp ]
-#{
-#    obj $(test-file:B) : $(test-file) ;
-#    notfile $(test-file).dummy : <action>blub @report-time test : $(test-file:B) ;
+module result-module
+{
+    import common ;
+    import feature ;
+    import path ;
+    import sequence ;
+    import os ;
 
-#    run $(test-file) :  :  :  : ;
-#}
+    rule make-result ( target : sources * : properties * )
+    {
+        local dll-paths = [ feature.get-values <xdll-path> : $(properties) ] ;
+        if $(dll-paths)
+        {
+            dll-paths = [ sequence.transform path.native : $(dll-paths) ] ;
+            PATH_SETUP on $(target) =
+            [
+                common.prepend-path-variable-command
+                    [ os.shared-library-path-variable ]
+                  : $(dll-paths)
+            ] ;
+        }
+    }
+    
+    actions make-result
+    {
+        $(PATH_SETUP)
+        echo ==========================
+        $(>)
+        echo ==========================
+        $(>) > $(<)
+    }
+}
+IMPORT result-module
+  : make-result
+  :
+  : make-result
+  ;
+
+#Plotter
+exe plotter
+  : plotter/main.cpp /boost/date_time//boost_date_time
+  ;
+JAM_SEMAPHORE on plotter = fusion-compile-time-test ;
+
+#Report
+result timings
+  : plotter
+        [
+            capture-compile-time type-traits
+              : "reference check"
+              : "using Boost.TypeTraits"
+              : reference
+              : <define>BOOST_FUSION_USE_TYPE_TRAITS
+        ]
+        [
+            capture-compile-time fusion
+              : "reference check"
+              : "using Fusion's internal reference metafunctions"
+              : reference
+              :
+        ]
+  ;
 
Deleted: sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/driver.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/driver.hpp	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
+++ (empty file)
@@ -1,75 +0,0 @@
-/*==============================================================================
-    Copyright (c) 2008 Dan Marsden
-  
-    Use modification and distribution are subject to the Boost Software 
-    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-    http://www.boost.org/LICENSE_1_0.txt).
-==============================================================================*/
-
-#if !defined(BOOST_FUSION_COMPILE_TIME_DRIVER)
-#define BOOST_FUSION_COMPILE_TIME_DRIVER
-
-int main()
-{
-  test<0>();
-  test<1>();
-  test<2>();
-  test<3>();
-  test<4>();
-
-  test<5>();
-  test<6>();
-  test<7>();
-  test<8>();
-  test<9>();
-
-  test<10>();
-  test<11>();
-  test<12>();
-  test<13>();
-  test<14>();
-
-  test<15>();
-  test<16>();
-  test<17>();
-  test<18>();
-  test<19>();
-
-  test<20>();
-  test<21>();
-  test<22>();
-  test<23>();
-  test<24>();
-
-  test<25>();
-  test<26>();
-  test<27>();
-  test<28>();
-  test<29>();
-
-  test<30>();
-  test<31>();
-  test<32>();
-  test<33>();
-  test<34>();
-
-  test<35>();
-  test<36>();
-  test<37>();
-  test<38>();
-  test<39>();
-
-  test<40>();
-  test<41>();
-  test<42>();
-  test<43>();
-  test<44>();
-
-  test<45>();
-  test<46>();
-  test<47>();
-  test<48>();
-  test<49>();
-}
-
-#endif
Deleted: sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/fold.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/fold.cpp	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
+++ (empty file)
@@ -1,42 +0,0 @@
-/*==============================================================================
-    Copyright (c) 2008 Dan Marsden
-  
-    Use modification and distribution are subject to the Boost Software 
-    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-    http://www.boost.org/LICENSE_1_0.txt).
-==============================================================================*/
-
-#include <boost/fusion/include/fold.hpp>
-#include <boost/fusion/include/vector.hpp>
-
-namespace fusion = boost::fusion;
-
-namespace
-{
-  template<int n, int batch>
-  struct distinct
-  {};
-
-  struct f
-  {
-    typedef int result_type;
-
-    template<int n, int batch>
-    int operator()(int state, distinct<n, batch> const& d) const
-    {
-      return state + n;
-    }
-  };
-
-  template<int batch>
-  void test()
-  {
-    fusion::vector<
-      distinct<0, batch>, distinct<1, batch>, distinct<2, batch>, distinct<3, batch>, distinct<4, batch>,
-      distinct<5, batch>, distinct<6, batch>, distinct<7, batch>, distinct<8, batch>, distinct<9, batch> > v;
-
-    fusion::fold(v, 0, f());
-  }
-}
-
-#include "driver.hpp"
Added: sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/plotter/main.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/plotter/main.cpp	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
@@ -0,0 +1,85 @@
+/*==============================================================================
+    Copyright (c) 2010 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#include <iostream>
+#include <fstream>
+#include <map>
+#include <string>
+
+#include <boost/date_time/posix_time/posix_time.hpp>
+#include <boost/date_time/time_facet.hpp>
+
+int
+main(int argc, char *argv[])
+{
+    if(argc<=1)
+    {
+        std::cout << "Pass at least one argument..." << std::endl;
+        return -1;
+    }
+
+    typedef
+        std::map<
+            std::string
+          , std::multimap<boost::posix_time::time_period, std::string>
+        >
+    timings_type;
+    timings_type timings;
+
+    for(int i=1;i!=argc;++i)
+    {
+
+        std::ifstream timing(argv[i]);
+        timing.imbue(std::locale(
+            timing.getloc(),
+            new boost::posix_time::time_input_facet("%Y-%m-%d %H:%M:%S")));
+
+        boost::posix_time::ptime start;
+        boost::posix_time::ptime end;
+
+        {
+            std::string line;
+
+            timing >> start;
+            std::getline(timing, line);
+
+            timing >> end;
+            std::getline(timing, line);
+        }
+
+        std::string category;
+        std::getline(timing, category);
+
+        std::string desc;
+        std::getline(timing, desc);
+        if(!timing)
+        {
+            std::cout << "Failed parsing " << argv[i] << std::endl;
+            return -1;
+        }
+
+        timings[category].insert(std::make_pair(
+            boost::posix_time::time_period(start, end),desc));
+    }
+
+    for(timings_type::const_iterator p=timings.begin();p!=timings.end();++p)
+    {
+        if(p!=timings.begin())
+        {
+            std::cout << std::endl;
+        }
+
+        std::cout << p->first << "..." << std::endl;
+        for(timings_type::mapped_type::const_iterator q=p->second.begin();
+            q!=p->second.end();
+            ++q)
+        {
+            std::cout << "\t" << q->first.length() <<
+                "  ..." << q->second << std::endl;
+        }
+    }
+}
Added: sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/testcases/detail/main.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/testcases/detail/main.hpp	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
@@ -0,0 +1,75 @@
+/*==============================================================================
+    Copyright (c) 2010 Christopher Schmidt
+
+    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)
+==============================================================================*/
+
+template<int X, int Y, int Z>
+struct frame_z
+{
+    static void
+    call()
+    {
+        test_impl<
+            X*BOOST_FUSION_COMPILE_TIME_TEST_RES*
+                BOOST_FUSION_COMPILE_TIME_TEST_RES+
+            Y*BOOST_FUSION_COMPILE_TIME_TEST_RES+
+            Z
+        >();
+    }
+};
+
+
+template<int X, int Y>
+struct frame_z<X, Y, BOOST_FUSION_COMPILE_TIME_TEST_RES>
+{
+    static void
+    call()
+    {}
+};
+
+template<int X, int Y>
+struct frame_y
+{
+    static void
+    call()
+    {
+        frame_z<X, Y, 0>::call();
+        frame_y<X, Y+1>::call();
+    }
+};
+
+template<int X>
+struct frame_y<X, BOOST_FUSION_COMPILE_TIME_TEST_RES>
+{
+    static void
+    call()
+    {}
+};
+
+template<int X>
+struct frame_x
+{
+    static void
+    call()
+    {
+        frame_y<X, 0>::call();
+        frame_x<X+1>::call();
+    }
+};
+
+template<>
+struct frame_x<BOOST_FUSION_COMPILE_TIME_TEST_RES>
+{
+    static void
+    call()
+    {}
+};
+
+int main()
+{
+    frame_x<0>::call();
+
+    return result;
+}
Added: sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/testcases/reference.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/testcases/reference.cpp	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
@@ -0,0 +1,80 @@
+/*==============================================================================
+    Copyright (c) 2010 Christopher Schmidt
+
+    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)
+==============================================================================*/
+
+#ifdef BOOST_FUSION_USE_TYPE_TRAITS
+#   include <boost/type_traits/add_reference.hpp>
+#   include <boost/type_traits/remove_reference.hpp>
+#   include <boost/type_traits/is_reference.hpp>
+
+#   define BOOST_FUSION_ADD_REFERENCE boost::add_reference
+#   define BOOST_FUSION_REMOVE_REFERENCE boost::remove_reference
+#   define BOOST_FUSION_IS_REFERENCE boost::is_reference
+#else
+#   include <boost/config.hpp>
+#   include <boost/fusion/support/internal/base/config.hpp>
+#   include <boost/fusion/support/internal/base/ref_impl.hpp>
+
+#   define BOOST_FUSION_ADD_REFERENCE boost::fusion::detail::add_lref
+#   define BOOST_FUSION_REMOVE_REFERENCE boost::fusion::detail::remove_reference
+#   define BOOST_FUSION_IS_REFERENCE boost::fusion::detail::is_lrref
+#endif
+
+int result=0;
+
+template<int>
+struct bar
+{};
+
+template<typename>
+struct foo
+{
+    static const int i=0;
+};
+
+template<int I>
+struct foo<bar<I> const>
+{
+    static const int i=1;
+};
+
+template<int I>
+void
+test_impl()
+{
+    result+=foo<typename BOOST_FUSION_ADD_REFERENCE<bar<I> >::type>::i;
+    result+=foo<typename BOOST_FUSION_ADD_REFERENCE<bar<I> const>::type>::i;
+    result+=foo<typename BOOST_FUSION_ADD_REFERENCE<bar<I>&>::type>::i;
+    result+=foo<typename BOOST_FUSION_ADD_REFERENCE<bar<I> const&>::type>::i;
+#ifndef BOOST_NO_RVALUE_REFERENCES
+    result+=foo<typename BOOST_FUSION_ADD_REFERENCE<bar<I>&&>::type>::i;
+    result+=foo<
+        typename BOOST_FUSION_ADD_REFERENCE<bar<I> const&&>::type
+    >::i;
+#endif
+
+    result+=foo<typename BOOST_FUSION_REMOVE_REFERENCE<bar<I> >::type>::i;
+    result+=foo<typename BOOST_FUSION_REMOVE_REFERENCE<bar<I> const>::type>::i;
+    result+=foo<typename BOOST_FUSION_REMOVE_REFERENCE<bar<I>&>::type>::i;
+    result+=foo<typename BOOST_FUSION_REMOVE_REFERENCE<bar<I> const&>::type>::i;
+#ifndef BOOST_NO_RVALUE_REFERENCES
+    result+=foo<typename BOOST_FUSION_REMOVE_REFERENCE<bar<I>&&>::type>::i;
+    result+=foo<
+        typename BOOST_FUSION_REMOVE_REFERENCE<bar<I> const&&>::type
+    >::i;
+#endif
+
+    result+=BOOST_FUSION_IS_REFERENCE<bar<I> >::type::value ? 1 : 0;
+    result+=BOOST_FUSION_IS_REFERENCE<bar<I> const>::type::value ? 1 : 0;
+    result+=BOOST_FUSION_IS_REFERENCE<bar<I>&>::type::value ? 1 : 0;
+    result+=BOOST_FUSION_IS_REFERENCE<bar<I> const&>::type::value ? 1 : 0;
+#ifndef BOOST_NO_RVALUE_REFERENCES
+    result+=BOOST_FUSION_IS_REFERENCE<bar<I>&&>::type::value ? 1 : 0;
+    result+=BOOST_FUSION_IS_REFERENCE<bar<I> const&&>::value ? 1 : 0;
+#endif
+}
+
+#include "detail/main.hpp"
Deleted: sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/transform.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/transform.cpp	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
+++ (empty file)
@@ -1,55 +0,0 @@
-/*==============================================================================
-    Copyright (c) 2008 Dan Marsden
-  
-    Use modification and distribution are subject to the Boost Software 
-    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-    http://www.boost.org/LICENSE_1_0.txt).
-==============================================================================*/
-
-#include <boost/fusion/include/transform.hpp>
-#include <boost/fusion/include/for_each.hpp>
-#include <boost/fusion/include/vector.hpp>
-
-namespace fusion = boost::fusion;
-
-namespace
-{
-  template<int n, int batch>
-  struct distinct
-  {
-    static const int value = n;
-  };
-
-  struct f
-  {
-    typedef int result_type;
-
-    template<typename T>
-    result_type operator()(T const& t) const
-    {
-      return T::value;
-    }
-  };
-
-  struct touch
-  {
-    template<typename T>
-    void operator()(T const&) const
-    {}
-  };
-
-  template<int batch>
-  void test()
-  {
-    fusion::vector<
-      distinct<0, batch>, distinct<1, batch>, distinct<2, batch>, distinct<3, batch>, distinct<4, batch>,
-      distinct<5, batch>, distinct<6, batch>, distinct<7, batch>, distinct<8, batch>, distinct<9, batch> > v;
-
-    // We're testing transform really
-    // for_each call is to force iteration through the lazy
-    // transform, otherwise very little will happen.
-    fusion::for_each(fusion::transform(v, f()), touch());
-  }
-}
-
-#include "driver.hpp"
Deleted: sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_construction.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_construction.cpp	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
+++ (empty file)
@@ -1,28 +0,0 @@
-/*==============================================================================
-    Copyright (c) 2008 Dan Marsden
-  
-    Use modification and distribution are subject to the Boost Software 
-    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-    http://www.boost.org/LICENSE_1_0.txt).
-==============================================================================*/
-
-#include <boost/fusion/include/vector.hpp>
-
-namespace fusion = boost::fusion;
-
-namespace
-{
-  template<int n, int batch>
-  struct distinct
-  {};
-
-  template<int batch>
-  void test()
-  {
-    fusion::vector<
-      distinct<0, batch>, distinct<1, batch>, distinct<2, batch>, distinct<3, batch>, distinct<4, batch>,
-      distinct<5, batch>, distinct<6, batch>, distinct<7, batch>, distinct<8, batch>, distinct<9, batch> > v;
-  }
-}
-
-#include "driver.hpp"
Deleted: sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_intrinsic.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_intrinsic.cpp	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
+++ (empty file)
@@ -1,59 +0,0 @@
-/*==============================================================================
-    Copyright (c) 2008 Dan Marsden
-  
-    Use modification and distribution are subject to the Boost Software 
-    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-    http://www.boost.org/LICENSE_1_0.txt).
-==============================================================================*/
-
-#include <boost/fusion/include/vector.hpp>
-#include <boost/fusion/include/intrinsic.hpp>
-
-namespace fusion = boost::fusion;
-
-namespace
-{
-  template<int n, int batch>
-  struct distinct
-  {};
-
-  template<int batch>
-  void test()
-  {
-    typedef fusion::vector<
-      distinct<0, batch>, distinct<1, batch>, distinct<2, batch>, distinct<3, batch>, distinct<4, batch>,
-      distinct<5, batch>, distinct<6, batch>, distinct<7, batch>, distinct<8, batch>, distinct<9, batch> > v_type;
-
-    v_type v;
-
-    fusion::at_c<0>(v);
-    fusion::at_c<1>(v);
-    fusion::at_c<2>(v);
-    fusion::at_c<3>(v);
-    fusion::at_c<4>(v);
-
-    fusion::at_c<5>(v);
-    fusion::at_c<6>(v);
-    fusion::at_c<7>(v);
-    fusion::at_c<8>(v);
-    fusion::at_c<9>(v);
-
-    typedef typename fusion::result_of::value_at_c<v_type, 0>::type va0;
-    typedef typename fusion::result_of::value_at_c<v_type, 1>::type va1;
-    typedef typename fusion::result_of::value_at_c<v_type, 2>::type va2;
-    typedef typename fusion::result_of::value_at_c<v_type, 3>::type va3;
-    typedef typename fusion::result_of::value_at_c<v_type, 4>::type va4;
-
-    typedef typename fusion::result_of::value_at_c<v_type, 5>::type va5;
-    typedef typename fusion::result_of::value_at_c<v_type, 6>::type va6;
-    typedef typename fusion::result_of::value_at_c<v_type, 7>::type va7;
-    typedef typename fusion::result_of::value_at_c<v_type, 8>::type va8;
-    typedef typename fusion::result_of::value_at_c<v_type, 9>::type va9;
-
-    fusion::begin(v);
-    fusion::end(v);
-    fusion::size(v);
-  }
-}
-
-#include "driver.hpp"
Deleted: sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_iteration.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_iteration.cpp	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
+++ (empty file)
@@ -1,38 +0,0 @@
-/*==============================================================================
-    Copyright (c) 2008 Dan Marsden
-  
-    Use modification and distribution are subject to the Boost Software 
-    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-    http://www.boost.org/LICENSE_1_0.txt).
-==============================================================================*/
-
-#include <boost/fusion/include/vector.hpp>
-#include <boost/fusion/include/for_each.hpp>
-
-namespace fusion = boost::fusion;
-
-namespace
-{
-  template<int n, int batch>
-  struct distinct
-  {};
-
-  struct null_op
-  {
-    template<typename T>
-    void operator()(T const& t) const
-    {}
-  };
-
-  template<int batch>
-  void test()
-  {
-    fusion::vector<
-      distinct<0, batch>, distinct<1, batch>, distinct<2, batch>, distinct<3, batch>, distinct<4, batch>,
-      distinct<5, batch>, distinct<6, batch>, distinct<7, batch>, distinct<8, batch>, distinct<9, batch> > v;
-
-    fusion::for_each(v, null_op());
-  }
-}
-
-#include "driver.hpp"
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/Jamfile
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/Jamfile	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/Jamfile	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
@@ -14,7 +14,6 @@
   : requirements
         <define>BOOST_FUSION_ENABLE_STATIC_ASSERTS
         <warnings>all
-        <toolset>gcc:<cxxflags>-Wno-long-long
   ;
     
 {
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/fold.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/fold.hpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/fold.hpp	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
@@ -33,6 +33,7 @@
 #include <boost/mpl/copy.hpp>
 #include <boost/type_traits/remove_reference.hpp>
 #include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_reference.hpp>
 #include <iostream>
 
 namespace mpl=boost::mpl;
@@ -68,8 +69,8 @@
           , int
         >
     {
-        BOOST_MPL_ASSERT((typename fusion::detail::is_lrref<State>::type));
-        BOOST_MPL_ASSERT((typename fusion::detail::is_lrref<T>::type));
+        BOOST_MPL_ASSERT((typename fusion::detail::is_reference<State>::type));
+        BOOST_MPL_ASSERT((typename fusion::detail::is_reference<T>::type));
     };
 
 #ifdef BOOST_FUSION_TEST_ITER_FOLD
@@ -100,8 +101,8 @@
     template<typename Self, typename State, typename T>
     struct result<Self(State,T)>
     {
-        BOOST_MPL_ASSERT((typename fusion::detail::is_lrref<State>::type));
-        BOOST_MPL_ASSERT((typename fusion::detail::is_lrref<T>::type));
+        BOOST_MPL_ASSERT((typename fusion::detail::is_reference<State>::type));
+        BOOST_MPL_ASSERT((typename fusion::detail::is_reference<T>::type));
 
         typedef typename boost::remove_reference<State>::type state;
         static const int n=mpl::front<state>::type::value;
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite2/Jamfile
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite2/Jamfile	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite2/Jamfile	2010-11-03 17:11:59 EDT (Wed, 03 Nov 2010)
@@ -14,7 +14,6 @@
         <define>BOOST_FUSION_TEST_MAX_N=20
         <define>BOOST_FUSION_ENABLE_STATIC_ASSERTS
         <warnings>all
-        <toolset>gcc:<cxxflags>-Wno-long-long
         <library>/boost/test//boost_unit_test_framework
         <link>static
   ;