Files
circular_buffer/doc/circular_buffer_space_optimized.html
Jan Gaspar b8a15f829e generated doc update
[SVN r3095]
2006-07-13 07:05:33 +00:00

1661 lines
73 KiB
HTML
Raw Blame History

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>
Space Optimized Circular Buffer
</title>
</head>
<body>
<h1>
Space Optimized Circular Buffer
</h1>
<table id="title" border="0">
<tr>
<td>
<h1>
circular_buffer_space_optimized&lt;T, Alloc&gt;
</h1>
</td>
<td>
<a href="../../../"><img src="../../../boost.png" width="277" height="86" alt="Boost" border="0"></a>
</td>
</tr>
</table>
<h2>
Contents
</h2><a href="#description">Description</a><br>
<a href="#synopsis">Synopsis</a><br>
<a href="#rationale">Rationale</a><br>
<a href="#header">Header Files</a><br>
<a href="#model">Modeled concepts</a><br>
<a href="#members">Template Parameters, Members and StandaloneFunctions</a><br>
<a href="#semantics">Semantics</a><br>
<a href="#see">See also</a><br>
<a href="#ack">Acknowledgments</a><br>
<h2>
<a name="description" id="description">Description</a>
</h2>
<p>
The <code>circular_buffer_space_optimized</code> container is an adaptor of the <code><a href=
"circular_buffer.html">circular_buffer</a></code> . The functionality of the
<code>circular_buffer_space_optimized</code> is similar to the base <code>circular_buffer</code> except it does
not allocate memory at once when created rather it allocates memory as needed. (The predictive memory allocation
is similar to typical <code>std::vector</code> implementation.) Moreover the memory is automatically freed as the
size of the container decreases.
</p>
<table id="figure" border="0">
<tr>
<td></td>
<td>
<img src="circular_buffer_space_optimized.png" width="700" height="350" alt="Space Optimized Circular Buffer"
border="0">
</td>
</tr>
<tr>
<td valign="top">
<b>Figure:</b>
</td>
<td valign="top">
The memory allocation process of the space optimized circular buffer. The <code>min_capacity</code>
represents the minimal guaranteed amount of allocated memory. The allocated memory will never drop under this
value. By default the <code>min_capacity</code> is set to 0.
</td>
</tr>
</table><br>
<h2>
<a name="synopsis" id="synopsis">Synopsis</a>
</h2>
<div id="srcdoc_synopsis">
<table id="table_synopsis" border="0" cellpadding="10">
<tr>
<td>
<pre>
namespace boost {
template &lt;class <a href="circular_buffer.html#templateparam_T">T</a>, class <a href=
"circular_buffer.html#templateparam_Alloc">Alloc</a>&gt;
class circular_buffer_space_optimized
{
public:
typedef typename Alloc::value_type <a href=
"circular_buffer.html#classboost_1_1circular__buffer_1cbdd7ca87e147c08cd2be267eefd6540">value_type</a>;
typedef typename Alloc::pointer <a href=
"circular_buffer.html#classboost_1_1circular__buffer_14ff917f8a6131ec18e91606727592a9c">pointer</a>;
typedef typename Alloc::const_pointer <a href=
"circular_buffer.html#classboost_1_1circular__buffer_190f7c6bcb624ad507de546366f49028a">const_pointer</a>;
typedef typename Alloc::reference <a href=
"circular_buffer.html#classboost_1_1circular__buffer_1f38a9bc64d84757c661c2542ff9a7f65">reference</a>;
typedef typename Alloc::const_reference <a href=
"circular_buffer.html#classboost_1_1circular__buffer_1a8397191092f5bacee991b623ca4b910">const_reference</a>;
typedef typename Alloc::size_type <a href=
"circular_buffer.html#classboost_1_1circular__buffer_19ba12c0142a21a7d960877c22fa3ea00">size_type</a>;
typedef typename Alloc::difference_type <a href=
"circular_buffer.html#classboost_1_1circular__buffer_15313e723fa85d73db5826f8b722aa2a9">difference_type</a>;
typedef Alloc <a href=
"circular_buffer.html#classboost_1_1circular__buffer_14e07c6ddfe89debe384e59bed06e7cb7">allocator_type</a>;
typedef <i>implementation-defined</i> <a href=
"circular_buffer.html#classboost_1_1circular__buffer_15cab6d46f03c40d1e52d41843319ddb9">const_iterator</a>;
typedef <i>implementation-defined</i> <a href=
"circular_buffer.html#classboost_1_1circular__buffer_11b8a33f2dc8519b8a7d344ed4408c532">iterator</a>;
typedef reverse_iterator&lt;const_iterator&gt; <a href=
"circular_buffer.html#classboost_1_1circular__buffer_1ca423a848964c7915629c90fa7c58598">const_reverse_iterator</a>;
typedef reverse_iterator&lt;iterator&gt; <a href=
"circular_buffer.html#classboost_1_1circular__buffer_1e5dbaec472f4b6ab6a8d4d0d6b15cbdb">reverse_iterator</a>;
typedef std::pair&lt;pointer, size_type&gt; <a href=
"circular_buffer.html#classboost_1_1circular__buffer_126d279f91fef717e25459a0817ff242f">array_range</a>;
typedef std::pair&lt;const_pointer, size_type&gt; <a href=
"circular_buffer.html#classboost_1_1circular__buffer_11885d7f475b7e7a74c95b2448d243025">const_array_range</a>;
typedef <i>implementation-defined</i> <a href=
"#classboost_1_1circular__buffer__space__optimized_19d8966bb6cf8253d6194be7bbf7e3c7d">capacity_control</a>;
explicit <a href=
"#classboost_1_1circular__buffer__space__optimized_1a05f824b31cd93d7695f4039edc7597f">circular_buffer_space_optimized</a>(const allocator_type&amp; alloc = allocator_type());
explicit <a href=
"#classboost_1_1circular__buffer__space__optimized_1066bf867e41386da88818addbb22dfeb">circular_buffer_space_optimized</a>(capacity_control capacity_ctrl, const allocator_type&amp; alloc = allocator_type());
<a href=
"#classboost_1_1circular__buffer__space__optimized_16d55cc66a4d73e6756e6287fb73990fb">circular_buffer_space_optimized</a>(capacity_control capacity_ctrl,
value_type item, const allocator_type&amp; alloc = allocator_type());
<a href=
"#classboost_1_1circular__buffer__space__optimized_15b15a87914ccc922cd730d5cabc00926">circular_buffer_space_optimized</a>(capacity_control capacity_ctrl,
size_type n, value_type item,
const allocator_type&amp; alloc = allocator_type());
template &lt;class InputIterator&gt;
<a href=
"#classboost_1_1circular__buffer__space__optimized_1296bbfa5c427d05cb02fc35249f83bb4">circular_buffer_space_optimized</a>(InputIterator first, InputIterator last);
template &lt;class InputIterator&gt;
<a href=
"#classboost_1_1circular__buffer__space__optimized_1e6783618188f278ef087c1932ff5102d">circular_buffer_space_optimized</a>(capacity_control capacity_ctrl, InputIterator first, InputIterator last);
template &lt;class InputIterator&gt;
<a href=
"#classboost_1_1circular__buffer__space__optimized_11dd04145492c82a959b1df1167b4e217">circular_buffer_space_optimized</a>(InputIterator first,
InputIterator last, const allocator_type&amp; alloc = allocator_type());
template &lt;class InputIterator&gt;
<a href=
"#classboost_1_1circular__buffer__space__optimized_186a0b8ef26e1368e4c815b6a0531d5fe">circular_buffer_space_optimized</a>(capacity_control capacity_ctrl,
InputIterator first, InputIterator last,
const allocator_type&amp; alloc = allocator_type());
size_type <a href=
"#classboost_1_1circular__buffer__space__optimized_1f3e4b9caed10cf7383682c6dea794917">min_capacity</a>() const;
void <a href=
"#classboost_1_1circular__buffer__space__optimized_1b3667b889d9633e88d62adb98c1b1291">set_min_capacity</a>(size_type new_min_capacity);
void <a href=
"#classboost_1_1circular__buffer__space__optimized_1c804242b924b93eb3db7f3f4587a096c">set_capacity</a>(size_type new_capacity);
void <a href=
"#classboost_1_1circular__buffer__space__optimized_1f244ff5576b79f8d60e273c02d71c9f2">resize</a>(size_type new_size, value_type item = value_type());
void <a href=
"#classboost_1_1circular__buffer__space__optimized_16e2c5d77ea32819fd28f8ff2d5ce888a">rset_capacity</a>(size_type new_capacity);
void <a href=
"#classboost_1_1circular__buffer__space__optimized_1d45e2e72d9e3fb42e090ebc47ac8d7ee">rresize</a>(size_type new_size, value_type item = value_type());
void <a href=
"#classboost_1_1circular__buffer__space__optimized_17ca4fda9526d0dad99706763c3b2d9f1">assign</a>(size_type n, value_type item);
void <a href=
"#classboost_1_1circular__buffer__space__optimized_10dff40462f19ca6cecd89443ceb8d71f">assign</a>(capacity_control capacity_ctrl, size_type n, value_type item);
template &lt;class InputIterator&gt;
void <a href=
"#classboost_1_1circular__buffer__space__optimized_1582f452f07ebf08dda4c053b635e1581">assign</a>(capacity_control capacity_ctrl, InputIterator first, InputIterator last);
void <a href=
"#classboost_1_1circular__buffer__space__optimized_1cf3ffed54f5fece9315fb96726e5e205">push_back</a>(value_type item = value_type());
void <a href=
"#classboost_1_1circular__buffer__space__optimized_1f0484fd492b377ff80c0bcb76183162c">push_front</a>(value_type item = value_type());
void <a href="#classboost_1_1circular__buffer__space__optimized_19c4290c18ab3dd2462dc01fb8368dff6">pop_back</a>();
void <a href="#classboost_1_1circular__buffer__space__optimized_1d7d496c40fc053258ac7d19cf5261788">pop_front</a>();
iterator <a href=
"#classboost_1_1circular__buffer__space__optimized_145877a0d46400f4894a13d25d138c130">insert</a>(iterator pos, value_type item = value_type());
void <a href=
"#classboost_1_1circular__buffer__space__optimized_1dc2060ce1105d80429ff3f004ca0691b">insert</a>(iterator pos, size_type n, value_type item);
template &lt;class InputIterator&gt;
void <a href=
"#classboost_1_1circular__buffer__space__optimized_19eec983bc010f2e8415618455dd81da0">insert</a>(iterator pos, InputIterator first, InputIterator last);
iterator <a href=
"#classboost_1_1circular__buffer__space__optimized_1cb3586429e49eeb2df2d2a09e19775de">rinsert</a>(iterator pos, value_type item = value_type());
void <a href=
"#classboost_1_1circular__buffer__space__optimized_11eff7ec0eb603d489bd12f8c48928c9d">rinsert</a>(iterator pos, size_type n, value_type item);
template &lt;class InputIterator&gt;
void <a href=
"#classboost_1_1circular__buffer__space__optimized_1faeda7342f4717d7fb6b4589cb43b74e">rinsert</a>(iterator pos, InputIterator first, InputIterator last);
iterator <a href=
"#classboost_1_1circular__buffer__space__optimized_136feadef225bd8a10962a92c4ffcdfd3">erase</a>(iterator pos);
iterator <a href=
"#classboost_1_1circular__buffer__space__optimized_19e9a4e0dfca27329da78e014d97201ca">erase</a>(iterator first, iterator last);
iterator <a href=
"#classboost_1_1circular__buffer__space__optimized_16e96800422211d02621526c894b71fa1">rerase</a>(iterator pos);
iterator <a href=
"#classboost_1_1circular__buffer__space__optimized_154fd4c2a67c7d6de6cbf6c8255729e98">rerase</a>(iterator first, iterator last);
allocator_type <a href=
"circular_buffer.html#classboost_1_1circular__buffer_1a20b7d0e7a4da0af13286df9f53d660c">get_allocator</a>() const;
allocator_type&amp; <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 <a href="circular_buffer.html#classboost_1_1circular__buffer_1babfa093dad7801223b80626b598dee1">end</a>();
const_iterator <a href=
"circular_buffer.html#classboost_1_1circular__buffer_10640d3d41c13b6089b6f169224cf1038">begin</a>() const;
const_iterator <a href=
"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_1765d91bf48341907418433a1e3aab026">rbegin</a>() const;
const_reverse_iterator <a href=
"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);
value_type <a href=
"circular_buffer.html#classboost_1_1circular__buffer_1eb0a7fe7f8a56a4dc4c933b93adfcef4">operator[]</a>(size_type index) const;
reference <a href=
"circular_buffer.html#classboost_1_1circular__buffer_1cd84838cb4fffb6c113fd0297e502edc">at</a>(size_type index);
value_type <a href=
"circular_buffer.html#classboost_1_1circular__buffer_1b233a298f5845a0fcf2ecc56f4170810">at</a>(size_type index) const;
reference <a href=
"circular_buffer.html#classboost_1_1circular__buffer_10d5fdeabeb352f47d1f7bb1ea8d9819f">front</a>();
reference <a href=
"circular_buffer.html#classboost_1_1circular__buffer_1d985d974020f88bb4255d8edbae0a30a">back</a>();
value_type <a href=
"circular_buffer.html#classboost_1_1circular__buffer_10df8595d83bb9d8a7ce50aabc678f90b">front</a>() const;
value_type <a href=
"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_10f4b157e27b1170a571417986b239945">array_one</a>() const;
const_array_range <a href=
"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>();
size_type <a href=
"circular_buffer.html#classboost_1_1circular__buffer_15fa0edd153e2591dd6bf070eb663ee32">size</a>() const;
size_type <a href=
"circular_buffer.html#classboost_1_1circular__buffer_157e2d506bc274b2a63fbe1b8fcafebd7">max_size</a>() const;
bool <a href=
"circular_buffer.html#classboost_1_1circular__buffer_15be1c2a005ec9828549ef6dd7ebed583">empty</a>() const;
bool <a href=
"circular_buffer.html#classboost_1_1circular__buffer_1fd0eef8ba91210d1575404b7e3e8207a">full</a>() const;
size_type <a href=
"circular_buffer.html#classboost_1_1circular__buffer_1de901b1737217f2c8140fc1691bf2d98">capacity</a>() const;
void <a href=
"circular_buffer.html#classboost_1_1circular__buffer_180c2e2e66a8fa9d0b7adc1b54921a8c3">resize</a>(size_type new_size, value_type item = value_type());
void <a href=
"circular_buffer.html#classboost_1_1circular__buffer_144ecd9ec5f54a2d61c7d132e445d3483">rresize</a>(size_type new_size, value_type item = value_type());
circular_buffer_space_optimized&lt;T, Alloc&gt;&amp; <a href=
"circular_buffer.html#classboost_1_1circular__buffer_1db1558911b2e251a587aeb3d8b3d797d">operator=</a>(const circular_buffer_space_optimized&lt;T, Alloc&gt;&amp; cb);
void <a href=
"circular_buffer.html#classboost_1_1circular__buffer_19ba4a81df16f386d31b04b49c82d1ada">assign</a>(size_type n, value_type item);
void <a href=
"circular_buffer.html#classboost_1_1circular__buffer_1cfb85121fac69d36d687ee584fb115e3">assign</a>(size_type capacity, size_type n, value_type item);
template &lt;class InputIterator&gt;
void <a href=
"circular_buffer.html#classboost_1_1circular__buffer_1253302d9bda5d7efbc4a6c311de3790c">assign</a>(InputIterator first, InputIterator last);
template &lt;class InputIterator&gt;
void <a href=
"circular_buffer.html#classboost_1_1circular__buffer_15201ad8c806598d87ee5988dc2180f3b">assign</a>(size_type capacity, InputIterator first, InputIterator last);
void <a href=
"circular_buffer.html#classboost_1_1circular__buffer_1270ab7074c365663a6f18808024fd88b">swap</a>(circular_buffer_space_optimized&lt;T, Alloc&gt;&amp; cb);
void <a href="circular_buffer.html#classboost_1_1circular__buffer_1826f5770a40b8b752eb9587378464d1e">clear</a>();
};
template &lt;class T, class Alloc&gt;
bool <a href=
"circular_buffer.html#namespaceboost_1d35871e838359b5215e1cbb353663207">operator==</a>(const circular_buffer_space_optimized&lt;T, Alloc&gt;&amp; lhs,
const circular_buffer_space_optimized&lt;T, Alloc&gt;&amp; rhs);
template &lt;class T, class Alloc&gt;
bool <a href=
"circular_buffer.html#namespaceboost_195b08213f201c2067d8acb024756329d">operator&lt;</a>(const circular_buffer_space_optimized&lt;T, Alloc&gt;&amp; lhs,
const circular_buffer_space_optimized&lt;T, Alloc&gt;&amp; rhs);
template &lt;class T, class Alloc&gt;
bool <a href=
"circular_buffer.html#namespaceboost_1f5717e2f6532581a6492ff1839b18f6d">operator!=</a>(const circular_buffer_space_optimized&lt;T, Alloc&gt;&amp; lhs,
const circular_buffer_space_optimized&lt;T, Alloc&gt;&amp; rhs);
template &lt;class T, class Alloc&gt;
bool <a href=
"circular_buffer.html#namespaceboost_1f575d7a9741c2044424de50c966c12f3">operator&gt;</a>(const circular_buffer_space_optimized&lt;T, Alloc&gt;&amp; lhs,
const circular_buffer_space_optimized&lt;T, Alloc&gt;&amp; rhs);
template &lt;class T, class Alloc&gt;
bool <a href=
"circular_buffer.html#namespaceboost_179abcbacd24b67f08185db54aec8600d">operator&lt;=</a>(const circular_buffer_space_optimized&lt;T, Alloc&gt;&amp; lhs,
const circular_buffer_space_optimized&lt;T, Alloc&gt;&amp; rhs);
template &lt;class T, class Alloc&gt;
bool <a href=
"circular_buffer.html#namespaceboost_11c31150380272af67deebef578c80b05">operator&gt;=</a>(const circular_buffer_space_optimized&lt;T, Alloc&gt;&amp; lhs,
const circular_buffer_space_optimized&lt;T, Alloc&gt;&amp; rhs);
template &lt;class T, class Alloc&gt;
void <a href=
"circular_buffer.html#namespaceboost_14aa8f6a2c9640f3f22e266f0fca85777">swap</a>(circular_buffer_space_optimized&lt;T, Alloc&gt;&amp; lhs,
circular_buffer_space_optimized&lt;T, Alloc&gt;&amp; rhs);
} // namespace boost
</pre>
</td>
</tr>
</table>
</div><br>
<h2>
<a name="rationale" id="rationale">Rationale</a>
</h2>
<p>
The auto-resizing mode of the space optimized circular buffer can be useful in situations when the container can
possibly store large number of elements but most of its lifetime the container stores just few of them. The usage
of the <code>circular_buffer_space_optimized</code> will result in decreased memory consumption and can improve
the CPU cache effectiveness.
</p><br>
<h2>
<a name="header" id="header">Header Files</a>
</h2>
<p>
The <code>circular_buffer_space_optimized</code> is defined in the file <code><a href=
"../../../boost/circular_buffer.hpp">boost/circular_buffer.hpp</a></code> . There is also a forward declaration
for the <code>circular_buffer_space_optimized</code> in the header file <code><a href=
"../../../boost/circular_buffer_fwd.hpp">boost/circular_buffer_fwd.hpp</a></code> .
</p><br>
<h2>
<a name="model" id="model">Modeled concepts</a>
</h2>
<p>
<a href="http://www.sgi.com/tech/stl/RandomAccessContainer.html">Random AccessContainer</a>, <a href=
"http://www.sgi.com/tech/stl/FrontInsertionSequence.html">Front Insertion Sequence</a> and <a href=
"http://www.sgi.com/tech/stl/BackInsertionSequence.html">Back Insertion Sequence</a>.
</p><br>
<h2>
<a name="members" id="members">Template Parameters, Members and Friend Functions</a>
</h2>
<p>
Template parameters, members and friend functions of the <code>circular_buffer_space_optimized</code> are almost
the same as for the base <code>circular_buffer</code> . Refer the <code>circular_buffer</code> <a href=
"circular_buffer.html#parameters">documentation</a> and also its <a href="srcdoc/index.html">source code
documentation</a> for a detailed description.
</p>
<div id="srcdoc_types">
<table id="table_public_types" border="1">
<tr>
<th>
Type
</th>
<th>
Description
</th>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_19d8966bb6cf8253d6194be7bbf7e3c7d" name=
"classboost_1_1circular__buffer__space__optimized_19d8966bb6cf8253d6194be7bbf7e3c7d"><code>capacity_control</code></a>
</td>
<td>
<p>
Capacity controller of the space optimized circular buffer.
</p>
<pre>
struct capacity_control {
capacity_control(size_type capacity, size_type min_capacity = 0) m_capacity(capacity), m_min_capacity(min_capacity) {};
size_type m_capacity;
size_type m_min_capacity;
};
</pre>
<table id="table_pre_desc_id4509837">
<tr>
<td valign="top">
<b>Precondition:</b>
</td>
<td>
<p>
<code>capacity &gt;= min_capacity</code>
</p>
</td>
</tr>
</table>The <code>m_capacity</code> denotes the capacity of the
<code>circular_buffer_space_optimized</code> and the <code>m_min_capacity</code> deterimines the minimal
allocated size of its internal buffer. The converting constructor of the <code>capacity_control</code>
allows implicit conversion from <code>size_type</code> like types which ensures compatibility of creating
an instance of the <code>circular_buffer_space_optimized</code> with other STL containers.
</td>
</tr>
</table>
</div>
<p>
The specific methods of the <code>circular_buffer_space_optimized</code> are listed below.
</p><br>
<h2>
<a name="constructors" id="constructors">Constructors</a>
</h2>
<div id="srcdoc_constructors">
<table id="table_constructors" border="1">
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_1a05f824b31cd93d7695f4039edc7597f" name=
"classboost_1_1circular__buffer__space__optimized_1a05f824b31cd93d7695f4039edc7597f"></a> <code><b>explicit
circular_buffer_space_optimized(const <a href=
"circular_buffer.html#classboost_1_1circular__buffer_14e07c6ddfe89debe384e59bed06e7cb7">allocator_type</a>&amp;
alloc = allocator_type());</b></code><br>
<table id="table_function_desc_id4511462">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4511531">
<tr>
<td>
<p>
Create an empty space optimized circular buffer with a maximum capacity.
</p>
</td>
</tr>
</table>
<table id="table_detailed_desc_id4511541">
<tr>
<td>
TODO - doc
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_1066bf867e41386da88818addbb22dfeb" name=
"classboost_1_1circular__buffer__space__optimized_1066bf867e41386da88818addbb22dfeb"></a> <code><b>explicit
circular_buffer_space_optimized(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_10b8131db04bfa69c99f23aed053ca8a8">capacity_control</a>
capacity_ctrl, const <a href=
"circular_buffer.html#classboost_1_1circular__buffer_14e07c6ddfe89debe384e59bed06e7cb7">allocator_type</a>&amp;
alloc = allocator_type());</b></code><br>
<table id="table_function_desc_id4511565">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4511652">
<tr>
<td>
<p>
Create an empty space optimized circular buffer with a given capacity.
</p>
</td>
</tr>
</table>
<table id="table_pre_desc_id4511716">
<tr>
<td valign="top">
<b>Precondition:</b>
</td>
<td>
<p>
<code>capacity &gt;= min_capacity</code>
</p>
</td>
</tr>
</table>
<table id="table_post_desc_id4511726">
<tr>
<td valign="top">
<b>Postcondition:</b>
</td>
<td>
<p>
<code>(*this).capacity() == capacity &amp;&amp; (*this).size == 0</code><br>
Allocates memory specified by the <code>min_capacity</code> parameter.
</p>
</td>
</tr>
</table>
<table id="table_note_desc_id4511778">
<tr>
<td valign="top">
<b>Note:</b>
</td>
<td>
<p>
It is considered as a bug if the precondition is not met (i.e. if <code>capacity &lt;
min_capacity</code>) and an assertion will be invoked in the debug mode.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_16d55cc66a4d73e6756e6287fb73990fb" name=
"classboost_1_1circular__buffer__space__optimized_16d55cc66a4d73e6756e6287fb73990fb"></a>
<code><b>circular_buffer_space_optimized(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_10b8131db04bfa69c99f23aed053ca8a8">capacity_control</a>
capacity_ctrl,<br>
<a href=
"circular_buffer.html#classboost_1_1circular__buffer__space__optimized_116b928fa9d1df586ce1e4b60837afe9f">value_type</a>
item, const <a href=
"circular_buffer.html#classboost_1_1circular__buffer_14e07c6ddfe89debe384e59bed06e7cb7">allocator_type</a>&amp;
alloc = allocator_type());</b></code><br>
<table id="table_function_desc_id4511813">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4511918">
<tr>
<td>
<p>
Create a full space optimized circular buffer filled with copies of <code>item</code>.
</p>
</td>
</tr>
</table>
<table id="table_pre_desc_id4512001">
<tr>
<td valign="top">
<b>Precondition:</b>
</td>
<td>
<p>
<code>capacity &gt;= min_capacity</code>
</p>
</td>
</tr>
</table>
<table id="table_post_desc_id4512011">
<tr>
<td valign="top">
<b>Postcondition:</b>
</td>
<td>
<p>
<code>(*this).size() == capacity &amp;&amp; (*this)[0] == (*this)[1] == ... == (*this).back()
== item</code>
</p>
</td>
</tr>
</table>
<table id="table_note_desc_id4512081">
<tr>
<td valign="top">
<b>Note:</b>
</td>
<td>
<p>
It is considered as a bug if the precondition is not met (i.e. if <code>capacity &lt;
min_capacity</code>) and an assertion will be invoked in the debug mode.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_15b15a87914ccc922cd730d5cabc00926" name=
"classboost_1_1circular__buffer__space__optimized_15b15a87914ccc922cd730d5cabc00926"></a>
<code><b>circular_buffer_space_optimized(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_10b8131db04bfa69c99f23aed053ca8a8">capacity_control</a>
capacity_ctrl,<br>
<a href=
"circular_buffer.html#classboost_1_1circular__buffer_19ba12c0142a21a7d960877c22fa3ea00">size_type</a> n,
<a href=
"circular_buffer.html#classboost_1_1circular__buffer__space__optimized_116b928fa9d1df586ce1e4b60837afe9f">value_type</a>
item,<br>
const <a href=
"circular_buffer.html#classboost_1_1circular__buffer_14e07c6ddfe89debe384e59bed06e7cb7">allocator_type</a>&amp;
alloc = allocator_type());</b></code><br>
<table id="table_function_desc_id4512116">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4512238">
<tr>
<td>
<p>
TODO doc.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_1296bbfa5c427d05cb02fc35249f83bb4" name=
"classboost_1_1circular__buffer__space__optimized_1296bbfa5c427d05cb02fc35249f83bb4"></a> <code><b>template
&lt;class InputIterator&gt;<br>
circular_buffer_space_optimized(InputIterator first, InputIterator last);</b></code><br>
<table id="table_function_desc_id4512268">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4512343">
<tr>
<td></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_1e6783618188f278ef087c1932ff5102d" name=
"classboost_1_1circular__buffer__space__optimized_1e6783618188f278ef087c1932ff5102d"></a> <code><b>template
&lt;class InputIterator&gt;<br>
circular_buffer_space_optimized(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_10b8131db04bfa69c99f23aed053ca8a8">capacity_control</a>
capacity_ctrl, InputIterator first, InputIterator last);</b></code><br>
<table id="table_function_desc_id4512369">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4512462">
<tr>
<td></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_11dd04145492c82a959b1df1167b4e217" name=
"classboost_1_1circular__buffer__space__optimized_11dd04145492c82a959b1df1167b4e217"></a> <code><b>template
&lt;class InputIterator&gt;<br>
circular_buffer_space_optimized(InputIterator first,<br>
InputIterator last, const <a href=
"circular_buffer.html#classboost_1_1circular__buffer_14e07c6ddfe89debe384e59bed06e7cb7">allocator_type</a>&amp;
alloc = allocator_type());</b></code><br>
<table id="table_function_desc_id4512503">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4512611">
<tr>
<td>
<p>
TODO doc.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_186a0b8ef26e1368e4c815b6a0531d5fe" name=
"classboost_1_1circular__buffer__space__optimized_186a0b8ef26e1368e4c815b6a0531d5fe"></a> <code><b>template
&lt;class InputIterator&gt;<br>
circular_buffer_space_optimized(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_10b8131db04bfa69c99f23aed053ca8a8">capacity_control</a>
capacity_ctrl,<br>
InputIterator first, InputIterator last,<br>
const <a href=
"circular_buffer.html#classboost_1_1circular__buffer_14e07c6ddfe89debe384e59bed06e7cb7">allocator_type</a>&amp;
alloc = allocator_type());</b></code><br>
<table id="table_function_desc_id4512641">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4512767">
<tr>
<td>
<p>
Create a space optimized circular buffer with a copy of a range.
</p>
</td>
</tr>
</table>
<table id="table_pre_desc_id4512862">
<tr>
<td valign="top">
<b>Precondition:</b>
</td>
<td>
<p>
<code>capacity &gt;= min_capacity</code> and valid range <code>[first, last)</code>.
</p>
</td>
</tr>
</table>
<table id="table_post_desc_id4512876">
<tr>
<td valign="top">
<b>Postcondition:</b>
</td>
<td>
<p>
<code>(*this).capacity() == capacity</code><br>
Allocates at least as much memory as specified by the - TODO change <code>min_capacity</code>
parameter.<br>
If the number of items to copy from the range <code>[first, last)</code> is greater than the
specified <code>capacity</code> then only elements from the range <code>[last - capacity,
last)</code> will be copied.
</p>
</td>
</tr>
</table>
<table id="table_note_desc_id4512957">
<tr>
<td valign="top">
<b>Note:</b>
</td>
<td>
<p>
It is considered as a bug if the precondition is not met (i.e. if <code>capacity &lt;
min_capacity</code>) and an assertion will be invoked in the debug mode.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div><br>
<h2>
<a name="methods" id="methods">Public Member Functions</a>
</h2>
<div id="srcdoc_methods">
<table id="table_methods" border="1">
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_1f3e4b9caed10cf7383682c6dea794917" name=
"classboost_1_1circular__buffer__space__optimized_1f3e4b9caed10cf7383682c6dea794917"></a> <code><b><a href=
"circular_buffer.html#classboost_1_1circular__buffer_19ba12c0142a21a7d960877c22fa3ea00">size_type</a>
min_capacity() const;</b></code><br>
<table id="table_function_desc_id4510195">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4510238">
<tr>
<td>
<p>
Return the minimal guaranteed amount of allocated memory.
</p>
</td>
</tr>
</table>
<table id="table_detailed_desc_id4510248">
<tr>
<td>
The allocated memory will never drop under this value.
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_1b3667b889d9633e88d62adb98c1b1291" name=
"classboost_1_1circular__buffer__space__optimized_1b3667b889d9633e88d62adb98c1b1291"></a> <code><b>void
set_min_capacity(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_19ba12c0142a21a7d960877c22fa3ea00">size_type</a>
new_min_capacity);</b></code><br>
<table id="table_function_desc_id4510330">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4510383">
<tr>
<td>
<p>
Change the minimal guaranteed amount of allocated memory.
</p>
</td>
</tr>
</table>
<table id="table_pre_desc_id4510394">
<tr>
<td valign="top">
<b>Precondition:</b>
</td>
<td>
<p>
<code>(*this).capacity() &gt;= new_min_capacity</code>
</p>
</td>
</tr>
</table>
<table id="table_post_desc_id4510413">
<tr>
<td valign="top">
<b>Postcondition:</b>
</td>
<td>
<p>
<code>(*this).min_capacity() == new_min_capacity</code> Allocates memory specified by the
<code>new_min_capacity</code> parameter.
</p>
</td>
</tr>
</table>
<table id="table_note_desc_id4510437">
<tr>
<td valign="top">
<b>Note:</b>
</td>
<td>
<p>
It is considered as a bug if the precondition is not met (i.e. if <code>new_min_capacity &gt;
(*this).capacity()</code>) and an assertion will be invoked in the debug mode.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_1c804242b924b93eb3db7f3f4587a096c" name=
"classboost_1_1circular__buffer__space__optimized_1c804242b924b93eb3db7f3f4587a096c"></a> <code><b>void
set_capacity(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_19ba12c0142a21a7d960877c22fa3ea00">size_type</a>
new_capacity);</b></code><br>
<table id="table_function_desc_id4510764">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4510817">
<tr>
<td>
<p>
! See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
<table id="table_pre_desc_id4510836">
<tr>
<td valign="top">
<b>Precondition:</b>
</td>
<td>
<p>
<code>min_capacity() &lt;= new_capacity</code>
</p>
</td>
</tr>
</table>
<table id="table_note_desc_id4510853">
<tr>
<td valign="top">
<b>Note:</b>
</td>
<td>
<p>
It is considered as a bug if the precondition is not met (i.e. if <code>new_capacity &gt;
min_capacity()</code>) and an assertion will be invoked in the debug mode.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_1f244ff5576b79f8d60e273c02d71c9f2" name=
"classboost_1_1circular__buffer__space__optimized_1f244ff5576b79f8d60e273c02d71c9f2"></a> <code><b>void
resize(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_19ba12c0142a21a7d960877c22fa3ea00">size_type</a>
new_size, <a href=
"circular_buffer.html#classboost_1_1circular__buffer__space__optimized_116b928fa9d1df586ce1e4b60837afe9f">value_type</a>
item = value_type());</b></code><br>
<table id="table_function_desc_id4510923">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4511005">
<tr>
<td>
<p>
See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_16e2c5d77ea32819fd28f8ff2d5ce888a" name=
"classboost_1_1circular__buffer__space__optimized_16e2c5d77ea32819fd28f8ff2d5ce888a"></a> <code><b>void
rset_capacity(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_19ba12c0142a21a7d960877c22fa3ea00">size_type</a>
new_capacity);</b></code><br>
<table id="table_function_desc_id4511113">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4511166">
<tr>
<td>
<p>
! See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
<table id="table_pre_desc_id4511185">
<tr>
<td valign="top">
<b>Precondition:</b>
</td>
<td>
<p>
<code>min_capacity() &lt;= new_capacity</code>
</p>
</td>
</tr>
</table>
<table id="table_note_desc_id4511202">
<tr>
<td valign="top">
<b>Note:</b>
</td>
<td>
<p>
It is considered as a bug if the precondition is not met (i.e. if <code>new_capacity &gt;
min_capacity()</code>) and an assertion will be invoked in the debug mode.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_1d45e2e72d9e3fb42e090ebc47ac8d7ee" name=
"classboost_1_1circular__buffer__space__optimized_1d45e2e72d9e3fb42e090ebc47ac8d7ee"></a> <code><b>void
rresize(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_19ba12c0142a21a7d960877c22fa3ea00">size_type</a>
new_size, <a href=
"circular_buffer.html#classboost_1_1circular__buffer__space__optimized_116b928fa9d1df586ce1e4b60837afe9f">value_type</a>
item = value_type());</b></code><br>
<table id="table_function_desc_id4511272">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4511354">
<tr>
<td>
<p>
See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_17ca4fda9526d0dad99706763c3b2d9f1" name=
"classboost_1_1circular__buffer__space__optimized_17ca4fda9526d0dad99706763c3b2d9f1"></a> <code><b>void
assign(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_19ba12c0142a21a7d960877c22fa3ea00">size_type</a> n,
<a href=
"circular_buffer.html#classboost_1_1circular__buffer__space__optimized_116b928fa9d1df586ce1e4b60837afe9f">value_type</a>
item);</b></code><br>
<table id="table_function_desc_id4513092">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4513162">
<tr>
<td>
<p>
See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_10dff40462f19ca6cecd89443ceb8d71f" name=
"classboost_1_1circular__buffer__space__optimized_10dff40462f19ca6cecd89443ceb8d71f"></a> <code><b>void
assign(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_10b8131db04bfa69c99f23aed053ca8a8">capacity_control</a>
capacity_ctrl, <a href=
"circular_buffer.html#classboost_1_1circular__buffer_19ba12c0142a21a7d960877c22fa3ea00">size_type</a> n,
<a href=
"circular_buffer.html#classboost_1_1circular__buffer__space__optimized_116b928fa9d1df586ce1e4b60837afe9f">value_type</a>
item);</b></code><br>
<table id="table_function_desc_id4513214">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4513302">
<tr>
<td>
<p>
See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_1582f452f07ebf08dda4c053b635e1581" name=
"classboost_1_1circular__buffer__space__optimized_1582f452f07ebf08dda4c053b635e1581"></a> <code><b>template
&lt;class InputIterator&gt;<br>
void assign(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_10b8131db04bfa69c99f23aed053ca8a8">capacity_control</a>
capacity_ctrl, InputIterator first, InputIterator last);</b></code><br>
<table id="table_function_desc_id4513484">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4513576">
<tr>
<td>
<p>
See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_14fd3b613f754d529ca250f2563b2f863" name=
"classboost_1_1circular__buffer__space__optimized_14fd3b613f754d529ca250f2563b2f863"></a> <code><b>void
swap(circular_buffer_space_optimized&lt;T,Alloc&gt;&amp; cb);</b></code><br>
<table id="table_function_desc_id4513656">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4513711">
<tr>
<td>
<p>
See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_1cf3ffed54f5fece9315fb96726e5e205" name=
"classboost_1_1circular__buffer__space__optimized_1cf3ffed54f5fece9315fb96726e5e205"></a> <code><b>void
push_back(<a href=
"circular_buffer.html#classboost_1_1circular__buffer__space__optimized_116b928fa9d1df586ce1e4b60837afe9f">value_type</a>
item = value_type());</b></code><br>
<table id="table_function_desc_id4513788">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4513853">
<tr>
<td>
<p>
! See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
<p>
The rules for iterator invalidation differ from the original circular_buffer. See the <a href=
"../circular_buffer_adaptor.html#invalidation">documentation</a>.
</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_1f0484fd492b377ff80c0bcb76183162c" name=
"classboost_1_1circular__buffer__space__optimized_1f0484fd492b377ff80c0bcb76183162c"></a> <code><b>void
push_front(<a href=
"circular_buffer.html#classboost_1_1circular__buffer__space__optimized_116b928fa9d1df586ce1e4b60837afe9f">value_type</a>
item = value_type());</b></code><br>
<table id="table_function_desc_id4513932">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4513996">
<tr>
<td>
<p>
! See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
<p>
The rules for iterator invalidation differ from the original circular_buffer. See the <a href=
"../circular_buffer_adaptor.html#invalidation">documentation</a>.
</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_19c4290c18ab3dd2462dc01fb8368dff6" name=
"classboost_1_1circular__buffer__space__optimized_19c4290c18ab3dd2462dc01fb8368dff6"></a> <code><b>void
pop_back();</b></code><br>
<table id="table_function_desc_id4514075">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4514117">
<tr>
<td>
<p>
! See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
<p>
The rules for iterator invalidation differ from the original circular_buffer. See the <a href=
"../circular_buffer_adaptor.html#invalidation">documentation</a>.
</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_1d7d496c40fc053258ac7d19cf5261788" name=
"classboost_1_1circular__buffer__space__optimized_1d7d496c40fc053258ac7d19cf5261788"></a> <code><b>void
pop_front();</b></code><br>
<table id="table_function_desc_id4514195">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4514237">
<tr>
<td>
<p>
! See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
<p>
The rules for iterator invalidation differ from the original circular_buffer. See the <a href=
"../circular_buffer_adaptor.html#invalidation">documentation</a>.
</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_145877a0d46400f4894a13d25d138c130" name=
"classboost_1_1circular__buffer__space__optimized_145877a0d46400f4894a13d25d138c130"></a> <code><b><a href=
"circular_buffer.html#classboost_1_1circular__buffer_11b8a33f2dc8519b8a7d344ed4408c532">iterator</a>
insert(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_11b8a33f2dc8519b8a7d344ed4408c532">iterator</a> pos,
<a href=
"circular_buffer.html#classboost_1_1circular__buffer__space__optimized_116b928fa9d1df586ce1e4b60837afe9f">value_type</a>
item = value_type());</b></code><br>
<table id="table_function_desc_id4514315">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4514403">
<tr>
<td>
<p>
! See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
<p>
The rules for iterator invalidation differ from the original circular_buffer. See the <a href=
"../circular_buffer_adaptor.html#invalidation">documentation</a>.
</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_1dc2060ce1105d80429ff3f004ca0691b" name=
"classboost_1_1circular__buffer__space__optimized_1dc2060ce1105d80429ff3f004ca0691b"></a> <code><b>void
insert(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_11b8a33f2dc8519b8a7d344ed4408c532">iterator</a> pos,
<a href=
"circular_buffer.html#classboost_1_1circular__buffer_19ba12c0142a21a7d960877c22fa3ea00">size_type</a> n,
<a href=
"circular_buffer.html#classboost_1_1circular__buffer__space__optimized_116b928fa9d1df586ce1e4b60837afe9f">value_type</a>
item);</b></code><br>
<table id="table_function_desc_id4514525">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4514612">
<tr>
<td>
<p>
! See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
<p>
The rules for iterator invalidation differ from the original circular_buffer. See the <a href=
"../circular_buffer_adaptor.html#invalidation">documentation</a>.
</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_19eec983bc010f2e8415618455dd81da0" name=
"classboost_1_1circular__buffer__space__optimized_19eec983bc010f2e8415618455dd81da0"></a> <code><b>template
&lt;class InputIterator&gt;<br>
void insert(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_11b8a33f2dc8519b8a7d344ed4408c532">iterator</a> pos,
InputIterator first, InputIterator last);</b></code><br>
<table id="table_function_desc_id4514704">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4514794">
<tr>
<td>
<p>
! See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
<p>
The rules for iterator invalidation differ from the original circular_buffer. See the <a href=
"../circular_buffer_adaptor.html#invalidation">documentation</a>.
</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_1cb3586429e49eeb2df2d2a09e19775de" name=
"classboost_1_1circular__buffer__space__optimized_1cb3586429e49eeb2df2d2a09e19775de"></a> <code><b><a href=
"circular_buffer.html#classboost_1_1circular__buffer_11b8a33f2dc8519b8a7d344ed4408c532">iterator</a>
rinsert(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_11b8a33f2dc8519b8a7d344ed4408c532">iterator</a> pos,
<a href=
"circular_buffer.html#classboost_1_1circular__buffer__space__optimized_116b928fa9d1df586ce1e4b60837afe9f">value_type</a>
item = value_type());</b></code><br>
<table id="table_function_desc_id4514873">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4514961">
<tr>
<td>
<p>
! See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
<p>
The rules for iterator invalidation differ from the original circular_buffer. See the <a href=
"../circular_buffer_adaptor.html#invalidation">documentation</a>.
</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_11eff7ec0eb603d489bd12f8c48928c9d" name=
"classboost_1_1circular__buffer__space__optimized_11eff7ec0eb603d489bd12f8c48928c9d"></a> <code><b>void
rinsert(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_11b8a33f2dc8519b8a7d344ed4408c532">iterator</a> pos,
<a href=
"circular_buffer.html#classboost_1_1circular__buffer_19ba12c0142a21a7d960877c22fa3ea00">size_type</a> n,
<a href=
"circular_buffer.html#classboost_1_1circular__buffer__space__optimized_116b928fa9d1df586ce1e4b60837afe9f">value_type</a>
item);</b></code><br>
<table id="table_function_desc_id4515068">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4515155">
<tr>
<td>
<p>
! See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
<p>
The rules for iterator invalidation differ from the original circular_buffer. See the <a href=
"../circular_buffer_adaptor.html#invalidation">documentation</a>.
</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_1faeda7342f4717d7fb6b4589cb43b74e" name=
"classboost_1_1circular__buffer__space__optimized_1faeda7342f4717d7fb6b4589cb43b74e"></a> <code><b>template
&lt;class InputIterator&gt;<br>
void rinsert(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_11b8a33f2dc8519b8a7d344ed4408c532">iterator</a> pos,
InputIterator first, InputIterator last);</b></code><br>
<table id="table_function_desc_id4515247">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4515338">
<tr>
<td>
<p>
! See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
<p>
The rules for iterator invalidation differ from the original circular_buffer. See the <a href=
"../circular_buffer_adaptor.html#invalidation">documentation</a>.
</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_136feadef225bd8a10962a92c4ffcdfd3" name=
"classboost_1_1circular__buffer__space__optimized_136feadef225bd8a10962a92c4ffcdfd3"></a> <code><b><a href=
"circular_buffer.html#classboost_1_1circular__buffer_11b8a33f2dc8519b8a7d344ed4408c532">iterator</a>
erase(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_11b8a33f2dc8519b8a7d344ed4408c532">iterator</a>
pos);</b></code><br>
<table id="table_function_desc_id4515416">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4515475">
<tr>
<td>
<p>
! See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
<p>
The rules for iterator invalidation differ from the original circular_buffer. See the <a href=
"../circular_buffer_adaptor.html#invalidation">documentation</a>.
</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_19e9a4e0dfca27329da78e014d97201ca" name=
"classboost_1_1circular__buffer__space__optimized_19e9a4e0dfca27329da78e014d97201ca"></a> <code><b><a href=
"circular_buffer.html#classboost_1_1circular__buffer_11b8a33f2dc8519b8a7d344ed4408c532">iterator</a>
erase(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_11b8a33f2dc8519b8a7d344ed4408c532">iterator</a> first,
<a href=
"circular_buffer.html#classboost_1_1circular__buffer_11b8a33f2dc8519b8a7d344ed4408c532">iterator</a>
last);</b></code><br>
<table id="table_function_desc_id4515611">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4515688">
<tr>
<td>
<p>
! See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
<p>
The rules for iterator invalidation differ from the original circular_buffer. See the <a href=
"../circular_buffer_adaptor.html#invalidation">documentation</a>.
</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_16e96800422211d02621526c894b71fa1" name=
"classboost_1_1circular__buffer__space__optimized_16e96800422211d02621526c894b71fa1"></a> <code><b><a href=
"circular_buffer.html#classboost_1_1circular__buffer_11b8a33f2dc8519b8a7d344ed4408c532">iterator</a>
rerase(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_11b8a33f2dc8519b8a7d344ed4408c532">iterator</a>
pos);</b></code><br>
<table id="table_function_desc_id4515780">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4515840">
<tr>
<td>
<p>
! See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
<p>
The rules for iterator invalidation differ from the original circular_buffer. See the <a href=
"../circular_buffer_adaptor.html#invalidation">documentation</a>.
</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<a id="classboost_1_1circular__buffer__space__optimized_154fd4c2a67c7d6de6cbf6c8255729e98" name=
"classboost_1_1circular__buffer__space__optimized_154fd4c2a67c7d6de6cbf6c8255729e98"></a> <code><b><a href=
"circular_buffer.html#classboost_1_1circular__buffer_11b8a33f2dc8519b8a7d344ed4408c532">iterator</a>
rerase(<a href=
"circular_buffer.html#classboost_1_1circular__buffer_11b8a33f2dc8519b8a7d344ed4408c532">iterator</a> first,
<a href=
"circular_buffer.html#classboost_1_1circular__buffer_11b8a33f2dc8519b8a7d344ed4408c532">iterator</a>
last);</b></code><br>
<table id="table_function_desc_id4515932">
<tr>
<td>
</td>
<td>
<table id="table_detailed_desc_id4516008">
<tr>
<td>
<p>
! See the circular_buffer source documentation.
</p>
</td>
</tr>
</table>
<p>
The rules for iterator invalidation differ from the original circular_buffer. See the <a href=
"../circular_buffer_adaptor.html#invalidation">documentation</a>.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div><br>
<h2>
<a name="semantics" id="semantics">Semantics</a>
</h2>
<p>
TODO remove this section
</p>
<p>
The behaviour of memory auto-resizing is as follows:
</p>
<ul>
<li>Minimal capacity is allocated when an empty <code>circular_buffer_space_optimized</code> is created.
</li>
<li>When a non-empty <code>circular_buffer_space_optimized</code> container is created the allocated memory
reflects the size of the container.
</li>
<li>
<code>push_back</code> , <code>push_front</code> , <code>insert</code> and <code>rinsert</code> will
predictively increase the allocated memory if necessary. (The predictive memory allocation is similar to
<code>std::vector</code> .)
</li>
<li>
<code>set_capacity</code> , <code>resize</code> , <code>assign</code> , <code>insert</code> (range or n items),
<code>rinsert</code> (range or n items), <code>erase</code> (range) and <code>clear</code> will accommodate the
allocated memory as necessary.
</li>
<li>
<code>pop_back</code> , <code>pop_front</code> , <code>erase</code> and <code>clear</code> will predictively
decrease the allocated memory.
</li>
</ul>
<p>
The semantics of the <code>circular_buffer_space_optimized</code> then follows the <a href=
"circular_buffer.html#semantics">semantics</a> of the base <code>circular_buffer</code> except the invalidation
rules.
</p>
<p>
<a name="invalidation" id="invalidation"></a> The rule for iterator invalidation for
<code>circular_buffer_space_optimized</code> is as follows:
</p>
<ul>
<li>
<code>data</code> , <code>set_capacity</code> , <code>resize</code> , <code>operator=</code> ,
<code>assign</code> , <code>swap</code> , <code>push_back</code> , <code>push_front</code> ,
<code>pop_back</code> , <code>pop_front</code> , <code>insert</code> , <code>rinsert</code> ,
<code>erase</code> and <code>clear</code> invalidate all iterators pointing to the
<code>circular_buffer_space_optimized</code> .
</li>
</ul><br>
<h2>
<a name="see" id="see">See also</a>
</h2>
<p>
<code><a href="circular_buffer.html">boost::circular_buffer</a>, <a href=
"http://www.sgi.com/tech/stl/Vector.html">std::vector</a></code>
</p><br>
<h2>
<a name="ack" id="ack">Acknowledgments</a>
</h2>
<p>
The idea of the space optimized circular buffer has been introduced by Pavel Vozenilek.
</p>
<hr size="1">
<table id="footer" border="0" width="100%">
<tr>
<td align="left" valign="top">
<p>
<small>Copyright <20> 2003-2006 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</a>.)</small>
</p>
</td>
<td align="right" valign="top">
<a href="http://validator.w3.org/check?url=referer"><img src="valid-html40.png" height="31" width="88" alt=
"Valid HTML 4.0!" border="0"></a>
</td>
</tr>
</table>
</body>
</html>