]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | .. Sequences/Intrinsic Metafunctions//at |
2 | ||
3 | at | |
4 | == | |
5 | ||
6 | Synopsis | |
7 | -------- | |
8 | ||
9 | .. parsed-literal:: | |
10 | ||
11 | template< | |
12 | typename Sequence | |
13 | , typename N | |
14 | > | |
15 | struct at | |
16 | { | |
17 | typedef |unspecified| type; | |
18 | }; | |
19 | ||
20 | template< | |
21 | typename AssocSeq | |
22 | , typename Key | |
23 | , typename Default = |unspecified| | |
24 | > | |
25 | struct at | |
26 | { | |
27 | typedef |unspecified| type; | |
28 | }; | |
29 | ||
30 | ||
31 | Description | |
32 | ----------- | |
33 | ||
34 | ``at`` is an |overloaded name|: | |
35 | ||
36 | * ``at<Sequence,N>`` returns the ``N``-th element from the beginning of the | |
37 | |Forward Sequence| ``Sequence``. | |
38 | ||
39 | * ``at<AssocSeq,Key,Default>`` returns the first element associated with ``Key`` | |
40 | in the |Associative Sequence| ``AssocSeq``, or ``Default`` if no such element | |
41 | exists. | |
42 | ||
43 | ||
44 | Header | |
45 | ------ | |
46 | ||
47 | .. parsed-literal:: | |
48 | ||
49 | #include <boost/mpl/at.hpp> | |
50 | ||
51 | ||
52 | Model of | |
53 | -------- | |
54 | ||
55 | |Tag Dispatched Metafunction| | |
56 | ||
57 | ||
58 | Parameters | |
59 | ---------- | |
60 | ||
61 | +---------------+---------------------------+-----------------------------------------------+ | |
62 | | Parameter | Requirement | Description | | |
63 | +===============+===========================+===============================================+ | |
64 | | ``Sequence`` | |Forward Sequence| | A sequence to be examined. | | |
65 | +---------------+---------------------------+-----------------------------------------------+ | |
66 | | ``AssocSeq`` | |Associative Sequence| | A sequence to be examined. | | |
67 | +---------------+---------------------------+-----------------------------------------------+ | |
68 | | ``N`` | |Integral Constant| | An offset from the beginning of the sequence | | |
69 | | | | specifying the element to be retrieved. | | |
70 | +---------------+---------------------------+-----------------------------------------------+ | |
71 | | ``Key`` | Any type | A key for the element to be retrieved. | | |
72 | +---------------+---------------------------+-----------------------------------------------+ | |
73 | | ``Default`` | Any type | A default value to return if the element is | | |
74 | | | | not found. | | |
75 | +---------------+---------------------------+-----------------------------------------------+ | |
76 | ||
77 | ||
78 | Expression semantics | |
79 | -------------------- | |
80 | ||
81 | .. compound:: | |
82 | :class: expression-semantics | |
83 | ||
84 | For any |Forward Sequence| ``s``, and |Integral Constant| ``n``: | |
85 | ||
86 | .. parsed-literal:: | |
87 | ||
88 | typedef at<s,n>::type t; | |
89 | ||
90 | :Return type: | |
91 | A type. | |
92 | ||
93 | :Precondition: | |
94 | ``0 <= n::value < size<s>::value``. | |
95 | ||
96 | :Semantics: | |
97 | Equivalent to | |
98 | ||
99 | .. parsed-literal:: | |
100 | ||
101 | typedef deref< advance< begin<s>::type,n >::type >::type t; | |
102 | ||
103 | ||
104 | .. compound:: | |
105 | :class: expression-semantics | |
106 | ||
107 | For any |Associative Sequence| ``s``, and arbitrary types ``key`` and ``x``: | |
108 | ||
109 | .. parsed-literal:: | |
110 | ||
111 | typedef at<s,key,x>::type t; | |
112 | ||
113 | :Return type: | |
114 | A type. | |
115 | ||
116 | :Semantics: | |
117 | If ``has_key<s,key>::value == true``, ``t`` is the value type associated with ``key``; | |
118 | otherwise ``t`` is identical to ``x``. | |
119 | ||
120 | ||
121 | .. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
122 | ||
123 | .. parsed-literal:: | |
124 | ||
125 | typedef at<s,key>::type t; | |
126 | ||
127 | :Return type: | |
128 | A type. | |
129 | ||
130 | :Semantics: | |
131 | Equivalent to | |
132 | ||
133 | .. parsed-literal:: | |
134 | ||
135 | typedef at<s,key,void\_>::type t; | |
136 | ||
137 | ||
138 | Complexity | |
139 | ---------- | |
140 | ||
141 | +-------------------------------+-----------------------------------+ | |
142 | | Sequence archetype | Complexity | | |
143 | +===============================+===================================+ | |
144 | | |Forward Sequence| | Linear. | | |
145 | +-------------------------------+-----------------------------------+ | |
146 | | |Random Access Sequence| | Amortized constant time. | | |
147 | +-------------------------------+-----------------------------------+ | |
148 | | |Associative Sequence| | Amortized constant time. | | |
149 | +-------------------------------+-----------------------------------+ | |
150 | ||
151 | Example | |
152 | ------- | |
153 | ||
154 | .. parsed-literal:: | |
155 | ||
156 | typedef range_c<long,10,50> range; | |
157 | BOOST_MPL_ASSERT_RELATION( (at< range, int_<0> >::value), ==, 10 ); | |
158 | BOOST_MPL_ASSERT_RELATION( (at< range, int_<10> >::value), ==, 20 ); | |
159 | BOOST_MPL_ASSERT_RELATION( (at< range, int_<40> >::value), ==, 50 ); | |
160 | ||
161 | ||
162 | .. parsed-literal:: | |
163 | ||
164 | typedef set< int const,long*,double > s; | |
165 | ||
166 | BOOST_MPL_ASSERT(( is_same< at<s,char>::type, void\_ > )); | |
167 | BOOST_MPL_ASSERT(( is_same< at<s,int>::type, int > )); | |
168 | ||
169 | ||
170 | See also | |
171 | -------- | |
172 | ||
173 | |Forward Sequence|, |Random Access Sequence|, |Associative Sequence|, |at_c|, |front|, |back| | |
174 | ||
175 | ||
176 |