Translator copy ctor exception handled.

Exception-safety docs moddified.



[SVN r81365]
This commit is contained in:
Adam Wulkiewicz
2012-11-16 12:43:34 +00:00
parent 04cf9fbc39
commit ff1ccbdf29
11 changed files with 148 additions and 56 deletions

View File

@@ -3,7 +3,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Introduction</title>
<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;Geometry Index">
<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;Geometry Index">
<link rel="prev" href="../index.html" title="Chapter&#160;1.&#160;Geometry Index">

View File

@@ -3,7 +3,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>R-tree</title>
<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;Geometry Index">
<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;Geometry Index">
<link rel="prev" href="introduction.html" title="Introduction">

View File

@@ -3,7 +3,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Creation and modification</title>
<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry Index">
<link rel="up" href="../r_tree.html" title="R-tree">
<link rel="prev" href="rtree_quickstart.html" title="Quick Start">
@@ -51,7 +51,7 @@
</p>
<pre class="programlisting"><span class="identifier">rtree</span><span class="special">&lt;</span><span class="identifier">Value</span><span class="special">,</span> <span class="identifier">Parameters</span><span class="special">,</span> <span class="identifier">Translator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
</pre>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem">
<code class="computeroutput">Value</code> - type of object which will be stored in the container.
</li>
@@ -89,7 +89,7 @@
<code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;...&gt;</span></code>,
pointer, iterator or smart pointer.
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem">
<code class="computeroutput">Indexable <span class="special">=</span> <a href="http://www.boost.org/libs/geometry/doc/html/geometry/reference/concepts/concept_point.html" target="_top">Point</a>
<span class="special">|</span> <a href="http://www.boost.org/libs/geometry/doc/html/geometry/reference/concepts/concept_box.html" target="_top">Box</a></code>

View File

