[boost][range] - Improved the implementation of strided range to eliminate requirements for boost::size(rng) to be a valid expression. Each traversal category of strided_iterator is now individually implemented.

[SVN r67461]
This commit is contained in:
Neil Groves
2010-12-26 20:33:33 +00:00
parent fd63de33e9
commit efb7b50a8a
101 changed files with 725 additions and 669 deletions

View File

@ -11,7 +11,7 @@
[[Function] [`boost::adaptors::stride(rng, n)`]]
]
* [*Precondition:] `0 <= n` and `boost::size(rng)` is a valid expression.
* [*Precondition:] `0 <= n`.
* [*Returns:] A new range based on `rng` where traversal is performed in steps of `n`.
* [*Range Category:] __single_pass_range__
* [*Returned Range Category:] The range category of `rng`.

View File

@ -21,7 +21,7 @@
[table
[[Expression] [Return type] [Complexity]]
[
[`range_iterator<X>::type`]
[`range_iterator<X>::type`]
[``
T::iterator
P::first_type
@ -129,7 +129,7 @@
[
[`size(x)`]
[`range_difference<X>::type`]
[`The size of the range with complexity O(1). For RandomAccessRanges this is achieved via boost::end(x) - boost::begin(x). For other traversal categories range_calculate_size(x) is returned. Note that unless range_calculate_size(x) has been implemented by the user as an extension then the Argument Dependent Lookup will return x.size()`]
[`range_calculate_size(x)` which by default is `boost::end(x) - boost::begin(x)`. Users may supply alternative implementations by implementing `range_calculate_size(x)` so that it will be found via ADL]
[constant time]
]
[