]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/multi_array/doc/xml/multi_array_ref.xml
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / multi_array / doc / xml / multi_array_ref.xml
CommitLineData
7c673cae
FG
1<sect2 id="multi_array_ref">
2<title><literal>multi_array_ref</literal></title>
3
4<para>
5<literal>multi_array_ref</literal> is a multi-dimensional container
6adaptor. It provides the MultiArray interface over any contiguous
7block of elements. <literal>multi_array_ref</literal> exports the
8same interface as <literal>multi_array</literal>, with the exception
9of the constructors.
10</para>
11
12
13<formalpara>
14 <title>Model Of.</title>
15<para>
16<literal>multi_array_ref</literal> models
17<link linkend="MultiArray">MultiArray</link>,
18<ulink url="../../../libs/utility/CopyConstructible.html">CopyConstructible</ulink>.
19and depending on the element type, it may also model
20<ulink url="http://www.sgi.com/tech/stl/EqualityComparable.html">EqualityComparable</ulink> and <ulink url="http://www.sgi.com/tech/stl/LessThanComparable.html">LessThanComparable</ulink>.
21Detailed descriptions are provided here only for operations that are
22not described in the <literal>multi_array</literal> reference.
23</para>
24</formalpara>
25
26<formalpara>
27<title>Synopsis</title>
28
29<programlisting>
30<![CDATA[
31namespace boost {
32
33template <typename ValueType,
34 std::size_t NumDims>
35class multi_array_ref {
36public:
37// types:
38 typedef ValueType element;
39 typedef *unspecified* value_type;
40 typedef *unspecified* reference;
41 typedef *unspecified* const_reference;
42 typedef *unspecified* difference_type;
43 typedef *unspecified* iterator;
44 typedef *unspecified* const_iterator;
45 typedef *unspecified* reverse_iterator;
46 typedef *unspecified* const_reverse_iterator;
47 typedef multi_array_types::size_type size_type;
48 typedef multi_array_types::index index;
49 typedef multi_array_types::index_gen index_gen;
50 typedef multi_array_types::index_range index_range;
51 typedef multi_array_types::extent_gen extent_gen;
52 typedef multi_array_types::extent_range extent_range;
53 typedef *unspecified* storage_order_type;
54
55 // template typedefs
56 template <std::size_t Dims> struct subarray;
57 template <std::size_t Dims> struct const_subarray;
58 template <std::size_t Dims> struct array_view;
59 template <std::size_t Dims> struct const_array_view;
60
61
62 static const std::size_t dimensionality = NumDims;
63
64
65 // constructors and destructors
66
67 template <typename ExtentList>
68 explicit multi_array_ref(element* data, const ExtentList& sizes,
69 const storage_order_type& store = c_storage_order());
70 explicit multi_array_ref(element* data, const extents_tuple& ranges,
71 const storage_order_type& store = c_storage_order());
72 multi_array_ref(const multi_array_ref& x);
73 ~multi_array_ref();
74
75 // modifiers
76
77 multi_array_ref& operator=(const multi_array_ref& x);
78 template <class Array> multi_array_ref& operator=(const Array& x);
79
80 // iterators:
81 iterator begin();
82 iterator end();
83 const_iterator begin() const;
84 const_iterator end() const;
85 reverse_iterator rbegin();
86 reverse_iterator rend();
87 const_reverse_iterator rbegin() const;
88 const_reverse_iterator rend() const;
89
90 // capacity:
91 size_type size() const;
92 size_type num_elements() const;
93 size_type num_dimensions() const;
94
95 // element access:
96 template <typename IndexList>
97 element& operator()(const IndexList& indices);
98 template <typename IndexList>
99 const element& operator()(const IndexList& indices) const;
100 reference operator[](index i);
101 const_reference operator[](index i) const;
102 array_view<Dims>::type operator[](const indices_tuple& r);
103 const_array_view<Dims>::type operator[](const indices_tuple& r) const;
104
105 // queries
106 element* data();
107 const element* data() const;
108 element* origin();
109 const element* origin() const;
110 const size_type* shape() const;
111 const index* strides() const;
112 const index* index_bases() const;
113 const storage_order_type& storage_order() const;
114
115 // comparators
116 bool operator==(const multi_array_ref& rhs);
117 bool operator!=(const multi_array_ref& rhs);
118 bool operator<(const multi_array_ref& rhs);
119 bool operator>(const multi_array_ref& rhs);
120 bool operator>=(const multi_array_ref& rhs);
121 bool operator<=(const multi_array_ref& rhs);
122
123 // modifiers:
124 template <typename InputIterator>
125 void assign(InputIterator begin, InputIterator end);
126 template <typename SizeList>
127 void reshape(const SizeList& sizes)
128 template <typename BaseList> void reindex(const BaseList& values);
129 void reindex(index value);
130};
131]]>
132</programlisting>
133</formalpara>
134
135<formalpara>
136<title>Constructors</title>
137
138<variablelist>
139<varlistentry>
140<term><programlisting>template &lt;typename ExtentList&gt;
141explicit multi_array_ref(element* data,
142 const ExtentList&amp; sizes,
143 const storage_order&amp; store = c_storage_order(),
144 const Allocator&amp; alloc = Allocator());
145</programlisting></term>
146<listitem>
147
148<para>
149This constructs a <literal>multi_array_ref</literal> using the specified
150parameters. <literal>sizes</literal> specifies the shape of the
151constructed <literal>multi_array_ref</literal>. <literal>store</literal>
152specifies the storage order or layout in memory of the array
153dimensions. <literal>alloc</literal> is used to
154allocate the contained elements.
155</para>
156
157<formalpara><title><literal>ExtentList</literal> Requirements</title>
158<para>
159<literal>ExtentList</literal> must model <ulink url="../../utility/Collection.html">Collection</ulink>.
160</para>
161</formalpara>
162
163<formalpara><title>Preconditions</title>
164<para><literal>sizes.size() == NumDims;</literal></para>
165</formalpara>
166
167</listitem>
168</varlistentry>
169
170<varlistentry>
171<term>
172<programlisting><![CDATA[explicit multi_array_ref(element* data,
173 extent_gen::gen_type<NumDims>::type ranges,
174 const storage_order& store = c_storage_order());]]>
175</programlisting></term>
176<listitem>
177<para>
178This constructs a <literal>multi_array_ref</literal> using the specified
179 parameters. <literal>ranges</literal> specifies the shape and
180index bases of the constructed multi_array_ref. It is the result of
181<literal>NumDims</literal> chained calls to
182 <literal>extent_gen::operator[]</literal>. <literal>store</literal>
183specifies the storage order or layout in memory of the array
184dimensions.
185</para>
186</listitem>
187</varlistentry>
188
189
190<varlistentry>
191<term><programlisting>
192<![CDATA[multi_array_ref(const multi_array_ref& x);]]>
193</programlisting></term>
194<listitem>
195<para>This constructs a shallow copy of <literal>x</literal>.
196</para>
197
198<formalpara>
199<title>Complexity</title>
200<para> Constant time (for contrast, compare this to
201the <literal>multi_array</literal> class copy constructor.
202</para></formalpara>
203</listitem>
204</varlistentry>
205
206</variablelist>
207
208</formalpara>
209
210
211<formalpara>
212<title>Modifiers</title>
213
214<variablelist>
215<varlistentry>
216
217<term><programlisting>
218<![CDATA[multi_array_ref& operator=(const multi_array_ref& x);
219template <class Array> multi_array_ref& operator=(const Array& x);]]>
220</programlisting>
221</term>
222
223<listitem>
224<para>This performs an element-wise copy of <literal>x</literal>
225into the current <literal>multi_array_ref</literal>.</para>
226
227<formalpara>
228<title><literal>Array</literal> Requirements</title>
229<para><literal>Array</literal> must model MultiArray.
230</para></formalpara>
231
232<formalpara>
233<title>Preconditions</title>
234<para>
235<programlisting>std::equal(this->shape(),this->shape()+this->num_dimensions(),
236x.shape());</programlisting></para>
237</formalpara>
238
239
240<formalpara>
241<title>Postconditions</title>
242<para>
243<programlisting>(*.this) == x;</programlisting>
244</para>
245</formalpara>
246
247<formalpara>
248<title>Complexity</title>
249<para>The assignment operators perform
250O(<literal>x.num_elements()</literal>) calls to <literal>element</literal>'s
251copy constructor.</para></formalpara>
252</listitem>
253</varlistentry>
254</variablelist>
255
256</formalpara>
257</sect2>