$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r51593 - sandbox/reference_closure
From: dave_at_[hidden]
Date: 2009-03-03 21:41:23
Author: dave
Date: 2009-03-03 21:41:23 EST (Tue, 03 Mar 2009)
New Revision: 51593
URL: http://svn.boost.org/trac/boost/changeset/51593
Log:
* Removed unrealistic indirection from lambda case
* Changed benchmark.sh to print only test run timings, without compilation timings, for clarity
Text files modified: 
   sandbox/reference_closure/benchmark.sh        |    16 ++++++++++------                        
   sandbox/reference_closure/timings.txt         |    12 ++++++++++++                            
   sandbox/reference_closure/trivial_closure.h   |    20 +++++++++++++++++++-                    
   sandbox/reference_closure/trivial_initiator.h |    13 ++++++++++++-                           
   4 files changed, 53 insertions(+), 8 deletions(-)
Modified: sandbox/reference_closure/benchmark.sh
==============================================================================
--- sandbox/reference_closure/benchmark.sh	(original)
+++ sandbox/reference_closure/benchmark.sh	2009-03-03 21:41:23 EST (Tue, 03 Mar 2009)
@@ -1,13 +1,17 @@
-#!/bin/sh
+#!/bin/bash
+set -e
 CC=g++
 
 echo compile trivial_nested
-time $CC -O2 trivial_nested.cc -o trivial_nested
-echo execute trivial_nested
+$CC -O2 -DREFERENCE_CLOSURE trivial_nested.cc -o trivial_nested
+echo compile trivial_function
+$CC -O2 -DSTD_FUNCTION trivial_function.cc -o trivial_function
+
+echo
+echo -n execute trivial_nested
 time ./trivial_nested
 
-echo compile trivial_function
-time $CC -O2 trivial_function.cc -o trivial_function
-echo execute trivial_function
+echo
+echo -n execute trivial_function
 time ./trivial_function
 
Modified: sandbox/reference_closure/timings.txt
==============================================================================
--- sandbox/reference_closure/timings.txt	(original)
+++ sandbox/reference_closure/timings.txt	2009-03-03 21:41:23 EST (Tue, 03 Mar 2009)
@@ -10,3 +10,15 @@
 user	0m26.292s
 sys	0m0.056s
 
+=== Removed unrealistic indirection from lambda case ===
+
+execute trivial_nested
+real	0m1.179s
+user	0m1.166s
+sys	0m0.004s
+
+execute trivial_function
+real	0m27.693s
+user	0m27.443s
+sys	0m0.080s
+
Modified: sandbox/reference_closure/trivial_closure.h
==============================================================================
--- sandbox/reference_closure/trivial_closure.h	(original)
+++ sandbox/reference_closure/trivial_closure.h	2009-03-03 21:41:23 EST (Tue, 03 Mar 2009)
@@ -1,7 +1,25 @@
 struct frame { };
-void nested( frame* ) { }
+
+inline void work( frame* )
+{
+}
+
+#if REFERENCE_CLOSURE
+
+void nested( frame* f ) { work(f); }
+
 struct closure {
     void (*func)( frame* );
     frame* scope;
     void operator()() { func( scope ); }
 };
+
+#elif STD_FUNCTION
+
+struct lambda
+{
+  frame* scope;
+  void operator()() { work( scope ); }
+};
+
+#endif
Modified: sandbox/reference_closure/trivial_initiator.h
==============================================================================
--- sandbox/reference_closure/trivial_initiator.h	(original)
+++ sandbox/reference_closure/trivial_initiator.h	2009-03-03 21:41:23 EST (Tue, 03 Mar 2009)
@@ -1,5 +1,16 @@
 void initiator() {
-    frame mine; closure child;
+    frame mine;
+
+#if REFERENCE_CLOSURE
+    
+    closure child;
     child.func = nested; child.scope = &mine;
+    
+#elif STD_FUNCTION
+
+    lambda child;
+    child.scope = &mine;
+    
+#endif 
     passer( child );
 }