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 1. Boost.Histogram">
8 <link rel="up" href="../index.html" title="Chapter 1. Boost.Histogram">
9 <link rel="prev" href="benchmarks.html" title="Benchmarks">
10 <link rel="next" href="reference.html" title="Reference">
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>
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>
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>
38 Users can extend the library with various new types whose concepts are defined
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>
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>.
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
57 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
59 <a class="link" href="concepts.html#histogram.concepts.DiscreteAxis" title="DiscreteAxis"><span class="bold"><strong>DiscreteAxis</strong></span></a>
62 <a class="link" href="concepts.html#histogram.concepts.IntervalAxis" title="IntervalAxis"><span class="bold"><strong>IntervalAxis</strong></span></a>
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
70 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
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>
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>
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 <boost/histogram/fwd.hpp>">boost::histogram::axis::index_type</a></code>
84 <a name="histogram.concepts.Axis.valid_expressions"></a><p class="title"><b>Table 1.1. Valid expressions</b></p>
85 <div class="table-contents"><table class="table" summary="Valid expressions">
104 Semantics, Pre/Post-conditions
112 <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code>
117 <code class="computeroutput"><span class="identifier">I</span></code>
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.
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>
138 <code class="computeroutput"><span class="identifier">I</span></code>
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>.
157 <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">get_allocator</span><span class="special">()</span></code>
162 <code class="computeroutput"><span class="identifier">Alloc</span></code>
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.
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
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>
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>
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 <boost/histogram/fwd.hpp>">boost::histogram::axis::index_type</a></code>
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>.
203 <a name="histogram.concepts.Axis.valid_expressions0"></a><p class="title"><b>Table 1.2. Valid expressions</b></p>
204 <div class="table-contents"><table class="table" summary="Valid expressions">
223 Semantics, Pre/Post-conditions
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>
236 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span><span class="identifier">I</span><span class="special">,</span>
237 <span class="identifier">I</span><span class="special">></span></code>
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>.
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>
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.
285 <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">options</span><span class="special">()</span></code>
290 <code class="computeroutput"><span class="keyword">unsigned</span></code>
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 <boost/histogram/axis/option.hpp>">axis options</a></code>
303 <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">inclusive</span><span class="special">()</span></code>
308 <code class="computeroutput"><span class="keyword">bool</span></code>
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.
326 <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">metadata</span><span class="special">()</span></code>
331 <code class="computeroutput"><span class="keyword">const</span> <span class="identifier">M</span><span class="special">&</span></code>
336 Const member function which returns a const reference to the metadata
337 associated with the axis (usually a string).
344 <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">metadata</span><span class="special">()</span></code>
349 <code class="computeroutput"><span class="identifier">M</span><span class="special">&</span></code>
354 Likewise, but non-const member function which returns a reference
355 to the metadata. If this member function exists, also the previous
363 <code class="computeroutput"><span class="identifier">a</span> <span class="special">==</span>
364 <span class="identifier">b</span></code>
369 <code class="computeroutput"><span class="keyword">bool</span></code>
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.
389 <code class="computeroutput"><span class="identifier">a</span> <span class="special">!=</span>
390 <span class="identifier">b</span></code>
395 <code class="computeroutput"><span class="keyword">bool</span></code>
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>.
410 <code class="computeroutput"><span class="identifier">os</span> <span class="special"><<</span>
411 <span class="identifier">a</span></code>
416 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">CharT</span><span class="special">,</span>
417 <span class="identifier">Traits</span><span class="special">>&</span></code>
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"><</span><span class="identifier">CharT</span><span class="special">,</span>
424 <span class="identifier">Traits</span><span class="special">></span></code>.
425 Streams a text representation of the axis. May not mutate <code class="computeroutput"><span class="identifier">a</span></code>.
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>
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.
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>
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>
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>
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>
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>
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>
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.
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
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>
491 <li class="listitem">
492 <a class="link" href="concepts.html#histogram.concepts.IntervalAxis" title="IntervalAxis"><span class="bold"><strong>IntervalAxis</strong></span></a>
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>
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>
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>
508 <li class="listitem">
509 <code class="computeroutput"><span class="identifier">V</span></code> is the type accepted
510 for conversion into an index
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>
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 <boost/histogram/fwd.hpp>">boost::histogram::axis::index_type</a></code>
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>
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>
530 <a name="histogram.concepts.DiscreteAxis.valid_expressions"></a><p class="title"><b>Table 1.3. Valid expressions</b></p>
531 <div class="table-contents"><table class="table" summary="Valid expressions">
550 Semantics, Pre/Post-conditions
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>
563 <code class="computeroutput"><span class="identifier">V</span></code>
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.
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>
584 <code class="computeroutput"><span class="identifier">V</span></code>
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>.
596 <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span></code>
601 <code class="computeroutput"><span class="identifier">AxisIter</span></code>
606 Const member function which return an iterator to the bin with
607 index <code class="computeroutput"><span class="number">0</span></code>.
614 <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></code>
619 <code class="computeroutput"><span class="identifier">AxisIter</span></code>
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>.
632 <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">rbegin</span><span class="special">()</span></code>
637 <code class="computeroutput"><span class="identifier">ReAxisIter</span></code>
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>.
650 <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">rend</span><span class="special">()</span></code>
655 <code class="computeroutput"><span class="identifier">ReAxisIter</span></code>
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>.
668 <br class="table-break"><div class="tip"><table border="0" summary="Tip">
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>
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>.
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>
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>
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 <boost/histogram/fwd.hpp>">boost::histogram::index_type</a></code>
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>
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.
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
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>
713 <li class="listitem">
714 <a class="link" href="concepts.html#histogram.concepts.DiscreteAxis" title="DiscreteAxis"><span class="bold"><strong>DiscreteAxis</strong></span></a>
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>
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>
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>
730 <li class="listitem">
731 <code class="computeroutput"><span class="identifier">V</span></code> is the type accepted
732 for conversion into an index
734 <li class="listitem">
735 <code class="computeroutput"><span class="identifier">B</span></code> is the type that represents
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>
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 <boost/histogram/fwd.hpp>">boost::histogram::axis::index_type</a></code>
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 <boost/histogram/fwd.hpp>">boost::histogram::axis::real_index_type</a></code>
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>
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>
760 <a name="histogram.concepts.IntervalAxis.valid_expressions"></a><p class="title"><b>Table 1.4. Valid expressions</b></p>
761 <div class="table-contents"><table class="table" summary="Valid expressions">
780 Semantics, Pre/Post-conditions
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>
793 <code class="computeroutput"><span class="identifier">V</span></code>
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.
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>
820 <code class="computeroutput"><span class="identifier">B</span></code>
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
837 <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span></code>
842 <code class="computeroutput"><span class="identifier">AxisIter</span></code>
847 Const member function which return an iterator to the bin with
848 index <code class="computeroutput"><span class="number">0</span></code>.
855 <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></code>
860 <code class="computeroutput"><span class="identifier">AxisIter</span></code>
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>.
873 <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">rbegin</span><span class="special">()</span></code>
878 <code class="computeroutput"><span class="identifier">ReAxisIter</span></code>
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>.
891 <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">rend</span><span class="special">()</span></code>
896 <code class="computeroutput"><span class="identifier">ReAxisIter</span></code>
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>.
909 <br class="table-break"><div class="tip"><table border="0" summary="Tip">
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>
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>.
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>
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>
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>
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
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>
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>.
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
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>
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>
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
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>
972 <li class="listitem">
973 <code class="computeroutput"><span class="identifier">Y</span></code> is a floating-point
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>
982 <a name="histogram.concepts.Transform.valid_expressions"></a><p class="title"><b>Table 1.5. Valid expressions</b></p>
983 <div class="table-contents"><table class="table" summary="Valid expressions">
1002 Semantics, Pre/Post-conditions
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>
1015 <code class="computeroutput"><span class="identifier">Y</span></code>
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>.
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>
1033 <code class="computeroutput"><span class="identifier">X</span></code>
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
1048 <code class="computeroutput"><span class="identifier">t</span> <span class="special">==</span>
1049 <span class="identifier">u</span></code>
1054 <code class="computeroutput"><span class="keyword">bool</span></code>
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
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
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>
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>
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
1093 <a name="histogram.concepts.Transform.valid_expressions0"></a><p class="title"><b>Table 1.6. Valid expressions</b></p>
1094 <div class="table-contents"><table class="table" summary="Valid expressions">
1113 Semantics, Pre/Post-conditions
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>
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.
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>
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>
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>
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>
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>
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>
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>.
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
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>
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>
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>
1189 <a name="histogram.concepts.Storage.valid_expressions"></a><p class="title"><b>Table 1.7. Valid expressions</b></p>
1190 <div class="table-contents"><table class="table" summary="Valid expressions">
1209 Semantics, Pre/Post-conditions
1217 <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">value_type</span></code>
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>.
1232 <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">reference</span></code>
1239 <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">value_type</span><span class="special">&</span></code>
1240 or a proxy class which acts like a reference.
1247 <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">const_reference</span></code>
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">&</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>.
1262 <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">iterator</span></code>
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>.
1276 <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">const_iterator</span></code>
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>.
1290 <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">has_threading_support</span></code>
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.
1310 <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code>
1315 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span></code>
1320 Const member function which returns the current number of cells
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>
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.
1344 <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span></code>
1349 <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">iterator</span></code>
1354 Non-const member function which returns the iterator to the first
1362 <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span></code>
1367 <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">const_iterator</span></code>
1372 Likewise, but a const member function which returns the const_iterator.
1379 <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></code>
1384 <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">iterator</span></code>
1389 Member function which returns the iterator to the cell after the
1390 last valid storage cell.
1397 <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></code>
1402 <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">const_iterator</span></code>
1407 Likewise, but a const member function which returns the const_iterator.
1414 <code class="computeroutput"><span class="identifier">s</span><span class="special">[</span><span class="identifier">i</span><span class="special">]</span></code>
1419 <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">reference</span></code>
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"><</span>
1428 <span class="identifier">s</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code>.
1435 <code class="computeroutput"><span class="identifier">s</span><span class="special">[</span><span class="identifier">i</span><span class="special">]</span></code>
1440 <code class="computeroutput"><span class="identifier">S</span><span class="special">::</span><span class="identifier">const_reference</span></code>
1445 Likewise, but a const member function which returns a const reference.
1452 <code class="computeroutput"><span class="identifier">s</span> <span class="special">==</span>
1453 <span class="identifier">t</span></code>
1458 <code class="computeroutput"><span class="keyword">bool</span></code>
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>.
1474 <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">get_allocator</span><span class="special">()</span></code>
1479 <code class="computeroutput"><span class="identifier">Alloc</span></code>
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.
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
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>
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>
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>
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
1518 <a name="histogram.concepts.Storage.valid_expressions0"></a><p class="title"><b>Table 1.8. Valid expressions</b></p>
1519 <div class="table-contents"><table class="table" summary="Valid expressions">
1538 Semantics, Pre/Post-conditions
1546 <code class="computeroutput"><span class="identifier">s</span> <span class="special">*=</span>
1547 <span class="identifier">x</span></code>
1552 <code class="computeroutput"><span class="identifier">S</span><span class="special">&</span></code>
1557 Scales all cell values by the factor <code class="computeroutput"><span class="identifier">x</span></code>
1558 and returns a reference to self.
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>
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.
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>
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>
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>
1596 <li class="listitem">
1597 <code class="computeroutput"><a class="link" href="reference.html#boost.histogram.dense_storage">boost::histogram::dense_storage</a></code>
1599 <li class="listitem">
1600 <code class="computeroutput"><a class="link" href="reference.html#boost.histogram.weight_storage">boost::histogram::weight_storage</a></code>
1602 <li class="listitem">
1603 <code class="computeroutput"><a class="link" href="reference.html#boost.histogram.profile_storage">boost::histogram::profile_storage</a></code>
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>
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>
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>.
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
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>
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>
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
1641 <a name="histogram.concepts.Accumulator.valid_expressions"></a><p class="title"><b>Table 1.9. Valid expressions</b></p>
1642 <div class="table-contents"><table class="table" summary="Valid expressions">
1661 Semantics, Pre/Post-conditions
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>
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.
1687 <code class="computeroutput"><span class="identifier">a</span> <span class="special">==</span>
1688 <span class="identifier">b</span></code>
1693 <code class="computeroutput"><span class="keyword">bool</span></code>
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>.
1706 <code class="computeroutput"><span class="identifier">a</span> <span class="special">!=</span>
1707 <span class="identifier">b</span></code>
1712 <code class="computeroutput"><span class="keyword">bool</span></code>
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>.
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
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>
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>
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
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
1750 <li class="listitem">
1751 <code class="computeroutput"><span class="identifier">v</span></code> is a number value (integral
1756 <a name="histogram.concepts.Accumulator.valid_expressions0"></a><p class="title"><b>Table 1.10. Valid expressions</b></p>
1757 <div class="table-contents"><table class="table" summary="Valid expressions">
1776 Semantics, Pre/Post-conditions
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>
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.
1806 <code class="computeroutput"><span class="identifier">a</span> <span class="special">+=</span>
1807 <span class="identifier">b</span></code>
1812 <code class="computeroutput"><span class="identifier">A</span><span class="special">&</span></code>
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>.
1827 <code class="computeroutput"><span class="identifier">a</span> <span class="special">*=</span>
1828 <span class="identifier">x</span></code>
1833 <code class="computeroutput"><span class="identifier">A</span><span class="special">&</span></code>
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>.
1847 <code class="computeroutput"><span class="identifier">os</span> <span class="special"><<</span>
1848 <span class="identifier">a</span></code>
1853 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">CharT</span><span class="special">,</span>
1854 <span class="identifier">Traits</span><span class="special">>&</span></code>
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"><</span><span class="identifier">CharT</span><span class="special">,</span>
1861 <span class="identifier">Traits</span><span class="special">></span></code>.
1862 Streams a text representation of the axis. May not mutate <code class="computeroutput"><span class="identifier">a</span></code>.
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>
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.
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>
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>
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>
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>
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>
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 © 2016-2019 Hans
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)
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>