@@ -3,7 +3,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Exception safety</title>
<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry Index">
<link rel="up" href="../r_tree.html" title="R-tree">
<link rel="prev" href="nearest_neighbours_queries.html" title="Nearest neighbours queries">
@@ -28,7 +28,7 @@
<p>
In order to be exception-safe the R-tree requires:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem">
Nonthrowing copy constructor of the <code class="computeroutput"><span class="identifier">CoordinateType</span></code>
used in the <code class="computeroutput">Indexable</code>,
@@ -63,7 +63,8 @@
</td>
<td>
<p>
<span class="emphasis"><em>nothrow</em></span>
<span class="emphasis"><em>nothrow (default)</em></span> or <span class="bold"><strong>strong</strong></span>
<sup>[<a name="geometry_index.r_tree.exception_safety.f0" href="#ftn.geometry_index.r_tree.exception_safety.f0" class="footnote">a</a>]</sup>
</p>
</td>
</tr>
@@ -93,6 +94,12 @@
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">rtree</span><span class="special">(</span><span class="identifier">rtree</span> <span class="keyword">const</span><span class="special">&amp;)</span></code>
@@ -117,6 +124,12 @@
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">rtree</span><span class="special">(</span><span class="identifier">rtree</span> <span class="special">&amp;&amp;)</span></code>
@@ -124,7 +137,8 @@
</td>
<td>
<p>
<span class="emphasis"><em>nothrow</em></span>
<span class="emphasis"><em>nothrow (default)</em></span> or <span class="bold"><strong>strong</strong></span>
<sup>[<a name="geometry_index.r_tree.exception_safety.f1" href="#ftn.geometry_index.r_tree.exception_safety.f1" class="footnote">b</a>]</sup>
</p>
</td>
</tr>
@@ -137,11 +151,17 @@
<td>
<p>
<span class="emphasis"><em>nothrow</em></span> or <span class="bold"><strong>strong</strong></span>
<a href="#ftn.geometry_index.r_tree.exception_safety.f0" class="footnote"><sup class="footnote"><a name="geometry_index.r_tree.exception_safety.f0"></a>[a]</sup></a>
<sup>[<a name="geometry_index.r_tree.exception_safety.f2" href="#ftn.geometry_index.r_tree.exception_safety.f2" class="footnote">c</a>]</sup>
</p>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">insert</span><span class="special">(</span>Value<span class="special">)</span></code>
@@ -192,6 +212,12 @@
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">spatial_query</span><span class="special">(...)</span></code>
@@ -216,6 +242,12 @@
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code>
@@ -275,10 +307,51 @@
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">parameters</span><span class="special">()</span></code>
</p>
</td>
<td>
<p>
<span class="emphasis"><em>nothrow</em></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">translator</span><span class="special">()</span></code>
</p>
</td>
<td>
<p>
<span class="emphasis"><em>nothrow</em></span>
</p>
</td>
</tr>
</tbody>
<tbody class="footnotes"><tr><td colspan="2"><div id="ftn.geometry_index.r_tree.exception_safety.f0" class="footnote"><p><a href="#geometry_index.r_tree.exception_safety.f0" class="para"><sup class="para">[a] </sup></a>
<span class="emphasis"><em>nothrow</em></span> - if allocators are equal, <span class="bold"><strong>strong</strong></span> - if allocators aren't equal
</p></div></td></tr></tbody>
<tbody class="footnotes"><tr><td colspan="2">
<div class="footnote"><p><sup>[<a id="ftn.geometry_index.r_tree.exception_safety.f0" href="#geometry_index.r_tree.exception_safety.f0" class="para">a</a>] </sup>
<span class="emphasis"><em>nothrow</em></span> - if <code class="computeroutput"><span class="identifier">Translator</span></code>
has nonthrowing copy constructor (default), <span class="bold"><strong>strong</strong></span>
- if <code class="computeroutput"><span class="identifier">Translator</span></code>
has throwing copy constructor
</p></div>
<div class="footnote"><p><sup>[<a id="ftn.geometry_index.r_tree.exception_safety.f1" href="#geometry_index.r_tree.exception_safety.f1" class="para">b</a>] </sup>
<span class="emphasis"><em>nothrow</em></span> - if <code class="computeroutput"><span class="identifier">Translator</span></code>
has nonthrowing copy constructor (default), <span class="bold"><strong>strong</strong></span>
- if <code class="computeroutput"><span class="identifier">Translator</span></code>
has throwing copy constructor
</p></div>
<div class="footnote"><p><sup>[<a id="ftn.geometry_index.r_tree.exception_safety.f2" href="#geometry_index.r_tree.exception_safety.f2" class="para">c</a>] </sup>
<span class="emphasis"><em>nothrow</em></span> - if allocators are equal and <code class="computeroutput"><span class="identifier">Translator</span></code> has nonthrowing
copy constructor (default), <span class="bold"><strong>strong</strong></span>
- if allocators aren't equal or <code class="computeroutput"><span class="identifier">Translator</span></code>
has throwing copy constructor
</p></div>
</td></tr></tbody>
</table></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>

View File

@@ -3,7 +3,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Introduction</title>
<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry Index">
<link rel="up" href="../r_tree.html" title="R-tree">
<link rel="prev" href="../r_tree.html" title="R-tree">

View File

@@ -3,7 +3,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Nearest neighbours queries</title>
<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry Index">
<link rel="up" href="../r_tree.html" title="R-tree">
<link rel="prev" href="spatial_queries.html" title="Spatial queries">

View File

@@ -3,7 +3,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Quick Start</title>
<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry Index">
<link rel="up" href="../r_tree.html" title="R-tree">
<link rel="prev" href="introduction.html" title="Introduction">
@@ -109,7 +109,7 @@
</p>
<h4>
<a name="geometry_index.r_tree.rtree_quickstart.h0"></a>
<span class="phrase"><a name="geometry_index.r_tree.rtree_quickstart.more"></a></span><a class="link" href="rtree_quickstart.html#geometry_index.r_tree.rtree_quickstart.more">More</a>
<span><a name="geometry_index.r_tree.rtree_quickstart.more"></a></span><a class="link" href="rtree_quickstart.html#geometry_index.r_tree.rtree_quickstart.more">More</a>
</h4>
<p>
More information about the R-tree implementation, other algorithms and queries

View File

@@ -3,7 +3,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Spatial queries</title>
<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry Index">
<link rel="up" href="../r_tree.html" title="R-tree">
<link rel="prev" href="creation_and_modification.html" title="Creation and modification">

