$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: jano_gaspar_at_[hidden]
Date: 2008-08-18 04:54:07
Author: jano_gaspar
Date: 2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
New Revision: 48190
URL: http://svn.boost.org/trac/boost/changeset/48190
Log:
circular_buffer: major update for Boost 1.37
Removed:
   branches/release/libs/circular_buffer/doc/valid-html40.png
Text files modified: 
   branches/release/boost/circular_buffer.hpp                                |    12                                         
   branches/release/boost/circular_buffer/base.hpp                           |   127 +++++-                                  
   branches/release/boost/circular_buffer/debug.hpp                          |     2                                         
   branches/release/boost/circular_buffer/details.hpp                        |    68 ---                                     
   branches/release/boost/circular_buffer/space_optimized.hpp                |    13                                         
   branches/release/boost/circular_buffer_fwd.hpp                            |     2                                         
   branches/release/libs/circular_buffer/doc/Doxyfile                        |     2                                         
   branches/release/libs/circular_buffer/doc/HOWTO-srcdoc                    |     2                                         
   branches/release/libs/circular_buffer/doc/Tidy.conf                       |     2                                         
   branches/release/libs/circular_buffer/doc/circular_buffer.html            |   744 +++++++++++++++++++++++++++++---------- 
   branches/release/libs/circular_buffer/doc/circular_buffer.xslt            |     2                                         
   branches/release/libs/circular_buffer/doc/copy.xslt                       |     2                                         
   branches/release/libs/circular_buffer/doc/doxygen2html.xslt               |     2                                         
   branches/release/libs/circular_buffer/doc/html2xhtml.xslt                 |     2                                         
   branches/release/libs/circular_buffer/doc/space_optimized.html            |   288 ++++++++------                          
   branches/release/libs/circular_buffer/doc/space_optimized.xslt            |     2                                         
   branches/release/libs/circular_buffer/doc/update_srcdoc.sh                |     2                                         
   branches/release/libs/circular_buffer/doc/update_srcdoc.xslt              |     2                                         
   branches/release/libs/circular_buffer/index.html                          |     2                                         
   branches/release/libs/circular_buffer/test/Jamfile.v2                     |     2                                         
   branches/release/libs/circular_buffer/test/base_test.cpp                  |    60 +++                                     
   branches/release/libs/circular_buffer/test/bounded_buffer_comparison.cpp  |     2                                         
   branches/release/libs/circular_buffer/test/common.ipp                     |   176 +++++++++                               
   branches/release/libs/circular_buffer/test/soft_iterator_invalidation.cpp |     2                                         
   branches/release/libs/circular_buffer/test/space_optimized_test.cpp       |    21                                         
   branches/release/libs/circular_buffer/test/test.hpp                       |     2                                         
   26 files changed, 1094 insertions(+), 449 deletions(-)
Modified: branches/release/boost/circular_buffer.hpp
==============================================================================
--- branches/release/boost/circular_buffer.hpp	(original)
+++ branches/release/boost/circular_buffer.hpp	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -1,6 +1,6 @@
 // Circular buffer library header file.
 
-// Copyright (c) 2003-2007 Jan Gaspar
+// Copyright (c) 2003-2008 Jan Gaspar
 
 // Use, modification, and distribution is subject to the Boost Software
 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -15,7 +15,7 @@
     #pragma once
 #endif
 
-#include "circular_buffer_fwd.hpp"
+#include <boost/circular_buffer_fwd.hpp>
 #include <boost/detail/workaround.hpp>
 
 // BOOST_CB_ENABLE_DEBUG: Debug support control.
@@ -60,10 +60,10 @@
     #define BOOST_CB_ASSERT_TEMPLATED_ITERATOR_CONSTRUCTORS ((void)0);
 #endif
 
-#include "circular_buffer/debug.hpp"
-#include "circular_buffer/details.hpp"
-#include "circular_buffer/base.hpp"
-#include "circular_buffer/space_optimized.hpp"
+#include <boost/circular_buffer/debug.hpp>
+#include <boost/circular_buffer/details.hpp>
+#include <boost/circular_buffer/base.hpp>
+#include <boost/circular_buffer/space_optimized.hpp>
 
 #undef BOOST_CB_ASSERT_TEMPLATED_ITERATOR_CONSTRUCTORS
 #undef BOOST_CB_IS_CONVERTIBLE
Modified: branches/release/boost/circular_buffer/base.hpp
==============================================================================
--- branches/release/boost/circular_buffer/base.hpp	(original)
+++ branches/release/boost/circular_buffer/base.hpp	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -1,6 +1,6 @@
 // Implementation of the base circular buffer.
 
-// Copyright (c) 2003-2007 Jan Gaspar
+// Copyright (c) 2003-2008 Jan Gaspar
 
 // Use, modification, and distribution is subject to the Boost Software
 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -619,7 +619,7 @@
         \warning In general invoking any method which modifies the internal state of the <code>circular_buffer</code>
                  may delinearize the internal buffer and invalidate the returned pointer.
         \sa <code>array_one()</code> and <code>array_two()</code> for the other option how to pass data into a legacy
-            C API.
+            C API; <code>is_linearized()</code>, <code>rotate(const_iterator)</code>
     */
     pointer linearize() {
         if (empty())
@@ -667,6 +667,73 @@
         return m_buff;
     }
 
+    //! Is the <code>circular_buffer</code> linearized?
+    /*!
+        \return <code>true</code> if the internal buffer is linearized into a continuous array (i.e. the
+                <code>circular_buffer</code> meets a condition
+                <code>\&(*this)[0] \< \&(*this)[1] \< ... \< \&(*this)[size() - 1]</code>);
+                <code>false</code> otherwise.
+        \throws Nothing.
+        \par Exception Safety
+             No-throw.
+        \par Iterator Invalidation
+             Does not invalidate any iterators.
+        \par Complexity
+             Constant (in the size of the <code>circular_buffer</code>).
+        \sa <code>linearize()</code>, <code>array_one()</code>, <code>array_two()</code>
+    */
+    bool is_linearized() const { return m_first < m_last || m_last == m_buff; }
+
+    //! Rotate elements in the <code>circular_buffer</code>.
+    /*!
+        A more effective implementation of
+        <code>std::rotate</code>.
+        \pre <code>new_begin</code> is a valid iterator pointing to the <code>circular_buffer</code> <b>except</b> its
+             end.
+        \post Before calling the method suppose:<br><br>
+              <code>m == std::distance(new_begin, end())</code><br><code>n == std::distance(begin(), new_begin)</code>
+              <br><code>val_0 == *new_begin, val_1 == *(new_begin + 1), ... val_m == *(new_begin + m)</code><br>
+              <code>val_r1 == *(new_begin - 1), val_r2 == *(new_begin - 2), ... val_rn == *(new_begin - n)</code><br>
+              <br>then after call to the method:<br><br>
+              <code>val_0 == (*this)[0] \&\& val_1 == (*this)[1] \&\& ... \&\& val_m == (*this)[m - 1] \&\& val_r1 ==
+              (*this)[m + n - 1] \&\& val_r2 == (*this)[m + n - 2] \&\& ... \&\& val_rn == (*this)[m]</code>
+        \param new_begin The new beginning.
+        \throws Whatever <code>T::T(const T&)</code> throws.
+        \throws Whatever <code>T::operator = (const T&)</code> throws.
+        \par Exception Safety
+             Basic; no-throw if the <code>circular_buffer</code> is full or <code>new_begin</code> points to
+             <code>begin()</code> or if the operations in the <i>Throws</i> section do not throw anything.
+        \par Iterator Invalidation
+             If <code>m \< n</code> invalidates iterators pointing to the last <code>m</code> elements
+             (<b>including</b> <code>new_begin</code>, but not iterators equal to <code>end()</code>) else invalidates
+             iterators pointing to the first <code>n</code> elements; does not invalidate any iterators if the
+             <code>circular_buffer</code> is full.
+        \par Complexity
+             Linear (in <code>std::min(m, n)</code>); constant if the <code>circular_buffer</code> is full.
+        \sa <code>std::rotate</code>
+    */
+    void rotate(const_iterator new_begin) {
+        BOOST_CB_ASSERT(new_begin.is_valid(this)); // check for uninitialized or invalidated iterator
+        BOOST_CB_ASSERT(new_begin.m_it != 0);      // check for iterator pointing to end()
+        if (full()) {
+            m_first = m_last = const_cast<pointer>(new_begin.m_it);
+        } else {
+            difference_type m = end() - new_begin;
+            difference_type n = new_begin - begin();
+            if (m < n) {
+                for (; m > 0; --m) {
+                    push_front(back());
+                    pop_back();
+                }
+            } else {
+                for (; n > 0; --n) {
+                    push_back(front());
+                    pop_front();
+                }
+            }
+        }
+    }
+
 // Size and capacity
 
     //! Get the number of elements currently stored in the <code>circular_buffer</code>.
@@ -921,6 +988,10 @@
                  <code>\link push_back() push_back(const_reference)\endlink</code> or
                  <code>\link insert(iterator, param_value_type) insert(iterator, value_type)\endlink</code>) nothing
                  will be inserted and the size (as well as capacity) remains zero.
+        \note You can explicitly set the capacity by calling the <code>set_capacity(capacity_type)</code> method or you
+              can use the other constructor with the capacity specified.
+        \sa <code>circular_buffer(capacity_type, const allocator_type& alloc)</code>,
+            <code>set_capacity(capacity_type)</code>
     */
     explicit circular_buffer(const allocator_type& alloc = allocator_type())
     : m_buff(0), m_end(0), m_first(0), m_last(0), m_size(0), m_alloc(alloc) {}
@@ -937,7 +1008,8 @@
     */
     explicit circular_buffer(capacity_type capacity, const allocator_type& alloc = allocator_type())
     : m_size(0), m_alloc(alloc) {
-        initialize(capacity);
+        initialize_buffer(capacity);
+        m_first = m_last = m_buff;
     }
 
     /*! \brief Create a full <code>circular_buffer</code> with the specified capacity and filled with <code>n</code>
@@ -955,7 +1027,8 @@
     */
     circular_buffer(size_type n, param_value_type item, const allocator_type& alloc = allocator_type())
     : m_size(n), m_alloc(alloc) {
-        initialize(n, item);
+        initialize_buffer(n, item);
+        m_first = m_last = m_buff;
     }
 
     /*! \brief Create a <code>circular_buffer</code> with the specified capacity and filled with <code>n</code>
@@ -977,7 +1050,9 @@
         const allocator_type& alloc = allocator_type())
     : m_size(n), m_alloc(alloc) {
         BOOST_CB_ASSERT(capacity >= size()); // check for capacity lower than size
-        initialize(capacity, item);
+        initialize_buffer(capacity, item);
+        m_first = m_buff;
+        m_last = capacity == n ? m_buff : m_buff + n;
     }
 
     //! The copy constructor.
@@ -993,14 +1068,17 @@
     */
     circular_buffer(const circular_buffer<T, Alloc>& cb)
     : m_size(cb.size()), m_alloc(cb.get_allocator()) {
-        m_first = m_last = m_buff = allocate(cb.capacity());
+        initialize_buffer(cb.capacity());
+        m_first = m_buff;
         BOOST_TRY {
-            m_end = cb_details::uninitialized_copy_with_alloc(cb.begin(), cb.end(), m_buff, m_alloc);
+            m_last = cb_details::uninitialized_copy_with_alloc(cb.begin(), cb.end(), m_buff, m_alloc);
         } BOOST_CATCH(...) {
             deallocate(m_buff, cb.capacity());
             BOOST_RETHROW
         }
         BOOST_CATCH_END
+        if (m_last == m_end)
+            m_last = m_buff;
     }
 
 #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
@@ -1298,6 +1376,7 @@
               <code>0</code>, nothing will be inserted.
         \param item The element to be inserted.
         \throws Whatever <code>T::T(const T&)</code> throws.
+        \throws Whatever <code>T::operator = (const T&)</code> throws.
         \par Exception Safety
              Basic; no-throw if the operation in the <i>Throws</i> section does not throw anything.
         \par Iterator Invalidation
@@ -1328,6 +1407,7 @@
               <code>0</code>, nothing will be inserted.
         \param item The element to be inserted.
         \throws Whatever <code>T::T(const T&)</code> throws.
+        \throws Whatever <code>T::operator = (const T&)</code> throws.
         \par Exception Safety
              Basic; no-throw if the operation in the <i>Throws</i> section does not throw anything.
         \par Iterator Invalidation
@@ -1998,15 +2078,15 @@
 #endif
     }
 
