1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> 4<title>safe_compare<T, U></title> 5<link rel="stylesheet" href="boostbook.css" type="text/css"> 6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 7<link rel="home" href="index.html" title="Safe Numerics"> 8<link rel="up" href="library_implementation.html" title="Library Implementation"> 9<link rel="prev" href="interval.html" title="interval<R>"> 10<link rel="next" href="performance_tests.html" title="Performance Tests"> 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 href="index.html" height="164px" src="pre-boost.jpg" alt="Library Documentation Index"></td> 15<td><h2>Safe Numerics</h2></td> 16</tr></table> 17<div class="spirit-nav"> 18<a accesskey="p" href="interval.html"><img src="images/prev.png" alt="Prev"></a><a accesskey="u" href="library_implementation.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="performance_tests.html"><img src="images/next.png" alt="Next"></a> 19</div> 20<div class="section"> 21<div class="titlepage"><div><div><h3 class="title"> 22<a name="safe_numerics.checked_integer_arithmetic"></a>safe_compare<T, U></h3></div></div></div> 23<div class="toc"><dl class="toc"> 24<dt><span class="section"><a href="checked_integer_arithmetic.html#idm130201926816">Synopsis</a></span></dt> 25<dt><span class="section"><a href="checked_integer_arithmetic.html#idm130201838640">Description</a></span></dt> 26<dt><span class="section"><a href="checked_integer_arithmetic.html#idm130201831296">Type requirements</a></span></dt> 27<dt><span class="section"><a href="checked_integer_arithmetic.html#idm130201827792">Complexity</a></span></dt> 28<dt><span class="section"><a href="checked_integer_arithmetic.html#idm130201826560">Example of use</a></span></dt> 29<dt><span class="section"><a href="checked_integer_arithmetic.html#idm130201795904">Header</a></span></dt> 30</dl></div> 31<div class="section"> 32<div class="titlepage"><div><div><h4 class="title"> 33<a name="idm130201926816"></a>Synopsis</h4></div></div></div> 34<pre class="programlisting"><span class="comment">// compare any pair of integers</span> 35<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> 36<span class="keyword">bool</span> <span class="keyword">constexpr</span> <span class="identifier">safe_compare</span><span class="special">::</span><span class="identifier">less_than</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">T</span> <span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">U</span> <span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span><span class="special">;</span> 37 38<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> 39<span class="keyword">bool</span> <span class="keyword">constexpr</span> <span class="identifier">safe_compare</span><span class="special">::</span><span class="identifier">greater_than</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">T</span> <span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">U</span> <span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span><span class="special">;</span> 40 41<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> 42<span class="keyword">bool</span> <span class="keyword">constexpr</span> <span class="identifier">safe_compare</span><span class="special">::</span><span class="identifier">less_than_equal</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">T</span> <span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">U</span> <span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span><span class="special">;</span> 43 44<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> 45<span class="keyword">bool</span> <span class="keyword">constexpr</span> <span class="identifier">safe_compare</span><span class="special">::</span><span class="identifier">greater_than_equal</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">T</span> <span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">U</span> <span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span><span class="special">;</span> 46 47<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> 48<span class="keyword">bool</span> <span class="keyword">constexpr</span> <span class="identifier">safe_compare</span><span class="special">::</span><span class="identifier">equal</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">T</span> <span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">U</span> <span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span><span class="special">;</span> 49 50<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> 51<span class="keyword">bool</span> <span class="keyword">constexpr</span> <span class="identifier">safe_compare</span><span class="special">::</span><span class="identifier">not_equal</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">T</span> <span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">U</span> <span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span><span class="special">;</span></pre> 52</div> 53<div class="section"> 54<div class="titlepage"><div><div><h4 class="title"> 55<a name="idm130201838640"></a>Description</h4></div></div></div> 56<p>Compare two primitive integers. These functions will return a 57 correct result regardless of the type of the operands. Specifically it is 58 guaranteed to return the correct arithmetic result when comparing signed 59 and unsigned types of any size. It does not follow the standard C/C++ 60 procedure of converting the operands to some common type then doing the 61 compare. So it is not equivalent to the C/C++ binary operations 62 <code class="computeroutput"><</code>, <code class="computeroutput">></code>, <code class="computeroutput"><code class="computeroutput">></code>=</code>, 63 <code class="computeroutput"><=</code>, <code class="computeroutput">==</code>, <code class="computeroutput">!=</code> and shouldn't be used 64 by user programs which should be portable to standard C/C++ integer 65 arithmetic. The functions are free functions defined inside the namespace 66 <code class="computeroutput">boost::numeric::safe_compare</code>.</p> 67</div> 68<div class="section"> 69<div class="titlepage"><div><div><h4 class="title"> 70<a name="idm130201831296"></a>Type requirements</h4></div></div></div> 71<p>All template parameters of the functions must be C/C++ built-in 72 integer types, <code class="computeroutput"><code class="computeroutput">char</code></code>, 73 <code class="computeroutput"><code class="computeroutput">int</code></code> ....</p> 74</div> 75<div class="section"> 76<div class="titlepage"><div><div><h4 class="title"> 77<a name="idm130201827792"></a>Complexity</h4></div></div></div> 78<p>Each function performs one and only one arithmetic operation.</p> 79</div> 80<div class="section"> 81<div class="titlepage"><div><div><h4 class="title"> 82<a name="idm130201826560"></a>Example of use</h4></div></div></div> 83<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">cassert</span><span class="special">></span> 84<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">safe_compare</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 85 86<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">;</span> 87<span class="keyword">const</span> <span class="keyword">short</span> <span class="keyword">int</span> <span class="identifier">x</span> <span class="special">=</span> <span class="special">-</span><span class="number">64</span><span class="special">;</span> 88<span class="keyword">const</span> <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">y</span> <span class="special">=</span> <span class="number">42000</span><span class="special">;</span> 89 90<span class="identifier">assert</span><span class="special">(</span><span class="identifier">x</span> <span class="special"><</span> <span class="identifier">y</span><span class="special">)</span><span class="special">;</span> <span class="comment">// fails</span> 91<span class="identifier">assert</span><span class="special">(</span><span class="identifier">safe_compare</span><span class="special">::</span><span class="identifier">less_than</span><span class="special">(</span><span class="identifier">x</span><span class="special">,</span> <span class="identifier">y</span><span class="special">)</span><span class="special">)</span><span class="special">;</span> <span class="comment">// OK</span></pre> 92</div> 93<div class="section"> 94<div class="titlepage"><div><div><h4 class="title"> 95<a name="idm130201795904"></a>Header</h4></div></div></div> 96<p><a href="../../include/safe_compare.hpp" target="_top"><code class="computeroutput">#include 97 <boost/numeric/safe_numerics/safe_compare.hpp> 98 </code></a></p> 99</div> 100</div> 101<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 102<td align="left"></td> 103<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 104 Software License</a></p> 105</div></td> 106</tr></table> 107<hr> 108<div class="spirit-nav"> 109<a accesskey="p" href="interval.html"><img src="images/prev.png" alt="Prev"></a><a accesskey="u" href="library_implementation.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="performance_tests.html"><img src="images/next.png" alt="Next"></a> 110</div> 111</body> 112</html> 113