Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r82066 - sandbox/static_vector/boost/container
From: athundt_at_[hidden]
Date: 2012-12-18 01:19:27


Author: ahundt
Date: 2012-12-18 01:19:26 EST (Tue, 18 Dec 2012)
New Revision: 82066
URL: http://svn.boost.org/trac/boost/changeset/82066

Log:
updated address access to use boost::addressof(), simplified swap to use insert(), simplified implementation of insert
Text files modified:
   sandbox/static_vector/boost/container/static_vector.hpp | 33 +++++++++++++--------------------
   1 files changed, 13 insertions(+), 20 deletions(-)

Modified: sandbox/static_vector/boost/container/static_vector.hpp
==============================================================================
--- sandbox/static_vector/boost/container/static_vector.hpp (original)
+++ sandbox/static_vector/boost/container/static_vector.hpp 2012-12-18 01:19:26 EST (Tue, 18 Dec 2012)
@@ -31,6 +31,8 @@
 #include <boost/type_traits/has_trivial_constructor.hpp>
 #include <boost/type_traits/has_trivial_destructor.hpp>
 
+#include <boost/utility/addressof.hpp>
+
 namespace boost { namespace container {
 
 // Forward declaration
@@ -255,20 +257,18 @@
         {
             for (; it != this->end() ; ++it, ++other_it)
                 boost::swap(*it, *other_it); // may throw
- iterator other_it_backup = other_it;
- for (; other_it != other.end() ; ++other_it)
- this->push_back(*other_it); // may throw
+ this->insert(it,other_it,other->end()); // may throw
             other.erase(other_it_backup, other.end());
         }
         else
         {
             for (; other_it != other.end() ; ++it, ++other_it)
                 boost::swap(*it, *other_it); // may throw
- iterator it_backup = it;
- for (; it != this->end() ; ++it)
- other.push_back(*it); // may throw
- this->erase(it_backup, this->end());
- }
+ other->insert(other_it,it,this->end()); // may throw
+ this->erase(it, this->end());
+ }
+
+ boost::swap(m_size, other.m_size);
     }
 
     // strong
@@ -337,17 +337,12 @@
         errh::check_iterator_end_eq(*this, position);
         errh::check_capacity(*this, m_size + 1); // may throw
 
- if ( position == this->end() )
- {
- this->uninitialized_fill(position, value); // may throw
- ++m_size; // update end
- }
- else
+ this->uninitialized_fill(this->end(), *(this->end() - 1)); // may throw
+ ++m_size; // update end
+ if ( position != this->end() )
         {
             // TODO - should following lines check for exception and revert to the old size?
 
- this->uninitialized_fill(this->end(), *(this->end() - 1)); // may throw
- ++m_size; // update end
             this->move_backward(position, this->end() - 2, this->end() - 1); // may throw
             this->fill(position, value); // may throw
         }
@@ -772,9 +767,7 @@
     void uninitialized_fill_dispatch(value_type * ptr, value_type const& v,
                                      boost::mpl::bool_<true> const& /*use_memcpy*/)
     {
- // TODO - check if value_type has operator& defined and call this version only if it hasn't
- const value_type * vptr = &v;
- ::memcpy(ptr, vptr, sizeof(value_type));
+ ::memcpy(ptr, boost::addressof(v), sizeof(value_type));
     }
 
     template <typename V>
@@ -918,8 +911,8 @@
         return (reinterpret_cast<const Value*>(m_storage.address()));
     }
 
- aligned_storage_type m_storage;
     StoredSizeType m_size;
+ aligned_storage_type m_storage;
 };
 
 #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)


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