mirror of
https://github.com/boostorg/range.git
synced 2025-07-29 04:17:39 +02:00
change the return type from the indexed adaptor so that the index is available from the range element.
This commit is contained in:
@ -7,14 +7,60 @@
|
||||
|
||||
[table
|
||||
[[Syntax] [Code]]
|
||||
[[Pipe] [`rng | boost::adaptors::indexed()`]]
|
||||
[[Pipe] [`rng | boost::adaptors::indexed(start_index)`]]
|
||||
[[Function] [`boost::adaptors::index(rng)`]]
|
||||
[[Function] [`boost::adaptors::index(rng, start_index)`]]
|
||||
]
|
||||
|
||||
* [*Returns:] A range adapted to return both the element and the associated index. The returned range consists of iterators that have in addition to the usual iterator member functions an `index()` member function that returns the appropriate index for the element in the sequence corresponding with the iterator.
|
||||
[heading Description]
|
||||
The index within each returned `boost::range::index_value` is equal to
|
||||
`start_index` + the offset of the element from the beginning of the range. In
|
||||
the versions of the functions that omit `start_index` the starting index is
|
||||
taken to be `0`.
|
||||
|
||||
* [*Purpose:] Adapt `rng` to return elements that have the corresponding value
|
||||
from `rng` and a numeric index.
|
||||
* [*Returns:] A range adapted to return both the element and the associated
|
||||
index. The returned range has elements of type:
|
||||
|
||||
``
|
||||
boost::range::index_value<
|
||||
typename boost::range_reference<decltype(rng)>::type,
|
||||
typename boost::range_difference<decltype(rng)>::type
|
||||
>
|
||||
``
|
||||
|
||||
The synopsis of index_value is as follows:
|
||||
``
|
||||
template<class T, class Indexable=std::ptrdiff_t>
|
||||
class index_value : public boost::tuple<Indexable, T>
|
||||
{
|
||||
public:
|
||||
|
||||
typedef ...unspecified... index_type;
|
||||
typedef ...unspecified... const_index_type;
|
||||
|
||||
typedef ...unspecified... value_type;
|
||||
typedef ...unspecified... const_value_type;
|
||||
|
||||
// ...unspecified... constructors
|
||||
|
||||
index_type index();
|
||||
const_index_type index() const;
|
||||
|
||||
value_type value();
|
||||
const_value_type value() const;
|
||||
};
|
||||
``
|
||||
|
||||
* [*Range Category:] __single_pass_range__
|
||||
* [*Range Return Type:] `boost::indexed_range<decltype(rng)>`
|
||||
* [*Returned Range Category:] The range category of `rng`
|
||||
* [*Returned Range Category:] The range category of `rng` if and only if `rng`
|
||||
is not a __bidirectional_range__. If `rng` is a __bidirectional_range__ then the
|
||||
returned range category is __forward_range__. The rationale for the demotion of
|
||||
__bidirectional_range__ inputs to __forward_range__ is to avoid slow calculation
|
||||
of indices for `boost::end(rng)`.
|
||||
|
||||
[section:indexed_example indexed example]
|
||||
[import ../../../test/adaptor_test/indexed_example.cpp]
|
||||
|
Reference in New Issue
Block a user