Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Click here to view the latest version of this page.
Front Page / Sequences / Classes / range_c

range_c

Synopsis

template<
      typename T
    , T Start
    , T Finish
    >
struct range_c
{
    typedef integral_c<T,Start> start;
    typedef integral_c<T,Finish> finish;
    // unspecified
    // ...
};

Description

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.

Header

#include <boost/mpl/range_c.hpp>

Model of

Random Access Sequence

Expression semantics

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.

Example

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 );

See also

Sequences, Random Access Sequence, vector_c, set_c, list_c