Front Page / Sequences / Classes / range_c |
template< typename T , T Start , T Finish > struct range_c { typedef integral_c<T,Start> start; typedef integral_c<T,Finish> finish; // unspecified // ... };
range_c is a sorted Random Access Sequence of Integral Constants. Note that because it is not an Extensible Sequence, sequence-building intrinsic metafunctions such as push_front and transformation algorithms such as replace are not directly applicable — to be able to use them, you'd first need to copy the content of the range into a more suitable sequence.
#include <boost/mpl/range_c.hpp>
In the following table, r is an instance of range_c, n is an Integral Constant, T is an arbitrary integral type, and n and m are integral constant values of type T.
Expression | Semantics |
---|---|
range_c<T,n,m> range_c<T,n,m>::type |
A sorted Random Access Sequence of integral constant wrappers for the half-open range of values [n, m): integral_c<T,n>, integral_c<T,n+1>,... integral_c<T,m-1>. |
begin<r>::type | An iterator pointing to the beginning of r; see Random Access Sequence. |
end<r>::type | An iterator pointing to the end of r; see Random Access Sequence. |
size<r>::type | The size of r; see Random Access Sequence. |
empty<r>::type | A boolean Integral Constant c such that c::value == true if and only if r is empty; see Random Access Sequence. |
front<r>::type | The first element in r; see Random Access Sequence. |
back<r>::type | The last element in r; see Random Access Sequence. |
at<r,n>::type | The nth element from the beginning of r; see Random Access Sequence. |
typedef range_c<int,0,0> range0; typedef range_c<int,0,1> range1; typedef range_c<int,0,10> range10; BOOST_MPL_ASSERT_RELATION( size<range0>::value, ==, 0 ); BOOST_MPL_ASSERT_RELATION( size<range1>::value, ==, 1 ); BOOST_MPL_ASSERT_RELATION( size<range10>::value, ==, 10 ); BOOST_MPL_ASSERT(( empty<range0> )); BOOST_MPL_ASSERT_NOT(( empty<range1> )); BOOST_MPL_ASSERT_NOT(( empty<range10> )); BOOST_MPL_ASSERT(( is_same< begin<range0>::type, end<range0>::type > )); BOOST_MPL_ASSERT_NOT(( is_same< begin<range1>::type, end<range1>::type > )); BOOST_MPL_ASSERT_NOT(( is_same< begin<range10>::type, end<range10>::type > )); BOOST_MPL_ASSERT_RELATION( front<range1>::type::value, ==, 0 ); BOOST_MPL_ASSERT_RELATION( back<range1>::type::value, ==, 0 ); BOOST_MPL_ASSERT_RELATION( front<range10>::type::value, ==, 0 ); BOOST_MPL_ASSERT_RELATION( back<range10>::type::value, ==, 9 );