![]() |
|
Four types of objects are currently supported by the library:
std::pair<iterator,iterator>
char[]
,wchar_t[]
,
char*
, and wchar_t*
)
iterator_range
implements
the minimal interface required to make the
class a Forward Range.
Please also see Range concepts for more details.
namespace boost { // // Single Pass Range metafunctions // template< class T > struct range_value; template< class T > struct range_iterator; template< class T > struct range_const_iterator; // // Forward Range metafunctions // template< class T > struct range_difference; template< class T > struct range_size; // // Bidirectional Range metafunctions // template< class T > struct range_reverse_iterator; template< class T > struct range_const_reverse_iterator; // // Special metafunctions // template< class T > struct range_result_iterator; template< class T > struct range_reverse_result_iterator; // // Single Pass Range functions // template< class T > typename range_iterator<T>::type begin( T& c ); template< class T > typename range_const_iterator<T>::type begin( const T& c ); template< class T > typename range_iterator<T>::type end( T& c ); template< class T > typename range_const_iterator<T>::type end( const T& c ); template< class T > bool empty( const T& c ); // // Forward Range functions // template< class T > typename range_size<T>::type size( const T& c ); // // Bidirectional Range functions // template< class T > typename range_reverse_iterator<T>::type rbegin( T& c ); template< class T > typename range_const_reverse_iterator<T>::type rbegin( const T& c ); template< class T > typename range_reverse_iterator<T>::type rend( T& c ); template< class T > typename range_const_reverse_iterator<T>::type rend( const T& c ); } // namespace 'boost'
Type | Object | Describes |
---|---|---|
X
| x
| any type |
T |
t
| denotes behavior of the primary templates |
P
| p
| denotes std::pair<iterator,iterator>
|
A[sz]
| a
| denotes an array of type A of size sz
|
Char*
| s
| denotes either char* or wchar_t*
|
Please notice in tables below that when four lines appear in a cell, the first line will describe the primary template, the second line pairs of iterators, the third line arrays and the last line null-terminated strings.
The special metafunctions range_result_iterator
and range_reverse_result_iterator
are not part of any Range concept, but they are very useful when implementing
certain Range classes like sub_range
because of their
ability to select iterators based on constness.
The primary templates in this library are implemented such that standard
containers will work automatically and so will boost::array
. Below is given an overview of
which member functions and member types a class must specify to
be useable as a certain Range concept.
Member function | Related concept |
---|---|
begin() |
Single Pass Range |
end() |
Single Pass Range |
size() |
Forward Range |
Notice that rbegin()
and rend()
member functions
are not needed even though the container can support bidirectional iteration.
The required member types are:
Member type | Related concept |
---|---|
value_type |
Single Pass Range |
iterator |
Single Pass Range |
const_iterator |
Single Pass Range |
difference_type |
Forward Range |
size_type |
Forward Range |
Again one should notice that member types reverse_iterator
and
const_reverse_iterator
are not needed.
(C) Copyright Thorsten Ottosen 2003-2004