-    //! Initialize the circular buffer.
-    void initialize(capacity_type capacity) {
-        m_first = m_last = m_buff = allocate(capacity);
+    //! Initialize the internal buffer.
+    void initialize_buffer(capacity_type capacity) {
+        m_buff = allocate(capacity);
         m_end = m_buff + capacity;
     }
 
-    //! Initialize the circular buffer.
-    void initialize(capacity_type capacity, param_value_type item) {
-        initialize(capacity);
+    //! Initialize the internal buffer.
+    void initialize_buffer(capacity_type capacity, param_value_type item) {
+        initialize_buffer(capacity);
         BOOST_TRY {
             cb_details::uninitialized_fill_n_with_alloc(m_buff, size(), item, m_alloc);
         } BOOST_CATCH(...) {
@@ -2020,7 +2100,8 @@
     template <class IntegralType>
     void initialize(IntegralType n, IntegralType item, const true_type&) {
         m_size = static_cast<size_type>(n);
-        initialize(size(), item);
+        initialize_buffer(size(), item);
+        m_first = m_last = m_buff;
     }
 
     //! Specialized initialize method.
@@ -2057,7 +2138,9 @@
     void initialize(capacity_type capacity, IntegralType n, IntegralType item, const true_type&) {
         BOOST_CB_ASSERT(capacity >= static_cast<size_type>(n)); // check for capacity lower than n
         m_size = static_cast<size_type>(n);
-        initialize(capacity, item);
+        initialize_buffer(capacity, item);
+        m_first = m_buff;
+        m_last = capacity == size() ? m_buff : m_buff + size();
     }
 
     //! Specialized initialize method.
@@ -2077,7 +2160,8 @@
         InputIterator first,
         InputIterator last,
         const std::input_iterator_tag&) {
-        initialize(capacity);
+        initialize_buffer(capacity);
+        m_first = m_last = m_buff;
         m_size = 0;
         if (capacity == 0)
             return;
@@ -2103,28 +2187,29 @@
         initialize(capacity, first, last, std::distance(first, last));
     }
 
-    //! Helper initialize method.
+    //! Initialize the circular buffer.
     template <class ForwardIterator>
     void initialize(capacity_type capacity,
         ForwardIterator first,
         ForwardIterator last,
         size_type distance) {
-        initialize(capacity);
+        initialize_buffer(capacity);
+        m_first = m_buff;
         if (distance > capacity) {
             std::advance(first, distance - capacity);
             m_size = capacity;
         } else {
             m_size = distance;
-            if (distance != capacity)
-                m_last = m_buff + size();
         }
         BOOST_TRY {
-            cb_details::uninitialized_copy_with_alloc(first, last, m_buff, m_alloc);
+            m_last = cb_details::uninitialized_copy_with_alloc(first, last, m_buff, m_alloc);
         } BOOST_CATCH(...) {
             deallocate(m_buff, capacity);
             BOOST_RETHROW
         }
         BOOST_CATCH_END
+        if (m_last == m_end)
+            m_last = m_buff;
     }
 
     //! Reset the circular buffer.
Modified: branches/release/boost/circular_buffer/debug.hpp
==============================================================================
--- branches/release/boost/circular_buffer/debug.hpp	(original)
+++ branches/release/boost/circular_buffer/debug.hpp	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -1,6 +1,6 @@
 // Debug support for the circular buffer library.
 
-// Copyright (c) 2003-2007 Jan Gaspar
+// Copyright (c) 2003-2008 Jan Gaspar
 
 // Use, modification, and distribution is subject to the Boost Software
 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Modified: branches/release/boost/circular_buffer/details.hpp
==============================================================================
--- branches/release/boost/circular_buffer/details.hpp	(original)
+++ branches/release/boost/circular_buffer/details.hpp	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -1,6 +1,6 @@
 // Helper classes and functions for the circular buffer.
 
-// Copyright (c) 2003-2007 Jan Gaspar
+// Copyright (c) 2003-2008 Jan Gaspar
 
 // Use, modification, and distribution is subject to the Boost Software
 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -67,16 +67,6 @@
 };
 
 /*!
-    \struct helper_pointer
-    \brief Helper pointer used in the iterator.
-*/
-template <class Traits>
-struct helper_pointer {
-    bool m_end;
-    typename Traits::pointer m_it;
-};
-
-/*!
     \struct iterator_wrapper
     \brief Helper iterator dereference wrapper.
 */
@@ -288,16 +278,11 @@
     pointer operator -> () const { return &(operator*()); }
 
     //! Difference operator.
-    difference_type operator - (const iterator& it) const {
+    template <class Traits0>
+    difference_type operator - (const iterator<Buff, Traits0>& it) const {
         BOOST_CB_ASSERT(is_valid(m_buff));    // check for uninitialized or invalidated iterator
         BOOST_CB_ASSERT(it.is_valid(m_buff)); // check for uninitialized or invalidated iterator
-        helper_pointer<Traits> lhs = create_helper_pointer(*this);
-        helper_pointer<Traits> rhs = create_helper_pointer(it);
-        if (less(rhs, lhs) && lhs.m_it <= rhs.m_it)
-            return (lhs.m_it - rhs.m_it) + static_cast<difference_type>(m_buff->capacity());
-        if (less(lhs, rhs) && lhs.m_it >= rhs.m_it)
-            return (lhs.m_it - rhs.m_it) - static_cast<difference_type>(m_buff->capacity());
-        return lhs.m_it - rhs.m_it;
+        return linearize_pointer(*this) - linearize_pointer(it);
     }
 
     //! Increment operator (prefix).
@@ -355,7 +340,7 @@
     iterator& operator -= (difference_type n) {
         BOOST_CB_ASSERT(is_valid(m_buff)); // check for uninitialized or invalidated iterator
         if (n > 0) {
-            BOOST_CB_ASSERT(m_buff->begin() - *this <= -n); // check for too large n
+            BOOST_CB_ASSERT(*this - m_buff->begin() >= n); // check for too large n
             m_it = m_buff->sub(m_it == 0 ? m_buff->m_last : m_it, n);
         } else if (n < 0) {
             *this += -n;
@@ -392,12 +377,12 @@
     bool operator < (const iterator<Buff, Traits0>& it) const {
         BOOST_CB_ASSERT(is_valid(m_buff));    // check for uninitialized or invalidated iterator
         BOOST_CB_ASSERT(it.is_valid(m_buff)); // check for uninitialized or invalidated iterator
-        return less(create_helper_pointer(*this), create_helper_pointer(it));
+        return linearize_pointer(*this) < linearize_pointer(it);
     }
 
     //! Greater.
     template <class Traits0>
-    bool operator > (const iterator<Buff, Traits0>& it) const  { return it < *this; }
+    bool operator > (const iterator<Buff, Traits0>& it) const { return it < *this; }
 
     //! Less or equal.
     template <class Traits0>
@@ -410,41 +395,12 @@
 private:
 // Helpers
 
-    //! Create helper pointer.
+    //! Get a pointer which would point to the same element as the iterator in case the circular buffer is linearized.
     template <class Traits0>
-    helper_pointer<Traits0> create_helper_pointer(const iterator<Buff, Traits0>& it) const {
-        helper_pointer<Traits0> helper;
-        helper.m_end = (it.m_it == 0);
-        helper.m_it = helper.m_end ? m_buff->m_last : it.m_it;
-        return helper;
-    }
-
-    //! Less.
-    template <class InternalIterator0, class InternalIterator1>
-    bool less(const InternalIterator0& lhs, const InternalIterator1& rhs) const {
-        difference_type ldiff = lhs.m_it - m_buff->m_first;
-        difference_type rdiff = rhs.m_it - m_buff->m_first;
-        if (ldiff < 0) {
-            if (rdiff < 0)
-                return lhs.m_it < rhs.m_it;
-            else if (rdiff == 0)
-                return rhs.m_end;
-        } else if (ldiff == 0) {
-            if (rdiff < 0)
-                return !lhs.m_end;
-            else if (rdiff == 0)
-                return !lhs.m_end && rhs.m_end;
-            else
-                return !lhs.m_end;
-        } else { // ldiff > 0
-            if (rdiff < 0)
-                return true;
-            else if (rdiff == 0)
-                return rhs.m_end;
-            else
-                return lhs.m_it < rhs.m_it;
-        }
-        return false;
+    typename Traits0::pointer linearize_pointer(const iterator<Buff, Traits0>& it) const {
+        return it.m_it == 0 ? m_buff->m_buff + m_buff->size() :
+            (it.m_it < m_buff->m_first ? it.m_it + (m_buff->m_end - m_buff->m_first)
+                : m_buff->m_buff + (it.m_it - m_buff->m_first));
     }
 };
 
Modified: branches/release/boost/circular_buffer/space_optimized.hpp
==============================================================================
--- branches/release/boost/circular_buffer/space_optimized.hpp	(original)
+++ branches/release/boost/circular_buffer/space_optimized.hpp	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -1,6 +1,6 @@
 // Implementation of the circular buffer adaptor.
 
-// Copyright (c) 2003-2007 Jan Gaspar
+// Copyright (c) 2003-2008 Jan Gaspar
 
 // Use, modification, and distribution is subject to the Boost Software
 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -90,6 +90,8 @@
     using circular_buffer<T, Alloc>::array_one;
     using circular_buffer<T, Alloc>::array_two;
     using circular_buffer<T, Alloc>::linearize;
+    using circular_buffer<T, Alloc>::is_linearized;
+    using circular_buffer<T, Alloc>::rotate;
     using circular_buffer<T, Alloc>::size;
     using circular_buffer<T, Alloc>::max_size;
     using circular_buffer<T, Alloc>::empty;
@@ -312,18 +314,19 @@
         }
     }
 
-    //! Create an empty space optimized circular buffer with a maximum capacity.
+    //! Create an empty space optimized circular buffer with zero capacity.
     /*!
-        \post <code>capacity().%capacity() == max_size() \&\& capacity().min_capacity() == 0 \&\& size() == 0</code>
-              <br><br>There is no memory allocated in the internal buffer.
+        \post <code>capacity().%capacity() == 0 \&\& capacity().min_capacity() == 0 \&\& size() == 0</code>
         \param alloc The allocator.
         \throws Nothing.
         \par Complexity
              Constant.
+        \warning Since Boost version 1.36 the behaviour of this constructor has changed. Now it creates a space
+                 optimized circular buffer with zero capacity.
     */
     explicit circular_buffer_space_optimized(const allocator_type& alloc = allocator_type())
     : circular_buffer<T, Alloc>(0, alloc)
-    , m_capacity_ctrl(max_size()) {}
+    , m_capacity_ctrl(0) {}
 
     //! Create an empty space optimized circular buffer with the specified capacity.
     /*!
Modified: branches/release/boost/circular_buffer_fwd.hpp
==============================================================================
--- branches/release/boost/circular_buffer_fwd.hpp	(original)
+++ branches/release/boost/circular_buffer_fwd.hpp	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -1,6 +1,6 @@
 // Forward declaration of the circular buffer and its adaptor.
 
-// Copyright (c) 2003-2007 Jan Gaspar
+// Copyright (c) 2003-2008 Jan Gaspar
 
 // Use, modification, and distribution is subject to the Boost Software
 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Modified: branches/release/libs/circular_buffer/doc/Doxyfile
==============================================================================
--- branches/release/libs/circular_buffer/doc/Doxyfile	(original)
+++ branches/release/libs/circular_buffer/doc/Doxyfile	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -1,6 +1,6 @@
 # Doxygen configuration file.
 #
-# Copyright (c) 2003-2007 Jan Gaspar
+# Copyright (c) 2003-2008 Jan Gaspar
 #
 # Distributed under the Boost Software License, Version 1.0. (See
 # accompanying file LICENSE_1_0.txt or copy at
Modified: branches/release/libs/circular_buffer/doc/HOWTO-srcdoc
==============================================================================
--- branches/release/libs/circular_buffer/doc/HOWTO-srcdoc	(original)
+++ branches/release/libs/circular_buffer/doc/HOWTO-srcdoc	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -2,7 +2,7 @@
 # HOW-TO documentation about generating/updating source code documentation for #
 # the Circular Buffer library.                                                 #
 #                                                                              #
-# Copyright (c) 2007 Jan Gaspar                                                #
+# Copyright (c) 2003-2008 Jan Gaspar                                           #
 #                                                                              #
 # Use, modification, and distribution is subject to the Boost Software         #
 # License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at      #
Modified: branches/release/libs/circular_buffer/doc/Tidy.conf
==============================================================================
--- branches/release/libs/circular_buffer/doc/Tidy.conf	(original)
+++ branches/release/libs/circular_buffer/doc/Tidy.conf	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -1,6 +1,6 @@
 # HTML Tidy configuration file.
 #
-# Copyright (c) 2003-2007 Jan Gaspar
+# Copyright (c) 2003-2008 Jan Gaspar
 #
 # Distributed under the Boost Software License, Version 1.0. (See
 # accompanying file LICENSE_1_0.txt or copy at
Modified: branches/release/libs/circular_buffer/doc/circular_buffer.html
==============================================================================
--- branches/release/libs/circular_buffer/doc/circular_buffer.html	(original)
+++ branches/release/libs/circular_buffer/doc/circular_buffer.html	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -26,28 +26,82 @@
     </table>
     <h2>
       Contents
-    </h2>Description<br>
-    Introductory Example<br>
-    Synopsis<br>
-    Rationale<br>
-    - Thread-Safety<br>
-    - Overwrite Operation<br>
-    - Writing to a Full Buffer<br>
-    - Reading/Removing from an Empty Buffer<br>
-    - Iterator Invalidation<br>
-    Caveats<br>
-    Debug Support<br>
-    More Examples<br>
-    Header Files<br>
-    Modelled Concepts<br>
-    Template Parameters<br>
-    Public Types<br>
-    Constructors and Destructor<br>
-    Public Member Functions<br>
-    Standalone Functions<br>
-    Notes<br>
-    See also<br>
-    Acknowledgements
+    </h2>
+    <dl>
+      <dt>
+        Description
+      </dt>
+      <dt>
+        Introductory Example
+      </dt>
+      <dt>
+        Synopsis
+      </dt>
+      <dt>
+        Rationale
+      </dt>
+      <dd>
+        <ul>
+          <li>
+            Thread-Safety
+          </li>
+          <li>
+            Overwrite Operation
+          </li>
+          <li>
+            Writing to a Full Buffer
+          </li>
+          <li>
+            Reading/Removing from an Empty Buffer
+          </li>
+          <li>
+            Iterator Invalidation
+          </li>
+        </ul>
+      </dd>
+      <dt>
+        Caveats
+      </dt>
+      <dt>
+        Debug Support
+      </dt>
+      <dt>
+        More Examples
+      </dt>
+      <dt>
+        Header Files
+      </dt>
+      <dt>
+        Modelled Concepts
+      </dt>
+      <dt>
+        Template Parameters
+      </dt>
+      <dt>
+        Public Types
+      </dt>
+      <dt>
+        Constructors and Destructor
+      </dt>
+      <dt>
+        Public Member Functions
+      </dt>
+      <dt>
+        Standalone Functions
+      </dt>
+      <dt>
+        Notes
+      </dt>
+      <dt>
+        See also
+      </dt>
+      <dt>
+        Acknowledgements
+      </dt>
+      <dt>
+        Release Notes
+      </dt>
+    </dl>
     <table id="table_figure" align="right" border="0">
       <tr>
         <td>
@@ -200,17 +254,17 @@
    <a href="#classboost_1_1circular__buffer_164250ffbbbdbc62b99e8301fc195b80c">~circular_buffer</a>();
 
    allocator_type <a href=
-"#classboost_1_1circular__buffer_15693ba52e58ef90f1d914cbb63143cd3">get_allocator</a>() const;
+"#classboost_1_1circular__buffer_1a20b7d0e7a4da0af13286df9f53d660c">get_allocator</a>() const;
    allocator_type& get_allocator();
    iterator begin();
    iterator end();
-   const_iterator begin() const;
-   const_iterator end() const;
+   const_iterator begin() const;
+   const_iterator end() const;
    reverse_iterator rbegin();
    reverse_iterator rend();
    const_reverse_iterator <a href=
-"#classboost_1_1circular__buffer_146a8356a1aec6abca9c44cfc60b3bb10">rbegin</a>() const;
-   const_reverse_iterator rend() const;
+"#classboost_1_1circular__buffer_1765d91bf48341907418433a1e3aab026">rbegin</a>() const;
+   const_reverse_iterator rend() const;
    reference <a href=
 "#classboost_1_1circular__buffer_1d219f0d3203fb43b964a8cf63f1865cd">operator[]</a>(size_type index);
    const_reference <a href=
@@ -220,19 +274,22 @@
 "#classboost_1_1circular__buffer_1b233a298f5845a0fcf2ecc56f4170810">at</a>(size_type index) const;
    reference front();
    reference back();
-   const_reference front() const;
-   const_reference back() const;
+   const_reference front() const;
+   const_reference back() const;
    array_range array_one();
    array_range array_two();
-   const_array_range array_one() const;
-   const_array_range array_two() const;
+   const_array_range array_one() const;
+   const_array_range array_two() const;
    pointer linearize();
-   size_type size() const;
-   size_type max_size() const;
-   bool empty() const;
-   bool full() const;
-   size_type reserve() const;
-   capacity_type capacity() const;
+   bool is_linearized() const;
+   void <a href=
+"#classboost_1_1circular__buffer_1c591bb9e271b10b5240afcff3bd2c619">rotate</a>(const_iterator new_begin);
+   size_type size() const;
+   size_type max_size() const;
+   bool empty() const;
+   bool full() const;
+   size_type reserve() const;
+   capacity_type capacity() const;
    void <a href=
 "#classboost_1_1circular__buffer_161714204ef5172d156e2c7eccd04998f">set_capacity</a>(capacity_type new_capacity);
    void <a href=
@@ -588,9 +645,9 @@
 </pre>
     <p>
       The <code>circular_buffer</code> has a capacity of three <code>int</code>. Therefore, the size of the buffer will
-      not exceed three. The <code>accumulate</code> algorithm
-      evaluates the sum of the stored elements. The semantics of the <code>circular_buffer</code> can be inferred from
-      the assertions.
+      not exceed three. The <code>std::accumulate</code>
+      algorithm evaluates the sum of the stored elements. The semantics of the <code>circular_buffer</code> can be
+      inferred from the assertions.
     </p>
     <h4>
       <a name="boundedbuffer" id="boundedbuffer">Bounded Buffer Example</a>
@@ -723,6 +780,52 @@
             Default
           </th>
         </tr>
+        <tr>
+          <td>
+            <a id="templateparam_T" name="templateparam_T"><code>T</code></a>
+          </td>
+          <td>
+            The type of the elements stored in the <code>circular_buffer</code>.
+            <dl>
+              <dt>
+                <b>Type Requirements:</b>
+              </dt>
+              <dd>
+                The <code>T</code> has to be SGIAssignable
+                (SGI STL defined combination of Assignable and <a href=
+                "../../utility/CopyConstructible.html">CopyConstructible</a>). Moreover <code>T</code> has to be
+                DefaultConstructible if supplied as
+                a default parameter when invoking some of the <code>circular_buffer</code>'s methods e.g.
+                <code>insert(iterator pos, const value_type& item = value_type())</code>. And <a href=
+                "http://www.sgi.com/tech/stl/EqualityComparable.html">EqualityComparable</a> and/or <a href=
+                "../../utility/LessThanComparable.html">LessThanComparable</a> if the <code>circular_buffer</code> will
+                be compared with another container.
+              </dd>
+            </dl>
+          </td>
+          <td>
+            <br>
+          </td>
+        </tr>
+        <tr>
+          <td>
+            <a id="templateparam_Alloc" name="templateparam_Alloc"><code>Alloc</code></a>
+          </td>
+          <td>
+            The allocator type used for all internal memory management.
+            <dl>
+              <dt>
+                <b>Type Requirements:</b>
+              </dt>
+              <dd>
+                The <code>Alloc</code> has to meet the allocator requirements imposed by STL.
+              </dd>
+            </dl>
+          </td>
+          <td>
+            <code>std::allocator<T></code>
+          </td>
+        </tr>
       </table>
     </div>
     <h2>
@@ -894,15 +997,15 @@
             "#classboost_1_1circular__buffer_14e07c6ddfe89debe384e59bed06e7cb7">allocator_type</a>& alloc =
             allocator_type());</b></code><br>
             <br>
-            Create an empty <code>circular_buffer</code> with a maximum capacity.
+            Create an empty <code>circular_buffer</code> with zero capacity.
             <dl>
               <dt>
                 <b>Effect:</b>
               </dt>
               <dd>
-                <code>capacity() ==
-                max_size() &&
-                size() == 0</code>
+                <code>capacity() == 0
+                && size() ==
+                0</code>
               </dd>
             </dl>
             <dl>
@@ -942,9 +1045,33 @@
                 <b>Warning:</b>
               </dt>
               <dd>
-                This constructor has been defined only due to compatibility with the STL container definition. Avoid
-                using it because it may allocate <b>very large</b> amount of memory (depending on allocator's
-                max_size()).
+                Since Boost version 1.36 the behaviour of this constructor has changed. Now the constructor does not
+                allocate any memory and both capacity and size are set to zero. Also note when inserting an element
+                into a <code>circular_buffer</code> with zero capacity (e.g. by <code><a href=
+                "#classboost_1_1circular__buffer_1aa35dd7ef8eb1d04508494d1835cc82e">push_back(const_reference)</a></code>
+                or <code><a href="#classboost_1_1circular__buffer_128c92740fee1b9deb8c69816e389de95">insert(iterator,
+                value_type)</a></code>) nothing will be inserted and the size (as well as capacity) remains zero.
+              </dd>
+            </dl>
+            <dl>
+              <dt>
+                <b>Note:</b>
+              </dt>
+              <dd>
+                You can explicitly set the capacity by calling the <code><a href=
+                "#classboost_1_1circular__buffer_161714204ef5172d156e2c7eccd04998f">set_capacity(capacity_type)</a></code>
+                method or you can use the other constructor with the capacity specified.
+              </dd>
+            </dl>
+            <dl>
+              <dt>
+                <b>See Also:</b>
+              </dt>
+              <dd>
+                <code><a href=
+                "#classboost_1_1circular__buffer_1862a64cbc6a49376ecbb8321c3b44974">circular_buffer(capacity_type,
+                const allocator_type& alloc)</a></code>, <code><a href=
+                "#classboost_1_1circular__buffer_161714204ef5172d156e2c7eccd04998f">set_capacity(capacity_type)</a></code>
               </dd>
             </dl>
           </td>
@@ -964,9 +1091,9 @@
                 <b>Effect:</b>
               </dt>
               <dd>
-                <code>capacity() ==
+                <code>capacity() ==
                 capacity && <a href=
-                "#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> == 0</code>
+                "#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> == 0</code>
               </dd>
             </dl>
             <dl>
@@ -1029,8 +1156,8 @@
                 <b>Effect:</b>
               </dt>
               <dd>
-                <code>capacity() == n
-                && full()
+                <code>capacity() == n
+                && full()
                 && (*this)[0] == item && (*this)[1] == item && ... && (*this)[n - 1] ==
                 item</code>
               </dd>
@@ -1117,9 +1244,9 @@
                 <b>Effect:</b>
               </dt>
               <dd>
-                <code>capacity() ==
+                <code>capacity() ==
                 capacity && <a href=
-                "#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> == n &&
+                "#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> == n &&
                 (*this)[0] == item && (*this)[1] == item && ... && (*this)[n - 1] ==
                 item</code>
               </dd>
@@ -1271,9 +1398,9 @@
                 <b>Effect:</b>
               </dt>
               <dd>
-                <code>capacity() ==
+                <code>capacity() ==
                 std::distance(first, last) && <a href=
-                "#classboost_1_1circular__buffer_174a305e473c0bba9dcf30abb68bff909">full()</a> && (*this)[0]==
+                "#classboost_1_1circular__buffer_1fd0eef8ba91210d1575404b7e3e8207a">full()</a> && (*this)[0]==
                 *first && (*this)[1] == *(first + 1) && ... && (*this)[std::distance(first,
                 last) - 1] == *(last - 1)</code>
               </dd>
@@ -1362,9 +1489,9 @@
                 <b>Effect:</b>
               </dt>
               <dd>
-                <code>capacity() ==
+                <code>capacity() ==
                 capacity && <a href=
-                "#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> <=
+                "#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> <=
                 std::distance(first, last) && (*this)[0]== *(last - capacity) && (*this)[1] == *(last -
                 capacity + 1) && ... && (*this)[capacity - 1] == *(last - 1)</code><br>
                 <br>
@@ -1496,8 +1623,8 @@
       <table id="table_methods" border="1" cellpadding="3">
         <tr>
           <td>
-            <a id="classboost_1_1circular__buffer_15693ba52e58ef90f1d914cbb63143cd3" name=
-            "classboost_1_1circular__buffer_15693ba52e58ef90f1d914cbb63143cd3"></a><code><b><a href=
+            <a id="classboost_1_1circular__buffer_1a20b7d0e7a4da0af13286df9f53d660c" name=
+            "classboost_1_1circular__buffer_1a20b7d0e7a4da0af13286df9f53d660c"></a><code><b><a href=
             "#classboost_1_1circular__buffer_14e07c6ddfe89debe384e59bed06e7cb7">allocator_type</a> get_allocator()
             const;</b></code><br>
             <br>
@@ -1616,7 +1743,7 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code><a href="#classboost_1_1circular__buffer_15693ba52e58ef90f1d914cbb63143cd3">get_allocator()
+                <code><a href="#classboost_1_1circular__buffer_1a20b7d0e7a4da0af13286df9f53d660c">get_allocator()
                 const</a></code>
               </dd>
             </dl>
@@ -1747,8 +1874,8 @@
         </tr>
         <tr>
           <td>
-            <a id="classboost_1_1circular__buffer_1ee6c38b2ecdc8dfec79975dbc685c80b" name=
-            "classboost_1_1circular__buffer_1ee6c38b2ecdc8dfec79975dbc685c80b"></a><code><b><a href=
+            <a id="classboost_1_1circular__buffer_10640d3d41c13b6089b6f169224cf1038" name=
+            "classboost_1_1circular__buffer_10640d3d41c13b6089b6f169224cf1038"></a><code><b><a href=
             "#classboost_1_1circular__buffer_15cab6d46f03c40d1e52d41843319ddb9">const_iterator</a> begin()
             const;</b></code><br>
             <br>
@@ -1760,7 +1887,7 @@
               <dd>
                 A const random access iterator pointing to the first element of the <code>circular_buffer</code>. If
                 the <code>circular_buffer</code> is empty it returns an iterator equal to the one returned by
-                <code><a href="#classboost_1_1circular__buffer_19813e1d191cd04c4cfc100bbc4733e92">end()
+                <code><a href="#classboost_1_1circular__buffer_17890810d07bc595cfb87f9c47cb075ac">end()
                 const</a></code>.
               </dd>
             </dl>
@@ -1801,10 +1928,10 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code><a href="#classboost_1_1circular__buffer_19813e1d191cd04c4cfc100bbc4733e92">end()
+                <code><a href="#classboost_1_1circular__buffer_17890810d07bc595cfb87f9c47cb075ac">end()
                 const</a></code>, <code><a href=
-                "#classboost_1_1circular__buffer_146a8356a1aec6abca9c44cfc60b3bb10">rbegin() const</a></code>,
-                <code><a href="#classboost_1_1circular__buffer_1a09f7111dde9f52a4d8babfcdef7e798">rend()
+                "#classboost_1_1circular__buffer_1765d91bf48341907418433a1e3aab026">rbegin() const</a></code>,
+                <code><a href="#classboost_1_1circular__buffer_108dbf538b00a14daf5582ece80746fc3">rend()
                 const</a></code>
               </dd>
             </dl>
@@ -1812,8 +1939,8 @@
         </tr>
         <tr>
           <td>
-            <a id="classboost_1_1circular__buffer_19813e1d191cd04c4cfc100bbc4733e92" name=
-            "classboost_1_1circular__buffer_19813e1d191cd04c4cfc100bbc4733e92"></a><code><b><a href=
+            <a id="classboost_1_1circular__buffer_17890810d07bc595cfb87f9c47cb075ac" name=
+            "classboost_1_1circular__buffer_17890810d07bc595cfb87f9c47cb075ac"></a><code><b><a href=
             "#classboost_1_1circular__buffer_15cab6d46f03c40d1e52d41843319ddb9">const_iterator</a> end()
             const;</b></code><br>
             <br>
@@ -1826,7 +1953,7 @@
                 A const random access iterator pointing to the element "one behind" the last element of the
                 <code>circular_buffer</code>. If the <code>circular_buffer</code> is empty it returns an iterator equal
                 to the one returned by <code><a href=
-                "#classboost_1_1circular__buffer_1ee6c38b2ecdc8dfec79975dbc685c80b">begin() const</a></code> const.
+                "#classboost_1_1circular__buffer_10640d3d41c13b6089b6f169224cf1038">begin() const</a></code> const.
               </dd>
             </dl>
             <dl>
@@ -1866,10 +1993,10 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code><a href="#classboost_1_1circular__buffer_1ee6c38b2ecdc8dfec79975dbc685c80b">begin()
+                <code><a href="#classboost_1_1circular__buffer_10640d3d41c13b6089b6f169224cf1038">begin()
                 const</a></code>, <code><a href=
-                "#classboost_1_1circular__buffer_146a8356a1aec6abca9c44cfc60b3bb10">rbegin() const</a></code>,
-                <code><a href="#classboost_1_1circular__buffer_1a09f7111dde9f52a4d8babfcdef7e798">rend()
+                "#classboost_1_1circular__buffer_1765d91bf48341907418433a1e3aab026">rbegin() const</a></code>,
+                <code><a href="#classboost_1_1circular__buffer_108dbf538b00a14daf5582ece80746fc3">rend()
                 const</a></code>
               </dd>
             </dl>
@@ -2002,8 +2129,8 @@
         </tr>
         <tr>
           <td>
-            <a id="classboost_1_1circular__buffer_146a8356a1aec6abca9c44cfc60b3bb10" name=
-            "classboost_1_1circular__buffer_146a8356a1aec6abca9c44cfc60b3bb10"></a><code><b><a href=
+            <a id="classboost_1_1circular__buffer_1765d91bf48341907418433a1e3aab026" name=
+            "classboost_1_1circular__buffer_1765d91bf48341907418433a1e3aab026"></a><code><b><a href=
             "#classboost_1_1circular__buffer_1c7317701b511bc5f7a663b06b53e2b73">const_reverse_iterator</a> rbegin()
             const;</b></code><br>
             <br>
@@ -2016,7 +2143,7 @@
                 A const reverse random access iterator pointing to the last element of the
                 <code>circular_buffer</code>. If the <code>circular_buffer</code> is empty it returns an iterator equal
                 to the one returned by <code><a href=
-                "#classboost_1_1circular__buffer_1a09f7111dde9f52a4d8babfcdef7e798">rend() const</a></code>.
+                "#classboost_1_1circular__buffer_108dbf538b00a14daf5582ece80746fc3">rend() const</a></code>.
               </dd>
             </dl>
             <dl>
@@ -2056,10 +2183,10 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code><a href="#classboost_1_1circular__buffer_1a09f7111dde9f52a4d8babfcdef7e798">rend()
+                <code><a href="#classboost_1_1circular__buffer_108dbf538b00a14daf5582ece80746fc3">rend()
                 const</a></code>, <code><a href=
-                "#classboost_1_1circular__buffer_1ee6c38b2ecdc8dfec79975dbc685c80b">begin() const</a></code>,
-                <code><a href="#classboost_1_1circular__buffer_19813e1d191cd04c4cfc100bbc4733e92">end()
+                "#classboost_1_1circular__buffer_10640d3d41c13b6089b6f169224cf1038">begin() const</a></code>,
+                <code><a href="#classboost_1_1circular__buffer_17890810d07bc595cfb87f9c47cb075ac">end()
                 const</a></code>
               </dd>
             </dl>
@@ -2067,8 +2194,8 @@
         </tr>
         <tr>
           <td>
-            <a id="classboost_1_1circular__buffer_1a09f7111dde9f52a4d8babfcdef7e798" name=
-            "classboost_1_1circular__buffer_1a09f7111dde9f52a4d8babfcdef7e798"></a><code><b><a href=
+            <a id="classboost_1_1circular__buffer_108dbf538b00a14daf5582ece80746fc3" name=
+            "classboost_1_1circular__buffer_108dbf538b00a14daf5582ece80746fc3"></a><code><b><a href=
             "#classboost_1_1circular__buffer_1c7317701b511bc5f7a663b06b53e2b73">const_reverse_iterator</a> rend()
             const;</b></code><br>
             <br>
@@ -2081,7 +2208,7 @@
                 A const reverse random access iterator pointing to the element "one before" the first element of the
                 <code>circular_buffer</code>. If the <code>circular_buffer</code> is empty it returns an iterator equal
                 to the one returned by <code><a href=
-                "#classboost_1_1circular__buffer_146a8356a1aec6abca9c44cfc60b3bb10">rbegin() const</a></code>.
+                "#classboost_1_1circular__buffer_1765d91bf48341907418433a1e3aab026">rbegin() const</a></code>.
               </dd>
             </dl>
             <dl>
@@ -2121,10 +2248,10 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code><a href="#classboost_1_1circular__buffer_146a8356a1aec6abca9c44cfc60b3bb10">rbegin()
+                <code><a href="#classboost_1_1circular__buffer_1765d91bf48341907418433a1e3aab026">rbegin()
                 const</a></code>, <code><a href=
-                "#classboost_1_1circular__buffer_1ee6c38b2ecdc8dfec79975dbc685c80b">begin() const</a></code>,
-                <code><a href="#classboost_1_1circular__buffer_19813e1d191cd04c4cfc100bbc4733e92">end()
+                "#classboost_1_1circular__buffer_10640d3d41c13b6089b6f169224cf1038">begin() const</a></code>,
+                <code><a href="#classboost_1_1circular__buffer_17890810d07bc595cfb87f9c47cb075ac">end()
                 const</a></code>
               </dd>
             </dl>
@@ -2144,7 +2271,7 @@
               </dt>
               <dd>
                 <code>0 <= index && index < <a href=
-                "#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a></code>
+                "#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a></code>
               </dd>
             </dl>
             <dl>
@@ -2227,7 +2354,7 @@
               </dt>
               <dd>
                 <code>0 <= index && index < <a href=
-                "#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a></code>
+                "#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a></code>
               </dd>
             </dl>
             <dl>
@@ -2332,7 +2459,7 @@
               </dt>
               <dd>
                 <code>std::out_of_range</code> when the <code>index</code> is invalid (when <code>index >= <a href=
-                "#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a></code>).
+                "#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a></code>).
               </dd>
             </dl>
             <dl>
@@ -2364,7 +2491,7 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code>operator[]</code>
+                <code>operator[]</code>
               </dd>
             </dl>
           </td>
@@ -2407,7 +2534,7 @@
               </dt>
               <dd>
                 <code>std::out_of_range</code> when the <code>index</code> is invalid (when <code>index >= <a href=
-                "#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a></code>).
+                "#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a></code>).
               </dd>
             </dl>
             <dl>
@@ -2577,8 +2704,8 @@
         </tr>
         <tr>
           <td>
-            <a id="classboost_1_1circular__buffer_13261c47e81bb5e447fb0d70f096728b8" name=
-            "classboost_1_1circular__buffer_13261c47e81bb5e447fb0d70f096728b8"></a><code><b><a href=
+            <a id="classboost_1_1circular__buffer_10df8595d83bb9d8a7ce50aabc678f90b" name=
+            "classboost_1_1circular__buffer_10df8595d83bb9d8a7ce50aabc678f90b"></a><code><b><a href=
             "#classboost_1_1circular__buffer_1a8397191092f5bacee991b623ca4b910">const_reference</a> front()
             const;</b></code><br>
             <br>
@@ -2636,7 +2763,7 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code><a href="#classboost_1_1circular__buffer_14cd3a019a9d99b4e29918b51c2181a07">back()
+                <code><a href="#classboost_1_1circular__buffer_1027201797868c6274feb6712f670a132">back()
                 const</a></code>
               </dd>
             </dl>
@@ -2644,8 +2771,8 @@
         </tr>
         <tr>
           <td>
-            <a id="classboost_1_1circular__buffer_14cd3a019a9d99b4e29918b51c2181a07" name=
-            "classboost_1_1circular__buffer_14cd3a019a9d99b4e29918b51c2181a07"></a><code><b><a href=
+            <a id="classboost_1_1circular__buffer_1027201797868c6274feb6712f670a132" name=
+            "classboost_1_1circular__buffer_1027201797868c6274feb6712f670a132"></a><code><b><a href=
             "#classboost_1_1circular__buffer_1a8397191092f5bacee991b623ca4b910">const_reference</a> back()
             const;</b></code><br>
             <br>
@@ -2703,7 +2830,7 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code><a href="#classboost_1_1circular__buffer_13261c47e81bb5e447fb0d70f096728b8">front()
+                <code><a href="#classboost_1_1circular__buffer_10df8595d83bb9d8a7ce50aabc678f90b">front()
                 const</a></code>
               </dd>
             </dl>
@@ -2910,15 +3037,15 @@
         </tr>
         <tr>
           <td>
-            <a id="classboost_1_1circular__buffer_1586cfbdef335f1d3d31faacec63f7b04" name=
-            "classboost_1_1circular__buffer_1586cfbdef335f1d3d31faacec63f7b04"></a><code><b><a href=
+            <a id="classboost_1_1circular__buffer_10f4b157e27b1170a571417986b239945" name=
+            "classboost_1_1circular__buffer_10f4b157e27b1170a571417986b239945"></a><code><b><a href=
             "#classboost_1_1circular__buffer_11885d7f475b7e7a74c95b2448d243025">const_array_range</a> array_one()
             const;</b></code><br>
             <br>
             Get the first continuous array of the internal buffer.
             <p>
               This method in combination with <code><a href=
-              "#classboost_1_1circular__buffer_191a0e2c33c0e5b4d7b8c497847bc29ce">array_two() const</a></code> can be
+              "#classboost_1_1circular__buffer_1bb8eb0f298ad2012c55c5303e1f174d5">array_two() const</a></code> can be
               useful when passing the stored data into a legacy C API as an array.
             </p>
             <dl>
@@ -2967,7 +3094,7 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code><a href="#classboost_1_1circular__buffer_191a0e2c33c0e5b4d7b8c497847bc29ce">array_two()
+                <code><a href="#classboost_1_1circular__buffer_1bb8eb0f298ad2012c55c5303e1f174d5">array_two()
                 const</a></code>; <code><a href=
                 "#classboost_1_1circular__buffer_1957cccdcb0c4ef7d80a34a990065818d">array_one()</a></code> for more
                 details how to pass data into a legacy C API.
@@ -2977,15 +3104,15 @@
         </tr>
         <tr>
           <td>
-            <a id="classboost_1_1circular__buffer_191a0e2c33c0e5b4d7b8c497847bc29ce" name=
-            "classboost_1_1circular__buffer_191a0e2c33c0e5b4d7b8c497847bc29ce"></a><code><b><a href=
+            <a id="classboost_1_1circular__buffer_1bb8eb0f298ad2012c55c5303e1f174d5" name=
+            "classboost_1_1circular__buffer_1bb8eb0f298ad2012c55c5303e1f174d5"></a><code><b><a href=
             "#classboost_1_1circular__buffer_11885d7f475b7e7a74c95b2448d243025">const_array_range</a> array_two()
             const;</b></code><br>
             <br>
             Get the second continuous array of the internal buffer.
             <p>
               This method in combination with <code><a href=
-              "#classboost_1_1circular__buffer_1586cfbdef335f1d3d31faacec63f7b04">array_one() const</a></code> can be
+              "#classboost_1_1circular__buffer_10f4b157e27b1170a571417986b239945">array_one() const</a></code> can be
               useful when passing the stored data into a legacy C API as an array.
             </p>
             <dl>
@@ -3035,7 +3162,7 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code><a href="#classboost_1_1circular__buffer_1586cfbdef335f1d3d31faacec63f7b04">array_one()
+                <code><a href="#classboost_1_1circular__buffer_10f4b157e27b1170a571417986b239945">array_one()
                 const</a></code>
               </dd>
             </dl>
@@ -3057,7 +3184,7 @@
               </dt>
               <dd>
                 <code>&(*this)[0] < &(*this)[1] < ... < &(*this)[<a href=
-                "#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> - 1]</code>
+                "#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> - 1]</code>
               </dd>
             </dl>
             <dl>
@@ -3125,15 +3252,191 @@
                 "#classboost_1_1circular__buffer_1957cccdcb0c4ef7d80a34a990065818d">array_one()</a></code> and
                 <code><a href=
                 "#classboost_1_1circular__buffer_1f5081a54afbc2dfc1a7fb20329df7d5b">array_two()</a></code> for the
-                other option how to pass data into a legacy C API.
+                other option how to pass data into a legacy C API; <code><a href=
+                "#classboost_1_1circular__buffer_120f64448dc0723cc68c1096f6b00bc0a">is_linearized()</a></code>,
+                <code><a href=
+                "#classboost_1_1circular__buffer_1c591bb9e271b10b5240afcff3bd2c619">rotate(const_iterator)</a></code>
+              </dd>
+            </dl>
+          </td>
+        </tr>
+        <tr>
+          <td>
+            <a id="classboost_1_1circular__buffer_120f64448dc0723cc68c1096f6b00bc0a" name=
+            "classboost_1_1circular__buffer_120f64448dc0723cc68c1096f6b00bc0a"></a><code><b>bool is_linearized()
+            const;</b></code><br>
+            <br>
+            Is the <code>circular_buffer</code> linearized?
+            <dl>
+              <dt>
+                <b>Returns:</b>
+              </dt>
+              <dd>
+                <code>true</code> if the internal buffer is linearized into a continuous array (i.e. the
+                <code>circular_buffer</code> meets a condition <code>&(*this)[0] < &(*this)[1] < ... <
+                &(*this)[size() -
+                1]</code>); <code>false</code> otherwise.
+              </dd>
+            </dl>
+            <dl>
+              <dt>
+                <b>Throws:</b>
+              </dt>
+              <dd>
+                Nothing.
+              </dd>
+            </dl>
+            <dl>
+              <dt>
+                <b>Exception Safety:</b>
+              </dt>
+              <dd>
+                No-throw.
+              </dd>
+            </dl>
+            <dl>
+              <dt>
+                <b>Iterator Invalidation:</b>
+              </dt>
+              <dd>
+                Does not invalidate any iterators.
+              </dd>
+            </dl>
+            <dl>
+              <dt>
+                <b>Complexity:</b>
+              </dt>
+              <dd>
+                Constant (in the size of the <code>circular_buffer</code>).
+              </dd>
+            </dl>
+            <dl>
+              <dt>
+                <b>See Also:</b>
+              </dt>
+              <dd>
+                <code><a href=
+                "#classboost_1_1circular__buffer_1ea728bf57f91aa8946eddf76ce816a4e">linearize()</a></code>,
+                <code><a href=
+                "#classboost_1_1circular__buffer_1957cccdcb0c4ef7d80a34a990065818d">array_one()</a></code>,
+                <code><a href=
+                "#classboost_1_1circular__buffer_1f5081a54afbc2dfc1a7fb20329df7d5b">array_two()</a></code>
               </dd>
             </dl>
           </td>
         </tr>
         <tr>
           <td>
-            <a id="classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213" name=
-            "classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213"></a><code><b><a href=
+            <a id="classboost_1_1circular__buffer_1c591bb9e271b10b5240afcff3bd2c619" name=
+            "classboost_1_1circular__buffer_1c591bb9e271b10b5240afcff3bd2c619"></a><code><b>void rotate(<a href=
+            "#classboost_1_1circular__buffer_15cab6d46f03c40d1e52d41843319ddb9">const_iterator</a>
+            new_begin);</b></code><br>
+            <br>
+            Rotate elements in the <code>circular_buffer</code>.
+            <p>
+              A more effective implementation of <code><a href=
+              "http://www.sgi.com/tech/stl/rotate.html">std::rotate</a></code>.
+            </p>
+            <dl>
+              <dt>
+                <b>Precondition:</b>
+              </dt>
+              <dd>
+                <code>new_begin</code> is a valid iterator pointing to the <code>circular_buffer</code> <b>except</b>
+                its end.
+              </dd>
+            </dl>
+            <dl>
+              <dt>
+                <b>Effect:</b>
+              </dt>
+              <dd>
+                Before calling the method suppose:<br>
+                <br>
+                <code>m == std::distance(new_begin, <a href=
+                "#classboost_1_1circular__buffer_1babfa093dad7801223b80626b598dee1">end()</a>)</code><br>
+                <code>n == std::distance(<a href=
+                "#classboost_1_1circular__buffer_158d1ede2e85f5d46eda8db3f0c4efef0">begin()</a>, new_begin)</code><br>
+                <code>val_0 == *new_begin, val_1 == *(new_begin + 1), ... val_m == *(new_begin + m)</code><br>
+                <code>val_r1 == *(new_begin - 1), val_r2 == *(new_begin - 2), ... val_rn == *(new_begin - n)</code><br>
+                <br>
+                then after call to the method:<br>
+                <br>
+                <code>val_0 == (*this)[0] && val_1 == (*this)[1] && ... && val_m == (*this)[m -
+                1] && val_r1 == (*this)[m + n - 1] && val_r2 == (*this)[m + n - 2] && ...
+                && val_rn == (*this)[m]</code>
+              </dd>
+            </dl>
+            <dl>
+              <dt>
+                <b>Parameter(s):</b>
+              </dt>
+              <dd>
+                <dl compact>
+                  <dt>
+                    <code>new_begin</code>
+                  </dt>
+                  <dd>
+                    The new beginning.
+                  </dd>
+                </dl>
+              </dd>
+            </dl>
+            <dl>
+              <dt>
+                <b>Throws:</b>
+              </dt>
+              <dd>
+                Whatever <code>T::T(const T&)</code> throws.
+              </dd>
+              <dd>
+                Whatever <code>T::operator = (const T&)</code> throws.
+              </dd>
+            </dl>
+            <dl>
+              <dt>
+                <b>Exception Safety:</b>
+              </dt>
+              <dd>
+                Basic; no-throw if the <code>circular_buffer</code> is full or <code>new_begin</code> points to
+                <code>begin()</code> or
+                if the operations in the <i>Throws</i> section do not throw anything.
+              </dd>
+            </dl>
+            <dl>
+              <dt>
+                <b>Iterator Invalidation:</b>
+              </dt>
+              <dd>
+                If <code>m < n</code> invalidates iterators pointing to the last <code>m</code> elements
+                (<b>including</b> <code>new_begin</code>, but not iterators equal to <code><a href=
+                "#classboost_1_1circular__buffer_1babfa093dad7801223b80626b598dee1">end()</a></code>) else invalidates
+                iterators pointing to the first <code>n</code> elements; does not invalidate any iterators if the
+                <code>circular_buffer</code> is full.
+              </dd>
+            </dl>
+            <dl>
+              <dt>
+                <b>Complexity:</b>
+              </dt>
+              <dd>
+                Linear (in <code>std::min(m, n)</code>); constant if the <code>circular_buffer</code> is full.
+              </dd>
+            </dl>
+            <dl>
+              <dt>
+                <b>See Also:</b>
+              </dt>
+              <dd>
+                <code>std::rotate</code>
+              </dd>
+            </dl>
+          </td>
+        </tr>
+        <tr>
+          <td>
+            <a id="classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32" name=
+            "classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32"></a><code><b><a href=
             "#classboost_1_1circular__buffer_19ba12c0142a21a7d960877c22fa3ea00">size_type</a> size()
             const;</b></code><br>
             <br>
@@ -3184,10 +3487,10 @@
               </dt>
               <dd>
                 <code><a href=
-                "#classboost_1_1circular__buffer_1da435a5884cad746ed5cd55bcb892035">capacity()</a></code>,
+                "#classboost_1_1circular__buffer_15ebab2b2538d733790b5752582728e77">capacity()</a></code>,
                 <code><a href=
-                "#classboost_1_1circular__buffer_195158ed4d4b03794068e259f85291995">max_size()</a></code>,
-                <code>reserve()</code>,
+                "#classboost_1_1circular__buffer_157e2d506bc274b2a63fbe1b8fcafebd7">max_size()</a></code>,
+                <code>reserve()</code>,
                 <code><a href="#classboost_1_1circular__buffer_180c2e2e66a8fa9d0b7adc1b54921a8c3">resize(size_type,
                 const_reference)</a></code>
               </dd>
@@ -3196,8 +3499,8 @@
         </tr>
         <tr>
           <td>
-            <a id="classboost_1_1circular__buffer_195158ed4d4b03794068e259f85291995" name=
-            "classboost_1_1circular__buffer_195158ed4d4b03794068e259f85291995"></a><code><b><a href=
+            <a id="classboost_1_1circular__buffer_157e2d506bc274b2a63fbe1b8fcafebd7" name=
+            "classboost_1_1circular__buffer_157e2d506bc274b2a63fbe1b8fcafebd7"></a><code><b><a href=
             "#classboost_1_1circular__buffer_19ba12c0142a21a7d960877c22fa3ea00">size_type</a> max_size()
             const;</b></code><br>
             <br>
@@ -3248,18 +3551,18 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code>size()</code>,
+                <code>size()</code>,
                 <code><a href=
-                "#classboost_1_1circular__buffer_1da435a5884cad746ed5cd55bcb892035">capacity()</a></code>,
-                <code>reserve()</code>
+                "#classboost_1_1circular__buffer_15ebab2b2538d733790b5752582728e77">capacity()</a></code>,
+                <code>reserve()</code>
               </dd>
             </dl>
           </td>
         </tr>
         <tr>
           <td>
-            <a id="classboost_1_1circular__buffer_105acab2b9a0b41044b5241cfc9d87663" name=
-            "classboost_1_1circular__buffer_105acab2b9a0b41044b5241cfc9d87663"></a><code><b>bool empty()
+            <a id="classboost_1_1circular__buffer_15be1c2a005ec9828549ef6dd7ebed583" name=
+            "classboost_1_1circular__buffer_15be1c2a005ec9828549ef6dd7ebed583"></a><code><b>bool empty()
             const;</b></code><br>
             <br>
             Is the <code>circular_buffer</code> empty?
@@ -3309,15 +3612,15 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code>full()</code>
+                <code>full()</code>
               </dd>
             </dl>
           </td>
         </tr>
         <tr>
           <td>
-            <a id="classboost_1_1circular__buffer_174a305e473c0bba9dcf30abb68bff909" name=
-            "classboost_1_1circular__buffer_174a305e473c0bba9dcf30abb68bff909"></a><code><b>bool full()
+            <a id="classboost_1_1circular__buffer_1fd0eef8ba91210d1575404b7e3e8207a" name=
+            "classboost_1_1circular__buffer_1fd0eef8ba91210d1575404b7e3e8207a"></a><code><b>bool full()
             const;</b></code><br>
             <br>
             Is the <code>circular_buffer</code> full?
@@ -3367,15 +3670,15 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code>empty()</code>
+                <code>empty()</code>
               </dd>
             </dl>
           </td>
         </tr>
         <tr>
           <td>
-            <a id="classboost_1_1circular__buffer_17e144e8c7acd8e30c08bfb03391a2338" name=
-            "classboost_1_1circular__buffer_17e144e8c7acd8e30c08bfb03391a2338"></a><code><b><a href=
+            <a id="classboost_1_1circular__buffer_10a02c4fbc53385e98569e810be9843de" name=
+            "classboost_1_1circular__buffer_10a02c4fbc53385e98569e810be9843de"></a><code><b><a href=
             "#classboost_1_1circular__buffer_19ba12c0142a21a7d960877c22fa3ea00">size_type</a> reserve()
             const;</b></code><br>
             <br>
@@ -3386,8 +3689,8 @@
                 <b>Returns:</b>
               </dt>
               <dd>
-                <code>capacity() -
-                size()</code>
+                <code>capacity() -
+                size()</code>
               </dd>
             </dl>
             <dl>
@@ -3428,17 +3731,17 @@
               </dt>
               <dd>
                 <code><a href=
-                "#classboost_1_1circular__buffer_1da435a5884cad746ed5cd55bcb892035">capacity()</a></code>,
-                <code>size()</code>,
-                <code>max_size()</code>
+                "#classboost_1_1circular__buffer_15ebab2b2538d733790b5752582728e77">capacity()</a></code>,
+                <code>size()</code>,
+                <code>max_size()</code>
               </dd>
             </dl>
           </td>
         </tr>
         <tr>
           <td>
-            <a id="classboost_1_1circular__buffer_1da435a5884cad746ed5cd55bcb892035" name=
-            "classboost_1_1circular__buffer_1da435a5884cad746ed5cd55bcb892035"></a><code><b><a href=
+            <a id="classboost_1_1circular__buffer_15ebab2b2538d733790b5752582728e77" name=
+            "classboost_1_1circular__buffer_15ebab2b2538d733790b5752582728e77"></a><code><b><a href=
             "#classboost_1_1circular__buffer_1dc642ff2be4db0be1a457810e5d09595">capacity_type</a> capacity()
             const;</b></code><br>
             <br>
@@ -3488,10 +3791,10 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code>reserve()</code>,
-                <code>size()</code>,
+                <code>reserve()</code>,
+                <code>size()</code>,
                 <code><a href=
-                "#classboost_1_1circular__buffer_195158ed4d4b03794068e259f85291995">max_size()</a></code>,
+                "#classboost_1_1circular__buffer_157e2d506bc274b2a63fbe1b8fcafebd7">max_size()</a></code>,
                 <code><a href=
                 "#classboost_1_1circular__buffer_161714204ef5172d156e2c7eccd04998f">set_capacity(capacity_type)</a></code>
               </dd>
@@ -3511,14 +3814,14 @@
                 <b>Effect:</b>
               </dt>
               <dd>
-                <code>capacity() ==
+                <code>capacity() ==
                 new_capacity && <a href=
-                "#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> <=
+                "#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> <=
                 new_capacity</code><br>
                 <br>
                 If the current number of elements stored in the <code>circular_buffer</code> is greater than the
                 desired new capacity then number of <code>[<a href=
-                "#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> - new_capacity]</code>
+                "#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> - new_capacity]</code>
                 <b>last</b> elements will be removed and the new size will be equal to <code>new_capacity</code>.
               </dd>
             </dl>
@@ -3573,7 +3876,7 @@
               </dt>
               <dd>
                 Linear (in <code>min[<a href=
-                "#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a>, new_capacity]</code>).
+                "#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a>, new_capacity]</code>).
               </dd>
             </dl>
             <dl>
@@ -3603,9 +3906,9 @@
                 <b>Effect:</b>
               </dt>
               <dd>
-                <code>size() ==
+                <code>size() ==
                 new_size && <a href=
-                "#classboost_1_1circular__buffer_1da435a5884cad746ed5cd55bcb892035">capacity()</a> >=
+                "#classboost_1_1circular__buffer_15ebab2b2538d733790b5752582728e77">capacity()</a> >=
                 new_size</code><br>
                 <br>
                 If the new size is greater than the current size, copies of <code>item</code> will be inserted at the
@@ -3614,7 +3917,7 @@
                 <code>new_size</code>.<br>
                 If the current number of elements stored in the <code>circular_buffer</code> is greater than the
                 desired new size then number of <code>[<a href=
-                "#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> - new_size]</code>
+                "#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> - new_size]</code>
                 <b>last</b> elements will be removed. (The capacity will remain unchanged.)
               </dd>
             </dl>
@@ -3709,14 +4012,14 @@
                 <b>Effect:</b>
               </dt>
               <dd>
-                <code>capacity() ==
+                <code>capacity() ==
                 new_capacity && <a href=
-                "#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> <=
+                "#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> <=
                 new_capacity</code><br>
                 <br>
                 If the current number of elements stored in the <code>circular_buffer</code> is greater than the
                 desired new capacity then number of <code>[<a href=
-                "#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> - new_capacity]</code>
+                "#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> - new_capacity]</code>
                 <b>first</b> elements will be removed and the new size will be equal to <code>new_capacity</code>.
               </dd>
             </dl>
@@ -3771,7 +4074,7 @@
               </dt>
               <dd>
                 Linear (in <code>min[<a href=
-                "#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a>, new_capacity]</code>).
+                "#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a>, new_capacity]</code>).
               </dd>
             </dl>
             <dl>
@@ -3801,9 +4104,9 @@
                 <b>Effect:</b>
               </dt>
               <dd>
-                <code>size() ==
+                <code>size() ==
                 new_size && <a href=
-                "#classboost_1_1circular__buffer_1da435a5884cad746ed5cd55bcb892035">capacity()</a> >=
+                "#classboost_1_1circular__buffer_15ebab2b2538d733790b5752582728e77">capacity()</a> >=
                 new_size</code><br>
                 <br>
                 If the new size is greater than the current size, copies of <code>item</code> will be inserted at the
@@ -3812,7 +4115,7 @@
                 <code>new_size</code>.<br>
                 If the current number of elements stored in the <code>circular_buffer</code> is greater than the
                 desired new size then number of <code>[<a href=
-                "#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> - new_size]</code>
+                "#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> - new_size]</code>
                 <b>first</b> elements will be removed. (The capacity will remain unchanged.)
               </dd>
             </dl>
@@ -3999,8 +4302,8 @@
                 <b>Effect:</b>
               </dt>
               <dd>
-                <code>capacity() == n
-                && size() == n
+                <code>capacity() == n
+                && size() == n
                 && (*this)[0] == item && (*this)[1] == item && ... && (*this) [n - 1]
                 == item</code>
               </dd>
@@ -4072,9 +4375,9 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code>operator=</code>,
-                <code><a href="#classboost_1_1circular__buffer_1aa10b4e4ec1f1c5918931b04b31d43ca">assign(capacity_type,
-                size_type, const_reference)</a></code>, <code><a href=
+                <code>operator=</code>, <code><a href=
+                "#classboost_1_1circular__buffer_1aa10b4e4ec1f1c5918931b04b31d43ca">assign(capacity_type, size_type,
+                const_reference)</a></code>, <code><a href=
                 "#classboost_1_1circular__buffer_1253302d9bda5d7efbc4a6c311de3790c">assign(InputIterator,
                 InputIterator)</a></code>, <code><a href=
                 "#classboost_1_1circular__buffer_11edb80acdf1f7f1df8217d57256e41f6">assign(capacity_type,
@@ -4111,9 +4414,9 @@
                 <b>Effect:</b>
               </dt>
               <dd>
-                <code>capacity() ==
+                <code>capacity() ==
                 capacity && <a href=
-                "#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> == n &&
+                "#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> == n &&
                 (*this)[0] == item && (*this)[1] == item && ... && (*this) [n - 1] ==
                 item</code>
               </dd>
@@ -4195,8 +4498,8 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code>operator=</code>,
-                <code><a href="#classboost_1_1circular__buffer_19ba4a81df16f386d31b04b49c82d1ada">assign(size_type,
+                <code>operator=</code>, <code><a href=
+                "#classboost_1_1circular__buffer_19ba4a81df16f386d31b04b49c82d1ada">assign(size_type,
                 const_reference)</a></code>, <code><a href=
                 "#classboost_1_1circular__buffer_1253302d9bda5d7efbc4a6c311de3790c">assign(InputIterator,
                 InputIterator)</a></code>, <code><a href=
@@ -4233,9 +4536,9 @@
                 <b>Effect:</b>
               </dt>
               <dd>
-                <code>capacity() ==
+                <code>capacity() ==
                 std::distance(first, last) && <a href=
-                "#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> == std::distance(first,
+                "#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> == std::distance(first,
                 last) && (*this)[0]== *first && (*this)[1] == *(first + 1) && ... &&
                 (*this)[std::distance(first, last) - 1] == *(last - 1)</code>
               </dd>
@@ -4307,8 +4610,8 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code>operator=</code>,
-                <code><a href="#classboost_1_1circular__buffer_19ba4a81df16f386d31b04b49c82d1ada">assign(size_type,
+                <code>operator=</code>, <code><a href=
+                "#classboost_1_1circular__buffer_19ba4a81df16f386d31b04b49c82d1ada">assign(size_type,
                 const_reference)</a></code>, <code><a href=
                 "#classboost_1_1circular__buffer_1aa10b4e4ec1f1c5918931b04b31d43ca">assign(capacity_type, size_type,
                 const_reference)</a></code>, <code><a href=
@@ -4348,9 +4651,9 @@
                 <b>Effect:</b>
               </dt>
               <dd>
-                <code>capacity() ==
+                <code>capacity() ==
                 capacity && <a href=
-                "#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> <=
+                "#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> <=
                 std::distance(first, last) && (*this)[0]== *(last - capacity) && (*this)[1] == *(last -
                 capacity + 1) && ... && (*this)[capacity - 1] == *(last - 1)</code><br>
                 <br>
@@ -4438,8 +4741,8 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code>operator=</code>,
-                <code><a href="#classboost_1_1circular__buffer_19ba4a81df16f386d31b04b49c82d1ada">assign(size_type,
+                <code>operator=</code>, <code><a href=
+                "#classboost_1_1circular__buffer_19ba4a81df16f386d31b04b49c82d1ada">assign(size_type,
                 const_reference)</a></code>, <code><a href=
                 "#classboost_1_1circular__buffer_1aa10b4e4ec1f1c5918931b04b31d43ca">assign(capacity_type, size_type,
                 const_reference)</a></code>, <code><a href=
@@ -4539,7 +4842,7 @@
                 <b>Effect:</b>
               </dt>
               <dd>
-                if <code>capacity()
+                if <code>capacity()
                 > 0</code> then <code><a href=
                 "#classboost_1_1circular__buffer_1d985d974020f88bb4255d8edbae0a30a">back()</a> == item</code><br>
                 If the <code>circular_buffer</code> is full, the first element will be removed. If the capacity is
@@ -4568,6 +4871,9 @@
               <dd>
                 Whatever <code>T::T(const T&)</code> throws.
               </dd>
+              <dd>
+                Whatever <code>T::operator = (const T&)</code> throws.
+              </dd>
             </dl>
             <dl>
               <dt>
@@ -4621,7 +4927,7 @@
                 <b>Effect:</b>
               </dt>
               <dd>
-                if <code>capacity()
+                if <code>capacity()
                 > 0</code> then <code><a href=
                 "#classboost_1_1circular__buffer_10d5fdeabeb352f47d1f7bb1ea8d9819f">front()</a> == item</code><br>
                 If the <code>circular_buffer</code> is full, the last element will be removed. If the capacity is
@@ -4650,6 +4956,9 @@
               <dd>
                 Whatever <code>T::T(const T&)</code> throws.
               </dd>
+              <dd>
+                Whatever <code>T::operator = (const T&)</code> throws.
+              </dd>
             </dl>
             <dl>
               <dt>
@@ -4978,11 +5287,11 @@
               <dd>
                 The number of <code>min[n, (pos - <a href=
                 "#classboost_1_1circular__buffer_158d1ede2e85f5d46eda8db3f0c4efef0">begin()</a>) + <a href=
-                "#classboost_1_1circular__buffer_17e144e8c7acd8e30c08bfb03391a2338">reserve()</a>]</code> elements will
+                "#classboost_1_1circular__buffer_10a02c4fbc53385e98569e810be9843de">reserve()</a>]</code> elements will
                 be inserted at the position <code>pos</code>.<br>
                 The number of <code>min[pos - <a href=
                 "#classboost_1_1circular__buffer_158d1ede2e85f5d46eda8db3f0c4efef0">begin()</a>, max[0, n - <a href=
-                "#classboost_1_1circular__buffer_17e144e8c7acd8e30c08bfb03391a2338">reserve()</a>]]</code> elements
+                "#classboost_1_1circular__buffer_10a02c4fbc53385e98569e810be9843de">reserve()</a>]]</code> elements
                 will be overwritten at the beginning of the <code>circular_buffer</code>.<br>
                 (See <i>Example</i> for the explanation.)
               </dd>
@@ -5058,7 +5367,7 @@
               </dt>
               <dd>
                 Linear (in <code>min[<a href=
-                "#classboost_1_1circular__buffer_1da435a5884cad746ed5cd55bcb892035">capacity()</a>, std::distance(pos,
+                "#classboost_1_1circular__buffer_15ebab2b2538d733790b5752582728e77">capacity()</a>, std::distance(pos,
                 <a href="#classboost_1_1circular__buffer_1babfa093dad7801223b80626b598dee1">end()</a>) + n]</code>).
               </dd>
             </dl>
@@ -5132,12 +5441,12 @@
               <dd>
                 Elements from the range <code>[first + max[0, distance(first, last) - (pos - <a href=
                 "#classboost_1_1circular__buffer_158d1ede2e85f5d46eda8db3f0c4efef0">begin()</a>) - <a href=
-                "#classboost_1_1circular__buffer_17e144e8c7acd8e30c08bfb03391a2338">reserve()</a>], last)</code> will
+                "#classboost_1_1circular__buffer_10a02c4fbc53385e98569e810be9843de">reserve()</a>], last)</code> will
                 be inserted at the position <code>pos</code>.<br>
                 The number of <code>min[pos - <a href=
                 "#classboost_1_1circular__buffer_158d1ede2e85f5d46eda8db3f0c4efef0">begin()</a>, max[0, distance(first,
                 last) - <a href=
-                "#classboost_1_1circular__buffer_17e144e8c7acd8e30c08bfb03391a2338">reserve()</a>]]</code> elements
+                "#classboost_1_1circular__buffer_10a02c4fbc53385e98569e810be9843de">reserve()</a>]]</code> elements
                 will be overwritten at the beginning of the <code>circular_buffer</code>.<br>
                 (See <i>Example</i> for the explanation.)
               </dd>
@@ -5215,7 +5524,7 @@
                 Linear (in <code>[std::distance(pos, <a href=
                 "#classboost_1_1circular__buffer_1babfa093dad7801223b80626b598dee1">end()</a>) + std::distance(first,
                 last)]</code>; in <code>min[<a href=
-                "#classboost_1_1circular__buffer_1da435a5884cad746ed5cd55bcb892035">capacity()</a>, std::distance(pos,
+                "#classboost_1_1circular__buffer_15ebab2b2538d733790b5752582728e77">capacity()</a>, std::distance(pos,
                 <a href="#classboost_1_1circular__buffer_1babfa093dad7801223b80626b598dee1">end()</a>) +
                 std::distance(first, last)]</code> if the <code>InputIterator</code> is a <a href=
                 "http://www.sgi.com/tech/stl/RandomAccessIterator.html">RandomAccessIterator</a>).
@@ -5413,11 +5722,11 @@
               <dd>
                 The number of <code>min[n, (<a href=
                 "#classboost_1_1circular__buffer_1babfa093dad7801223b80626b598dee1">end()</a> - pos) + <a href=
-                "#classboost_1_1circular__buffer_17e144e8c7acd8e30c08bfb03391a2338">reserve()</a>]</code> elements will
+                "#classboost_1_1circular__buffer_10a02c4fbc53385e98569e810be9843de">reserve()</a>]</code> elements will
                 be inserted before the position <code>pos</code>.<br>
                 The number of <code>min[<a href=
                 "#classboost_1_1circular__buffer_1babfa093dad7801223b80626b598dee1">end()</a> - pos, max[0, n -
-                reserve()]]</code>
+                reserve()]]</code>
                 elements will be overwritten at the end of the <code>circular_buffer</code>.<br>
                 (See <i>Example</i> for the explanation.)
               </dd>
@@ -5491,7 +5800,7 @@
               </dt>
               <dd>
                 Linear (in <code>min[<a href=
-                "#classboost_1_1circular__buffer_1da435a5884cad746ed5cd55bcb892035">capacity()</a>,
+                "#classboost_1_1circular__buffer_15ebab2b2538d733790b5752582728e77">capacity()</a>,
                 std::distance(begin(),
                 pos) + n]</code>).
               </dd>
@@ -5566,12 +5875,12 @@
               <dd>
                 Elements from the range <code>[first, last - max[0, distance(first, last) - (<a href=
                 "#classboost_1_1circular__buffer_1babfa093dad7801223b80626b598dee1">end()</a> - pos) - <a href=
-                "#classboost_1_1circular__buffer_17e144e8c7acd8e30c08bfb03391a2338">reserve()</a>])</code> will be
+                "#classboost_1_1circular__buffer_10a02c4fbc53385e98569e810be9843de">reserve()</a>])</code> will be
                 inserted before the position <code>pos</code>.<br>
                 The number of <code>min[<a href=
                 "#classboost_1_1circular__buffer_1babfa093dad7801223b80626b598dee1">end()</a> - pos, max[0,
                 distance(first, last) - <a href=
-                "#classboost_1_1circular__buffer_17e144e8c7acd8e30c08bfb03391a2338">reserve()</a>]]</code> elements
+                "#classboost_1_1circular__buffer_10a02c4fbc53385e98569e810be9843de">reserve()</a>]]</code> elements
                 will be overwritten at the end of the <code>circular_buffer</code>.<br>
                 (See <i>Example</i> for the explanation.)
               </dd>
@@ -5647,7 +5956,7 @@
                 Linear (in <code>[std::distance(<a href=
                 "#classboost_1_1circular__buffer_158d1ede2e85f5d46eda8db3f0c4efef0">begin()</a>, pos) +
                 std::distance(first, last)]</code>; in <code>min[<a href=
-                "#classboost_1_1circular__buffer_1da435a5884cad746ed5cd55bcb892035">capacity()</a>,
+                "#classboost_1_1circular__buffer_15ebab2b2538d733790b5752582728e77">capacity()</a>,
                 std::distance(begin(),
                 pos) + std::distance(first, last)]</code> if the <code>InputIterator</code> is a <a href=
                 "http://www.sgi.com/tech/stl/RandomAccessIterator.html">RandomAccessIterator</a>).
@@ -6161,7 +6470,7 @@
                 <b>Effect:</b>
               </dt>
               <dd>
-                <code>size() ==
+                <code>size() ==
                 0</code>
               </dd>
             </dl>
@@ -6261,8 +6570,8 @@
                 <b>Returns:</b>
               </dt>
               <dd>
-                <code>lhs.size() ==
-                rhs.size() &&
+                <code>lhs.size() ==
+                rhs.size() &&
                 <a href="http://www.sgi.com/tech/stl/equal.html">std::equal</a>(lhs.<a href=
                 "#classboost_1_1circular__buffer_158d1ede2e85f5d46eda8db3f0c4efef0">begin()</a>, lhs.<a href=
                 "#classboost_1_1circular__buffer_1babfa093dad7801223b80626b598dee1">end()</a>, rhs.<a href=
@@ -6803,25 +7112,60 @@
       version and came with many good ideas and improvements. Also, I would like to thank Howard Hinnant, Nigel Stewart
       and everyone who participated at the formal review for valuable comments and ideas.
     </p>
+    <h2>
+      <a name="relnotes" id="relnotes">Release Notes</a>
+    </h2>
+    <dl>
+      <dd>
+        <h3>
+          Boost 1.37
+        </h3>
+      </dd>
+      <dd>
+        <ul>
+          <li>Added new methods <code>is_linearized()</code> and <code>rotate(const_iterator)</code>.
+          </li>
+          <li>Fixed bugs:<br>
+            #1987 Patch to make <code>circular_buffer.hpp</code> #includes absolute.<br>
+            #1852 Copy constructor does not copy capacity.
+          </li>
+        </ul>
+      </dd>
+      <dd>
+        <h3>
+          Boost 1.36
+        </h3>
+      </dd>
+      <dd>
+        <ul>
+          <li>Changed behaviour of the <code>circular_buffer(const allocator_type&)</code> constructor. Since this
+          version the constructor does not allocate any memory and both capacity and size are set to zero.
+          </li>
+          <li>Fixed bug:<br>
+            #1919 Default constructed circular buffer throws <code>std::bad_alloc</code>.<br>
+          </li>
+        </ul>
+      </dd>
+      <dd>
+        <h3>
+          Boost 1.35
+        </h3>
+      </dd>
+      <dd>
+        <ul>
+          <li>Initial release.
+          </li>
+        </ul>
+      </dd>
+    </dl>
     <hr size="1">
-    <table id="footer" width="100%" border="0">
-      <tr valign="top">
-        <td valign="top" align="left">
-          <p>
-            <small>Copyright © 2003-2007 Jan Gaspar</small>
-          </p>
-          <p>
-            <small>Use, modification, and distribution is subject to the Boost Software License, Version 1.0.<br>
-            (See accompanying file <code>LICENSE_1_0.txt</code> or copy at <a href=
-            "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt>)</small>
-          </p>
-        </td>
-        <td valign="top" align="right">
-          <a href="http://validator.w3.org/check?uri=referer"><img border="0" src=
-          "http://www.w3.org/Icons/valid-html401" alt="This is a Valid HTML 4.01 Transitional Document." height="31"
-          width="88"></a>
-        </td>
-      </tr>
-    </table>
+    <p>
+      <small>Copyright © 2003-2008 Jan Gaspar</small>
+    </p>
+    <p>
+      <small>Use, modification, and distribution is subject to the Boost Software License, Version 1.0.<br>
+      (See accompanying file <code>LICENSE_1_0.txt</code> or copy at <a href=
+      "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt>)</small>
+    </p>
   </body>
 </html>
Modified: branches/release/libs/circular_buffer/doc/circular_buffer.xslt
==============================================================================
--- branches/release/libs/circular_buffer/doc/circular_buffer.xslt	(original)
+++ branches/release/libs/circular_buffer/doc/circular_buffer.xslt	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -3,7 +3,7 @@
 XSL transformation from the XML files generated by Doxygen into XHTML source
 code documentation of the circular_buffer.
 
-Copyright (c) 2007 Jan Gaspar
+Copyright (c) 2003-2008 Jan Gaspar
 
 Use, modification, and distribution is subject to the Boost Software
 License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Modified: branches/release/libs/circular_buffer/doc/copy.xslt
==============================================================================
--- branches/release/libs/circular_buffer/doc/copy.xslt	(original)
+++ branches/release/libs/circular_buffer/doc/copy.xslt	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -2,7 +2,7 @@
 <!--
 Helper XSL transformation making plain copy of an XML tree.
 
-Copyright (c) 2007 Jan Gaspar
+Copyright (c) 2003-2008 Jan Gaspar
 
 Use, modification, and distribution is subject to the Boost Software
 License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Modified: branches/release/libs/circular_buffer/doc/doxygen2html.xslt
==============================================================================
--- branches/release/libs/circular_buffer/doc/doxygen2html.xslt	(original)
+++ branches/release/libs/circular_buffer/doc/doxygen2html.xslt	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -3,7 +3,7 @@
 Generic XSL transformation from the XML files generated by Doxygen into XHTML
 source code documentation.
 
-Copyright (c) 2007 Jan Gaspar
+Copyright (c) 2003-2008 Jan Gaspar
 
 Use, modification, and distribution is subject to the Boost Software
 License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Modified: branches/release/libs/circular_buffer/doc/html2xhtml.xslt
==============================================================================
--- branches/release/libs/circular_buffer/doc/html2xhtml.xslt	(original)
+++ branches/release/libs/circular_buffer/doc/html2xhtml.xslt	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -2,7 +2,7 @@
 <!--
 Helper XSL transformation which converts HTML into XHTML.
 
-Copyright (c) 2007 Jan Gaspar
+Copyright (c) 2003-2008 Jan Gaspar
 
 Use, modification, and distribution is subject to the Boost Software
 License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Modified: branches/release/libs/circular_buffer/doc/space_optimized.html
==============================================================================
--- branches/release/libs/circular_buffer/doc/space_optimized.html	(original)
+++ branches/release/libs/circular_buffer/doc/space_optimized.html	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -35,7 +35,8 @@
     <a href="#constructors">Constructors and Destructor</a><br>
     <a href="#methods">Specific Public Member Functions</a><br>
     <a href="#see">See also</a><br>
-    Acknowledgements
+    Acknowledgements<br>
+    Release Notes
     <h2>
       <a name="description" id="description">Description</a>
     </h2>
@@ -136,24 +137,24 @@
 "#classboost_1_1circular__buffer__space__optimized_16839c3ea656ff0f800e38096748fe8ac">~circular_buffer_space_optimized</a>();
 
    allocator_type <a href=
-"circular_buffer.html#classboost_1_1circular__buffer_15693ba52e58ef90f1d914cbb63143cd3">get_allocator</a>() const;
+"circular_buffer.html#classboost_1_1circular__buffer_1a20b7d0e7a4da0af13286df9f53d660c">get_allocator</a>() const;
    allocator_type& <a href=
 "circular_buffer.html#classboost_1_1circular__buffer_1af7758a36ac2f84a3024b50b4fc7e098">get_allocator</a>();
    iterator <a href=
 "circular_buffer.html#classboost_1_1circular__buffer_158d1ede2e85f5d46eda8db3f0c4efef0">begin</a>();
    iterator end();
    const_iterator <a href=
-"circular_buffer.html#classboost_1_1circular__buffer_1ee6c38b2ecdc8dfec79975dbc685c80b">begin</a>() const;
+"circular_buffer.html#classboost_1_1circular__buffer_10640d3d41c13b6089b6f169224cf1038">begin</a>() const;
    const_iterator <a href=
-"circular_buffer.html#classboost_1_1circular__buffer_19813e1d191cd04c4cfc100bbc4733e92">end</a>() const;
+"circular_buffer.html#classboost_1_1circular__buffer_17890810d07bc595cfb87f9c47cb075ac">end</a>() const;
    reverse_iterator <a href=
 "circular_buffer.html#classboost_1_1circular__buffer_1db3d6b10b6763549f54d2627228fa7aa">rbegin</a>();
    reverse_iterator <a href=
 "circular_buffer.html#classboost_1_1circular__buffer_1cff9236a50107188b8942847a4dc2697">rend</a>();
    const_reverse_iterator <a href=
-"circular_buffer.html#classboost_1_1circular__buffer_146a8356a1aec6abca9c44cfc60b3bb10">rbegin</a>() const;
+"circular_buffer.html#classboost_1_1circular__buffer_1765d91bf48341907418433a1e3aab026">rbegin</a>() const;
    const_reverse_iterator <a href=
-"circular_buffer.html#classboost_1_1circular__buffer_1a09f7111dde9f52a4d8babfcdef7e798">rend</a>() const;
+"circular_buffer.html#classboost_1_1circular__buffer_108dbf538b00a14daf5582ece80746fc3">rend</a>() const;
    reference <a href=
 "circular_buffer.html#classboost_1_1circular__buffer_1d219f0d3203fb43b964a8cf63f1865cd">operator[]</a>(size_type index);
    const_reference <a href=
@@ -167,30 +168,34 @@
    reference <a href=
 "circular_buffer.html#classboost_1_1circular__buffer_1d985d974020f88bb4255d8edbae0a30a">back</a>();
    const_reference <a href=
-"circular_buffer.html#classboost_1_1circular__buffer_13261c47e81bb5e447fb0d70f096728b8">front</a>() const;
+"circular_buffer.html#classboost_1_1circular__buffer_10df8595d83bb9d8a7ce50aabc678f90b">front</a>() const;
    const_reference <a href=
-"circular_buffer.html#classboost_1_1circular__buffer_14cd3a019a9d99b4e29918b51c2181a07">back</a>() const;
+"circular_buffer.html#classboost_1_1circular__buffer_1027201797868c6274feb6712f670a132">back</a>() const;
    array_range <a href=
 "circular_buffer.html#classboost_1_1circular__buffer_1957cccdcb0c4ef7d80a34a990065818d">array_one</a>();
    array_range <a href=
 "circular_buffer.html#classboost_1_1circular__buffer_1f5081a54afbc2dfc1a7fb20329df7d5b">array_two</a>();
    const_array_range <a href=
-"circular_buffer.html#classboost_1_1circular__buffer_1586cfbdef335f1d3d31faacec63f7b04">array_one</a>() const;
+"circular_buffer.html#classboost_1_1circular__buffer_10f4b157e27b1170a571417986b239945">array_one</a>() const;
    const_array_range <a href=
-"circular_buffer.html#classboost_1_1circular__buffer_191a0e2c33c0e5b4d7b8c497847bc29ce">array_two</a>() const;
+"circular_buffer.html#classboost_1_1circular__buffer_1bb8eb0f298ad2012c55c5303e1f174d5">array_two</a>() const;
    pointer <a href=
 "circular_buffer.html#classboost_1_1circular__buffer_1ea728bf57f91aa8946eddf76ce816a4e">linearize</a>();
+   bool <a href=
+"circular_buffer.html#classboost_1_1circular__buffer_120f64448dc0723cc68c1096f6b00bc0a">is_linearized</a>() const;
+   void <a href=
+"circular_buffer.html#classboost_1_1circular__buffer_1c591bb9e271b10b5240afcff3bd2c619">rotate</a>(const_iterator new_begin);
    size_type <a href=
-"circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size</a>() const;
+"circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size</a>() const;
    size_type <a href=
-"circular_buffer.html#classboost_1_1circular__buffer_195158ed4d4b03794068e259f85291995">max_size</a>() const;
+"circular_buffer.html#classboost_1_1circular__buffer_157e2d506bc274b2a63fbe1b8fcafebd7">max_size</a>() const;
    bool <a href=
-"circular_buffer.html#classboost_1_1circular__buffer_105acab2b9a0b41044b5241cfc9d87663">empty</a>() const;
-   bool full() const;
+"circular_buffer.html#classboost_1_1circular__buffer_15be1c2a005ec9828549ef6dd7ebed583">empty</a>() const;
+   bool full() const;
    size_type <a href=
-"#classboost_1_1circular__buffer__space__optimized_100d0c06a38f789ae760709cc86420ae4">reserve</a>() const;
+"#classboost_1_1circular__buffer__space__optimized_170eec72a6e8d088b58e26ac7e2dd7c9f">reserve</a>() const;
    const capacity_type& <a href=
-"#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity</a>() const;
+"#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity</a>() const;
    void <a href=
 "#classboost_1_1circular__buffer__space__optimized_149f28bc5b33d2062b9f6a33b48264e3f">set_capacity</a>(const capacity_type& capacity_ctrl);
    void <a href=
@@ -342,7 +347,7 @@
                 <code>capacity >= min_capacity</code>
               </dd>
             </dl>The <code><a href=
-            "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a></code>
+            "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a></code>
             represents the capacity of the <code>circular_buffer_space_optimized</code> and the
             <code>min_capacity()</code> determines the minimal allocated size of its internal buffer. The converting
             constructor of the <code>capacity_control</code> allows implicit conversion from
@@ -368,23 +373,19 @@
             "circular_buffer.html#classboost_1_1circular__buffer_14e07c6ddfe89debe384e59bed06e7cb7">allocator_type</a>&
             alloc = allocator_type());</b></code><br>
             <br>
-            Create an empty space optimized circular buffer with a maximum capacity.
+            Create an empty space optimized circular buffer with zero capacity.
             <dl>
               <dt>
                 <b>Effect:</b>
               </dt>
               <dd>
                 <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a>.capacity()
-                == <a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_195158ed4d4b03794068e259f85291995">max_size()</a>
-                && <a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a>.min_capacity()
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a>.capacity()
                 == 0 && <a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> ==
-                0</code><br>
-                <br>
-                There is no memory allocated in the internal buffer.
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a>.min_capacity()
+                == 0 && <a href=
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> ==
+                0</code>
               </dd>
             </dl>
             <dl>
@@ -418,6 +419,15 @@
                 Constant.
               </dd>
             </dl>
+            <dl>
+              <dt>
+                <b>Warning:</b>
+              </dt>
+              <dd>
+                Since Boost version 1.36 the behaviour of this constructor has changed. Now it creates a space
+                optimized circular buffer with zero capacity.
+              </dd>
+            </dl>
           </td>
         </tr>
         <tr>
@@ -437,9 +447,9 @@
               </dt>
               <dd>
                 <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a> ==
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a> ==
                 capacity_ctrl && <a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> ==
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> ==
                 0</code><br>
                 <br>
                 The amount of allocated memory in the internal buffer is <code>capacity_ctrl.min_capacity()</code>.
@@ -508,9 +518,9 @@
               </dt>
               <dd>
                 <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a> ==
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a> ==
                 capacity_ctrl && <a href=
-                "#classboost_1_1circular__buffer__space__optimized_15f5e6fb070d2484eaa037cdf4ffd69a8">full()</a>
+                "#classboost_1_1circular__buffer__space__optimized_142f4a13c50904a4ac0bf746c88451954">full()</a>
                 && (*this)[0] == item && (*this)[1] == item && ... && (*this)
                 [capacity_ctrl.capacity() - 1] == item</code><br>
                 <br>
@@ -603,9 +613,9 @@
               </dt>
               <dd>
                 <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a> ==
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a> ==
                 capacity_ctrl && <a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> == n
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> == n
                 && (*this)[0] == item && (*this)[1] == item && ... && (*this)[n - 1] ==
                 item</code><br>
                 <br>
@@ -765,11 +775,11 @@
               </dt>
               <dd>
                 <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a>.capacity()
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a>.capacity()
                 == std::distance(first, last) && <a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a>.min_capacity()
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a>.min_capacity()
                 == 0 && <a href=
-                "#classboost_1_1circular__buffer__space__optimized_15f5e6fb070d2484eaa037cdf4ffd69a8">full()</a>
+                "#classboost_1_1circular__buffer__space__optimized_142f4a13c50904a4ac0bf746c88451954">full()</a>
                 && (*this)[0]== *first && (*this)[1] == *(first + 1) && ... &&
                 (*this)[std::distance(first, last) - 1] == *(last - 1)</code><br>
                 <br>
@@ -862,9 +872,9 @@
               </dt>
               <dd>
                 <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a> ==
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a> ==
                 capacity_ctrl && <a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a>
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a>
                 <= std::distance(first, last) && (*this)[0]== (last - capacity_ctrl.capacity()) &&
                 (*this)[1] == *(last - capacity_ctrl.capacity() + 1) && ... &&
                 (*this)[capacity_ctrl.capacity() - 1] == *(last - 1)</code><br>
@@ -1008,8 +1018,8 @@
       <table id="table_methods" border="1" cellpadding="3">
         <tr>
           <td>
-            <a id="classboost_1_1circular__buffer__space__optimized_15f5e6fb070d2484eaa037cdf4ffd69a8" name=
-            "classboost_1_1circular__buffer__space__optimized_15f5e6fb070d2484eaa037cdf4ffd69a8"></a><code><b>bool
+            <a id="classboost_1_1circular__buffer__space__optimized_142f4a13c50904a4ac0bf746c88451954" name=
+            "classboost_1_1circular__buffer__space__optimized_142f4a13c50904a4ac0bf746c88451954"></a><code><b>bool
             full() const;</b></code><br>
             <br>
             Is the <code>circular_buffer_space_optimized</code> full?
@@ -1060,15 +1070,15 @@
               </dt>
               <dd>
                 <code><a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_105acab2b9a0b41044b5241cfc9d87663">empty()</a></code>
+                "circular_buffer.html#classboost_1_1circular__buffer_15be1c2a005ec9828549ef6dd7ebed583">empty()</a></code>
               </dd>
             </dl>
           </td>
         </tr>
         <tr>
           <td>
-            <a id="classboost_1_1circular__buffer__space__optimized_100d0c06a38f789ae760709cc86420ae4" name=
-            "classboost_1_1circular__buffer__space__optimized_100d0c06a38f789ae760709cc86420ae4"></a><code><b><a href=
+            <a id="classboost_1_1circular__buffer__space__optimized_170eec72a6e8d088b58e26ac7e2dd7c9f" name=
+            "classboost_1_1circular__buffer__space__optimized_170eec72a6e8d088b58e26ac7e2dd7c9f"></a><code><b><a href=
             "circular_buffer.html#classboost_1_1circular__buffer_19ba12c0142a21a7d960877c22fa3ea00">size_type</a>
             reserve() const;</b></code><br>
             <br>
@@ -1080,9 +1090,9 @@
               </dt>
               <dd>
                 <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a>.capacity()
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a>.capacity()
                 - <a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a></code>
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a></code>
               </dd>
             </dl>
             <dl>
@@ -1123,19 +1133,19 @@
               </dt>
               <dd>
                 <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a></code>,
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a></code>,
                 <code><a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a></code>,
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a></code>,
                 <code><a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_195158ed4d4b03794068e259f85291995">max_size()</a></code>
+                "circular_buffer.html#classboost_1_1circular__buffer_157e2d506bc274b2a63fbe1b8fcafebd7">max_size()</a></code>
               </dd>
             </dl>
           </td>
         </tr>
         <tr>
           <td>
-            <a id="classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353" name=
-            "classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353"></a><code><b>const
+            <a id="classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa" name=
+            "classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa"></a><code><b>const
             <a href=
             "#classboost_1_1circular__buffer__space__optimized_1051350e031c50c8b4a7ca1e1902e92f0">capacity_type</a>&
             capacity() const;</b></code><br>
@@ -1188,11 +1198,11 @@
               </dt>
               <dd>
                 <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_100d0c06a38f789ae760709cc86420ae4">reserve()</a></code>,
+                "#classboost_1_1circular__buffer__space__optimized_170eec72a6e8d088b58e26ac7e2dd7c9f">reserve()</a></code>,
                 <code><a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a></code>,
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a></code>,
                 <code><a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_195158ed4d4b03794068e259f85291995">max_size()</a></code>,
+                "circular_buffer.html#classboost_1_1circular__buffer_157e2d506bc274b2a63fbe1b8fcafebd7">max_size()</a></code>,
                 <code><a href=
                 "#classboost_1_1circular__buffer__space__optimized_149f28bc5b33d2062b9f6a33b48264e3f">set_capacity(const
                 capacity_type&)</a></code>
@@ -1216,14 +1226,14 @@
               </dt>
               <dd>
                 <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a> ==
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a> ==
                 capacity_ctrl && <a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a>
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a>
                 <= capacity_ctrl.capacity()</code><br>
                 <br>
                 If the current number of elements stored in the <code>circular_buffer_space_optimized</code> is greater
                 than the desired new capacity then number of <code>[<a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> -
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> -
                 capacity_ctrl.capacity()]</code> <b>last</b> elements will be removed and the new size will be equal to
                 <code>capacity_ctrl.capacity()</code>.<br>
                 <br>
@@ -1283,7 +1293,7 @@
               </dt>
               <dd>
                 Linear (in <code>min[<a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a>,
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a>,
                 capacity_ctrl.capacity()]</code>).
               </dd>
             </dl>
@@ -1337,9 +1347,9 @@
               </dt>
               <dd>
                 <code><a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> ==
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> ==
                 new_size && <a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a>.capacity()
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a>.capacity()
                 >= new_size</code><br>
                 <br>
                 If the new size is greater than the current size, copies of <code>item</code> will be inserted at the
@@ -1349,7 +1359,7 @@
                 <br>
                 If the current number of elements stored in the <code>circular_buffer_space_optimized</code> is greater
                 than the desired new size then number of <code>[<a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> -
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> -
                 new_size]</code> <b>last</b> elements will be removed. (The capacity will remain unchanged.)<br>
                 <br>
                 The amount of allocated memory in the internal buffer may be accommodated as necessary.
@@ -1449,14 +1459,14 @@
               </dt>
               <dd>
                 <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a> ==
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a> ==
                 capacity_ctrl && <a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a>
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a>
                 <= capacity_ctrl</code><br>
                 <br>
                 If the current number of elements stored in the <code>circular_buffer_space_optimized</code> is greater
                 than the desired new capacity then number of <code>[<a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> -
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> -
                 capacity_ctrl.capacity()]</code> <b>first</b> elements will be removed and the new size will be equal
                 to <code>capacity_ctrl.capacity()</code>.<br>
                 <br>
@@ -1516,7 +1526,7 @@
               </dt>
               <dd>
                 Linear (in <code>min[<a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a>,
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a>,
                 capacity_ctrl.capacity()]</code>).
               </dd>
             </dl>
@@ -1551,9 +1561,9 @@
               </dt>
               <dd>
                 <code><a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> ==
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> ==
                 new_size && <a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a>.capacity()
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a>.capacity()
                 >= new_size</code><br>
                 <br>
                 If the new size is greater than the current size, copies of <code>item</code> will be inserted at the
@@ -1563,7 +1573,7 @@
                 <br>
                 If the current number of elements stored in the <code>circular_buffer_space_optimized</code> is greater
                 than the desired new size then number of <code>[<a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> -
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> -
                 new_size]</code> <b>first</b> elements will be removed. (The capacity will remain unchanged.)<br>
                 <br>
                 The amount of allocated memory in the internal buffer may be accommodated as necessary.
@@ -1760,11 +1770,11 @@
               </dt>
               <dd>
                 <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a>.capacity()
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a>.capacity()
                 == n && <a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a>.min_capacity()
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a>.min_capacity()
                 == 0 && <a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> == n
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> == n
                 && (*this)[0] == item && (*this)[1] == item && ... && (*this) [n - 1]
                 == item</code><br>
                 <br>
@@ -1839,9 +1849,7 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_177e35432c5e69b7a16ef7d937950e7a8">operator=</a></code>,
-                <code><a href=
+                <code>operator=</code>, <code><a href=
                 "#classboost_1_1circular__buffer__space__optimized_1108055ae3f6b1635e1428b0455902cbf">assign(capacity_type,
                 size_type, const_reference)</a></code>, <code><a href=
                 "#classboost_1_1circular__buffer__space__optimized_1417de2c2419c44d83a92c463762df5fb">assign(InputIterator,
@@ -1884,9 +1892,9 @@
               </dt>
               <dd>
                 <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a> ==
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a> ==
                 capacity_ctrl && <a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> == n
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> == n
                 && (*this)[0] == item && (*this)[1] == item && ... && (*this) [n - 1]
                 == item</code><br>
                 <br>
@@ -1971,9 +1979,7 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_177e35432c5e69b7a16ef7d937950e7a8">operator=</a></code>,
-                <code><a href=
+                <code>operator=</code>, <code><a href=
                 "#classboost_1_1circular__buffer__space__optimized_17ca4fda9526d0dad99706763c3b2d9f1">assign(size_type,
                 const_reference)</a></code>, <code><a href=
                 "#classboost_1_1circular__buffer__space__optimized_1417de2c2419c44d83a92c463762df5fb">assign(InputIterator,
@@ -2012,11 +2018,11 @@
               </dt>
               <dd>
                 <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a>.capacity()
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a>.capacity()
                 == std::distance(first, last) && <a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a>.min_capacity()
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a>.min_capacity()
                 == 0 && <a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> ==
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> ==
                 std::distance(first, last) && (*this)[0]== *first && (*this)[1] == *(first + 1)
                 && ... && (*this)[std::distance(first, last) - 1] == *(last - 1)</code><br>
                 <br>
@@ -2091,9 +2097,7 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_177e35432c5e69b7a16ef7d937950e7a8">operator=</a></code>,
-                <code><a href=
+                <code>operator=</code>, <code><a href=
                 "#classboost_1_1circular__buffer__space__optimized_17ca4fda9526d0dad99706763c3b2d9f1">assign(size_type,
                 const_reference)</a></code>, <code><a href=
                 "#classboost_1_1circular__buffer__space__optimized_1108055ae3f6b1635e1428b0455902cbf">assign(capacity_type,
@@ -2135,9 +2139,9 @@
               </dt>
               <dd>
                 <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a> ==
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a> ==
                 capacity_ctrl && <a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a>
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a>
                 <= std::distance(first, last) && (*this)[0]== *(last - capacity) && (*this)[1] ==
                 *(last - capacity + 1) && ... && (*this)[capacity - 1] == *(last - 1)</code><br>
                 <br>
@@ -2229,9 +2233,7 @@
                 <b>See Also:</b>
               </dt>
               <dd>
-                <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_177e35432c5e69b7a16ef7d937950e7a8">operator=</a></code>,
-                <code><a href=
+                <code>operator=</code>, <code><a href=
                 "#classboost_1_1circular__buffer__space__optimized_17ca4fda9526d0dad99706763c3b2d9f1">assign(size_type,
                 const_reference)</a></code>, <code><a href=
                 "#classboost_1_1circular__buffer__space__optimized_1108055ae3f6b1635e1428b0455902cbf">assign(capacity_type,
@@ -2336,7 +2338,7 @@
               </dt>
               <dd>
                 if <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a>.capacity()
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a>.capacity()
                 > 0</code> then <code><a href=
                 "circular_buffer.html#classboost_1_1circular__buffer_1d985d974020f88bb4255d8edbae0a30a">back()</a> ==
                 item</code><br>
@@ -2429,7 +2431,7 @@
               </dt>
               <dd>
                 if <code><a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a>.capacity()
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a>.capacity()
                 > 0</code> then <code><a href=
                 "circular_buffer.html#classboost_1_1circular__buffer_10d5fdeabeb352f47d1f7bb1ea8d9819f">front()</a> ==
                 item</code><br>
@@ -2820,12 +2822,12 @@
                 The number of <code>min[n, (pos - <a href=
                 "circular_buffer.html#classboost_1_1circular__buffer_158d1ede2e85f5d46eda8db3f0c4efef0">begin()</a>) +
                 <a href=
-                "#classboost_1_1circular__buffer__space__optimized_100d0c06a38f789ae760709cc86420ae4">reserve()</a>]</code>
+                "#classboost_1_1circular__buffer__space__optimized_170eec72a6e8d088b58e26ac7e2dd7c9f">reserve()</a>]</code>
                 elements will be inserted at the position <code>pos</code>.<br>
                 The number of <code>min[pos - <a href=
                 "circular_buffer.html#classboost_1_1circular__buffer_158d1ede2e85f5d46eda8db3f0c4efef0">begin()</a>,
                 max[0, n - <a href=
-                "#classboost_1_1circular__buffer__space__optimized_100d0c06a38f789ae760709cc86420ae4">reserve()</a>]]</code>
+                "#classboost_1_1circular__buffer__space__optimized_170eec72a6e8d088b58e26ac7e2dd7c9f">reserve()</a>]]</code>
                 elements will be overwritten at the beginning of the <code>circular_buffer_space_optimized</code>.<br>
                 (See <i>Example</i> for the explanation.)<br>
                 <br>
@@ -2906,9 +2908,9 @@
               </dt>
               <dd>
                 Linear (in <code>min[<a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a>.capacity(),
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a>.capacity(),
                 <a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> +
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> +
                 n]</code>).
               </dd>
             </dl>
@@ -2986,12 +2988,12 @@
                 Elements from the range <code>[first + max[0, distance(first, last) - (pos - <a href=
                 "circular_buffer.html#classboost_1_1circular__buffer_158d1ede2e85f5d46eda8db3f0c4efef0">begin()</a>) -
                 <a href=
-                "#classboost_1_1circular__buffer__space__optimized_100d0c06a38f789ae760709cc86420ae4">reserve()</a>],
+                "#classboost_1_1circular__buffer__space__optimized_170eec72a6e8d088b58e26ac7e2dd7c9f">reserve()</a>],
                 last)</code> will be inserted at the position <code>pos</code>.<br>
                 The number of <code>min[pos - <a href=
                 "circular_buffer.html#classboost_1_1circular__buffer_158d1ede2e85f5d46eda8db3f0c4efef0">begin()</a>,
                 max[0, distance(first, last) - <a href=
-                "#classboost_1_1circular__buffer__space__optimized_100d0c06a38f789ae760709cc86420ae4">reserve()</a>]]</code>
+                "#classboost_1_1circular__buffer__space__optimized_170eec72a6e8d088b58e26ac7e2dd7c9f">reserve()</a>]]</code>
                 elements will be overwritten at the beginning of the <code>circular_buffer_space_optimized</code>.<br>
                 (See <i>Example</i> for the explanation.)<br>
                 <br>
@@ -3072,11 +3074,11 @@
               </dt>
               <dd>
                 Linear (in <code>[<a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> +
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> +
                 std::distance(first, last)]</code>; in <code>min[<a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a>.capacity(),
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a>.capacity(),
                 <a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> +
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> +
                 std::distance(first, last)]</code> if the <code>InputIterator</code> is a <a href=
                 "http://www.sgi.com/tech/stl/RandomAccessIterator.html">RandomAccessIterator</a>).
               </dd>
@@ -3291,12 +3293,12 @@
                 The number of <code>min[n, (<a href=
                 "circular_buffer.html#classboost_1_1circular__buffer_1babfa093dad7801223b80626b598dee1">end()</a> -
                 pos) + <a href=
-                "#classboost_1_1circular__buffer__space__optimized_100d0c06a38f789ae760709cc86420ae4">reserve()</a>]</code>
+                "#classboost_1_1circular__buffer__space__optimized_170eec72a6e8d088b58e26ac7e2dd7c9f">reserve()</a>]</code>
                 elements will be inserted before the position <code>pos</code>.<br>
                 The number of <code>min[<a href=
                 "circular_buffer.html#classboost_1_1circular__buffer_1babfa093dad7801223b80626b598dee1">end()</a> -
                 pos, max[0, n - <a href=
-                "#classboost_1_1circular__buffer__space__optimized_100d0c06a38f789ae760709cc86420ae4">reserve()</a>]]</code>
+                "#classboost_1_1circular__buffer__space__optimized_170eec72a6e8d088b58e26ac7e2dd7c9f">reserve()</a>]]</code>
                 elements will be overwritten at the end of the <code>circular_buffer_space_optimized</code>.<br>
                 (See <i>Example</i> for the explanation.)<br>
                 <br>
@@ -3377,9 +3379,9 @@
               </dt>
               <dd>
                 Linear (in <code>min[<a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a>.capacity(),
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a>.capacity(),
                 <a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> +
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> +
                 n]</code>).
               </dd>
             </dl>
@@ -3457,12 +3459,12 @@
                 Elements from the range <code>[first, last - max[0, distance(first, last) - (<a href=
                 "circular_buffer.html#classboost_1_1circular__buffer_1babfa093dad7801223b80626b598dee1">end()</a> -
                 pos) - <a href=
-                "#classboost_1_1circular__buffer__space__optimized_100d0c06a38f789ae760709cc86420ae4">reserve()</a>])</code>
+                "#classboost_1_1circular__buffer__space__optimized_170eec72a6e8d088b58e26ac7e2dd7c9f">reserve()</a>])</code>
                 will be inserted before the position <code>pos</code>.<br>
                 The number of <code>min[<a href=
                 "circular_buffer.html#classboost_1_1circular__buffer_1babfa093dad7801223b80626b598dee1">end()</a> -
                 pos, max[0, distance(first, last) - <a href=
-                "#classboost_1_1circular__buffer__space__optimized_100d0c06a38f789ae760709cc86420ae4">reserve()</a>]]</code>
+                "#classboost_1_1circular__buffer__space__optimized_170eec72a6e8d088b58e26ac7e2dd7c9f">reserve()</a>]]</code>
                 elements will be overwritten at the end of the <code><a href=
                 "circular_buffer.html#classboost_1_1circular__buffer">circular_buffer</a></code>.<br>
                 (See <i>Example</i> for the explanation.)<br>
@@ -3544,11 +3546,11 @@
               </dt>
               <dd>
                 Linear (in <code>[<a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> +
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> +
                 std::distance(first, last)]</code>; in <code>min[<a href=
-                "#classboost_1_1circular__buffer__space__optimized_1ea8a89fbae5e03b364ac28e5dc49e353">capacity()</a>.capacity(),
+                "#classboost_1_1circular__buffer__space__optimized_1aa2695c84ac9fc912e28d1a5920dadfa">capacity()</a>.capacity(),
                 <a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> +
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> +
                 std::distance(first, last)]</code> if the <code>InputIterator</code> is a <a href=
                 "http://www.sgi.com/tech/stl/RandomAccessIterator.html">RandomAccessIterator</a>).
               </dd>
@@ -4098,7 +4100,7 @@
               </dt>
               <dd>
                 <code><a href=
-                "circular_buffer.html#classboost_1_1circular__buffer_1d666f694897465b0d4d7cdd8ddcbc213">size()</a> ==
+                "circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size()</a> ==
                 0</code><br>
                 <br>
                 The amount of allocated memory in the internal buffer may be predictively decreased.
@@ -4174,25 +4176,53 @@
     <p>
       The idea of the space optimized circular buffer has been introduced by Pavel Vozenilek.
     </p>
+    <h2>
+      <a name="relnotes" id="relnotes">Release Notes</a>
+    </h2>
+    <dl>
+      <dd>
+        <h3>
+          Boost 1.37
+        </h3>
+      </dd>
+      <dd>
+        <ul>
+          <li>Added new methods <code>is_linearized()</code> and <code>rotate(const_iterator)</code>.
+          </li>
+        </ul>
+      </dd>
+      <dd>
+        <h3>
+          Boost 1.36
+        </h3>
+      </dd>
+      <dd>
+        <ul>
+          <li>Changed behaviour of the <code>circular_buffer_space_optimized(const allocator_type&)</code>
+          constructor. Since this version the constructor sets the capacity to zero.
+          </li>
+        </ul>
+      </dd>
+      <dd>
+        <h3>
+          Boost 1.35
+        </h3>
+      </dd>
+      <dd>
+        <ul>
+          <li>Initial release.
+          </li>
+        </ul>
+      </dd>
+    </dl>
     <hr size="1">
-    <table id="footer" border="0" width="100%">
-      <tr>
-        <td align="left" valign="top">
-          <p>
-            <small>Copyright © 2003-2007 Jan Gaspar</small>
-          </p>
-          <p>
-            <small>Use, modification, and distribution is subject to the Boost Software License, Version 1.0.<br>
-            (See accompanying file <code>LICENSE_1_0.txt</code> or copy at <a href=
-            "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt>)</small>
-          </p>
-        </td>
-        <td align="right" valign="top">
-          <a href="http://validator.w3.org/check?uri=referer"><img border="0" src=
-          "http://www.w3.org/Icons/valid-html401" alt="This is a Valid HTML 4.01 Transitional Document." height="31"
-          width="88"></a>
-        </td>
-      </tr>
-    </table>
+    <p>
+      <small>Copyright © 2003-2008 Jan Gaspar</small>
+    </p>
+    <p>
+      <small>Use, modification, and distribution is subject to the Boost Software License, Version 1.0.<br>
+      (See accompanying file <code>LICENSE_1_0.txt</code> or copy at <a href=
+      "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt>)</small>
+    </p>
   </body>
 </html>
Modified: branches/release/libs/circular_buffer/doc/space_optimized.xslt
==============================================================================
--- branches/release/libs/circular_buffer/doc/space_optimized.xslt	(original)
+++ branches/release/libs/circular_buffer/doc/space_optimized.xslt	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -3,7 +3,7 @@
 XSL transformation from the XML files generated by Doxygen into XHTML source
 code documentation of the circular_buffer_space_optimized.
 
-Copyright (c) 2007 Jan Gaspar
+Copyright (c) 2003-2008 Jan Gaspar
 
 Use, modification, and distribution is subject to the Boost Software
 License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Modified: branches/release/libs/circular_buffer/doc/update_srcdoc.sh
==============================================================================
--- branches/release/libs/circular_buffer/doc/update_srcdoc.sh	(original)
+++ branches/release/libs/circular_buffer/doc/update_srcdoc.sh	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -3,7 +3,7 @@
 # Shell script which updates the Circular Buffer library documentation with    #
 # the latest source code documentation (which is in the source files).         #
 #                                                                              #
-# Copyright (c) 2007 Jan Gaspar                                                #
+# Copyright (c) 2003-2008 Jan Gaspar                                           #
 #                                                                              #
 # Use, modification, and distribution is subject to the Boost Software         #
 # License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at      #
Modified: branches/release/libs/circular_buffer/doc/update_srcdoc.xslt
==============================================================================
--- branches/release/libs/circular_buffer/doc/update_srcdoc.xslt	(original)
+++ branches/release/libs/circular_buffer/doc/update_srcdoc.xslt	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -3,7 +3,7 @@
 Helper XSL transformation updating source code documentation sections
 in the specified HTML file.
 
-Copyright (c) 2007 Jan Gaspar
+Copyright (c) 2003-2008 Jan Gaspar
 
 Use, modification, and distribution is subject to the Boost Software
 License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Deleted: branches/release/libs/circular_buffer/doc/valid-html40.png
==============================================================================
Binary file. No diff available.
Modified: branches/release/libs/circular_buffer/index.html
==============================================================================
--- branches/release/libs/circular_buffer/index.html	(original)
+++ branches/release/libs/circular_buffer/index.html	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -11,7 +11,7 @@
   <body>
     Automatic redirection failed, please go to circular_buffer.html.
     <p>
-      <small>Copyright © 2003-2007 Jan Gaspar</small>
+      <small>Copyright © 2003-2008 Jan Gaspar</small>
     </p>
     <p>
       <small>Use, modification, and distribution is subject to the Boost Software License, Version 1.0.<br>
Modified: branches/release/libs/circular_buffer/test/Jamfile.v2
==============================================================================
--- branches/release/libs/circular_buffer/test/Jamfile.v2	(original)
+++ branches/release/libs/circular_buffer/test/Jamfile.v2	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -1,6 +1,6 @@
 # Boost circular_buffer test Jamfile.
 #
-# Copyright (c) 2003-2007 Jan Gaspar
+# Copyright (c) 2003-2008 Jan Gaspar
 #
 # Distributed under the Boost Software License, Version 1.0. (See
 # accompanying file LICENSE_1_0.txt or copy at
Modified: branches/release/libs/circular_buffer/test/base_test.cpp
==============================================================================
--- branches/release/libs/circular_buffer/test/base_test.cpp	(original)
+++ branches/release/libs/circular_buffer/test/base_test.cpp	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -1,6 +1,6 @@
 // Test of the base circular buffer container.
 
-// Copyright (c) 2003-2007 Jan Gaspar
+// Copyright (c) 2003-2008 Jan Gaspar
 
 // Use, modification, and distribution is subject to the Boost Software
 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -61,6 +61,7 @@
     BOOST_CHECK(end - end == 0);
     BOOST_CHECK(begin - cb.end() == -5);
     BOOST_CHECK(it1 - cb.begin() == 2);
+    BOOST_CHECK(it1 - begin == 2);
     BOOST_CHECK(end - it1 == 3);
     BOOST_CHECK(it2 - it1 == 1);
     BOOST_CHECK(it1 - it2 == -1);
@@ -189,7 +190,6 @@
     BOOST_CHECK(!(end - 1 < it));
 }
 
-// TODO add insert, push_back etc.
 void iterator_invalidation_test() {
 
 #if !defined(NDEBUG) && !defined(BOOST_CB_DISABLE_DEBUG)
@@ -506,6 +506,62 @@
     BOOST_CHECK(!it3.is_valid(&cb13));
     BOOST_CHECK(!it4.is_valid(&cb13));
 
+    circular_buffer<MyInteger> cb14(10);
+    cb14.push_back(1);
+    cb14.push_back(2);
+    cb14.push_back(3);
+    cb14.push_back(4);
+    cb14.push_back(5);
+    cb14.push_back(6);
+    cb14.push_back(7);
+    it1 = cb14.end();
+    it2 = cb14.begin() + 2;
+    it3 = cb14.begin() + 1;
+    it4 = cb14.begin() + 5;
+    cb14.rotate(it2);
+    BOOST_CHECK(it1.is_valid(&cb14));
+    BOOST_CHECK(it2.is_valid(&cb14));
+    BOOST_CHECK(!it3.is_valid(&cb14));
+    BOOST_CHECK(it4.is_valid(&cb14));
+
+    circular_buffer<MyInteger> cb15(7);
+    cb15.push_back(1);
+    cb15.push_back(2);
+    cb15.push_back(3);
+    cb15.push_back(4);
+    cb15.push_back(5);
+    cb15.push_back(6);
+    cb15.push_back(7);
+    cb15.push_back(8);
+    cb15.push_back(9);
+    it1 = cb15.end();
+    it2 = cb15.begin() + 2;
+    it3 = cb15.begin() + 1;
+    it4 = cb15.begin() + 5;
+    cb15.rotate(it3);
+    BOOST_CHECK(it1.is_valid(&cb15));
+    BOOST_CHECK(it2.is_valid(&cb15));
+    BOOST_CHECK(it3.is_valid(&cb15));
+    BOOST_CHECK(it4.is_valid(&cb15));
+
+    circular_buffer<MyInteger> cb16(10);
+    cb16.push_back(1);
+    cb16.push_back(2);
+    cb16.push_back(3);
+    cb16.push_back(4);
+    cb16.push_back(5);
+    cb16.push_back(6);
+    cb16.push_back(7);
+    it1 = cb16.end();
+    it2 = cb16.begin() + 6;
+    it3 = cb16.begin();
+    it4 = cb16.begin() + 5;
+    cb16.rotate(it4);
+    BOOST_CHECK(it1.is_valid(&cb16));
+    BOOST_CHECK(!it2.is_valid(&cb16));
+    BOOST_CHECK(it3.is_valid(&cb16));
+    BOOST_CHECK(!it4.is_valid(&cb16));
+
 #endif // #if !defined(NDEBUG) && !defined(BOOST_CB_DISABLE_DEBUG)
 }
 
Modified: branches/release/libs/circular_buffer/test/bounded_buffer_comparison.cpp
==============================================================================
--- branches/release/libs/circular_buffer/test/bounded_buffer_comparison.cpp	(original)
+++ branches/release/libs/circular_buffer/test/bounded_buffer_comparison.cpp	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -1,6 +1,6 @@
 // Comparison of bounded buffers based on different containers.
 
-// Copyright (c) 2003-2007 Jan Gaspar
+// Copyright (c) 2003-2008 Jan Gaspar
 
 // Use, modification, and distribution is subject to the Boost Software
 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Modified: branches/release/libs/circular_buffer/test/common.ipp
==============================================================================
--- branches/release/libs/circular_buffer/test/common.ipp	(original)
+++ branches/release/libs/circular_buffer/test/common.ipp	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -1,6 +1,6 @@
 // Common tests for the circular buffer and its adaptor.
 
-// Copyright (c) 2003-2007 Jan Gaspar
+// Copyright (c) 2003-2008 Jan Gaspar
 
 // Use, modification, and distribution is subject to the Boost Software
 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -328,8 +328,16 @@
     cb6.push_back(5);
     cb6.push_back(6);
     cb6.pop_back();
+    CB_CONTAINER<MyInteger> cb7(6);
+    cb7.push_back(0);
+    cb7.push_back(1);
+    cb7.push_back(2);
+    cb7.push_back(3);
+    cb7.push_back(4);
 
+    BOOST_CHECK(!cb1.is_linearized());
     BOOST_CHECK(*cb1.linearize() == 4);
+    BOOST_CHECK(cb1.is_linearized());
     BOOST_CHECK(cb1.linearize() == cb1.array_one().first);
     BOOST_CHECK(&cb1[0] < &cb1[1]
         && &cb1[1] < &cb1[2]
@@ -349,7 +357,9 @@
     BOOST_CHECK(*(cb1.linearize() + 7) == 11);
     BOOST_CHECK(*(cb1.linearize() + 8) == 12);
     BOOST_CHECK(*(cb1.linearize() + 9) == 13);
+    BOOST_CHECK(!cb2.is_linearized());
     BOOST_CHECK(*cb2.linearize() == 8);
+    BOOST_CHECK(cb2.is_linearized());
     BOOST_CHECK(&cb2[0] < &cb2[1]
         && &cb2[1] < &cb2[2]
         && &cb2[2] < &cb2[3]
@@ -368,7 +378,9 @@
     BOOST_CHECK(*(cb2.linearize() + 7) == 15);
     BOOST_CHECK(*(cb2.linearize() + 8) == 16);
     BOOST_CHECK(*(cb2.linearize() + 9) == 17);
+    BOOST_CHECK(cb2.is_linearized());
     BOOST_CHECK(*cb3.linearize() == 6);
+    BOOST_CHECK(cb3.is_linearized());
     BOOST_CHECK(&cb3[0] < &cb3[1]
         && &cb3[1] < &cb3[2]
         && &cb3[2] < &cb3[3]
@@ -384,7 +396,9 @@
     BOOST_CHECK(*(cb3.linearize() + 6) == 12);
     BOOST_CHECK(*(cb3.linearize() + 7) == 13);
     BOOST_CHECK(cb4.linearize() == 0);
+    BOOST_CHECK(cb4.is_linearized());
     BOOST_CHECK(*cb5.linearize() == 10);
+    BOOST_CHECK(cb5.is_linearized());
     BOOST_CHECK(&cb5[0] < &cb5[1]
         && &cb5[1] < &cb5[2]
         && &cb5[2] < &cb5[3]
@@ -396,6 +410,7 @@
     BOOST_CHECK(*(cb5.linearize() + 4) == 14);
     BOOST_CHECK(*(cb5.linearize() + 5) == 15);
     BOOST_CHECK(*cb6.linearize() == 1);
+    BOOST_CHECK(cb6.is_linearized());
     BOOST_CHECK(&cb6[0] < &cb6[1]
         && &cb6[1] < &cb6[2]
         && &cb6[2] < &cb6[3]
@@ -404,6 +419,7 @@
     BOOST_CHECK(*(cb6.linearize() + 2) == 3);
     BOOST_CHECK(*(cb6.linearize() + 3) == 4);
     BOOST_CHECK(*(cb6.linearize() + 4) == 5);
+    BOOST_CHECK(cb7.is_linearized());
 
     generic_test(cb1);
     generic_test(cb2);
@@ -411,6 +427,7 @@
     generic_test(cb4);
     generic_test(cb5);
     generic_test(cb6);
+    generic_test(cb7);
 }
 
 void array_range_test() {
@@ -769,6 +786,17 @@
 
 void constructor_test() {
 
+    CB_CONTAINER<MyInteger> cb0;
+    BOOST_CHECK(cb0.capacity() == 0);
+    BOOST_CHECK(cb0.size() == 0);
+
+    cb0.push_back(1);
+    cb0.push_back(2);
+    cb0.push_back(3);
+
+    BOOST_CHECK(cb0.size() == 0);
+    BOOST_CHECK(cb0.capacity() == 0);
+
     CB_CONTAINER<MyInteger> cb1(3);
     CB_CONTAINER<MyInteger> cb2(3, 2);
     vector<int> v;
@@ -780,6 +808,7 @@
     CB_CONTAINER<MyInteger> cb3(v.begin(), v.end());
     CB_CONTAINER<MyInteger> cb4(3, v.begin(), v.end());
     CB_CONTAINER<MyInteger> cb5(10, v.begin(), v.end());
+    CB_CONTAINER<MyInteger> cb6(10, 3, MyInteger(2));
 
     BOOST_CHECK(cb1.size() == 0);
     BOOST_CHECK(cb1.capacity() == 3);
@@ -803,19 +832,29 @@
     BOOST_CHECK(!cb5.full());
     BOOST_CHECK(cb5[0] == 1);
     BOOST_CHECK(cb5[4] == 5);
+    BOOST_CHECK(cb6.size() == 3);
+    BOOST_CHECK(cb6.capacity() == 10);
+    BOOST_CHECK(!cb6.full());
+    BOOST_CHECK(cb6[0] == 2);
+    BOOST_CHECK(cb6[2] == 2);
 
     cb5.push_back(6);
+    cb6.push_back(6);
 
     BOOST_CHECK(cb5[5] == 6);
+    BOOST_CHECK(cb5[0] == 1);
     BOOST_CHECK(cb5.size() == 6);
+    BOOST_CHECK(cb6[3] == 6);
+    BOOST_CHECK(cb6.size() == 4);
+    BOOST_CHECK(cb6[0] == 2);
 
 #if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)
 
-    CB_CONTAINER<int> cb6(MyInputIterator(v.begin()), MyInputIterator(v.end()));
-    CB_CONTAINER<int> cb7(3, MyInputIterator(v.begin()), MyInputIterator(v.end()));
+    CB_CONTAINER<int> cb7(MyInputIterator(v.begin()), MyInputIterator(v.end()));
+    CB_CONTAINER<int> cb8(3, MyInputIterator(v.begin()), MyInputIterator(v.end()));
 
-    BOOST_CHECK(cb6.capacity() == 5);
-    BOOST_CHECK(cb7.capacity() == 3);
+    BOOST_CHECK(cb7.capacity() == 5);
+    BOOST_CHECK(cb8.capacity() == 3);
 
 #endif // #if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)
 
@@ -824,6 +863,7 @@
     generic_test(cb3);
     generic_test(cb4);
     generic_test(cb5);
+    generic_test(cb6);
 }
 
 void assign_test() {
@@ -894,6 +934,9 @@
     CB_CONTAINER<MyInteger> cb2 = cb1;
 
     BOOST_CHECK(cb1 == cb2);
+    BOOST_CHECK(cb2.capacity() == 4);
+    BOOST_CHECK(cb2[0] == 2);
+    BOOST_CHECK(cb2[3] == 5);
 
     CB_CONTAINER<MyInteger> cb3(20);
     cb1.pop_back();
@@ -901,6 +944,7 @@
     cb3 = cb2;
     cb3 = cb3;
     cb4 = cb1;
+    CB_CONTAINER<MyInteger> cb5 = cb1;
 
     BOOST_CHECK(cb3 == cb2);
     BOOST_CHECK(cb4 == cb1);
@@ -911,11 +955,16 @@
     BOOST_CHECK(cb4.capacity() == 4);
     BOOST_CHECK(!cb4.full());
     BOOST_CHECK(*(cb4.end() - 1) == 4);
+    BOOST_CHECK(cb1 == cb5);
+    BOOST_CHECK(cb5.capacity() == 4);
+    BOOST_CHECK(cb2[0] == 2);
+    BOOST_CHECK(cb2[2] == 4);
 
     generic_test(cb1);
     generic_test(cb2);
     generic_test(cb3);
     generic_test(cb4);
+    generic_test(cb5);
 }
 
 void swap_test() {
@@ -1781,6 +1830,122 @@
     BOOST_CHECK(cb.back() == 5);
 }
 
+void rotate_test() {
+
+    CB_CONTAINER<MyInteger> cb1(10);
+    cb1.push_back(1);
+    cb1.push_back(2);
+    cb1.push_back(3);
+    cb1.push_back(4);
+    cb1.push_back(5);
+    cb1.push_back(6);
+    cb1.push_back(7);
+    CB_CONTAINER<MyInteger> cb2 = cb1;
+    CB_CONTAINER<MyInteger>::iterator it1 = cb1.begin() + 2;
+    int v1_0 = *it1;
+    int v1_1 = *(it1 + 1);
+    int v1_2 = *(it1 + 2);
+    int v1_3 = *(it1 + 3);
+    int v1_4 = *(it1 + 4);
+    int v1_r1 = *(it1 - 1);
+    int v1_r2 = *(it1 - 2);
+    cb1.rotate(it1);
+    rotate(cb2.begin(), cb2.begin() + 2, cb2.end());
+
+    CB_CONTAINER<MyInteger> cb3(7);
+    cb3.push_back(1);
+    cb3.push_back(2);
+    cb3.push_back(3);
+    cb3.push_back(4);
+    cb3.push_back(5);
+    cb3.push_back(6);
+    cb3.push_back(7);
+    cb3.push_back(8);
+    cb3.push_back(9);
+    CB_CONTAINER<MyInteger> cb4 = cb3;
+    CB_CONTAINER<MyInteger>::iterator it2 = cb3.begin() + 1;
+    int v2_0 = *it2;
+    int v2_1 = *(it2 + 1);
+    int v2_2 = *(it2 + 2);
+    int v2_3 = *(it2 + 3);
+    int v2_4 = *(it2 + 4);
+    int v2_5 = *(it2 + 5);
+    int v2_r1 = *(it2 - 1);
+    cb3.rotate(it2);
+    rotate(cb4.begin(), cb4.begin() + 1, cb4.end());
+
+    CB_CONTAINER<MyInteger> cb5(10);
+    cb5.push_back(1);
+    cb5.push_back(2);
+    cb5.push_back(3);
+    cb5.push_back(4);
+    cb5.push_back(5);
+    cb5.push_back(6);
+    cb5.push_back(7);
+    CB_CONTAINER<MyInteger> cb6 = cb5;
+    CB_CONTAINER<MyInteger>::iterator it3 = cb5.begin() + 5;
+    int v3_0 = *it3;
+    int v3_1 = *(it3 + 1);
+    int v3_r1 = *(it3 - 1);
+    int v3_r2 = *(it3 - 2);
+    int v3_r3 = *(it3 - 3);
+    int v3_r4 = *(it3 - 4);
+    int v3_r5 = *(it3 - 5);
+    cb5.rotate(it3);
+    rotate(cb6.begin(), cb6.begin() + 5, cb6.end());
+
+    BOOST_CHECK(!cb1.full());
+    BOOST_CHECK(cb1 == cb2);
+    BOOST_CHECK(v1_0 == *it1);
+    BOOST_CHECK(v1_1 == *(it1 + 1));
+    BOOST_CHECK(v1_2 == *(it1 + 2));
+    BOOST_CHECK(v1_3 == *(it1 + 3));
+    BOOST_CHECK(v1_4 == *(it1 + 4));
+    BOOST_CHECK(v1_r1 == *(it1 + 6));
+    BOOST_CHECK(v1_r2 == *(it1 + 5));
+    BOOST_CHECK(cb1.begin() == it1);
+    BOOST_CHECK(v1_0 == cb1[0]);
+    BOOST_CHECK(v1_1 == cb1[1]);
+    BOOST_CHECK(v1_2 == cb1[2]);
+    BOOST_CHECK(v1_3 == cb1[3]);
+    BOOST_CHECK(v1_4 == cb1[4]);
+    BOOST_CHECK(v1_r1 == cb1[6]);
+    BOOST_CHECK(v1_r2 == cb1[5]);
+    BOOST_CHECK(cb3.full());
+    BOOST_CHECK(cb3 == cb4);
+    BOOST_CHECK(v2_0 == *it2);
+    BOOST_CHECK(v2_1 == *(it2 + 1));
+    BOOST_CHECK(v2_2 == *(it2 + 2));
+    BOOST_CHECK(v2_3 == *(it2 + 3));
+    BOOST_CHECK(v2_4 == *(it2 + 4));
+    BOOST_CHECK(v2_5 == *(it2 + 5));
+    BOOST_CHECK(v2_r1 == *(it2 + 6));
+    BOOST_CHECK(cb3.begin() == it2);
+    BOOST_CHECK(v2_0 == cb3[0]);
+    BOOST_CHECK(v2_1 == cb3[1]);
+    BOOST_CHECK(v2_2 == cb3[2]);
+    BOOST_CHECK(v2_3 == cb3[3]);
+    BOOST_CHECK(v2_4 == cb3[4]);
+    BOOST_CHECK(v2_5 == cb3[5]);
+    BOOST_CHECK(v2_r1 == cb3[6]);
+    BOOST_CHECK(!cb5.full());
+    BOOST_CHECK(cb5 == cb6);
+    BOOST_CHECK(v3_0 == cb5[0]);
+    BOOST_CHECK(v3_1 == cb5[1]);
+    BOOST_CHECK(v3_r1 == cb5[6]);
+    BOOST_CHECK(v3_r2 == cb5[5]);
+    BOOST_CHECK(v3_r3 == cb5[4]);
+    BOOST_CHECK(v3_r4 == cb5[3]);
+    BOOST_CHECK(v3_r5 == cb5[2]);
+
+    generic_test(cb1);
+    generic_test(cb2);
+    generic_test(cb3);
+    generic_test(cb4);
+    generic_test(cb5);
+    generic_test(cb6);
+}
+
 int MyInteger::ms_exception_trigger = 0;
 int InstanceCounter::ms_count = 0;
 
@@ -1828,4 +1993,5 @@
     tests->add(BOOST_TEST_CASE(&example_test));
     tests->add(BOOST_TEST_CASE(&element_destruction_test));
     tests->add(BOOST_TEST_CASE(&const_methods_test));
+    tests->add(BOOST_TEST_CASE(&rotate_test));
 }
Modified: branches/release/libs/circular_buffer/test/soft_iterator_invalidation.cpp
==============================================================================
--- branches/release/libs/circular_buffer/test/soft_iterator_invalidation.cpp	(original)
+++ branches/release/libs/circular_buffer/test/soft_iterator_invalidation.cpp	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -3,7 +3,7 @@
 // Note: The soft iterator invalidation definition CAN NOT be applied
 //       to the space optimized circular buffer.
 
-// Copyright (c) 2003-2007 Jan Gaspar
+// Copyright (c) 2003-2008 Jan Gaspar
 
 // Use, modification, and distribution is subject to the Boost Software
 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Modified: branches/release/libs/circular_buffer/test/space_optimized_test.cpp
==============================================================================
--- branches/release/libs/circular_buffer/test/space_optimized_test.cpp	(original)
+++ branches/release/libs/circular_buffer/test/space_optimized_test.cpp	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -1,6 +1,6 @@
 // Test of the space optimized adaptor of the circular buffer.
 
-// Copyright (c) 2003-2007 Jan Gaspar
+// Copyright (c) 2003-2008 Jan Gaspar
 
 // Use, modification, and distribution is subject to the Boost Software
 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -62,7 +62,7 @@
 
     circular_buffer_space_optimized<int>::capacity_type c1 = 10;
     circular_buffer_space_optimized<int>::capacity_type c2 =
-        circular_buffer_space_optimized<int>::capacity_type(20, 5);
+    circular_buffer_space_optimized<int>::capacity_type(20, 5);
     circular_buffer_space_optimized<int>::capacity_type c3 = c2;
 
     BOOST_CHECK(c1.capacity() == 10);
@@ -78,10 +78,10 @@
     BOOST_CHECK(c1.min_capacity() == 5);
 }
 
-void some_constructors_test() {
+void specific_constructors_test() {
 
     cb_space_optimized cb1;
-    BOOST_CHECK(cb1.capacity() == cb1.max_size());
+    BOOST_CHECK(cb1.capacity() == 0);
     BOOST_CHECK(cb1.capacity().min_capacity() == 0);
     BOOST_CHECK(cb1.internal_capacity() == 0);
     BOOST_CHECK(cb1.size() == 0);
@@ -90,10 +90,15 @@
     cb1.push_back(2);
     cb1.push_back(3);
 
-    BOOST_CHECK(cb1.size() == 3);
-    BOOST_CHECK(cb1.capacity() == cb1.max_size());
+    BOOST_CHECK(cb1.size() == 0);
+    BOOST_CHECK(cb1.capacity() == 0);
+
+    vector<int> v;
+    v.push_back(1);
+    v.push_back(2);
+    v.push_back(3);
 
-    cb_space_optimized cb2(cb1.begin(), cb1.end());
+    cb_space_optimized cb2(v.begin(), v.end());
 
     BOOST_CHECK(cb2.capacity() == 3);
     BOOST_CHECK(cb2.capacity().min_capacity() == 0);
@@ -183,7 +188,7 @@
 
     tests->add(BOOST_TEST_CASE(&min_capacity_test));
     tests->add(BOOST_TEST_CASE(&capacity_control_test));
-    tests->add(BOOST_TEST_CASE(&some_constructors_test));
+    tests->add(BOOST_TEST_CASE(&specific_constructors_test));
     tests->add(BOOST_TEST_CASE(&shrink_to_fit_test));
     tests->add(BOOST_TEST_CASE(&iterator_invalidation_test));
 
Modified: branches/release/libs/circular_buffer/test/test.hpp
==============================================================================
--- branches/release/libs/circular_buffer/test/test.hpp	(original)
+++ branches/release/libs/circular_buffer/test/test.hpp	2008-08-18 04:54:04 EDT (Mon, 18 Aug 2008)
@@ -1,6 +1,6 @@
 // Header file for the test of the circular buffer library.
 
-// Copyright (c) 2003-2007 Jan Gaspar
+// Copyright (c) 2003-2008 Jan Gaspar
 
 // Use, modification, and distribution is subject to the Boost Software
 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at