Back to Arangodb

insert

3rdParty/boost/1.78.0/libs/mpl/doc/src/refmanual/insert.rst

3.12.9.15.6 KB
Original Source

.. Sequences/Intrinsic Metafunctions//insert

insert

Synopsis

.. parsed-literal::

template< 
      typename Sequence
    , typename Pos
    , typename T 
    >
struct insert
{
    typedef |unspecified| type;
};


template< 
      typename Sequence
    , typename T 
    >
struct insert
{
    typedef |unspecified| type;
};

Description

insert is an |overloaded name|:

  • insert<Sequence,Pos,T> performs an insertion of type T at an arbitrary position Pos in Sequence. Pos is ignored is Sequence is a model of |Extensible Associative Sequence|.

  • insert<Sequence,T> is a shortcut notation for insert<Sequence,Pos,T> for the case when Sequence is a model of |Extensible Associative Sequence|.

.. parsed-literal::

#include <boost/mpl/insert.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. | +---------------+-----------------------------------+-----------------------------------------------+ | T | Any type | The element to be inserted. | +---------------+-----------------------------------+-----------------------------------------------+

Expression semantics

.. compound:: :class: expression-semantics

For any |Extensible Sequence| ``s``, iterator ``pos`` in ``s``, and arbitrary type ``x``:

.. parsed-literal::

    typedef insert<s,pos,x>::type r; 

:Return type:
    |Extensible Sequence|

:Precondition:
    ``pos`` is an iterator in ``s``. 

:Semantics:
    ``r`` is a sequence, |concept-identical| to ``s``, of the following elements: 
    [``begin<s>::type``, ``pos``), ``x``, [``pos``, ``end<s>::type``). 
    
:Postcondition:
    The relative order of the elements in ``r`` is the same as in ``s``. 

    .. parsed-literal::

       at< r, distance< begin<s>::type,pos >::type >::type
    
    is identical to ``x``; 

    .. parsed-literal::

       size<r>::value == size<s>::value + 1;        
    

.. compound:: :class: expression-semantics

For any |Extensible Associative Sequence| ``s``, iterator ``pos`` in ``s``,
and arbitrary type ``x``:


.. parsed-literal::

    typedef insert<s,x>::type r; 

:Return type:
    |Extensible Associative Sequence|

:Semantics:
    ``r`` is |concept-identical| and equivalent to ``s``, except that
    ``at< r, key_type<s,x>::type >::type`` is identical to ``value_type<s,x>::type``.
    
:Postcondition:
    ``size<r>::value == size<s>::value + 1``.


.. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. parsed-literal::

    typedef insert<s,pos,x>::type r; 

:Return type:
    |Extensible Associative Sequence|

:Precondition:
    ``pos`` is an iterator in ``s``. 

:Semantics:
    Equivalent to ``typedef insert<s,x>::type r``; ``pos`` is ignored.
    

Complexity

+---------------------------------------+-----------------------------------------------+ | Sequence archetype | Complexity | +=======================================+===============================================+ | |Extensible Associative Sequence| | Amortized constant time. | +---------------------------------------+-----------------------------------------------+ | |Extensible Sequence| | Linear in the worst case, or amortized | | | constant time. | +---------------------------------------+-----------------------------------------------+

Example

.. parsed-literal::

typedef vector_c<int,0,1,3,4,5,6,7,8,9> numbers;
typedef find< numbers,integral_c<int,3> >::type pos;
typedef insert< numbers,pos,integral_c<int,2> >::type range;

BOOST_MPL_ASSERT_RELATION( size<range>::value, ==, 10 );
BOOST_MPL_ASSERT(( equal< range,range_c<int,0,10> > ));

.. parsed-literal::

typedef map< mpl::pair<int,unsigned> > m;
typedef insert<m,mpl::pair<char,long> >::type m1;

BOOST_MPL_ASSERT_RELATION( size<m1>::value, ==, 2 );
BOOST_MPL_ASSERT(( is_same< at<m1,int>::type,unsigned > ));
BOOST_MPL_ASSERT(( is_same< at<m1,char>::type,long > ));

See also

|Extensible Sequence|, |Extensible Associative Sequence|, |insert_range|, |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)