View File

@@ -3,7 +3,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Chapter&#160;1.&#160;Geometry Index</title>
<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
<link rel="home" href="index.html" title="Chapter&#160;1.&#160;Geometry Index">
<link rel="next" href="geometry_index/introduction.html" title="Introduction">
</head>
@@ -56,7 +56,7 @@
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"><p><small>Last revised: November 14, 2012 at 23:30:31 GMT</small></p></td>
<td align="left"><p><small>Last revised: November 16, 2012 at 12:39:01 GMT</small></p></td>
<td align="right"><div class="copyright-footer"></div></td>
</tr></table>
<hr>

View File

@@ -17,24 +17,34 @@ In order to be exception-safe the __rtree__ requires:
[table
[[Operation] [exception-safety]]
[[`rtree()`] [ /nothrow/ ]]
[[`rtree()`] [ /nothrow (default)/ or *strong*
[footnote /nothrow/ - if `Translator` has nonthrowing copy constructor (default), *strong* - if `Translator` has throwing copy constructor]]]
[[`rtree(first, last)`] [ *strong* ]]
[[`~rtree()`] [ /nothrow/ ]]
[[][]]
[[`rtree(rtree const&)`] [ *strong* ]]
[[`operator=(rtree const&)`] [ *strong* ]]
[[`rtree(rtree &&)`] [ /nothrow/ ]]
[[`operator=(rtree &&)`] [ /nothrow/ or *strong* [footnote /nothrow/ - if allocators are equal, *strong* - if allocators aren't equal ]]]
[[][]]
[[`rtree(rtree &&)`] [ /nothrow (default)/ or *strong*
[footnote /nothrow/ - if `Translator` has nonthrowing copy constructor (default), *strong* - if `Translator` has throwing copy constructor]]]
[[`operator=(rtree &&)`] [ /nothrow/ or *strong*
[footnote /nothrow/ - if allocators are equal and `Translator` has nonthrowing copy constructor (default), *strong* - if allocators aren't equal or `Translator` has throwing copy constructor]]]
[[][]]
[[`insert(__value__)`] [ basic ]]
[[`insert(first, last)`] [ basic ]]
[[`remove(__value__)`] [ basic ]]
[[`remove(first, last)`] [ basic ]]
[[][]]
[[`spatial_query(...)`] [ *strong* ]]
[[`nearest_query(...)`] [ *strong* ]]
[[][]]
[[`size()`] [ /nothrow/ ]]
[[`empty()`] [ /nothrow/ ]]
[[`clear()`] [ /nothrow/ ]]
[[`box()`] [ /nothrow/ ]]
[[`get_allocator()`] [ /nothrow/ ]]
[[`parameters()`] [ /nothrow/ ]]
[[`translator()`] [ /nothrow/ ]]
]
[endsect] [/Exception safety/]

View File

@@ -103,19 +103,20 @@ public:
/*!
The constructor.
\note Exception-safety: nothrow
\note Exception-safety: nothrow (if translator has nonthrowing copy ctor),
strong (if translator has throwing copy ctor)
\param parameters The parameters object.
\param translator The translator object.
\param allocator The allocator object.
*/
inline explicit rtree(Parameters parameters = Parameters(), translator_type const& translator = translator_type(), Allocator allocator = Allocator())
: m_values_count(0)
, m_root(0)
, m_leafs_level(0)
: m_translator(translator) // MAY THROW (copy)
, m_parameters(parameters)
, m_translator(translator)
, m_allocators(allocator)
, m_values_count(0)
, m_leafs_level(0)
, m_root(0)
{}
/*!
@@ -131,12 +132,12 @@ public:
*/
template<typename Iterator>
inline rtree(Iterator first, Iterator last, Parameters parameters = Parameters(), translator_type const& translator = translator_type(), Allocator allocator = std::allocator<value_type>())
: m_values_count(0)
, m_root(0)
, m_leafs_level(0)
: m_translator(translator) // MAY THROW (copy)
, m_parameters(parameters)
, m_translator(translator)
, m_allocators(allocator)
, m_values_count(0)
, m_leafs_level(0)
, m_root(0)
{
try
{
@@ -165,10 +166,12 @@ public:
\note Exception-safety: strong
*/
inline rtree(rtree const& src)
: m_root(0)
: m_translator(src.m_translator) // MAY THROW (copy)
, m_parameters(src.m_parameters)
, m_translator(src.m_translator)
, m_allocators(src.m_allocators)
, m_values_count(0)
, m_leafs_level(0)
, m_root(0)
{
//TODO use Boost.Container allocator_traits_type::select_on_container_copy_construction()
@@ -181,10 +184,12 @@ public:
\note Exception-safety: strong
*/
inline rtree(rtree const& src, Allocator const& allocator)
: m_root(0)
: m_translator(src.m_translator) // MAY THROW (copy)
, m_parameters(src.m_parameters)
, m_translator(src.m_translator)
, m_allocators(allocator)
, m_values_count(0)
, m_leafs_level(0)
, m_root(0)
{
this->raw_copy(src, *this, m_allocators);
}
@@ -192,19 +197,20 @@ public:
/*!
The moving constructor.
\note Exception-safety: nothrow
\note Exception-safety: nothrow (if translator has nonthrowing copy ctor),
strong (if translator has throwing copy ctor)
*/
inline rtree(BOOST_RV_REF(rtree) src)
: m_values_count(src.m_values_count)
, m_root(src.m_root)
, m_leafs_level(src.m_leafs_level)
: m_translator(src.m_translator) // MAY THROW (copy)
, m_parameters(src.m_parameters)
, m_translator(src.m_translator)
, m_allocators(src.m_allocators)
, m_values_count(src.m_values_count)
, m_leafs_level(src.m_leafs_level)
, m_root(src.m_root)
{
src.m_values_count = 0;
src.m_root = 0;
src.m_leafs_level = 0;
src.m_root = 0;
}
/*!
@@ -227,7 +233,8 @@ public:
/*!
The moving assignment.
\note Exception-safety: nothrow (if allocators are equal), strong (if allocators aren't equal)
\note Exception-safety: nothrow (if allocators are equal and translator has nonthrowing copy ctor),
strong (if allocators aren't equal or translator has throwing copy ctor)
*/
inline rtree & operator=(BOOST_RV_REF(rtree) src)
{
@@ -238,16 +245,17 @@ public:
if ( m_allocators.allocator == src.m_allocators.allocator )
{
m_translator = src.m_translator; // MAY THROW (copy)
m_parameters = src.m_parameters;
m_translator = src.m_translator;
//m_allocators = src.m_allocators;
m_values_count = src.m_values_count;
src.m_values_count = 0;
m_root = src.m_root;
src.m_root = 0;
m_leafs_level = src.m_leafs_level;
m_root = src.m_root;
src.m_values_count = 0;
src.m_leafs_level = 0;
src.m_root = 0;
}
else
{
@@ -548,7 +556,7 @@ public:
/*!
Returns allocator used by the rtree.
\note Exception-safety: nothrow if allocator copy can't throw.
\note Exception-safety: nothrow
\return The allocator.
*/
@@ -565,7 +573,7 @@ private:
This function is not a part of the 'official' interface. However it makes
possible e.g. to pass a visitor drawing the tree structure.
\note Exception-safety: the same as visitor.
\note Exception-safety: the same as Visitor::operator().
\param visitor The visitor object.
*/
@@ -579,7 +587,7 @@ private:
Returns the number of stored objects. Same as size()
This function is not a part of the 'official' interface.
\note Exception-safety: nothrow.
\note Exception-safety: nothrow
\return The number of stored objects.
*/
@@ -720,8 +728,9 @@ private:
dst.m_root = 0;
}
dst.m_parameters = src.m_parameters;
dst.m_translator = src.m_translator;
dst.m_parameters = src.m_parameters;
dst.m_allocators = allocators;
dst.m_root = copy_v.result;
@@ -799,13 +808,13 @@ private:
return result.get(out_it);
}
size_type m_values_count;
node *m_root;
size_type m_leafs_level;
Parameters m_parameters;
translator_type m_translator;
Parameters m_parameters;
allocators_type m_allocators;
size_type m_values_count;
size_type m_leafs_level;
node * m_root;
};
/*!