• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1.. Sequences/Classes//string |100
2
3string
4======
5
6Description
7-----------
8
9``string`` is a |variadic|, `bidirectional`__, `extensible`__ |Integral Sequence Wrapper| of
10characters that supports amortized constant-time insertion and removal of elements at both ends,
11and linear-time insertion and removal of elements in the middle. The parameters to ``string``
12are multi-character literals, giving a somewhat readable syntax for compile-time strings.
13``string`` can also be an argument to the ``c_str`` metafunction, which generates a
14null-terminated character array that facilitates interoperability with runtime string
15processing routines.
16
17__ `Bidirectional Sequence`_
18__ `Extensible Sequence`_
19
20Header
21------
22
23+-------------------+-------------------------------------------------------+
24| Sequence form     | Header                                                |
25+===================+=======================================================+
26| Variadic          | ``#include <boost/mpl/string.hpp>``                   |
27+-------------------+-------------------------------------------------------+
28
29Model of
30--------
31
32* |Integral Sequence Wrapper|
33* |Variadic Sequence|
34* |Bidirectional Sequence|
35* |Extensible Sequence|
36* |Back Extensible Sequence|
37* |Front Extensible Sequence|
38
39Expression semantics
40--------------------
41
42In the following table, ``s`` is an instance of ``string``, ``pos`` and ``last`` are iterators
43into ``s``, ``r`` is a |Forward Sequence| of characters, ``n`` and ``x`` are |Integral Constant|\ s,
44and |c1...cn| are arbitrary (multi-)characters.
45
46+---------------------------------------+-----------------------------------------------------------+
47| Expression                            | Semantics                                                 |
48+=======================================+===========================================================+
49| .. parsed-literal::                   | ``string`` of characters |c1...cn|; see                   |
50|                                       | |Variadic Sequence|.                                      |
51|    string<|c1...cn|>                  |                                                           |
52+---------------------------------------+-----------------------------------------------------------+
53| .. parsed-literal::                   | Identical to ``string<``\ |c1...cn|\ ``>``;               |
54|                                       | see |Variadic Sequence|.                                  |
55|    string<|c1...cn|>::type            |                                                           |
56+---------------------------------------+-----------------------------------------------------------+
57| ``begin<s>::type``                    | An iterator pointing to the beginning of ``s``;           |
58|                                       | see |Bidirectional Sequence|.                             |
59+---------------------------------------+-----------------------------------------------------------+
60| ``end<s>::type``                      | An iterator pointing to the end of ``s``;                 |
61|                                       | see |Bidirectional Sequence|.                             |
62+---------------------------------------+-----------------------------------------------------------+
63| ``size<s>::type``                     | The size of ``s``; see |Bidirectional Sequence|.          |
64+---------------------------------------+-----------------------------------------------------------+
65| ``empty<s>::type``                    | |true if and only if| the sequence is empty;              |
66|                                       | see |Bidirectional Sequence|.                             |
67+---------------------------------------+-----------------------------------------------------------+
68| ``front<s>::type``                    | The first element in ``s``; see                           |
69|                                       | |Bidirectional Sequence|.                                 |
70+---------------------------------------+-----------------------------------------------------------+
71| ``back<s>::type``                     | The last element in ``s``; see                            |
72|                                       | |Bidirectional Sequence|.                                 |
73+---------------------------------------+-----------------------------------------------------------+
74| ``insert<s,pos,x>::type``             | A new ``string`` of following elements:                   |
75|                                       | [``begin<s>::type``, ``pos``), ``x``,                     |
76|                                       | [``pos``, ``end<s>::type``); see |Extensible Sequence|.   |
77+---------------------------------------+-----------------------------------------------------------+
78| ``insert_range<s,pos,r>::type``       | A new ``string`` of following elements:                   |
79|                                       | [``begin<s>::type``, ``pos``),                            |
80|                                       | [``begin<r>::type``, ``end<r>::type``)                    |
81|                                       | [``pos``, ``end<s>::type``); see |Extensible Sequence|.   |
82+---------------------------------------+-----------------------------------------------------------+
83| ``erase<s,pos>::type``                | A new ``string`` of following elements:                   |
84|                                       | [``begin<s>::type``, ``pos``),                            |
85|                                       | [``next<pos>::type``, ``end<s>::type``); see              |
86|                                       | |Extensible Sequence|.                                    |
87+---------------------------------------+-----------------------------------------------------------+
88| ``erase<s,pos,last>::type``           | A new ``string`` of following elements:                   |
89|                                       | [``begin<s>::type``, ``pos``),                            |
90|                                       | [``last``, ``end<s>::type``); see |Extensible Sequence|.  |
91+---------------------------------------+-----------------------------------------------------------+
92| ``clear<s>::type``                    | An empty ``string``; see |Extensible Sequence|.           |
93+---------------------------------------+-----------------------------------------------------------+
94| ``push_back<s,x>::type``              | A new ``string`` of following elements:                   |
95|                                       | |begin/end<s>|, ``x``;                                    |
96|                                       | see |Back Extensible Sequence|.                           |
97+---------------------------------------+-----------------------------------------------------------+
98| ``pop_back<s>::type``                 | A new ``string`` of following elements:                   |
99|                                       | [``begin<s>::type``, ``prior< end<s>::type >::type``);    |
100|                                       | see |Back Extensible Sequence|.                           |
101+---------------------------------------+-----------------------------------------------------------+
102| ``push_front<s,x>::type``             | A new ``string`` of following elements:                   |
103|                                       | |begin/end<s>|, ``x``; see |Front Extensible Sequence|.   |
104+---------------------------------------+-----------------------------------------------------------+
105| ``pop_front<s>::type``                | A new ``string`` of following elements:                   |
106|                                       | [``next< begin<s>::type >::type``, ``end<s>::type``);     |
107|                                       | see |Front Extensible Sequence|.                          |
108+---------------------------------------+-----------------------------------------------------------+
109| ``c_str<s>::value``                   | A null-terminated byte string such that                   |
110|                                       | ``c_str<s>::value[``\ *n*\ ``]`` is equal to the *n*\ -th |
111|                                       | character in ``s``, and                                   |
112|                                       | ``c_str<s>::value[size<s>::type::value]`` is ``'\0'``.    |
113+---------------------------------------+-----------------------------------------------------------+
114
115
116Example
117-------
118
119.. parsed-literal::
120
121    typedef mpl::string<'hell','o wo','rld'> hello;
122    typedef mpl::push_back<hello, mpl::char_<'!'> >::type hello2;
123
124    BOOST_ASSERT(0 == std::strcmp(mpl::c_str<hello2>::value, "hello world!"));
125
126
127See also
128--------
129
130|Sequences|, |Variadic Sequence|, |Bidirectional Sequence|, |Extensible Sequence|, |Integral Sequence Wrapper|, |char_|, |c_str|
131
132
133.. copyright:: Copyright �  2009 Eric Niebler
134   Distributed under the Boost Software License, Version 1.0. (See accompanying
135   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
136