$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r84900 - trunk/boost/container/detail
From: igaztanaga_at_[hidden]
Date: 2013-06-24 15:10:07
Author: igaztanaga
Date: 2013-06-24 15:10:07 EDT (Mon, 24 Jun 2013)
New Revision: 84900
URL: http://svn.boost.org/trac/boost/changeset/84900
Log:
Trivial fix for empty ranges in node_alloc_holder
Text files modified: 
   trunk/boost/container/detail/node_alloc_holder.hpp |    82 ++++++++++++++++++++------------------- 
   1 files changed, 42 insertions(+), 40 deletions(-)
Modified: trunk/boost/container/detail/node_alloc_holder.hpp
==============================================================================
--- trunk/boost/container/detail/node_alloc_holder.hpp	Mon Jun 24 08:25:33 2013	(r84899)
+++ trunk/boost/container/detail/node_alloc_holder.hpp	2013-06-24 15:10:07 EDT (Mon, 24 Jun 2013)	(r84900)
@@ -229,48 +229,50 @@
    void allocate_many_and_construct
       (FwdIterator beg, difference_type n, Inserter inserter)
    {
-      /*
-      NodePtr p = this->allocate_one();
-      Deallocator node_deallocator(p, this->node_alloc());
-      ::boost::container::construct_in_place(this->node_alloc(), container_detail::addressof(p->m_data), it);
-      node_deallocator.release();
-      //This does not throw
-      typedef typename Node::hook_type hook_type;
-      ::new(static_cast<hook_type*>(container_detail::to_raw_pointer(p))) hook_type;
-      return (p);
-      */
-      typedef typename NodeAlloc::multiallocation_chain multiallocation_chain;
-
-      //Try to allocate memory in a single block
-      typedef typename multiallocation_chain::iterator multialloc_iterator;
-      multiallocation_chain mem;
-      this->node_alloc().allocate_individual(n, mem);
-      multialloc_iterator itbeg(mem.begin()), itlast(mem.last());
-      mem.clear();
-      Node *p = 0;
-      NodeAlloc &nalloc = this->node_alloc();
-      BOOST_TRY{
-         while(n--){
-            p = container_detail::to_raw_pointer(&*itbeg);
-            ++itbeg;
-            //This can throw
-            Deallocator node_deallocator(p, nalloc);
-            boost::container::construct_in_place(nalloc, container_detail::addressof(p->m_data), beg);
-            ++beg;
-            node_deallocator.release();
-            //This does not throw
-            typedef typename Node::hook_type hook_type;
-            ::new(static_cast<hook_type*>(p)) hook_type;
-            //This can throw in some containers (predicate might throw)
-            inserter(*p);
+      if(n){
+         /*
+         NodePtr p = this->allocate_one();
+         Deallocator node_deallocator(p, this->node_alloc());
+         ::boost::container::construct_in_place(this->node_alloc(), container_detail::addressof(p->m_data), it);
+         node_deallocator.release();
+         //This does not throw
+         typedef typename Node::hook_type hook_type;
+         ::new(static_cast<hook_type*>(container_detail::to_raw_pointer(p))) hook_type;
+         return (p);
+         */
+         typedef typename NodeAlloc::multiallocation_chain multiallocation_chain;
+
+         //Try to allocate memory in a single block
+         typedef typename multiallocation_chain::iterator multialloc_iterator;
+         multiallocation_chain mem;
+         this->node_alloc().allocate_individual(n, mem);
+         multialloc_iterator itbeg(mem.begin()), itlast(mem.last());
+         mem.clear();
+         Node *p = 0;
+         NodeAlloc &nalloc = this->node_alloc();
+         BOOST_TRY{
+            while(n--){
+               p = container_detail::to_raw_pointer(&*itbeg);
+               ++itbeg;
+               //This can throw
+               Deallocator node_deallocator(p, nalloc);
+               boost::container::construct_in_place(nalloc, container_detail::addressof(p->m_data), beg);
+               ++beg;
+               node_deallocator.release();
+               //This does not throw
+               typedef typename Node::hook_type hook_type;
+               ::new(static_cast<hook_type*>(p)) hook_type;
+               //This can throw in some containers (predicate might throw)
+               inserter(*p);
+            }
          }
+         BOOST_CATCH(...){
+            mem.incorporate_after(mem.last(), &*itbeg, &*itlast, n);
+            this->node_alloc().deallocate_individual(mem);
+            BOOST_RETHROW
+         }
+         BOOST_CATCH_END
       }
-      BOOST_CATCH(...){
-         mem.incorporate_after(mem.last(), &*itbeg, &*itlast, n);
-         this->node_alloc().deallocate_individual(mem);
-         BOOST_RETHROW
-      }
-      BOOST_CATCH_END
    }
 
    void clear(allocator_v1)