mirror of
https://github.com/boostorg/range.git
synced 2025-07-30 04:47:25 +02:00
*** empty log message ***
[SVN r24176]
This commit is contained in:
@ -1,4 +1,4 @@
|
|||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title> Collection Traits </title><meta http-equiv="Content-Type"content="text/html; charset=iso-8859-1"></head> <body><table ><tr ><td ><img src="cboost.gif" width="100%" border="0"></td><td ><h1 ><br> Collection Traits </h1></td></tr></table><ul ><li ><a href="#Introduction" >Introduction</a></li><li ><a href="#Reference" >Reference</a></li><ul ><li ><a href="#Synopsis" >Synopsis</a></li><li ><a href="#Library headers" >Library headers</a></li><li ><a href="#Semantics" >Semantics</a></li></ul><li ><a href="#Examples" >Examples</a></li><li ><a href="#Portability" >Portability</a></li><li ><a href="#FAQ" >FAQ</a></li><li ><a href="#History" >History</a></li></ul><hr size="1" ><h2 >Introduction</h2><a name="Introduction" ></a><p >This library makes it possible to treat different types as if they have
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title> Boost.Range External Range Implementation </title><meta http-equiv="Content-Type"content="text/html; charset=iso-8859-1"></head> <body><table ><tr ><td ><img src="cboost.gif" width="100%" border="0"></td><td ><h1 ><br>Boost.Range External Range Implementation </h1></td></tr></table><ul ><li ><a href="#Introduction" >Introduction</a></li><li ><a href="#Reference" >Reference</a></li><ul ><li ><a href="#Synopsis" >Synopsis</a></li><li ><a href="#Library headers" >Library headers</a></li><li ><a href="#Semantics" >Semantics</a></li></ul><li ><a href="#Examples" >Examples</a></li><li ><a href="#Portability" >Portability</a></li><li ><a href="#FAQ" >FAQ</a></li><li ><a href="#History" >History</a></li></ul><hr size="1" ><h2 >Introduction</h2><a name="Introduction" ></a><p >This library makes it possible to treat different types as if they have
|
||||||
implemented a subset of the container requirements
|
implemented a subset of the container requirements
|
||||||
(see §23.1of the C++ standard). Formally, that subset is defined by
|
(see §23.1of the C++ standard). Formally, that subset is defined by
|
||||||
the <a href="Collection.htm" target="_self" >CollectionConcept.</a>
|
the <a href="Collection.htm" target="_self" >CollectionConcept.</a>
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
<IMG SRC="/Images/stat.gif" ALT="" BORDER=0 WIDTH = "6" HEIGHT = "6" >
|
<IMG SRC="/Images/stat.gif" ALT="" BORDER=0 WIDTH = "6" HEIGHT = "6" >
|
||||||
|
|
||||||
<BR Clear>
|
<BR Clear>
|
||||||
|
<a name=range>
|
||||||
<H1>Range</H1>
|
<H1>Range</H1>
|
||||||
|
|
||||||
<h3>Description</h3>
|
<h3>Description</h3>
|
||||||
@ -439,8 +440,10 @@ An algorithm that iterates through the range <tt>[a.begin(), a.end())</tt>
|
|||||||
<hr>
|
<hr>
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
|
<a name=reversible_range>
|
||||||
<h1>ReversibleRange</h1>
|
<h1>ReversibleRange</h1>
|
||||||
|
|
||||||
|
|
||||||
<h3>Description</h3>
|
<h3>Description</h3>
|
||||||
This concept provides access to iterators that traverse in both
|
This concept provides access to iterators that traverse in both
|
||||||
directions (forward and reverse). The iterator type must meet all of
|
directions (forward and reverse). The iterator type must meet all of
|
||||||
|
146
doc/style.html
Executable file
146
doc/style.html
Executable file
@ -0,0 +1,146 @@
|
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||||
|
<title>Boost.Range Terminology and Style Guidelines </title>
|
||||||
|
<link rel="stylesheet" href="style.css" type="text/css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<table border="0" >
|
||||||
|
<tr>
|
||||||
|
<td ><img src="cboost.gif" border="0" ></td>
|
||||||
|
<td >
|
||||||
|
<h1 align="center">Boost.Range terminology and style guidelines</h1>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The use of a consistent terminologi is as important for
|
||||||
|
iterator <a href="range.html#range">Range</a>s and
|
||||||
|
<a href="range.html#external_range">ExternalRange</a>-based algorithms
|
||||||
|
as it is for iterators and iterator-based algorithms.
|
||||||
|
If a conventional set of names are adopted, we can avoid misunderstandings
|
||||||
|
and write generic function prototypes that are <i>self-documenting</i>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Since iterator ranges are characterized by a specific underlying
|
||||||
|
iterator type, we get a type of iterator range for each type of
|
||||||
|
iterator. Hence we can speak of the following types of iterator
|
||||||
|
ranges:
|
||||||
|
<ul>
|
||||||
|
<li> Range
|
||||||
|
<li> ReversibleRange
|
||||||
|
<li> <i>Value access</i> category:
|
||||||
|
<ul>
|
||||||
|
<li> ReadableRange
|
||||||
|
<li> WriteableRange
|
||||||
|
<li> SwappableRange
|
||||||
|
<li> LvalueRange
|
||||||
|
</ul>
|
||||||
|
<li> <i>Traversal</i> category:
|
||||||
|
<ul>
|
||||||
|
<li> IncrementableRange
|
||||||
|
<li> SinglePassRange
|
||||||
|
<li> ForwardRange
|
||||||
|
<li> BidirectionalRange
|
||||||
|
<li> RandomAccessRange
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
Notice how we have used the categories from the
|
||||||
|
<a href=../../iterator/doc/new-iter-concepts.html>new style iterators</a>.
|
||||||
|
Similarly, for <a href="range.html#external_range">ExternalRange</a>
|
||||||
|
we have
|
||||||
|
<ul>
|
||||||
|
<li> XRange
|
||||||
|
<li> XReversibleRange
|
||||||
|
<li> <i>Value access</i> category:
|
||||||
|
<ul>
|
||||||
|
<li> XReadableRange
|
||||||
|
<li> XWriteableRange
|
||||||
|
<li> XSwappableRange
|
||||||
|
<li> XLvalueRange
|
||||||
|
</ul>
|
||||||
|
<li> <i>Traversal</i> category:
|
||||||
|
<ul>
|
||||||
|
<li> XIncrementableRange
|
||||||
|
<li> XSinglePassRange
|
||||||
|
<li> XForwardRange
|
||||||
|
<li> XBidirectionalRange
|
||||||
|
<li> XRandomAccessRange
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
The convention of using an <code>X</code> to mean "External" save us from
|
||||||
|
rediculously long parameter names and is easy to associate with an
|
||||||
|
<a href=external_concepts.html>external concept</a>.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Notice that an interator (and therefore an iterator range) has
|
||||||
|
one <i>traversal</i> property and one or more properties from the
|
||||||
|
<i>value access</i> category. So in reality we will mostly talk about
|
||||||
|
mixtures such as <ul> <li>RandomAccessReadableWriteableRange
|
||||||
|
<li>XForwardLvalueRange
|
||||||
|
</ul>
|
||||||
|
By convention, we should always specify the <i>travelsal</i> property first
|
||||||
|
as done above. This seems resonable since there will only be one
|
||||||
|
<i>traversal</i> property, but perhaps many <i>value acccess</i> properties.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
As an example, consider how we specify the interface of
|
||||||
|
<code>std::sort()</code>. The iterator-based version looks like
|
||||||
|
this:
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
template< class RandomAccessTraversalReadableWritableIterator >
|
||||||
|
void sort( RandomAccessTraversalReadableWritableIterator first,
|
||||||
|
RandomAccessTraversalReadableWritableIterator last );
|
||||||
|
</pre>
|
||||||
|
For external iterator ranges the interface becomes
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
template< class XRandomAccessReadableWritableRange >
|
||||||
|
void sort( XRandomAccessReadableWritableRange& r );
|
||||||
|
</pre>
|
||||||
|
Had the function been specified like
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
template< class RandomAccessReadableWritableRange >
|
||||||
|
void sort( RandomAccessReadableWritableRange& r );
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
we should expect the underlying code to call <code>r.begin()</code>
|
||||||
|
and <code>r.end()</code> to extract the iterators instead of
|
||||||
|
<code>begin( r )</code> and <code>end( r )</code>. In general
|
||||||
|
it is much more flexible to rely on external iterator ranges
|
||||||
|
than iterator ranges.
|
||||||
|
</p>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
<p>
|
||||||
|
(C) Copyright Thorsten Ottosen 2003-2004
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -17,7 +17,6 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<h1></h1>
|
|
||||||
|
|
||||||
<p> Having an abstraction that encapsulates a pair of iterators is very
|
<p> Having an abstraction that encapsulates a pair of iterators is very
|
||||||
useful. The standard library uses <code>std::pair</code> in some
|
useful. The standard library uses <code>std::pair</code> in some
|
||||||
@ -29,8 +28,8 @@ whereas more domain specific class names are. Therefore these two
|
|||||||
classes are provided:
|
classes are provided:
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li> <a href=#iter_range><code>iterator_range</code></a>
|
<li>Class <a href=#iter_range><code>iterator_range</code></a>
|
||||||
<li> <a href=#sub_range><code>sub_range</code></a> </ul>
|
<li>Class <a href=#sub_range><code>sub_range</code></a> </ul>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
The <code>iterator_range</code> class is templated on an iterator and should be
|
The <code>iterator_range</code> class is templated on an iterator and should be
|
||||||
@ -40,7 +39,7 @@ and it is less general, but a bit easier to use since its template argument
|
|||||||
is easier to specify.
|
is easier to specify.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<hr> <a name=iter_range></a> <h1><code>iterator_range</code></h1>
|
<hr> <a name=iter_range></a> <h1>Class <code>iterator_range</code></h1>
|
||||||
|
|
||||||
The intention of the
|
The intention of the
|
||||||
<code>iterator_range</code> class is to encapsulate
|
<code>iterator_range</code> class is to encapsulate
|
||||||
@ -137,7 +136,7 @@ client must ensure that the two iterators delimit a valid closed-open range
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<hr> <a name=sub_range></a>
|
<hr> <a name=sub_range></a>
|
||||||
<h1><code>sub_range</code></h1>
|
<h1>Class <code>sub_range</code></h1>
|
||||||
|
|
||||||
The <code>sub_range</code> class inherits all its functionality
|
The <code>sub_range</code> class inherits all its functionality
|
||||||
from the <a href="#iter_range"><code>iterator_range</code></a> class.
|
from the <a href="#iter_range"><code>iterator_range</code></a> class.
|
||||||
|
23
index.html
23
index.html
@ -38,33 +38,26 @@
|
|||||||
|
|
||||||
<li> Concepts:
|
<li> Concepts:
|
||||||
<ul>
|
<ul>
|
||||||
<li> Range
|
<li> <a href="doc/range.htm#range">Range</a>
|
||||||
<li> ReversibleRange
|
<li> <a href="doc/range.htm#reversible_range">ReversibleRange</a>
|
||||||
<li> ExternalRange
|
<li> ExternalRange
|
||||||
<li> ExternalReversibleRange
|
<li> ExternalReversibleRange
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<li> Implementation of ExternalReversibleRange for
|
<li> <a href=doc/boost_range.html>Implementation</a> of ExternalReversibleRange for
|
||||||
<ul>
|
<ul>
|
||||||
<li> arrays
|
<li> arrays
|
||||||
<li> Ranges
|
<li> Ranges
|
||||||
<li> strings
|
<li> strings
|
||||||
<li> pairs of iterators
|
<li> pairs of iterators
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<li> <a href=doc/utility_class.html> Utility classses:</a>
|
<li> <a href=doc/utility_class.html> Utilities:</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li> <a href=doc/utility_class.html#iter_range><code>iterator_range</code></a>
|
<li> Class <a href="doc/utility_class.html#iter_range"><code>iterator_range</code></a>
|
||||||
<li> <a href=doc/utility_class.html#sub_range><code>sub_range</code></a> </ul>
|
<li> Class <a href="doc/utility_class.html#sub_range"><code>sub_range</code></a> </ul>
|
||||||
|
|
||||||
<li>
|
<li> <a href=doc/style.html>Terminology and style guidelines </a>
|
||||||
Utility functions:
|
|
||||||
<ul>
|
|
||||||
<li> make_iterator_range()
|
|
||||||
<li> copy_range()
|
|
||||||
<li> transform_range()
|
|
||||||
</ul>
|
|
||||||
<li> Style and terminology guidelines
|
|
||||||
<li><a href="#headers">Headers</a> </li>
|
<li><a href="#headers">Headers</a> </li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
Reference in New Issue
Block a user