Files
safe_numerics/doc/boostbook/safe_unsigned_range.xml
Robert Ramey 12f5843f90 Fixed problems in testing addition operations
More carefully defined the concepts.  That is the concept of the library is now clear:

Trap at either compile or runtime integer operations which yield a result which differs from the normal arithmetic result.

Pending on this check in:
a) only addition is fixed up so far
b) uses BOOST_TYPEOF... rather than decltype(... - final decision sill pending.
c) comments out some compile time checks which should be re-instated.
d) fixed tests so that they actually work!
2014-04-05 12:22:25 -07:00

113 lines
3.0 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE section PUBLIC "-//Boost//DTD BoostBook XML V1.1//EN"
"http://www.boost.org/tools/boostbook/dtd/boostbook.dtd">
<section id="safe_numerics.safe_unsigned_range">
<title>safe_unsigned_range&lt;MIN, MAX&gt;</title>
<section>
<title>Description</title>
<para>This type holds a integer in the range [MIN, MAX]. It will throw a
<code>std::out_of_range</code> exception for any operation which would
result in assigning an integer value outside of this range. </para>
</section>
<section>
<title>Template Parameters</title>
<informaltable>
<tgroup cols="3">
<colspec align="left"/>
<colspec align="left" colwidth="3*"/>
<colspec align="left" colwidth="3*"/>
<thead>
<row>
<entry align="left">Parameter</entry>
<entry align="left">Requirements</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry><code>MIN</code></entry>
<entry>must be a positive integer literal</entry>
<entry>The minimum integer value that this type may hold</entry>
</row>
<row>
<entry><code>MAX</code></entry>
<entry>must be a positive integer literal</entry>
<entry>The maximum integer value that this type may hold</entry>
</row>
<row>
<entry><code/></entry>
<entry>MIN &lt; MAX</entry>
<entry/>
</row>
</tbody>
</tgroup>
</informaltable>
</section>
<section>
<title>Model of</title>
<para><link linkend="safe_numerics.numeric">Numeric</link></para>
<para>The usage of this type in an arithmetic expression with another
unsigned type will result in another unsigned type fulfilling the <link
linkend="safe_numerics.numeric">Numeric</link> concept. This will be the
smallest unsigned integer type of sufficient size to hold the result of
the operation. </para>
</section>
<section>
<title>Header</title>
<para><filename><ulink url="../../include/safe_range.hpp">#include
&lt;safe/numeric/safe_range.hpp&gt;</ulink></filename></para>
</section>
<section>
<title>Example of use</title>
<programlisting>#include &lt;safe/numeric/safe_range.hpp&gt;
void f(){
boost::numeric::safe_unsigned_range&lt;7, 24&gt; i;
i = 0; // throws out_of_range exception
i = 9; // ok
i *= 9; // throws out_of_range exception
i = -1; // throws out_of_range exception
std::uint8_t j = 4;
auto k = i + j;
// since i can vary between 7 and 24 and j can vary between 0 and 255
// the smallest unsigned integer which can hold the result std::uint16_t
// j will be of type std::uint16_t
}</programlisting>
</section>
<section>
<title>See Also</title>
<para><code>std::out_of_range</code></para>
<para><code>safe_signed_range</code></para>
</section>
</section>