$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r54463 - sandbox/monotonic/boost/heterogenous
From: christian.schladetsch_at_[hidden]
Date: 2009-06-28 05:50:13
Author: cschladetsch
Date: 2009-06-28 05:50:12 EDT (Sun, 28 Jun 2009)
New Revision: 54463
URL: http://svn.boost.org/trac/boost/changeset/54463
Log:
temp hax for alignment
Text files modified: 
   sandbox/monotonic/boost/heterogenous/make_clone_allocator.hpp |    25 +++++++++++++++----------               
   1 files changed, 15 insertions(+), 10 deletions(-)
Modified: sandbox/monotonic/boost/heterogenous/make_clone_allocator.hpp
==============================================================================
--- sandbox/monotonic/boost/heterogenous/make_clone_allocator.hpp	(original)
+++ sandbox/monotonic/boost/heterogenous/make_clone_allocator.hpp	2009-06-28 05:50:12 EDT (Sun, 28 Jun 2009)
@@ -24,24 +24,29 @@
                                 clone_allocator() { }
                                 clone_allocator(Alloc &a) : Alloc(a) { }
 
+				struct header
+				{
+					header *allocated_ptr;
+					size_t num_bytes;
+				};
+
                                 abstract_allocator::pointer allocate_bytes(size_t num_bytes, size_t alignment)
                                 {
                                         CharAlloc alloc(*this);
-					size_t required = num_bytes;
-					if (num_bytes < alignment)
-						required = alignment;
-					else
-						required = num_bytes + alignment;	// TODO: don't really need this much
-					abstract_allocator::pointer ptr = alloc.allocate(required);
-					size_t extra = calc_padding(ptr, alignment);
-					return ptr + extra;
+					header head;
+					head.num_bytes = sizeof(header) + num_bytes + alignment;	// don't need this much, but will do for now
+					head.allocated_ptr = (header *)alloc.allocate(head.num_bytes);
+					*head.allocated_ptr = head;
+					pointer base = head.allocated_ptr + sizeof(header);
+					base += calc_padding(base, alignment);
+					return base;
                                 }
 
                                 void deallocate_bytes(abstract_allocator::pointer ptr, size_t alignment)
                                 {
                                         CharAlloc alloc(*this);
-					size_t extra = calc_padding(ptr, alignment);
-					alloc.deallocate(ptr - extra, 1);
+					header *head = ptr - sizeof(head);
+					alloc.deallocate(head->allocated_ptr, head->num_bytes);
                                 }
 
                         };