Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / histogram / doc / html / histogram / concepts.html
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Concepts</title>
5 <link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7 <link rel="home" href="../index.html" title="Chapter&#160;1.&#160;Boost.Histogram">
8 <link rel="up" href="../index.html" title="Chapter&#160;1.&#160;Boost.Histogram">
9 <link rel="prev" href="benchmarks.html" title="Benchmarks">
10 <link rel="next" href="reference.html" title="Reference">
11 </head>
12 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13 <table cellpadding="2" width="100%"><tr>
14 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
15 <td align="center"><a href="../../../../../index.html">Home</a></td>
16 <td align="center"><a href="../../../../libraries.htm">Libraries</a></td>
17 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19 <td align="center"><a href="../../../../../more/index.htm">More</a></td>
20 </tr></table>
21 <hr>
22 <div class="spirit-nav">
23 <a accesskey="p" href="benchmarks.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="reference.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
24 </div>
25 <div class="section">
26 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
27 <a name="histogram.concepts"></a><a class="link" href="concepts.html" title="Concepts">Concepts</a>
28 </h2></div></div></div>
29 <div class="toc"><dl class="toc">
30 <dt><span class="section"><a href="concepts.html#histogram.concepts.Axis">Axis</a></span></dt>
31 <dt><span class="section"><a href="concepts.html#histogram.concepts.DiscreteAxis">DiscreteAxis</a></span></dt>
32 <dt><span class="section"><a href="concepts.html#histogram.concepts.IntervalAxis">IntervalAxis</a></span></dt>
33 <dt><span class="section"><a href="concepts.html#histogram.concepts.Transform">Transform</a></span></dt>
34 <dt><span class="section"><a href="concepts.html#histogram.concepts.Storage">Storage</a></span></dt>
35 <dt><span class="section"><a href="concepts.html#histogram.concepts.Accumulator">Accumulator</a></span></dt>
36 </dl></div>
37 <p>
38       Users can extend the library with various new types whose concepts are defined
39       here.
40     </p>
41 <div class="section">
42 <div class="titlepage"><div><div><h3 class="title">
43 <a name="histogram.concepts.Axis"></a><a class="link" href="concepts.html#histogram.concepts.Axis" title="Axis">Axis</a>
44 </h3></div></div></div>
45 <p>
46         An <span class="bold"><strong>Axis</strong></span> maps input values to indices. It
47         holds state specific to that axis, like the number of bins and any metadata.
48         Must be <a href="https://en.cppreference.com/w/cpp/named_req/CopyConstructible" target="_top">CopyConstructible</a>,
49         <a href="https://en.cppreference.com/w/cpp/named_req/CopyAssignable" target="_top">CopyAssignable</a>,
50         and <span class="bold"><strong>nothrow</strong></span> <a href="https://en.cppreference.com/w/cpp/named_req/MoveAssignable" target="_top">MoveAssignable</a>.
51       </p>
52 <h5>
53 <a name="histogram.concepts.Axis.h0"></a>
54         <span class="phrase"><a name="histogram.concepts.Axis.associated_types"></a></span><a class="link" href="concepts.html#histogram.concepts.Axis.associated_types">Associated
55         Types</a>
56       </h5>
57 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
58 <li class="listitem">
59             <a class="link" href="concepts.html#histogram.concepts.DiscreteAxis" title="DiscreteAxis"><span class="bold"><strong>DiscreteAxis</strong></span></a>
60           </li>
61 <li class="listitem">
62             <a class="link" href="concepts.html#histogram.concepts.IntervalAxis" title="IntervalAxis"><span class="bold"><strong>IntervalAxis</strong></span></a>
63           </li>
64 </ul></div>
65 <h5>
66 <a name="histogram.concepts.Axis.h1"></a>
67         <span class="phrase"><a name="histogram.concepts.Axis.required_features"></a></span><a class="link" href="concepts.html#histogram.concepts.Axis.required_features">Required
68         features</a>
69       </h5>
70 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
71 <li class="listitem">
72             <code class="computeroutput"><span class="identifier">A</span></code> is a type meeting the
73             requirements of <span class="bold"><strong>Axis</strong></span>
74           </li>
75 <li class="listitem">
76             <code class="computeroutput"><span class="identifier">a</span></code> is a value of type
77             <code class="computeroutput"><span class="identifier">A</span></code>
78           </li>
79 <li class="listitem">
80             <code class="computeroutput"><span class="identifier">I</span></code> is an alias for <code class="computeroutput"><a class="link" href="reference.html#header.boost.histogram.fwd_hpp" title="Header &lt;boost/histogram/fwd.hpp&gt;">boost::histogram::axis::index_type</a></code>
81           </li>
82 </ul></div>
83 <div class="table">
84 <a name="histogram.concepts.Axis.valid_expressions"></a><p class="title"><b>Table&#160;1.1.&#160;Valid expressions</b></p>
85 <div class="table-contents"><table class="table" summary="Valid expressions">
86 <colgroup>
87 <col>
88 <col>
89 <col>
90 </colgroup>
91 <thead><tr>
92 <th>
93                 <p>
94                   Expression
95                 </p>
96               </th>
97 <th>
98                 <p>
99                   Returns
100                 </p>
101               </th>
102 <th>
103                 <p>
104                   Semantics, Pre/Post-conditions
105                 </p>
106               </th>
107 </tr></thead>
108 <tbody>
109 <tr>
110 <td>
111                 <p>
112                   <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code>
113                 </p>
114               </td>
115 <td>
116                 <p>
117                   <code class="computeroutput"><span class="identifier">I</span></code>
118                 </p>
119               </td>
120 <td>
121                 <p>
122                   Const member function which returns the number of bins of the axis.
123                   All indices from <code class="computeroutput"><span class="number">0</span></code>
124                   to <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span>
125                   <span class="special">-</span> <span class="number">1</span></code>
126                   must be valid and address a bin of the axis.
127                 </p>
128               </td>
129 </tr>
130 <tr>
131 <td>
132                 <p>
133                   <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">index</span><span class="special">(</span><span class="identifier">v</span><span class="special">)</span></code>
134                 </p>
135               </td>
136 <td>
137                 <p>
138                   <code class="computeroutput"><span class="identifier">I</span></code>
139                 </p>
140               </td>
141 <td>
142                 <p>
143                   Const member function which maps a value <code class="computeroutput"><span class="identifier">v</span></code>
144                   to an index. The mapping must be injective: each value must be
145                   uniquely mapped to one index. If the value is not covered by the
146                   axis, return either <code class="computeroutput"><span class="special">-</span><span class="number">1</span></code> or <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code>. The value <code class="computeroutput"><span class="special">-</span><span class="number">1</span></code> indicates that the value is lower
147                   than the lowest value covered by the axis. The value <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code>
148                   indicates that the value is above the uppermost value covered by
149                   the axis. By convention, <span class="emphasis"><em>NaN</em></span>-values are mapped
150                   to <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code>.
151                 </p>
152               </td>
153 </tr>
154 <tr>
155 <td>
156                 <p>
157                   <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">get_allocator</span><span class="special">()</span></code>
158                 </p>
159               </td>
160 <td>
161                 <p>
162                   <code class="computeroutput"><span class="identifier">Alloc</span></code>
163                 </p>
164               </td>
165 <td>
166                 <p>
167                   Const member function which returns the allocator <code class="computeroutput"><span class="identifier">Alloc</span></code> used by this axis. May
168                   be omitted if <code class="computeroutput"><span class="identifier">A</span></code>
169                   does not use allocators. If this member function exists, also a
170                   special constructor must exists so that <code class="computeroutput"><span class="identifier">A</span><span class="special">(</span><span class="identifier">a</span><span class="special">.</span><span class="identifier">get_allocator</span><span class="special">())</span></code> is a valid expression.
171                 </p>
172               </td>
173 </tr>
174 </tbody>
175 </table></div>
176 </div>
177 <br class="table-break"><h5>
178 <a name="histogram.concepts.Axis.h2"></a>
179         <span class="phrase"><a name="histogram.concepts.Axis.optional_features"></a></span><a class="link" href="concepts.html#histogram.concepts.Axis.optional_features">Optional
180         features</a>
181       </h5>
182 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
183 <li class="listitem">
184             <code class="computeroutput"><span class="identifier">A</span></code> is a type meeting the
185             requirements of <span class="bold"><strong>Axis</strong></span>
186           </li>
187 <li class="listitem">
188             <code class="computeroutput"><span class="identifier">a</span></code> and <code class="computeroutput"><span class="identifier">b</span></code>
189             are values of type <code class="computeroutput"><span class="identifier">A</span></code>
190           </li>
191 <li class="listitem">
192             <code class="computeroutput"><span class="identifier">i</span></code> and <code class="computeroutput"><span class="identifier">j</span></code>
193             are indices of type <code class="computeroutput"><a class="link" href="reference.html#header.boost.histogram.fwd_hpp" title="Header &lt;boost/histogram/fwd.hpp&gt;">boost::histogram::axis::index_type</a></code>
194           </li>
195 <li class="listitem">
196             <code class="computeroutput"><span class="identifier">M</span></code> is a metadata type
197             that is <a href="https://en.cppreference.com/w/cpp/named_req/CopyConstructible" target="_top">CopyConstructible</a>
198             and <a href="https://en.cppreference.com/w/cpp/named_req/CopyAssignable" target="_top">CopyAssignable</a>
199             and <span class="bold"><strong>nothrow</strong></span> <a href="https://en.cppreference.com/w/cpp/named_req/MoveAssignable" target="_top">MoveAssignable</a>.
200           </li>
201 </ul></div>
202 <div class="table">
203 <a name="histogram.concepts.Axis.valid_expressions0"></a><p class="title"><b>Table&#160;1.2.&#160;Valid expressions</b></p>
204 <div class="table-contents"><table class="table" summary="Valid expressions">
205 <colgroup>
206 <col>
207 <col>
208 <col>
209 </colgroup>
210 <thead><tr>
211 <th>
212                 <p>
213                   Expression
214                 </p>
215               </th>
216 <th>
217                 <p>
218                   Returns
219                 </p>
220               </th>
221 <th>
222                 <p>
223                   Semantics, Pre/Post-conditions
224                 </p>
225               </th>
226 </tr></thead>
227 <tbody>
228 <tr>
229 <td>
230                 <p>
231                   <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">update</span><span class="special">(</span><span class="identifier">v</span><span class="special">)</span></code>
232                 </p>
233               </td>
234 <td>
235                 <p>
236                   <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">I</span><span class="special">,</span>
237                   <span class="identifier">I</span><span class="special">&gt;</span></code>
238                 </p>
239               </td>
240 <td>
241                 <p>
242                   Non-const member function which maps a value to an index (first
243                   argument of the returned pair) and offset (second argument of the
244                   returned pair). If the value is not covered by the axis, this method
245                   may grow the current axis size (<code class="computeroutput"><span class="identifier">old_size</span></code>)
246                   by the number of bins needed to contain the value or more (<code class="computeroutput"><span class="identifier">new_size</span></code>). If the value is below
247                   the lowest value covered by the axis, return index <code class="computeroutput"><span class="number">0</span></code> and offset <code class="computeroutput"><span class="identifier">new_size</span>
248                   <span class="special">-</span> <span class="identifier">old_size</span></code>.
249                   If the value is above the uppermost value covered by the axis,
250                   return index <code class="computeroutput"><span class="identifier">new_size</span>
251                   <span class="special">-</span> <span class="number">1</span></code>
252                   and a negative offset <code class="computeroutput"><span class="identifier">old_size</span>
253                   <span class="special">-</span> <span class="identifier">new_size</span></code>.
254                   If the value is outside, but the axis is not enlarged, then return
255                   an index equivalent to <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">index</span><span class="special">(</span><span class="identifier">v</span><span class="special">)</span></code> and offset <code class="computeroutput"><span class="number">0</span></code>.
256                 </p>
257               </td>
258 </tr>
259 <tr>
260 <td>
261                 <p>
262                   <code class="computeroutput"><span class="identifier">A</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span>
263                   <span class="identifier">i</span><span class="special">,</span>
264                   <span class="identifier">j</span><span class="special">,</span>
265                   <span class="identifier">n</span><span class="special">)</span></code>
266                 </p>
267               </td>
268 <td>
269               </td>
270 <td>
271                 <p>
272                   Special constructor used by the reduce algorithm. <code class="computeroutput"><span class="identifier">a</span></code> is the original axis instance,
273                   <code class="computeroutput"><span class="identifier">i</span></code> and <code class="computeroutput"><span class="identifier">j</span></code> are the index range to keep
274                   in the reduced axis. If <code class="computeroutput"><span class="identifier">n</span></code>
275                   is larger than 1, <code class="computeroutput"><span class="identifier">n</span></code>
276                   adjacent bins are merged into one larger cell. If this constructor
277                   is not implemented, <code class="computeroutput"><a class="link" href="../boost/histogram/algorithm/reduce_idm45414524960512.html" title="Function template reduce">boost::histogram::algorithm::reduce</a></code>
278                   throws an exception on an attempt to reduce this axis.
279                 </p>
280               </td>
281 </tr>
282 <tr>
283 <td>
284                 <p>
285                   <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">options</span><span class="special">()</span></code>
286                 </p>
287               </td>
288 <td>
289                 <p>
290                   <code class="computeroutput"><span class="keyword">unsigned</span></code>
291                 </p>
292               </td>
293 <td>
294                 <p>
295                   Static constexpr member function which returns the <code class="computeroutput"><a class="link" href="reference.html#header.boost.histogram.axis.option_hpp" title="Header &lt;boost/histogram/axis/option.hpp&gt;">axis options</a></code>
296                   for this axis.
297                 </p>
298               </td>
299 </tr>
300 <tr>
301 <td>
302                 <p>
303                   <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">inclusive</span><span class="special">()</span></code>
304                 </p>
305               </td>
306 <td>
307                 <p>
308                   <code class="computeroutput"><span class="keyword">bool</span></code>
309                 </p>
310               </td>
311 <td>
312                 <p>
313                   Static constexpr member function which returns true, if the axis
314                   has a bin for every possible input value, and false otherwise.
315                   Faster code can be generated if all axes types in a histogram are
316                   inclusive. An axis with underflow and overflow bins is always inclusive.
317                   An axis may be inclusive even if underflow or overflow bins are
318                   missing. For example, a category axis is inclusive if it has an
319                   overflow bin or if it is growing.
320                 </p>
321               </td>
322 </tr>
323 <tr>
324 <td>
325                 <p>
326                   <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">metadata</span><span class="special">()</span></code>
327                 </p>
328               </td>
329 <td>
330                 <p>
331                   <code class="computeroutput"><span class="keyword">const</span> <span class="identifier">M</span><span class="special">&amp;</span></code>
332                 </p>
333               </td>
334 <td>
335                 <p>
336                   Const member function which returns a const reference to the metadata
337                   associated with the axis (usually a string).
338                 </p>
339               </td>
340 </tr>
341 <tr>
342 <td>
343                 <p>
344                   <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">metadata</span><span class="special">()</span></code>
345                 </p>
346               </td>
347 <td>
348                 <p>
349                   <code class="computeroutput"><span class="identifier">M</span><span class="special">&amp;</span></code>
350                 </p>
351               </td>
352 <td>
353                 <p>
354                   Likewise, but non-const member function which returns a reference
355                   to the metadata. If this member function exists, also the previous
356                   one must exist.
357                 </p>
358               </td>
359 </tr>
360 <tr>
361 <td>
362                 <p>
363                   <code class="computeroutput"><span class="identifier">a</span> <span class="special">==</span>
364                   <span class="identifier">b</span></code>
365                 </p>
366               </td>
367 <td>
368                 <p>
369                   <code class="computeroutput"><span class="keyword">bool</span></code>
370                 </p>
371               </td>
372 <td>
373                 <p>
374                   Returns <code class="computeroutput"><span class="keyword">true</span></code> if all
375                   state variables compare equal, including any metadata. Otherwise
376                   returns <code class="computeroutput"><span class="keyword">false</span></code>. If
377                   <code class="computeroutput"><span class="identifier">a</span> <span class="special">==</span>
378                   <span class="identifier">b</span></code> is implemented, also
379                   <code class="computeroutput"><span class="identifier">a</span> <span class="special">!=</span>
380                   <span class="identifier">b</span></code> must be implemented.
381                   If this binary operator is not implemented, the library considers
382                   the arguments equal, if and only if their types are the same.
383                 </p>
384               </td>
385 </tr>
386 <tr>
387 <td>
388                 <p>
389                   <code class="computeroutput"><span class="identifier">a</span> <span class="special">!=</span>
390                   <span class="identifier">b</span></code>
391                 </p>
392               </td>
393 <td>
394                 <p>
395                   <code class="computeroutput"><span class="keyword">bool</span></code>
396                 </p>
397               </td>
398 <td>
399                 <p>
400                   Must be implemented if <code class="computeroutput"><span class="identifier">a</span>
401                   <span class="special">==</span> <span class="identifier">b</span></code>
402                   is implemented and must be equal to <code class="computeroutput"><span class="special">!(</span><span class="identifier">a</span> <span class="special">==</span>
403                   <span class="identifier">b</span><span class="special">)</span></code>.
404                 </p>
405               </td>
406 </tr>
407 <tr>
408 <td>
409                 <p>
410                   <code class="computeroutput"><span class="identifier">os</span> <span class="special">&lt;&lt;</span>
411                   <span class="identifier">a</span></code>
412                 </p>
413               </td>
414 <td>
415                 <p>
416                   <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span>
417                   <span class="identifier">Traits</span><span class="special">&gt;&amp;</span></code>
418                 </p>
419               </td>
420 <td>
421                 <p>
422                   <code class="computeroutput"><span class="identifier">os</span></code> is a value of
423                   type <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span>
424                   <span class="identifier">Traits</span><span class="special">&gt;</span></code>.
425                   Streams a text representation of the axis. May not mutate <code class="computeroutput"><span class="identifier">a</span></code>.
426                 </p>
427               </td>
428 </tr>
429 <tr>
430 <td>
431                 <p>
432                   <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">serialize</span><span class="special">(</span><span class="identifier">ar</span><span class="special">,</span>
433                   <span class="identifier">n</span><span class="special">)</span></code>
434                 </p>
435               </td>
436 <td>
437               </td>
438 <td>
439                 <p>
440                   <code class="computeroutput"><span class="identifier">ar</span></code> is a value of
441                   an archive with Boost.Serialization semantics and <code class="computeroutput"><span class="identifier">n</span></code> is an unsigned integral value.
442                   Saves to the archive or loads serialized state from the archive.
443                   The version number <code class="computeroutput"><span class="identifier">n</span></code>
444                   is the stored version when the object is loaded or the current
445                   version when the object is saved.
446                 </p>
447               </td>
448 </tr>
449 </tbody>
450 </table></div>
451 </div>
452 <br class="table-break"><h5>
453 <a name="histogram.concepts.Axis.h3"></a>
454         <span class="phrase"><a name="histogram.concepts.Axis.models"></a></span><a class="link" href="concepts.html#histogram.concepts.Axis.models">Models</a>
455       </h5>
456 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
457 <li class="listitem">
458             <code class="computeroutput"><a class="link" href="../boost/histogram/axis/category.html" title="Class template category">boost::histogram::axis::category</a></code>
459           </li>
460 <li class="listitem">
461             <code class="computeroutput"><a class="link" href="../boost/histogram/axis/integer.html" title="Class template integer">boost::histogram::axis::integer</a></code>
462           </li>
463 <li class="listitem">
464             <code class="computeroutput"><a class="link" href="../boost/histogram/axis/regular.html" title="Class template regular">boost::histogram::axis::regular</a></code>
465           </li>
466 <li class="listitem">
467             <code class="computeroutput"><a class="link" href="../boost/histogram/axis/variable.html" title="Class template variable">boost::histogram::axis::variable</a></code>
468           </li>
469 </ul></div>
470 </div>
471 <div class="section">
472 <div class="titlepage"><div><div><h3 class="title">
473 <a name="histogram.concepts.DiscreteAxis"></a><a class="link" href="concepts.html#histogram.concepts.DiscreteAxis" title="DiscreteAxis">DiscreteAxis</a>
474 </h3></div></div></div>
475 <p>
476         A <span class="bold"><strong>DiscreteAxis</strong></span> is one of two optional refinements
477         of the <a class="link" href="concepts.html#histogram.concepts.Axis" title="Axis"><span class="bold"><strong>Axis</strong></span></a>
478         concept, the other one is the <a class="link" href="concepts.html#histogram.concepts.IntervalAxis" title="IntervalAxis">IntervalAxis</a>.
479         This concept is for values that do not form intervals, and for axes with
480         intervals that contain exactly one value.
481       </p>
482 <h5>
483 <a name="histogram.concepts.DiscreteAxis.h0"></a>
484         <span class="phrase"><a name="histogram.concepts.DiscreteAxis.associated_types"></a></span><a class="link" href="concepts.html#histogram.concepts.DiscreteAxis.associated_types">Associated
485         Types</a>
486       </h5>
487 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
488 <li class="listitem">
489             <a class="link" href="concepts.html#histogram.concepts.Axis" title="Axis"><span class="bold"><strong>Axis</strong></span></a>
490           </li>
491 <li class="listitem">
492             <a class="link" href="concepts.html#histogram.concepts.IntervalAxis" title="IntervalAxis"><span class="bold"><strong>IntervalAxis</strong></span></a>
493           </li>
494 </ul></div>
495 <h5>
496 <a name="histogram.concepts.DiscreteAxis.h1"></a>
497         <span class="phrase"><a name="histogram.concepts.DiscreteAxis.requirements"></a></span><a class="link" href="concepts.html#histogram.concepts.DiscreteAxis.requirements">Requirements</a>
498       </h5>
499 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
500 <li class="listitem">
501             <code class="computeroutput"><span class="identifier">A</span></code> is a type meeting the
502             requirements of <span class="bold"><strong>DiscreteAxis</strong></span>
503           </li>
504 <li class="listitem">
505             <code class="computeroutput"><span class="identifier">a</span></code> is a value of type
506             <code class="computeroutput"><span class="identifier">A</span></code>
507           </li>
508 <li class="listitem">
509             <code class="computeroutput"><span class="identifier">V</span></code> is the type accepted
510             for conversion into an index
511           </li>
512 <li class="listitem">
513             <code class="computeroutput"><span class="identifier">v</span></code> is a value of type
514             <code class="computeroutput"><span class="identifier">V</span></code>
515           </li>
516 <li class="listitem">
517             <code class="computeroutput"><span class="identifier">i</span></code> is a value of type
518             <code class="computeroutput"><a class="link" href="reference.html#header.boost.histogram.fwd_hpp" title="Header &lt;boost/histogram/fwd.hpp&gt;">boost::histogram::axis::index_type</a></code>
519           </li>
520 <li class="listitem">
521             <code class="computeroutput"><span class="identifier">AxisIter</span></code> is an <span class="emphasis"><em>RandomAccessIterator</em></span>
522             over the bins of <code class="computeroutput"><span class="identifier">A</span></code>
523           </li>
524 <li class="listitem">
525             <code class="computeroutput"><span class="identifier">ReAxisIter</span></code> is a reverse
526             <span class="emphasis"><em>RandomAccessIterator</em></span> over the bins of <code class="computeroutput"><span class="identifier">A</span></code>
527           </li>
528 </ul></div>
529 <div class="table">
530 <a name="histogram.concepts.DiscreteAxis.valid_expressions"></a><p class="title"><b>Table&#160;1.3.&#160;Valid expressions</b></p>
531 <div class="table-contents"><table class="table" summary="Valid expressions">
532 <colgroup>
533 <col>
534 <col>
535 <col>
536 </colgroup>
537 <thead><tr>
538 <th>
539                 <p>
540                   Expression
541                 </p>
542               </th>
543 <th>
544                 <p>
545                   Returns
546                 </p>
547               </th>
548 <th>
549                 <p>
550                   Semantics, Pre/Post-conditions
551                 </p>
552               </th>
553 </tr></thead>
554 <tbody>
555 <tr>
556 <td>
557                 <p>
558                   <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">value</span><span class="special">(</span><span class="identifier">i</span><span class="special">)</span></code>
559                 </p>
560               </td>
561 <td>
562                 <p>
563                   <code class="computeroutput"><span class="identifier">V</span></code>
564                 </p>
565               </td>
566 <td>
567                 <p>
568                   Const member function which maps an index to a value. The mapping
569                   must be injective: each index must be uniquely mapped to one value.
570                   The effect must be exactly the inverse of <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">index</span><span class="special">(</span><span class="identifier">v</span><span class="special">)</span></code>. The return value may be a const
571                   reference, if the lifetime of the referred object is equal to the
572                   lifetime of the axis.
573                 </p>
574               </td>
575 </tr>
576 <tr>
577 <td>
578                 <p>
579                   <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">bin</span><span class="special">(</span><span class="identifier">i</span><span class="special">)</span></code>
580                 </p>
581               </td>
582 <td>
583                 <p>
584                   <code class="computeroutput"><span class="identifier">V</span></code>
585                 </p>
586               </td>
587 <td>
588                 <p>
589                   Must have the same effect as <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">value</span><span class="special">(</span><span class="identifier">i</span><span class="special">)</span></code>.
590                 </p>
591               </td>
592 </tr>
593 <tr>
594 <td>
595                 <p>
596                   <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span></code>
597                 </p>
598               </td>
599 <td>
600                 <p>
601                   <code class="computeroutput"><span class="identifier">AxisIter</span></code>
602                 </p>
603               </td>
604 <td>
605                 <p>
606                   Const member function which return an iterator to the bin with
607                   index <code class="computeroutput"><span class="number">0</span></code>.
608                 </p>
609               </td>
610 </tr>
611 <tr>
612 <td>
613                 <p>
614                   <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></code>
615                 </p>
616               </td>
617 <td>
618                 <p>
619                   <code class="computeroutput"><span class="identifier">AxisIter</span></code>
620                 </p>
621               </td>
622 <td>
623                 <p>
624                   Const member function which returns an iterator to the bin with
625                   index <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code>.
626                 </p>
627               </td>
628 </tr>
629 <tr>
630 <td>
631                 <p>
632                   <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">rbegin</span><span class="special">()</span></code>
633                 </p>
634               </td>
635 <td>
636                 <p>
637                   <code class="computeroutput"><span class="identifier">ReAxisIter</span></code>
638                 </p>
639               </td>
640 <td>
641                 <p>
642                   Const member function which return a reverse iterator to the bin
643                   with index <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">size</span><span class="special">()-</span><span class="number">1</span></code>.
644                 </p>
645               </td>
646 </tr>
647 <tr>
648 <td>
649                 <p>
650                   <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">rend</span><span class="special">()</span></code>
651                 </p>
652               </td>
653 <td>
654                 <p>
655                   <code class="computeroutput"><span class="identifier">ReAxisIter</span></code>
656                 </p>
657               </td>
658 <td>
659                 <p>
660                   Const member function which returns an iterator to the bin with
661                   index <code class="computeroutput"><span class="special">-</span><span class="number">1</span></code>.
662                 </p>
663               </td>
664 </tr>
665 </tbody>
666 </table></div>
667 </div>
668 <br class="table-break"><div class="tip"><table border="0" summary="Tip">
669 <tr>
670 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../../doc/src/images/tip.png"></td>
671 <th align="left">Tip</th>
672 </tr>
673 <tr><td align="left" valign="top"><p>
674           The complete iterator interface can be added to a user-defined axis which
675           implements <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">bin</span><span class="special">(</span><span class="identifier">i</span><span class="special">)</span></code> by
676           inheriting from the <code class="computeroutput"><a class="link" href="../boost/histogram/axis/iterator_mixin.html" title="Class template iterator_mixin">iterator_mixin</a></code>.
677         </p></td></tr>
678 </table></div>
679 <h5>
680 <a name="histogram.concepts.DiscreteAxis.h2"></a>
681         <span class="phrase"><a name="histogram.concepts.DiscreteAxis.models"></a></span><a class="link" href="concepts.html#histogram.concepts.DiscreteAxis.models">Models</a>
682       </h5>
683 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
684 <li class="listitem">
685             <code class="computeroutput"><a class="link" href="../boost/histogram/axis/category.html" title="Class template category">boost::histogram::axis::category</a></code>
686           </li>
687 <li class="listitem">
688             <code class="computeroutput"><a class="link" href="../boost/histogram/axis/integer.html" title="Class template integer">boost::histogram::axis::integer</a></code>,
689             if first template parameter is <code class="computeroutput"><a class="link" href="reference.html#header.boost.histogram.fwd_hpp" title="Header &lt;boost/histogram/fwd.hpp&gt;">boost::histogram::index_type</a></code>
690           </li>
691 </ul></div>
692 </div>
693 <div class="section">
694 <div class="titlepage"><div><div><h3 class="title">
695 <a name="histogram.concepts.IntervalAxis"></a><a class="link" href="concepts.html#histogram.concepts.IntervalAxis" title="IntervalAxis">IntervalAxis</a>
696 </h3></div></div></div>
697 <p>
698         A <span class="bold"><strong>IntervalAxis</strong></span> is one of two optional refinements
699         of the <a class="link" href="concepts.html#histogram.concepts.Axis" title="Axis"><span class="bold"><strong>Axis</strong></span></a>
700         concept, the other one is the <a class="link" href="concepts.html#histogram.concepts.DiscreteAxis" title="DiscreteAxis">DiscreteAxis</a>.
701         It is for ordered values that form intervals with a well-defined lower and
702         upper edge, and a center. Each bin represents an interval of values.
703       </p>
704 <h5>
705 <a name="histogram.concepts.IntervalAxis.h0"></a>
706         <span class="phrase"><a name="histogram.concepts.IntervalAxis.associated_types"></a></span><a class="link" href="concepts.html#histogram.concepts.IntervalAxis.associated_types">Associated
707         Types</a>
708       </h5>
709 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
710 <li class="listitem">
711             <a class="link" href="concepts.html#histogram.concepts.Axis" title="Axis"><span class="bold"><strong>Axis</strong></span></a>
712           </li>
713 <li class="listitem">
714             <a class="link" href="concepts.html#histogram.concepts.DiscreteAxis" title="DiscreteAxis"><span class="bold"><strong>DiscreteAxis</strong></span></a>
715           </li>
716 </ul></div>
717 <h5>
718 <a name="histogram.concepts.IntervalAxis.h1"></a>
719         <span class="phrase"><a name="histogram.concepts.IntervalAxis.requirements"></a></span><a class="link" href="concepts.html#histogram.concepts.IntervalAxis.requirements">Requirements</a>
720       </h5>
721 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
722 <li class="listitem">
723             <code class="computeroutput"><span class="identifier">A</span></code> is a type meeting the
724             requirements of <span class="bold"><strong>IntervalAxis</strong></span>
725           </li>
726 <li class="listitem">
727             <code class="computeroutput"><span class="identifier">a</span></code> is a value of type
728             <code class="computeroutput"><span class="identifier">A</span></code>
729           </li>
730 <li class="listitem">
731             <code class="computeroutput"><span class="identifier">V</span></code> is the type accepted
732             for conversion into an index
733           </li>
734 <li class="listitem">
735             <code class="computeroutput"><span class="identifier">B</span></code> is the type that represents
736             the bin interval
737           </li>
738 <li class="listitem">
739             <code class="computeroutput"><span class="identifier">v</span></code> is a value of type
740             <code class="computeroutput"><span class="identifier">V</span></code>
741           </li>
742 <li class="listitem">
743             <code class="computeroutput"><span class="identifier">i</span></code> is a value of type
744             <code class="computeroutput"><a class="link" href="reference.html#header.boost.histogram.fwd_hpp" title="Header &lt;boost/histogram/fwd.hpp&gt;">boost::histogram::axis::index_type</a></code>
745           </li>
746 <li class="listitem">
747             <code class="computeroutput"><span class="identifier">j</span></code> is a value of type
748             <code class="computeroutput"><a class="link" href="reference.html#header.boost.histogram.fwd_hpp" title="Header &lt;boost/histogram/fwd.hpp&gt;">boost::histogram::axis::real_index_type</a></code>
749           </li>
750 <li class="listitem">
751             <code class="computeroutput"><span class="identifier">AxisIter</span></code> is an <span class="emphasis"><em>RandomAccessIterator</em></span>
752             over the bins of <code class="computeroutput"><span class="identifier">A</span></code>
753           </li>
754 <li class="listitem">
755             <code class="computeroutput"><span class="identifier">ReAxisIter</span></code> is a reverse
756             <span class="emphasis"><em>RandomAccessIterator</em></span> over the bins of <code class="computeroutput"><span class="identifier">A</span></code>
757           </li>
758 </ul></div>
759 <div class="table">
760 <a name="histogram.concepts.IntervalAxis.valid_expressions"></a><p class="title"><b>Table&#160;1.4.&#160;Valid expressions</b></p>
761 <div class="table-contents"><table class="table" summary="Valid expressions">
762 <colgroup>
763 <col>
764 <col>
765 <col>
766 </colgroup>
767 <thead><tr>
768 <th>
769                 <p>
770                   Expression
771                 </p>
772               </th>
773 <th>
774                 <p>
775                   Returns
776                 </p>
777               </th>
778 <th>
779                 <p>
780                   Semantics, Pre/Post-conditions
781                 </p>
782               </th>
783 </tr></thead>
784 <tbody>
785 <tr>
786 <td>
787                 <p>
788                   <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">value</span><span class="special">(</span><span class="identifier">i</span><span class="special">)</span></code>
789                 </p>
790               </td>
791 <td>
792                 <p>
793                   <code class="computeroutput"><span class="identifier">V</span></code>
794                 </p>
795               </td>
796 <td>
797                 <p>
798                   Const member function which maps an index to a value. The mapping
799                   must be injective: each index must be uniquely mapped to one value.
800                   The result of <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">value</span><span class="special">(</span><span class="identifier">a</span><span class="special">.</span><span class="identifier">index</span><span class="special">(</span><span class="identifier">v</span><span class="special">))</span></code> should agree to very high precision
801                   with <code class="computeroutput"><span class="identifier">v</span></code> (the mapping
802                   may not be exact due to the finite precision of floating point
803                   computations). The return value may be a const reference, if the
804                   lifetime of the referred object is equal to the lifetime of the
805                   axis. <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">value</span><span class="special">(</span><span class="identifier">j</span><span class="special">)</span></code>
806                   is expected to return the lower edge of the bin, <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">value</span><span class="special">(</span><span class="identifier">j</span><span class="special">+</span><span class="number">1</span><span class="special">)</span></code>
807                   the upper edge, and <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">value</span><span class="special">(</span><span class="identifier">j</span>
808                   <span class="special">+</span> <span class="number">0.5</span><span class="special">)</span></code> the center.
809                 </p>
810               </td>
811 </tr>
812 <tr>
813 <td>
814                 <p>
815                   <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">bin</span><span class="special">(</span><span class="identifier">i</span><span class="special">)</span></code>
816                 </p>
817               </td>
818 <td>
819                 <p>
820                   <code class="computeroutput"><span class="identifier">B</span></code>
821                 </p>
822               </td>
823 <td>
824                 <p>
825                   Const member function which returns an instance that represents
826                   the current bin. Nothing about the type is required, but it is
827                   recommended that the type has the methods <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">lower</span><span class="special">()</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">upper</span><span class="special">()</span></code>, and <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">center</span><span class="special">()</span></code> similar to the types used by
828                   the builtin axis models. The return value may be a const reference,
829                   if the lifetime of the referred object is equal to the lifetime
830                   of the axis.
831                 </p>
832               </td>
833 </tr>
834 <tr>
835 <td>
836                 <p>
837                   <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span></code>
838                 </p>
839               </td>
840 <td>
841                 <p>
842                   <code class="computeroutput"><span class="identifier">AxisIter</span></code>
843                 </p>
844               </td>
845 <td>
846                 <p>
847                   Const member function which return an iterator to the bin with
848                   index <code class="computeroutput"><span class="number">0</span></code>.
849                 </p>
850               </td>
851 </tr>
852 <tr>
853 <td>
854                 <p>
855                   <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></code>
856                 </p>
857               </td>
858 <td>
859                 <p>
860                   <code class="computeroutput"><span class="identifier">AxisIter</span></code>
861                 </p>
862               </td>
863 <td>
864                 <p>
865                   Const member function which returns an iterator to the bin with
866                   index <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code>.
867                 </p>
868               </td>
869 </tr>
870 <tr>
871 <td>
872                 <p>
873                   <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">rbegin</span><span class="special">()</span></code>
874                 </p>
875               </td>
876 <td>
877                 <p>
878                   <code class="computeroutput"><span class="identifier">ReAxisIter</span></code>
879                 </p>
880               </td>
881 <td>
882                 <p>
883                   Const member function which return a reverse iterator to the bin
884                   with index <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">size</span><span class="special">()-</span><span class="number">1</span></code>.
885                 </p>
886               </td>
887 </tr>
888 <tr>
889 <td>
890                 <p>
891                   <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">rend</span><span class="special">()</span></code>
892                 </p>
893               </td>
894 <td>
895                 <p>
896                   <code class="computeroutput"><span class="identifier">ReAxisIter</span></code>
897                 </p>
898               </td>
899 <td>
900                 <p>
901                   Const member function which returns an iterator to the bin with
902                   index <code class="computeroutput"><span class="special">-</span><span class="number">1</span></code>.
903                 </p>
904               </td>
905 </tr>
906 </tbody>
907 </table></div>
908 </div>
909 <br class="table-break"><div class="tip"><table border="0" summary="Tip">
910 <tr>
911 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../../doc/src/images/tip.png"></td>
912 <th align="left">Tip</th>
913 </tr>
914 <tr><td align="left" valign="top"><p>
915           The complete iterator interface can be added to a user-defined axis which
916           implements <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">bin</span><span class="special">(</span><span class="identifier">i</span><span class="special">)</span></code> by
917           inheriting from the <code class="computeroutput"><a class="link" href="../boost/histogram/axis/iterator_mixin.html" title="Class template iterator_mixin">iterator_mixin</a></code>.
918         </p></td></tr>
919 </table></div>
920 <h5>
921 <a name="histogram.concepts.IntervalAxis.h2"></a>
922         <span class="phrase"><a name="histogram.concepts.IntervalAxis.models"></a></span><a class="link" href="concepts.html#histogram.concepts.IntervalAxis.models">Models</a>
923       </h5>
924 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
925 <li class="listitem">
926             <code class="computeroutput"><a class="link" href="../boost/histogram/axis/regular.html" title="Class template regular">boost::histogram::axis::regular</a></code>
927           </li>
928 <li class="listitem">
929             <code class="computeroutput"><a class="link" href="../boost/histogram/axis/variable.html" title="Class template variable">boost::histogram::axis::variable</a></code>
930           </li>
931 <li class="listitem">
932             <code class="computeroutput"><a class="link" href="../boost/histogram/axis/integer.html" title="Class template integer">boost::histogram::axis::integer</a></code>,
933             if first template parameter is a floating point type
934           </li>
935 </ul></div>
936 </div>
937 <div class="section">
938 <div class="titlepage"><div><div><h3 class="title">
939 <a name="histogram.concepts.Transform"></a><a class="link" href="concepts.html#histogram.concepts.Transform" title="Transform">Transform</a>
940 </h3></div></div></div>
941 <p>
942         A <span class="bold"><strong>Transform</strong></span> implements a monotonic mapping
943         between two real-valued domains, external and internal. It is used to extend
944         the <code class="computeroutput"><a class="link" href="../boost/histogram/axis/regular.html" title="Class template regular">regular axis</a></code>.
945         The bins in the internal domain are of equal width, while the bins in the
946         external domain are non-equal width. Must be <a href="https://en.cppreference.com/w/cpp/named_req/DefaultConstructible" target="_top">DefaultConstructible</a>,
947         <a href="https://en.cppreference.com/w/cpp/named_req/CopyConstructible" target="_top">CopyConstructible</a>,
948         and <a href="https://en.cppreference.com/w/cpp/named_req/CopyAssignable" target="_top">CopyAssignable</a>.
949       </p>
950 <h5>
951 <a name="histogram.concepts.Transform.h0"></a>
952         <span class="phrase"><a name="histogram.concepts.Transform.required_features"></a></span><a class="link" href="concepts.html#histogram.concepts.Transform.required_features">Required
953         features</a>
954       </h5>
955 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
956 <li class="listitem">
957             <code class="computeroutput"><span class="identifier">T</span></code> is a type meeting the
958             requirements of <span class="bold"><strong>Transform</strong></span>
959           </li>
960 <li class="listitem">
961             <code class="computeroutput"><span class="identifier">t</span></code> is a value of type
962             <code class="computeroutput"><span class="identifier">T</span></code>
963           </li>
964 <li class="listitem">
965             <code class="computeroutput"><span class="identifier">X</span></code> is a type with the
966             semantics of a floating-point type
967           </li>
968 <li class="listitem">
969             <code class="computeroutput"><span class="identifier">x</span></code> is a value of type
970             <code class="computeroutput"><span class="identifier">X</span></code>
971           </li>
972 <li class="listitem">
973             <code class="computeroutput"><span class="identifier">Y</span></code> is a floating-point
974             type
975           </li>
976 <li class="listitem">
977             <code class="computeroutput"><span class="identifier">y</span></code> is a value of type
978             <code class="computeroutput"><span class="identifier">Y</span></code>
979           </li>
980 </ul></div>
981 <div class="table">
982 <a name="histogram.concepts.Transform.valid_expressions"></a><p class="title"><b>Table&#160;1.5.&#160;Valid expressions</b></p>
983 <div class="table-contents"><table class="table" summary="Valid expressions">
984 <colgroup>
985 <col>
986 <col>
987 <col>
988 </colgroup>
989 <thead><tr>
990 <th>
991                 <p>
992                   Expression
993                 </p>
994               </th>
995 <th>
996                 <p>
997                   Returns
998                 </p>
999               </th>
1000 <th>
1001                 <p>
1002                   Semantics, Pre/Post-conditions
1003                 </p>
1004               </th>
1005 </tr></thead>
1006 <tbody>
1007 <tr>
1008 <td>
1009                 <p>
1010                   <code class="computeroutput"><span class="identifier">t</span><span class="special">.</span><span class="identifier">forward</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span></code>
1011                 </p>
1012               </td>
1013 <td>
1014                 <p>
1015                   <code class="computeroutput"><span class="identifier">Y</span></code>
1016                 </p>
1017               </td>
1018 <td>
1019                 <p>
1020                   Const or static member function which maps the external value to
1021                   the corresponding internal value. The return type <code class="computeroutput"><span class="identifier">Y</span></code> may differ from <code class="computeroutput"><span class="identifier">X</span></code>.
1022                 </p>
1023               </td>
1024 </tr>
1025 <tr>
1026 <td>
1027                 <p>
1028                   <code class="computeroutput"><span class="identifier">t</span><span class="special">.</span><span class="identifier">inverse</span><span class="special">(</span><span class="identifier">y</span><span class="special">)</span></code>
1029                 </p>
1030               </td>
1031 <td>
1032                 <p>
1033                   <code class="computeroutput"><span class="identifier">X</span></code>
1034                 </p>
1035               </td>
1036 <td>
1037                 <p>
1038                   Const or static member function which maps the internal value to
1039                   the corresponding external value. The result of <code class="computeroutput"><span class="identifier">t</span><span class="special">.</span><span class="identifier">inverse</span><span class="special">(</span><span class="identifier">t</span><span class="special">.</span><span class="identifier">forward</span><span class="special">(</span><span class="identifier">x</span><span class="special">))</span></code> must be approximately equal to
1040                   <code class="computeroutput"><span class="identifier">x</span></code> within floating-point
1041                   precision.
1042                 </p>
1043               </td>
1044 </tr>
1045 <tr>
1046 <td>
1047                 <p>
1048                   <code class="computeroutput"><span class="identifier">t</span> <span class="special">==</span>
1049                   <span class="identifier">u</span></code>
1050                 </p>
1051               </td>
1052 <td>
1053                 <p>
1054                   <code class="computeroutput"><span class="keyword">bool</span></code>
1055                 </p>
1056               </td>
1057 <td>
1058                 <p>
1059                   <code class="computeroutput"><span class="identifier">u</span></code> is another value
1060                   of type <code class="computeroutput"><span class="identifier">T</span></code>. Returns
1061                   <code class="computeroutput"><span class="keyword">true</span></code> if both values
1062                   have the same state. Otherwise returns <code class="computeroutput"><span class="keyword">false</span></code>.
1063                   May be omitted if <code class="computeroutput"><span class="identifier">T</span></code>
1064                   is stateless. If this binary operator is not implemented, the library
1065                   considers the arguments equal, if and only if their types are the
1066                   same.
1067                 </p>
1068               </td>
1069 </tr>
1070 </tbody>
1071 </table></div>
1072 </div>
1073 <br class="table-break"><h5>
1074 <a name="histogram.concepts.Transform.h1"></a>
1075         <span class="phrase"><a name="histogram.concepts.Transform.optional_features"></a></span><a class="link" href="concepts.html#histogram.concepts.Transform.optional_features">Optional
1076         features</a>
1077       </h5>
1078 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1079 <li class="listitem">
1080             <code class="computeroutput"><span class="identifier">T</span></code> is a type meeting the
1081             requirements of <span class="bold"><strong>Transform</strong></span>
1082           </li>
1083 <li class="listitem">
1084             <code class="computeroutput"><span class="identifier">t</span></code> is a value of type
1085             <code class="computeroutput"><span class="identifier">T</span></code>
1086           </li>
1087 <li class="listitem">
1088             <code class="computeroutput"><span class="identifier">ar</span></code> is a value of an archive
1089             with Boost.Serialization semantics
1090           </li>
1091 </ul></div>
1092 <div class="table">
1093 <a name="histogram.concepts.Transform.valid_expressions0"></a><p class="title"><b>Table&#160;1.6.&#160;Valid expressions</b></p>
1094 <div class="table-contents"><table class="table" summary="Valid expressions">
1095 <colgroup>
1096 <col>
1097 <col>
1098 <col>
1099 </colgroup>
1100 <thead><tr>
1101 <th>
1102                 <p>
1103                   Expression
1104                 </p>
1105               </th>
1106 <th>
1107                 <p>
1108                   Returns
1109                 </p>
1110               </th>
1111 <th>
1112                 <p>
1113                   Semantics, Pre/Post-conditions
1114                 </p>
1115               </th>
1116 </tr></thead>
1117 <tbody><tr>
1118 <td>
1119                 <p>
1120                   <code class="computeroutput"><span class="identifier">t</span><span class="special">.</span><span class="identifier">serialize</span><span class="special">(</span><span class="identifier">ar</span><span class="special">,</span>
1121                   <span class="identifier">n</span><span class="special">)</span></code>
1122                 </p>
1123               </td>
1124 <td>
1125               </td>
1126 <td>
1127                 <p>
1128                   <code class="computeroutput"><span class="identifier">ar</span></code> is a value of
1129                   an archive with Boost.Serialization semantics and <code class="computeroutput"><span class="identifier">n</span></code> is an unsigned integral value.
1130                   Saves to the archive or loads serialized state from the archive.
1131                   The version number <code class="computeroutput"><span class="identifier">n</span></code>
1132                   is the stored version when the object is loaded or the current
1133                   version when the object is saved.
1134                 </p>
1135               </td>
1136 </tr></tbody>
1137 </table></div>
1138 </div>
1139 <br class="table-break"><h5>
1140 <a name="histogram.concepts.Transform.h2"></a>
1141         <span class="phrase"><a name="histogram.concepts.Transform.models"></a></span><a class="link" href="concepts.html#histogram.concepts.Transform.models">Models</a>
1142       </h5>
1143 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1144 <li class="listitem">
1145             <code class="computeroutput"><a class="link" href="../boost/histogram/axis/transform/id.html" title="Struct id">boost::histogram::axis::transform::id</a></code>
1146           </li>
1147 <li class="listitem">
1148             <code class="computeroutput"><a class="link" href="../boost/histogram/axis/transform/log.html" title="Struct log">boost::histogram::axis::transform::log</a></code>
1149           </li>
1150 <li class="listitem">
1151             <code class="computeroutput"><a class="link" href="../boost/histogram/axis/transform/sqrt.html" title="Struct sqrt">boost::histogram::axis::transform::sqrt</a></code>
1152           </li>
1153 <li class="listitem">
1154             <code class="computeroutput"><a class="link" href="../boost/histogram/axis/transform/pow.html" title="Struct pow">boost::histogram::axis::transform::pow</a></code>
1155           </li>
1156 </ul></div>
1157 </div>
1158 <div class="section">
1159 <div class="titlepage"><div><div><h3 class="title">
1160 <a name="histogram.concepts.Storage"></a><a class="link" href="concepts.html#histogram.concepts.Storage" title="Storage">Storage</a>
1161 </h3></div></div></div>
1162 <p>
1163         A <span class="bold"><strong>Storage</strong></span> handles memory for the bin counters
1164         and provides a uniform vector-like interface for accessing cell values for
1165         reading and writing. Must be <a href="https://en.cppreference.com/w/cpp/named_req/DefaultConstructible" target="_top">DefaultConstructible</a>,
1166         <a href="https://en.cppreference.com/w/cpp/named_req/CopyConstructible" target="_top">CopyConstructible</a>,
1167         and <a href="https://en.cppreference.com/w/cpp/named_req/CopyAssignable" target="_top">CopyAssignable</a>.
1168       </p>
1169 <h5>
1170 <a name="histogram.concepts.Storage.h0"></a>
1171         <span class="phrase"><a name="histogram.concepts.Storage.required_features"></a></span><a class="link" href="concepts.html#histogram.concepts.Storage.required_features">Required
1172         features</a>
1173       </h5>
1174 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1175 <li class="listitem">
1176             <code class="computeroutput"><span class="identifier">S</span></code> is a type meeting the
1177             requirements of <span class="bold"><strong>Storage</strong></span>
1178           </li>
1179 <li class="listitem">
1180             <code class="computeroutput"><span class="identifier">s</span></code> is a value of types
1181             <code class="computeroutput"><span class="identifier">S</span></code>
1182           </li>
1183 <li class="listitem">
1184             <code class="computeroutput"><span class="identifier">i</span></code> and <code class="computeroutput"><span class="identifier">n</span></code>
1185             are values of type <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span></code>
1186           </li>
1187 </ul></div>
1188 <div class="table">
1189 <a name="histogram.concepts.Storage.valid_expressions"></a><p class="title"><b>Table&#160;1.7.&#160;Valid expressions</b></p>
1190 <div class="table-contents"><table class="table" summary="Valid expressions">
1191 <colgroup>
1192 <col>
1193 <col>
1194 <col>
1195 </colgroup>
1196 <thead><tr>
1197 <th>
1198                 <p>
1199                   Expression
1200                 </p>
1201               </th>
1202 <th>
1203                 <p>
1204                   Returns
1205                 </p>
1206               </th>
1207 <th>
1208                 <p>
1209                   Semantics, Pre/Post-conditions
1210                 </p>
1211               </th>
1212 </tr></thead>
1213 <tbody>
1214 <tr>
1215 <td>
1216                 <p>
1217                   <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">value_type</span></code>
1218                 </p>
1219               </td>
1220 <td>
1221               </td>
1222 <td>
1223                 <p>
1224                   Cell element type, may be either an integral type, floating-point
1225                   type, or a type meeting the requirements of <a class="link" href="concepts.html#histogram.concepts.Accumulator" title="Accumulator"><span class="bold"><strong>Accumulator</strong></span></a>.
1226                 </p>
1227               </td>
1228 </tr>
1229 <tr>
1230 <td>
1231                 <p>
1232                   <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">reference</span></code>
1233                 </p>
1234               </td>
1235 <td>
1236               </td>
1237 <td>
1238                 <p>
1239                   <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">value_type</span><span class="special">&amp;</span></code>
1240                   or a proxy class which acts like a reference.
1241                 </p>
1242               </td>
1243 </tr>
1244 <tr>
1245 <td>
1246                 <p>
1247                   <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">const_reference</span></code>
1248                 </p>
1249               </td>
1250 <td>
1251               </td>
1252 <td>
1253                 <p>
1254                   <code class="computeroutput"><span class="keyword">const</span> <span class="identifier">S</span><span class="special">::</span><span class="identifier">value_type</span><span class="special">&amp;</span></code> or a proxy class which acts
1255                   like a const reference. Implicitly convertible to <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">value_type</span></code>.
1256                 </p>
1257               </td>
1258 </tr>
1259 <tr>
1260 <td>
1261                 <p>
1262                   <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">iterator</span></code>
1263                 </p>
1264               </td>
1265 <td>
1266               </td>
1267 <td>
1268                 <p>
1269                   Returns an STL-compliant iterator type which dereferences to <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">reference</span></code>.
1270                 </p>
1271               </td>
1272 </tr>
1273 <tr>
1274 <td>
1275                 <p>
1276                   <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">const_iterator</span></code>
1277                 </p>
1278               </td>
1279 <td>
1280               </td>
1281 <td>
1282                 <p>
1283                   Returns an STL-compliant iterator type which dereferences to <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">const_reference</span></code>.
1284                 </p>
1285               </td>
1286 </tr>
1287 <tr>
1288 <td>
1289                 <p>
1290                   <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">has_threading_support</span></code>
1291                 </p>
1292               </td>
1293 <td>
1294                 <p>
1295                   bool
1296                 </p>
1297               </td>
1298 <td>
1299                 <p>
1300                   Static constexpr member. True, if storage supports parallel read-write
1301                   access to all cells. False, if such parallel access would either
1302                   cause data corruption or require synchronization so that effectively
1303                   only one cell can be accessed at a time, making cell-access single-threaded.
1304                 </p>
1305               </td>
1306 </tr>
1307 <tr>
1308 <td>
1309                 <p>
1310                   <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code>
1311                 </p>
1312               </td>
1313 <td>
1314                 <p>
1315                   <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span></code>
1316                 </p>
1317               </td>
1318 <td>
1319                 <p>
1320                   Const member function which returns the current number of cells
1321                   in the storage.
1322                 </p>
1323               </td>
1324 </tr>
1325 <tr>
1326 <td>
1327                 <p>
1328                   <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">reset</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span></code>
1329                 </p>
1330               </td>
1331 <td>
1332               </td>
1333 <td>
1334                 <p>
1335                   Non-const member function which discards current cell values, changes
1336                   storage size to <code class="computeroutput"><span class="identifier">n</span></code>
1337                   and initializes all cells to the default-constructed state.
1338                 </p>
1339               </td>
1340 </tr>
1341 <tr>
1342 <td>
1343                 <p>
1344                   <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span></code>
1345                 </p>
1346               </td>
1347 <td>
1348                 <p>
1349                   <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">iterator</span></code>
1350                 </p>
1351               </td>
1352 <td>
1353                 <p>
1354                   Non-const member function which returns the iterator to the first
1355                   storage cell.
1356                 </p>
1357               </td>
1358 </tr>
1359 <tr>
1360 <td>
1361                 <p>
1362                   <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span></code>
1363                 </p>
1364               </td>
1365 <td>
1366                 <p>
1367                   <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">const_iterator</span></code>
1368                 </p>
1369               </td>
1370 <td>
1371                 <p>
1372                   Likewise, but a const member function which returns the const_iterator.
1373                 </p>
1374               </td>
1375 </tr>
1376 <tr>
1377 <td>
1378                 <p>
1379                   <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></code>
1380                 </p>
1381               </td>
1382 <td>
1383                 <p>
1384                   <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">iterator</span></code>
1385                 </p>
1386               </td>
1387 <td>
1388                 <p>
1389                   Member function which returns the iterator to the cell after the
1390                   last valid storage cell.
1391                 </p>
1392               </td>
1393 </tr>
1394 <tr>
1395 <td>
1396                 <p>
1397                   <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></code>
1398                 </p>
1399               </td>
1400 <td>
1401                 <p>
1402                   <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">const_iterator</span></code>
1403                 </p>
1404               </td>
1405 <td>
1406                 <p>
1407                   Likewise, but a const member function which returns the const_iterator.
1408                 </p>
1409               </td>
1410 </tr>
1411 <tr>
1412 <td>
1413                 <p>
1414                   <code class="computeroutput"><span class="identifier">s</span><span class="special">[</span><span class="identifier">i</span><span class="special">]</span></code>
1415                 </p>
1416               </td>
1417 <td>
1418                 <p>
1419                   <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">reference</span></code>
1420                 </p>
1421               </td>
1422 <td>
1423                 <p>
1424                   Member function which returns a reference to the cell which is
1425                   addressed by <code class="computeroutput"><span class="identifier">i</span></code>.
1426                   The index <code class="computeroutput"><span class="identifier">i</span></code> must
1427                   be valid: <code class="computeroutput"><span class="identifier">i</span> <span class="special">&lt;</span>
1428                   <span class="identifier">s</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code>.
1429                 </p>
1430               </td>
1431 </tr>
1432 <tr>
1433 <td>
1434                 <p>
1435                   <code class="computeroutput"><span class="identifier">s</span><span class="special">[</span><span class="identifier">i</span><span class="special">]</span></code>
1436                 </p>
1437               </td>
1438 <td>
1439                 <p>
1440                   <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">const_reference</span></code>
1441                 </p>
1442               </td>
1443 <td>
1444                 <p>
1445                   Likewise, but a const member function which returns a const reference.
1446                 </p>
1447               </td>
1448 </tr>
1449 <tr>
1450 <td>
1451                 <p>
1452                   <code class="computeroutput"><span class="identifier">s</span> <span class="special">==</span>
1453                   <span class="identifier">t</span></code>
1454                 </p>
1455               </td>
1456 <td>
1457                 <p>
1458                   <code class="computeroutput"><span class="keyword">bool</span></code>
1459                 </p>
1460               </td>
1461 <td>
1462                 <p>
1463                   <code class="computeroutput"><span class="identifier">t</span></code> is another value
1464                   of a type which meets the requirements of <span class="bold"><strong>Storage</strong></span>.
1465                   Returns <code class="computeroutput"><span class="keyword">true</span></code> if arguments
1466                   have the same number of cells and all cells compare equal. Otherwise
1467                   returns <code class="computeroutput"><span class="keyword">false</span></code>.
1468                 </p>
1469               </td>
1470 </tr>
1471 <tr>
1472 <td>
1473                 <p>
1474                   <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">get_allocator</span><span class="special">()</span></code>
1475                 </p>
1476               </td>
1477 <td>
1478                 <p>
1479                   <code class="computeroutput"><span class="identifier">Alloc</span></code>
1480                 </p>
1481               </td>
1482 <td>
1483                 <p>
1484                   Const member function which returns the allocator <code class="computeroutput"><span class="identifier">Alloc</span></code> used by <code class="computeroutput"><span class="identifier">S</span></code>.
1485                   May be omitted if <code class="computeroutput"><span class="identifier">S</span></code>
1486                   does not use allocators. If this member function exists, also a
1487                   special constructor must exists so that <code class="computeroutput"><span class="identifier">S</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">get_allocator</span><span class="special">())</span></code> is a valid expression.
1488                 </p>
1489               </td>
1490 </tr>
1491 </tbody>
1492 </table></div>
1493 </div>
1494 <br class="table-break"><h5>
1495 <a name="histogram.concepts.Storage.h1"></a>
1496         <span class="phrase"><a name="histogram.concepts.Storage.optional_features"></a></span><a class="link" href="concepts.html#histogram.concepts.Storage.optional_features">Optional
1497         features</a>
1498       </h5>
1499 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1500 <li class="listitem">
1501             <code class="computeroutput"><span class="identifier">S</span></code> is a type meeting the
1502             requirements of <span class="bold"><strong>Storage</strong></span>
1503           </li>
1504 <li class="listitem">
1505             <code class="computeroutput"><span class="identifier">s</span></code> is a value of types
1506             <code class="computeroutput"><span class="identifier">S</span></code>
1507           </li>
1508 <li class="listitem">
1509             <code class="computeroutput"><span class="identifier">x</span></code> is convertible to
1510             <code class="computeroutput"><span class="keyword">double</span></code>
1511           </li>
1512 <li class="listitem">
1513             <code class="computeroutput"><span class="identifier">ar</span></code> is a value of an archive
1514             with Boost.Serialization semantics
1515           </li>
1516 </ul></div>
1517 <div class="table">
1518 <a name="histogram.concepts.Storage.valid_expressions0"></a><p class="title"><b>Table&#160;1.8.&#160;Valid expressions</b></p>
1519 <div class="table-contents"><table class="table" summary="Valid expressions">
1520 <colgroup>
1521 <col>
1522 <col>
1523 <col>
1524 </colgroup>
1525 <thead><tr>
1526 <th>
1527                 <p>
1528                   Expression
1529                 </p>
1530               </th>
1531 <th>
1532                 <p>
1533                   Returns
1534                 </p>
1535               </th>
1536 <th>
1537                 <p>
1538                   Semantics, Pre/Post-conditions
1539                 </p>
1540               </th>
1541 </tr></thead>
1542 <tbody>
1543 <tr>
1544 <td>
1545                 <p>
1546                   <code class="computeroutput"><span class="identifier">s</span> <span class="special">*=</span>
1547                   <span class="identifier">x</span></code>
1548                 </p>
1549               </td>
1550 <td>
1551                 <p>
1552                   <code class="computeroutput"><span class="identifier">S</span><span class="special">&amp;</span></code>
1553                 </p>
1554               </td>
1555 <td>
1556                 <p>
1557                   Scales all cell values by the factor <code class="computeroutput"><span class="identifier">x</span></code>
1558                   and returns a reference to self.
1559                 </p>
1560               </td>
1561 </tr>
1562 <tr>
1563 <td>
1564                 <p>
1565                   <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">serialize</span><span class="special">(</span><span class="identifier">ar</span><span class="special">,</span>
1566                   <span class="identifier">n</span><span class="special">)</span></code>
1567                 </p>
1568               </td>
1569 <td>
1570               </td>
1571 <td>
1572                 <p>
1573                   <code class="computeroutput"><span class="identifier">ar</span></code> is a value of
1574                   an archive with Boost.Serialization semantics and <code class="computeroutput"><span class="identifier">n</span></code> is an unsigned integral value.
1575                   Saves to the archive or loads serialized state from the archive.
1576                   The version number <code class="computeroutput"><span class="identifier">n</span></code>
1577                   is the stored version when the object is loaded or the current
1578                   version when the object is saved.
1579                 </p>
1580               </td>
1581 </tr>
1582 </tbody>
1583 </table></div>
1584 </div>
1585 <br class="table-break"><h5>
1586 <a name="histogram.concepts.Storage.h2"></a>
1587         <span class="phrase"><a name="histogram.concepts.Storage.models"></a></span><a class="link" href="concepts.html#histogram.concepts.Storage.models">Models</a>
1588       </h5>
1589 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1590 <li class="listitem">
1591             <code class="computeroutput"><a class="link" href="../boost/histogram/unlimited_storage.html" title="Class template unlimited_storage">boost::histogram::unlimited_storage</a></code>
1592           </li>
1593 <li class="listitem">
1594             <code class="computeroutput"><a class="link" href="../boost/histogram/storage_adaptor.html" title="Class template storage_adaptor">boost::histogram::storage_adaptor</a></code>
1595           </li>
1596 <li class="listitem">
1597             <code class="computeroutput"><a class="link" href="reference.html#boost.histogram.dense_storage">boost::histogram::dense_storage</a></code>
1598           </li>
1599 <li class="listitem">
1600             <code class="computeroutput"><a class="link" href="reference.html#boost.histogram.weight_storage">boost::histogram::weight_storage</a></code>
1601           </li>
1602 <li class="listitem">
1603             <code class="computeroutput"><a class="link" href="reference.html#boost.histogram.profile_storage">boost::histogram::profile_storage</a></code>
1604           </li>
1605 <li class="listitem">
1606             <code class="computeroutput"><a class="link" href="reference.html#boost.histogram.weighted_profile_storage">boost::histogram::weighted_profile_storage</a></code>
1607           </li>
1608 </ul></div>
1609 </div>
1610 <div class="section">
1611 <div class="titlepage"><div><div><h3 class="title">
1612 <a name="histogram.concepts.Accumulator"></a><a class="link" href="concepts.html#histogram.concepts.Accumulator" title="Accumulator">Accumulator</a>
1613 </h3></div></div></div>
1614 <p>
1615         An <span class="bold"><strong>Accumulator</strong></span> is a functor which consumes
1616         the argument to update some internal state. The state can be read with member
1617         functions or free functions. Must be <a href="https://en.cppreference.com/w/cpp/named_req/DefaultConstructible" target="_top">DefaultConstructible</a>,
1618         <a href="https://en.cppreference.com/w/cpp/named_req/CopyConstructible" target="_top">CopyConstructible</a>,
1619         and <a href="https://en.cppreference.com/w/cpp/named_req/CopyAssignable" target="_top">CopyAssignable</a>.
1620       </p>
1621 <h5>
1622 <a name="histogram.concepts.Accumulator.h0"></a>
1623         <span class="phrase"><a name="histogram.concepts.Accumulator.required_features"></a></span><a class="link" href="concepts.html#histogram.concepts.Accumulator.required_features">Required
1624         features</a>
1625       </h5>
1626 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1627 <li class="listitem">
1628             <code class="computeroutput"><span class="identifier">A</span></code> is a type meeting the
1629             requirements of <span class="bold"><strong>Accumulator</strong></span>
1630           </li>
1631 <li class="listitem">
1632             <code class="computeroutput"><span class="identifier">a</span></code> and <code class="computeroutput"><span class="identifier">b</span></code>
1633             are values of type <code class="computeroutput"><span class="identifier">A</span></code>
1634           </li>
1635 <li class="listitem">
1636             <code class="computeroutput"><span class="identifier">ts</span><span class="special">...</span></code>
1637             is a pack of values of arbitrary types
1638           </li>
1639 </ul></div>
1640 <div class="table">
1641 <a name="histogram.concepts.Accumulator.valid_expressions"></a><p class="title"><b>Table&#160;1.9.&#160;Valid expressions</b></p>
1642 <div class="table-contents"><table class="table" summary="Valid expressions">
1643 <colgroup>
1644 <col>
1645 <col>
1646 <col>
1647 </colgroup>
1648 <thead><tr>
1649 <th>
1650                 <p>
1651                   Expression
1652                 </p>
1653               </th>
1654 <th>
1655                 <p>
1656                   Returns
1657                 </p>
1658               </th>
1659 <th>
1660                 <p>
1661                   Semantics, Pre/Post-conditions
1662                 </p>
1663               </th>
1664 </tr></thead>
1665 <tbody>
1666 <tr>
1667 <td>
1668                 <p>
1669                   <code class="computeroutput"><span class="identifier">a</span><span class="special">(</span><span class="identifier">ts</span><span class="special">...)</span></code>
1670                   or <code class="computeroutput"><span class="special">++</span><span class="identifier">a</span></code>
1671                 </p>
1672               </td>
1673 <td>
1674               </td>
1675 <td>
1676                 <p>
1677                   Either a call operator accepting a fixed number of arguments must
1678                   be implemented, or the pre-increment operator. The call operator
1679                   may not be templated and not overloaded, except to support weights
1680                   as described under optional features.
1681                 </p>
1682               </td>
1683 </tr>
1684 <tr>
1685 <td>
1686                 <p>
1687                   <code class="computeroutput"><span class="identifier">a</span> <span class="special">==</span>
1688                   <span class="identifier">b</span></code>
1689                 </p>
1690               </td>
1691 <td>
1692                 <p>
1693                   <code class="computeroutput"><span class="keyword">bool</span></code>
1694                 </p>
1695               </td>
1696 <td>
1697                 <p>
1698                   Returns <code class="computeroutput"><span class="keyword">true</span></code> if all
1699                   state variables compare equal. Otherwise returns <code class="computeroutput"><span class="keyword">false</span></code>.
1700                 </p>
1701               </td>
1702 </tr>
1703 <tr>
1704 <td>
1705                 <p>
1706                   <code class="computeroutput"><span class="identifier">a</span> <span class="special">!=</span>
1707                   <span class="identifier">b</span></code>
1708                 </p>
1709               </td>
1710 <td>
1711                 <p>
1712                   <code class="computeroutput"><span class="keyword">bool</span></code>
1713                 </p>
1714               </td>
1715 <td>
1716                 <p>
1717                   Must be implemented if <code class="computeroutput"><span class="identifier">a</span>
1718                   <span class="special">==</span> <span class="identifier">b</span></code>
1719                   is implemented and must be equal to <code class="computeroutput"><span class="special">!(</span><span class="identifier">a</span> <span class="special">==</span>
1720                   <span class="identifier">b</span><span class="special">)</span></code>.
1721                 </p>
1722               </td>
1723 </tr>
1724 </tbody>
1725 </table></div>
1726 </div>
1727 <br class="table-break"><h5>
1728 <a name="histogram.concepts.Accumulator.h1"></a>
1729         <span class="phrase"><a name="histogram.concepts.Accumulator.optional_features"></a></span><a class="link" href="concepts.html#histogram.concepts.Accumulator.optional_features">Optional
1730         features</a>
1731       </h5>
1732 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1733 <li class="listitem">
1734             <code class="computeroutput"><span class="identifier">A</span></code> is a type meeting the
1735             requirements of <span class="bold"><strong>Accumulator</strong></span>
1736           </li>
1737 <li class="listitem">
1738             <code class="computeroutput"><span class="identifier">a</span></code> and <code class="computeroutput"><span class="identifier">b</span></code>
1739             are values of type <code class="computeroutput"><span class="identifier">A</span></code>
1740           </li>
1741 <li class="listitem">
1742             <code class="computeroutput"><span class="identifier">w</span></code> is a value of type
1743             <code class="computeroutput"><a class="link" href="../boost/histogram/weight_type.html" title="Struct template weight_type">boost::histogram::weight_type</a></code>,
1744             where <code class="computeroutput"><span class="identifier">T</span></code> is a number type
1745           </li>
1746 <li class="listitem">
1747             <code class="computeroutput"><span class="identifier">ts</span><span class="special">...</span></code>
1748             is a pack of values of arbitrary types
1749           </li>
1750 <li class="listitem">
1751             <code class="computeroutput"><span class="identifier">v</span></code> is a number value (integral
1752             or floating point)
1753           </li>
1754 </ul></div>
1755 <div class="table">
1756 <a name="histogram.concepts.Accumulator.valid_expressions0"></a><p class="title"><b>Table&#160;1.10.&#160;Valid expressions</b></p>
1757 <div class="table-contents"><table class="table" summary="Valid expressions">
1758 <colgroup>
1759 <col>
1760 <col>
1761 <col>
1762 </colgroup>
1763 <thead><tr>
1764 <th>
1765                 <p>
1766                   Expression
1767                 </p>
1768               </th>
1769 <th>
1770                 <p>
1771                   Return
1772                 </p>
1773               </th>
1774 <th>
1775                 <p>
1776                   Semantics, Pre/Post-conditions
1777                 </p>
1778               </th>
1779 </tr></thead>
1780 <tbody>
1781 <tr>
1782 <td>
1783                 <p>
1784                   <code class="computeroutput"><span class="identifier">a</span> <span class="special">+=</span>
1785                   <span class="identifier">v</span></code> or <code class="computeroutput"><span class="identifier">a</span><span class="special">(</span><span class="identifier">w</span><span class="special">,</span> <span class="identifier">ts</span><span class="special">...)</span></code>
1786                 </p>
1787               </td>
1788 <td>
1789               </td>
1790 <td>
1791                 <p>
1792                   Does a weighted fill of the accumulator. Use this to implement
1793                   weight support for an accumulator that is normally filled with
1794                   <code class="computeroutput"><span class="special">++</span><span class="identifier">a</span></code>
1795                   or <code class="computeroutput"><span class="identifier">a</span><span class="special">(</span><span class="identifier">ts</span><span class="special">...)</span></code>,
1796                   respectively. Only the corresponding matching form may be implemented:
1797                   <code class="computeroutput"><span class="identifier">a</span> <span class="special">+=</span>
1798                   <span class="identifier">v</span></code> for <code class="computeroutput"><span class="special">++</span><span class="identifier">a</span></code>, <code class="computeroutput"><span class="identifier">a</span><span class="special">(</span><span class="identifier">w</span><span class="special">,</span> <span class="identifier">ts</span><span class="special">...)</span></code> for <code class="computeroutput"><span class="identifier">a</span><span class="special">(</span><span class="identifier">ts</span><span class="special">...)</span></code>. The implementations may not
1799                   be templated and not overloaded.
1800                 </p>
1801               </td>
1802 </tr>
1803 <tr>
1804 <td>
1805                 <p>
1806                   <code class="computeroutput"><span class="identifier">a</span> <span class="special">+=</span>
1807                   <span class="identifier">b</span></code>
1808                 </p>
1809               </td>
1810 <td>
1811                 <p>
1812                   <code class="computeroutput"><span class="identifier">A</span><span class="special">&amp;</span></code>
1813                 </p>
1814               </td>
1815 <td>
1816                 <p>
1817                   Adds a second accumulator <code class="computeroutput"><span class="identifier">b</span></code>
1818                   of type <code class="computeroutput"><span class="identifier">A</span></code>. The
1819                   result must be the same as if <code class="computeroutput"><span class="identifier">a</span></code>
1820                   had been filled with all arguments of <code class="computeroutput"><span class="identifier">b</span></code>.
1821                 </p>
1822               </td>
1823 </tr>
1824 <tr>
1825 <td>
1826                 <p>
1827                   <code class="computeroutput"><span class="identifier">a</span> <span class="special">*=</span>
1828                   <span class="identifier">x</span></code>
1829                 </p>
1830               </td>
1831 <td>
1832                 <p>
1833                   <code class="computeroutput"><span class="identifier">A</span><span class="special">&amp;</span></code>
1834                 </p>
1835               </td>
1836 <td>
1837                 <p>
1838                   Scales the accumulator state by the real value <code class="computeroutput"><span class="identifier">x</span></code>.
1839                   The result must be the same as if <code class="computeroutput"><span class="identifier">a</span></code>
1840                   had been filled with all arguments scaled by <code class="computeroutput"><span class="identifier">x</span></code>.
1841                 </p>
1842               </td>
1843 </tr>
1844 <tr>
1845 <td>
1846                 <p>
1847                   <code class="computeroutput"><span class="identifier">os</span> <span class="special">&lt;&lt;</span>
1848                   <span class="identifier">a</span></code>
1849                 </p>
1850               </td>
1851 <td>
1852                 <p>
1853                   <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span>
1854                   <span class="identifier">Traits</span><span class="special">&gt;&amp;</span></code>
1855                 </p>
1856               </td>
1857 <td>
1858                 <p>
1859                   <code class="computeroutput"><span class="identifier">os</span></code> is a value of
1860                   type <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span>
1861                   <span class="identifier">Traits</span><span class="special">&gt;</span></code>.
1862                   Streams a text representation of the axis. May not mutate <code class="computeroutput"><span class="identifier">a</span></code>.
1863                 </p>
1864               </td>
1865 </tr>
1866 <tr>
1867 <td>
1868                 <p>
1869                   <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">serialize</span><span class="special">(</span><span class="identifier">ar</span><span class="special">,</span>
1870                   <span class="identifier">n</span><span class="special">)</span></code>
1871                 </p>
1872               </td>
1873 <td>
1874               </td>
1875 <td>
1876                 <p>
1877                   <code class="computeroutput"><span class="identifier">ar</span></code> is a value of
1878                   an archive with Boost.Serialization semantics and <code class="computeroutput"><span class="identifier">n</span></code> is an unsigned integral value.
1879                   Saves to the archive or loads serialized state from the archive.
1880                   The version number <code class="computeroutput"><span class="identifier">n</span></code>
1881                   is the stored version when the object is loaded or the current
1882                   version when the object is saved.
1883                 </p>
1884               </td>
1885 </tr>
1886 </tbody>
1887 </table></div>
1888 </div>
1889 <br class="table-break"><h5>
1890 <a name="histogram.concepts.Accumulator.h2"></a>
1891         <span class="phrase"><a name="histogram.concepts.Accumulator.models"></a></span><a class="link" href="concepts.html#histogram.concepts.Accumulator.models">Models</a>
1892       </h5>
1893 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1894 <li class="listitem">
1895             <code class="computeroutput"><a class="link" href="../boost/histogram/accumulators/sum.html" title="Class template sum">boost::histogram::accumulators::sum</a></code>
1896           </li>
1897 <li class="listitem">
1898             <code class="computeroutput"><a class="link" href="../boost/histogram/accumulators/weighted_sum.html" title="Class template weighted_sum">boost::histogram::accumulators::weighted_sum</a></code>
1899           </li>
1900 <li class="listitem">
1901             <code class="computeroutput"><a class="link" href="../boost/histogram/accumulators/mean.html" title="Class template mean">boost::histogram::accumulators::mean</a></code>
1902           </li>
1903 <li class="listitem">
1904             <code class="computeroutput"><a class="link" href="../boost/histogram/accumulators/weighted_mean.html" title="Class template weighted_mean">boost::histogram::accumulators::weighted_mean</a></code>
1905           </li>
1906 </ul></div>
1907 </div>
1908 </div>
1909 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
1910 <td align="left"></td>
1911 <td align="right"><div class="copyright-footer">Copyright &#169; 2016-2019 Hans
1912       Dembinski<p>
1913         Distributed under the Boost Software License, Version 1.0. (See accompanying
1914         file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
1915       </p>
1916 </div></td>
1917 </tr></table>
1918 <hr>
1919 <div class="spirit-nav">
1920 <a accesskey="p" href="benchmarks.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="reference.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
1921 </div>
1922 </body>
1923 </html>