blob: 589c1623b79929aacbee33f63ab180f8599242ed [file] [log] [blame]
.. Sequences/Intrinsic Metafunctions//insert_range
insert_range
============
Synopsis
--------
.. parsed-literal::
template<
typename Sequence
, typename Pos
, typename Range
>
struct insert_range
{
typedef |unspecified| type;
};
Description
-----------
``insert_range`` performs an insertion of a range of elements at an arbitrary position in
the sequence.
Header
------
.. parsed-literal::
#include <boost/mpl/insert_range.hpp>
Model of
--------
|Tag Dispatched Metafunction|
Parameters
----------
+---------------+-----------------------------------+-----------------------------------------------+
| Parameter | Requirement | Description |
+===============+===================================+===============================================+
| ``Sequence`` | |Extensible Sequence| or | A sequence to insert into. |
| | |Extensible Associative Sequence| | |
+---------------+-----------------------------------+-----------------------------------------------+
| ``Pos`` | |Forward Iterator| | An iterator in ``Sequence`` specifying the |
| | | insertion position. |
+---------------+-----------------------------------+-----------------------------------------------+
| ``Range`` | |Forward Sequence| | The range of elements to be inserted. |
+---------------+-----------------------------------+-----------------------------------------------+
Expression semantics
--------------------
For any |Extensible Sequence| ``s``, iterator ``pos`` in ``s``, and |Forward Sequence| ``range``:
.. parsed-literal::
typedef insert<s,pos,range>::type r;
:Return type:
|Extensible Sequence|.
:Precondition:
``pos`` is an iterator into ``s``.
:Semantics:
``r`` is a sequence, |concept-identical| to ``s``, of the following elements:
[``begin<s>::type``, ``pos``), [``begin<r>::type``, ``end<r>::type``),
[``pos``, ``end<s>::type``).
:Postcondition:
The relative order of the elements in ``r`` is the same as in ``s``;
.. parsed-literal::
size<r>::value == size<s>::value + size<range>::value
Complexity
----------
Sequence dependent. Quadratic in the worst case, linear at best; see the particular
sequence class' specification for details.
Example
-------
.. parsed-literal::
typedef vector_c<int,0,1,7,8,9> numbers;
typedef find< numbers,integral_c<int,7> >::type pos;
typedef insert_range< numbers,pos,range_c<int,2,7> >::type range;
BOOST_MPL_ASSERT_RELATION( size<range>::value, ==, 10 );
BOOST_MPL_ASSERT(( equal< range,range_c<int,0,10> > ));
typedef insert_range<
list\ ``0``\ <>
, end< list\ ``0``\ <> >::type
, list<int>
>::type result2;
BOOST_MPL_ASSERT_RELATION( size<result2>::value, ==, 1 );
See also
--------
|Extensible Sequence|, |insert|, |push_front|, |push_back|, |erase|
.. copyright:: Copyright © 2001-2009 Aleksey Gurtovoy and David Abrahams
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)