boost/libs/safe_numerics/doc/html/integer.html
2021-10-05 21:37:46 +02:00

193 lines
8.3 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Integer&lt;T&gt;</title>
<link rel="stylesheet" href="boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="index.html" title="Safe Numerics">
<link rel="up" href="concepts.html" title="Type Requirements">
<link rel="prev" href="numeric.html" title="Numeric&lt;T&gt;">
<link rel="next" href="safe_numeric_concept.html" title="SafeNumeric&lt;T&gt;">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img href="index.html" height="164px" src="pre-boost.jpg" alt="Library Documentation Index"></td>
<td><h2>Safe Numerics</h2></td>
</tr></table>
<div class="spirit-nav">
<a accesskey="p" href="numeric.html"><img src="images/prev.png" alt="Prev"></a><a accesskey="u" href="concepts.html"><img src="images/up.png" alt="Up"></a><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a><a accesskey="n" href="safe_numeric_concept.html"><img src="images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="safe_numerics.integer"></a>Integer&lt;T&gt;</h3></div></div></div>
<div class="toc"><dl class="toc">
<dt><span class="section"><a href="integer.html#idm488720628192">Description</a></span></dt>
<dt><span class="section"><a href="integer.html#idm488720620752">Refinement of</a></span></dt>
<dt><span class="section"><a href="integer.html#idm488720618976">Notation</a></span></dt>
<dt><span class="section"><a href="integer.html#idm488720611600">Valid Expressions</a></span></dt>
<dt><span class="section"><a href="integer.html#idm488720569520">Models</a></span></dt>
<dt><span class="section"><a href="integer.html#idm488720567792">Header</a></span></dt>
</dl></div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="idm488720628192"></a>Description</h4></div></div></div>
<p>A type fulfills the requirements of an Integer if it has the
properties of a integer.</p>
<p>More specifically, a type T is Integer if there exists a
specialization of <code class="computeroutput">std::numeric_limits&lt;T&gt; for which
std::numeric_limits&lt;T&gt;::is_integer</code> is equal to
<code class="computeroutput">true</code>. See the documentation for standard library class
<code class="computeroutput">numeric_limits</code>. The standard library includes such
specializations for all built-in numeric types. Note that this concept is
distinct from the C++ standard library type traits
<code class="computeroutput">is_integral</code> and <code class="computeroutput">is_arithmetic</code>. These latter
fulfill the requirements of the concept Numeric. But there are types which
fulfill this concept for which <code class="computeroutput">is_arithmetic&lt;T&gt;::value ==
false</code>. For example see <code class="computeroutput">safe&lt;int&gt;</code>.</p>
</div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="idm488720620752"></a>Refinement of</h4></div></div></div>
<p><a class="link" href="numeric.html" title="Numeric&lt;T&gt;">Numeric</a></p>
</div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="idm488720618976"></a>Notation</h4></div></div></div>
<div class="informaltable"><table class="table">
<colgroup>
<col align="left">
<col align="left">
</colgroup>
<tbody>
<tr>
<td align="left"><code class="computeroutput">T, U, V</code></td>
<td align="left">A type that is a model of the Integer</td>
</tr>
<tr>
<td align="left"><code class="computeroutput">t, u</code></td>
<td align="left">An object of type modeling Integer</td>
</tr>
</tbody>
</table></div>
</div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="idm488720611600"></a>Valid Expressions</h4></div></div></div>
<p>In addition to the expressions defined in <a class="link" href="numeric.html" title="Numeric&lt;T&gt;">Numeric</a> the following expressions
must be valid. </p>
<div class="table">
<a name="idm488720609776"></a><p class="title"><b>Table 4. General</b></p>
<div class="table-contents"><table class="table" summary="General">
<colgroup>
<col align="left">
<col align="left">
</colgroup>
<thead><tr>
<th align="left">Expression</th>
<th align="left">Value</th>
</tr></thead>
<tbody><tr>
<td align="left"><code class="computeroutput">std::numeric_limits&lt;T&gt;::is_integer</code></td>
<td align="left">true</td>
</tr></tbody>
</table></div>
</div>
<p><br class="table-break"></p>
<div class="informaltable"><table class="table">
<colgroup>
<col align="left">
<col align="left">
<col align="left">
</colgroup>
<thead><tr>
<th align="left">Expression</th>
<th align="left">Return Type</th>
<th align="left">Semantics</th>
</tr></thead>
<tbody>
<tr>
<td align="left"><code class="computeroutput">~t</code></td>
<td align="left"><code class="computeroutput">T</code></td>
<td align="left">bitwise complement</td>
</tr>
<tr>
<td align="left"><code class="computeroutput">t &lt;&lt; u</code></td>
<td align="left"><code class="computeroutput">T</code></td>
<td align="left">shift t left u bits</td>
</tr>
<tr>
<td align="left"><code class="computeroutput">t &gt;&gt; u</code></td>
<td align="left"><code class="computeroutput">T</code></td>
<td align="left">shift t right by u bits</td>
</tr>
<tr>
<td align="left"><code class="computeroutput">t &amp; u</code></td>
<td align="left"><code class="computeroutput">V</code></td>
<td align="left">and of t and u padded out to max # bits in t, u</td>
</tr>
<tr>
<td align="left"><code class="computeroutput">t | u</code></td>
<td align="left"><code class="computeroutput">V</code></td>
<td align="left">or of t and u padded out to max # bits in t, u</td>
</tr>
<tr>
<td align="left"><code class="computeroutput">t ^ u</code></td>
<td align="left"><code class="computeroutput">V</code></td>
<td align="left">exclusive or of t and u padded out to max # bits in t,
u</td>
</tr>
<tr>
<td align="left"><code class="computeroutput">t &lt;&lt;= u</code></td>
<td align="left"><code class="computeroutput">T</code></td>
<td align="left">left shift the value of t by u bits</td>
</tr>
<tr>
<td align="left"><code class="computeroutput">t &gt;&gt;= u</code></td>
<td align="left"><code class="computeroutput">T</code></td>
<td align="left">right shift the value of t by u bits</td>
</tr>
<tr>
<td align="left"><code class="computeroutput">t &amp;= u</code></td>
<td align="left"><code class="computeroutput">T</code></td>
<td align="left">and the value of t with u and assign to t</td>
</tr>
<tr>
<td align="left"><code class="computeroutput">t |= u</code></td>
<td align="left"><code class="computeroutput">T</code></td>
<td align="left">or the value of t with u and assign to t</td>
</tr>
<tr>
<td align="left"><code class="computeroutput">t ^= u</code></td>
<td align="left"><code class="computeroutput">T</code></td>
<td align="left">exclusive or the value of t with u and assign to
t</td>
</tr>
</tbody>
</table></div>
</div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="idm488720569520"></a>Models</h4></div></div></div>
<p><code class="computeroutput">int, safe&lt;int&gt;, safe_unsigned_range&lt;0, 11&gt;,
checked_result&lt;int&gt; etc.</code></p>
</div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="idm488720567792"></a>Header</h4></div></div></div>
<p><a href="../../include/boost/safe_numerics/concept/numeric.hpp" target="_top"><code class="computeroutput">#include
&lt;boost/safe_numerics/concepts/integer.hpp&gt; </code></a></p>
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright © 2012-2018 Robert Ramey<p><a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">Subject to Boost
Software License</a></p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="numeric.html"><img src="images/prev.png" alt="Prev"></a><a accesskey="u" href="concepts.html"><img src="images/up.png" alt="Up"></a><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a><a accesskey="n" href="safe_numeric_concept.html"><img src="images/next.png" alt="Next"></a>
</div>
</body>
</html>