Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r65580 - in sandbox/variadic_templates/boost/composite_storage: buffers layout pack
From: cppljevans_at_[hidden]
Date: 2010-09-24 14:47:38


Author: cppljevans
Date: 2010-09-24 14:47:37 EDT (Fri, 24 Sep 2010)
New Revision: 65580
URL: http://svn.boost.org/trac/boost/changeset/65580

Log:
use layout_buf with all_of container to do empty member space optimization.
Text files modified:
   sandbox/variadic_templates/boost/composite_storage/buffers/char_buf.hpp | 73 ++++++++++++++++++++++++++-------------
   sandbox/variadic_templates/boost/composite_storage/layout/layout_of.hpp | 25 +------------
   sandbox/variadic_templates/boost/composite_storage/pack/container_all_of_aligned.hpp | 46 ++++++++++--------------
   3 files changed, 70 insertions(+), 74 deletions(-)

Modified: sandbox/variadic_templates/boost/composite_storage/buffers/char_buf.hpp
==============================================================================
--- sandbox/variadic_templates/boost/composite_storage/buffers/char_buf.hpp (original)
+++ sandbox/variadic_templates/boost/composite_storage/buffers/char_buf.hpp 2010-09-24 14:47:37 EDT (Fri, 24 Sep 2010)
@@ -18,19 +18,22 @@
 namespace buffers
 {
 
-enum is_aligned
-{ yes_aligned
-, not_aligned
-};
-
   template
   < std::size_t Size
- , std::size_t Align
- , is_aligned IsAligned=yes_aligned
+ , std::size_t Align=1
>
   struct
 char_buf
-{
+;
+ template
+ < std::size_t Align
+ >
+ struct
+char_buf
+ < 0
+ , Align
+ >
+{
     char_buf( void)
     {}
     char_buf( char_buf const&)
@@ -41,35 +44,23 @@
       char const*
     address(void)const
     {
- void const*p=buffer.address();
- return static_cast<char const*>(p);
+ return reinterpret_cast<char const*>(this);
     }
       char*
     address(void)
     {
- void*p=buffer.address();
- return static_cast<char*>(p);
+ return reinterpret_cast<char*>(this);
     }
- private:
- ::boost::aligned_storage
- < Size?Size:1
- , Align
- >
- buffer
- ;
 };
-
   template
   < std::size_t Size
- , std::size_t Align //only used by specialization of layout::alignment_of
>
   struct
 char_buf
   < Size
- , Align
- , not_aligned
+ , 0
>
-{
+{
     char_buf( void)
     {}
     char_buf( char_buf const&)
@@ -91,6 +82,40 @@
     char buffer[Size]
     ;
 };
+ template
+ < std::size_t Size
+ , std::size_t Align
+ >
+ struct
+char_buf
+{
+ char_buf( void)
+ {}
+ char_buf( char_buf const&)
+ {}
+ void
+ operator=( char_buf const&)
+ {}
+ char const*
+ address(void)const
+ {
+ void const*p=buffer.address();
+ return static_cast<char const*>(p);
+ }
+ char*
+ address(void)
+ {
+ void*p=buffer.address();
+ return static_cast<char*>(p);
+ }
+ private:
+ ::boost::aligned_storage
+ < Size
+ , Align
+ >
+ buffer
+ ;
+};
 
 }//exit buffers namespace
 

Modified: sandbox/variadic_templates/boost/composite_storage/layout/layout_of.hpp
==============================================================================
--- sandbox/variadic_templates/boost/composite_storage/layout/layout_of.hpp (original)
+++ sandbox/variadic_templates/boost/composite_storage/layout/layout_of.hpp 2010-09-24 14:47:37 EDT (Fri, 24 Sep 2010)
@@ -8,10 +8,11 @@
 // This software is provided "as is" without express or implied
 // warranty, and with no claim as to its suitability for any purpose.
 //
-#include <boost/composite_storage/buffers/char_buf.hpp>
+//#include <boost/composite_storage/buffers/char_buf.hpp>
 #include <boost/mpl/integral_c.hpp>
 #include <boost/mpl/if.hpp>
 #include <boost/type_traits/is_empty.hpp>
+#include <boost/type_traits/alignment_of.hpp>
 
 namespace boost
 {
@@ -39,21 +40,6 @@
 : public ::boost::alignment_of<T>
 {
 };
- template
- < std::size_t Size
- , std::size_t Align
- , buffers::is_aligned IsAligned
- >
-struct alignment_of
- < buffers::char_buf<Size,Align,IsAligned>
- >
-{
- static
- std::size_t const
- value
- =Align
- ;
-};
 
   template
   < typename T
@@ -66,13 +52,6 @@
   , mpl::integral_c<std::size_t,sizeof(T)>
>::type
 {
- #if 0
- static
- std::size_t const
- value
- =sizeof(T)
- ;
- #endif
 };
 
 struct components_aligned_yes

Modified: sandbox/variadic_templates/boost/composite_storage/pack/container_all_of_aligned.hpp
==============================================================================
--- sandbox/variadic_templates/boost/composite_storage/pack/container_all_of_aligned.hpp (original)
+++ sandbox/variadic_templates/boost/composite_storage/pack/container_all_of_aligned.hpp 2010-09-24 14:47:37 EDT (Fri, 24 Sep 2010)
@@ -13,6 +13,7 @@
 #include <boost/mpl/arg.hpp>
 #include <boost/composite_storage/pack/container_fwd.hpp>
 #include <boost/composite_storage/methods/all_of.hpp>
+#include <boost/composite_storage/buffers/layout_buf.hpp>
 
 namespace boost
 {
@@ -30,10 +31,12 @@
   , Index0
   , Components...
>
-: layout_composite
- < tags::all_of_aligned
- , Index0
- , Components...
+: buffers::layout_buf
+ < layout_composite
+ < tags::all_of_aligned
+ , Index0
+ , Components...
+ >
>
 {
         typedef
@@ -64,27 +67,16 @@
       methods::all_of<scanned,Index0>
     methods_all
     ;
- private:
- typedef
- buffers::char_buf
- < scanned::comp_part::size
- , scanned::comp_part::align
- >
- buffer_type
- ;
- buffer_type
- buffer
- ;
  public:
     container(void)
     {
- char*to_buf=buffer.address();
+ char*to_buf=this->address();
         methods_all::ctor_default_all(to_buf);
     }
     container( container& from)
     {
- char *to_buf=buffer.address();
- char const*fr_buf=from.buffer.address();
+ char *to_buf=this->address();
+ char const*fr_buf=from.address();
           methods_all::
         ctor_copy_all
         ( to_buf
@@ -93,8 +85,8 @@
     }
     container( container&& from)
     {
- char *to_buf=buffer.address();
- char *fr_buf=from.buffer.address();
+ char *to_buf=this->address();
+ char *fr_buf=from.address();
           methods_all::
         ctor_copy_all
         ( to_buf
@@ -104,8 +96,8 @@
       container const&
     operator=(container const& from)
     {
- char *to_buf=buffer.address();
- char const*fr_buf=from.buffer.address();
+ char *to_buf=this->address();
+ char const*fr_buf=from.address();
           methods_all::
         assign_all
         ( to_buf
@@ -116,8 +108,8 @@
       container const&
     operator=(container&& from)
     {
- char *to_buf=buffer.address();
- buffers::rval_ref_buf fr_buf(from.buffer.address());
+ char *to_buf=this->address();
+ buffers::rval_ref_buf fr_buf(from.address());
           methods_all::
         assign_all
         ( to_buf
@@ -127,7 +119,7 @@
     }
     ~container(void)
     {
- scanned::destroy( buffer.address());
+ scanned::destroy( this->address());
     }
  
       template
@@ -147,7 +139,7 @@
     project(void)const
     {
         mpl::integral_c<index_base,IndexValu> index;
- return scanned::project(index,buffer.address());
+ return scanned::project(index,this->address());
     }
       template
       < index_type IndexValu
@@ -156,7 +148,7 @@
     project(void)
     {
         mpl::integral_c<index_base,IndexValu> index;
- return scanned::project(index,buffer.address());
+ return scanned::project(index,this->address());
     }
 };
 


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