PageRenderTime 126ms CodeModel.GetById 27ms RepoModel.GetById 2ms app.codeStats 1ms

/src/Thirdparty/boost.xint/libs/xint/doc/integer_8hpp_source.html

https://github.com/vividos/MultiplayerOnlineGame
HTML | 1971 lines | 1970 code | 0 blank | 1 comment | 0 complexity | 6b8aa29e3c5a588bd16b8126dc006a39 MD5 | raw file
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
  5. <title>The Extended Integer (XInt) Library: integer.hpp Source File</title>
  6. <link href="tabs.css" rel="stylesheet" type="text/css"/>
  7. <link href="doxygen.css" rel="stylesheet" type="text/css"/>
  8. </head>
  9. <body>
  10. <!-- Generated by Doxygen 1.7.1 -->
  11. <div class="navigation" id="top">
  12. <div class="tabs">
  13. <ul class="tablist">
  14. <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
  15. <li><a href="namespaces.html"><span>Namespaces</span></a></li>
  16. <li><a href="annotated.html"><span>Classes</span></a></li>
  17. <li class="current"><a href="files.html"><span>Files</span></a></li>
  18. </ul>
  19. </div>
  20. <div class="tabs2">
  21. <ul class="tablist">
  22. <li><a href="files.html"><span>File&nbsp;List</span></a></li>
  23. <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
  24. </ul>
  25. </div>
  26. <div class="header">
  27. <div class="headertitle">
  28. <h1>integer.hpp</h1> </div>
  29. </div>
  30. <div class="contents">
  31. <a href="integer_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
  32. <a name="l00002"></a>00002 <span class="comment">/*</span>
  33. <a name="l00003"></a>00003 <span class="comment"> The Extended Integer (XInt) Library</span>
  34. <a name="l00004"></a>00004 <span class="comment"> A fast, portable C++ library for multi-precision integer math</span>
  35. <a name="l00005"></a>00005 <span class="comment"> Copyright 2010 by Chad Nelson</span>
  36. <a name="l00006"></a>00006 <span class="comment"></span>
  37. <a name="l00007"></a>00007 <span class="comment"> Distributed under the Boost Software License, Version 1.0.</span>
  38. <a name="l00008"></a>00008 <span class="comment"> See accompanying file LICENSE_1_0.txt or copy at</span>
  39. <a name="l00009"></a>00009 <span class="comment"> http://www.boost.org/LICENSE_1_0.txt</span>
  40. <a name="l00010"></a>00010 <span class="comment"></span>
  41. <a name="l00011"></a>00011 <span class="comment"> See http://www.boost.org/libs/xint for library home page.</span>
  42. <a name="l00012"></a>00012 <span class="comment">*/</span>
  43. <a name="l00013"></a>00013
  44. <a name="l00018"></a>00018 <span class="preprocessor">#ifndef BOOST_INCLUDED_XINT_INTEGER_HPP</span>
  45. <a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#define BOOST_INCLUDED_XINT_INTEGER_HPP</span>
  46. <a name="l00020"></a>00020 <span class="preprocessor"></span>
  47. <a name="l00021"></a>00021 <span class="preprocessor">#ifdef _MSC_VER</span>
  48. <a name="l00022"></a>00022 <span class="preprocessor"></span> <span class="comment">// C4127, &quot;conditional expression is constant&quot;. Unfortunately the policy-</span>
  49. <a name="l00023"></a>00023 <span class="comment">// based design of this library triggers a lot of these, even though the</span>
  50. <a name="l00024"></a>00024 <span class="comment">// code is correct as written.</span>
  51. <a name="l00025"></a>00025 <span class="preprocessor"> #pragma warning(push)</span>
  52. <a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor"> #pragma warning(disable: 4127)</span>
  53. <a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
  54. <a name="l00028"></a>00028 <span class="preprocessor"></span>
  55. <a name="l00029"></a>00029 <span class="preprocessor">#include &quot;<a class="code" href="internals_8hpp.html" title="Contains the internal definitions required for all XInt types.">detail/internals.hpp</a>&quot;</span>
  56. <a name="l00030"></a>00030 <span class="preprocessor">#include &quot;<a class="code" href="random_8hpp.html" title="Declares items relating to random numbers.">random.hpp</a>&quot;</span>
  57. <a name="l00031"></a>00031
  58. <a name="l00032"></a>00032 <span class="keyword">namespace </span>boost {
  59. <a name="l00033"></a>00033 <span class="keyword">namespace </span>xint {
  60. <a name="l00034"></a>00034
  61. <a name="l00079"></a>00079 <span class="keyword">template</span>&lt;BOOST_XINT_INITIAL_APARAMS&gt;
  62. <a name="l00080"></a>00080 <span class="keyword">class </span>integer_t: <span class="keyword">virtual</span> <span class="keyword">public</span> detail::integer_t_data&lt;BOOST_XINT_APARAMS&gt;,
  63. <a name="l00081"></a>00081 <span class="keyword">public</span> detail::nan_functions&lt;detail::integer_t_data&lt;BOOST_XINT_APARAMS&gt;::
  64. <a name="l00082"></a>00082 NothrowType::value, integer_t&lt;BOOST_XINT_APARAMS&gt;, BOOST_XINT_APARAMS&gt;,
  65. <a name="l00083"></a>00083 <span class="keyword">public</span> detail::fixed_functions&lt;detail::integer_t_data&lt;BOOST_XINT_APARAMS&gt;::
  66. <a name="l00084"></a>00084 BitsType::value, integer_t&lt;BOOST_XINT_APARAMS&gt;, BOOST_XINT_APARAMS&gt;, <span class="keyword">public</span>
  67. <a name="l00085"></a>00085 detail::unsigned_negative_functions&lt;detail::integer_t_data&lt;
  68. <a name="l00086"></a>00086 BOOST_XINT_APARAMS&gt;::SignType::value, BOOST_XINT_APARAMS&gt;
  69. <a name="l00087"></a>00087 {
  70. <a name="l00088"></a>00088 <span class="keyword">typedef</span> <span class="keyword">typename</span> detail::integer_t_data&lt;BOOST_XINT_APARAMS&gt;::BitsType
  71. <a name="l00089"></a>00089 BitsType;
  72. <a name="l00090"></a>00090 <span class="keyword">typedef</span> <span class="keyword">typename</span> detail::integer_t_data&lt;BOOST_XINT_APARAMS&gt;::SecureType
  73. <a name="l00091"></a>00091 SecureType;
  74. <a name="l00092"></a>00092 <span class="keyword">typedef</span> <span class="keyword">typename</span> detail::integer_t_data&lt;BOOST_XINT_APARAMS&gt;::SignType
  75. <a name="l00093"></a>00093 SignType;
  76. <a name="l00094"></a>00094 <span class="keyword">typedef</span> <span class="keyword">typename</span> detail::integer_t_data&lt;BOOST_XINT_APARAMS&gt;::Alloc Alloc;
  77. <a name="l00095"></a>00095
  78. <a name="l00096"></a>00096 <span class="keyword">public</span>:
  79. <a name="l00097"></a>00097 <span class="preprocessor"> #ifndef BOOST_XINT_DOXYGEN_IGNORE</span>
  80. <a name="l00098"></a>00098 <span class="preprocessor"></span> <span class="keyword">typedef</span> integer_t&lt;BOOST_XINT_APARAMS&gt; type;
  81. <a name="l00099"></a>00099 <span class="keyword">typedef</span> void (integer_t&lt;BOOST_XINT_APARAMS&gt;::*safe_bool_type)() <span class="keyword">const</span>;
  82. <a name="l00100"></a><a class="code" href="classboost_1_1xint_1_1integer__t.html#aa596f21475c016ead49722d887a97ab4">00100</a> <span class="keywordtype">void</span> this_is_a_safe_bool_type()<span class="keyword"> const </span>{ }
  83. <a name="l00101"></a>00101
  84. <a name="l00102"></a><a class="code" href="classboost_1_1xint_1_1integer__t.html#a130f5eeae0a95847b7bb5cb56e443480">00102</a> <span class="keyword">typedef</span> <span class="keyword">typename</span> detail::integer_t_data&lt;BOOST_XINT_APARAMS&gt;::datatype
  85. <a name="l00103"></a>00103 datatype;
  86. <a name="l00104"></a>00104
  87. <a name="l00105"></a><a class="code" href="classboost_1_1xint_1_1integer__t.html#abe691a26ef01695197d98d01822ea764">00105</a> <span class="keyword">using</span> detail::integer_t_data&lt;BOOST_XINT_APARAMS&gt;::Threadsafe;
  88. <a name="l00106"></a>00106 <span class="keyword">using</span> detail::integer_t_data&lt;BOOST_XINT_APARAMS&gt;::Nothrow;
  89. <a name="l00107"></a><a class="code" href="classboost_1_1xint_1_1integer__t.html#ac15850352ec856e1a380209214cf8563">00107</a> <span class="keyword">using</span> detail::integer_t_data&lt;BOOST_XINT_APARAMS&gt;::Signed;
  90. <a name="l00108"></a>00108
  91. <a name="l00109"></a><a class="code" href="classboost_1_1xint_1_1integer__t.html#aa7bc0f108496999a375d55ad26e40dcf">00109</a> <span class="keyword">using</span> detail::integer_t_data&lt;BOOST_XINT_APARAMS&gt;::data;
  92. <a name="l00110"></a><a class="code" href="classboost_1_1xint_1_1integer__t.html#a9754bfd54c9e30e071b0e5bc1b099f8b">00110</a> <span class="keyword">using</span> detail::integer_t_data&lt;BOOST_XINT_APARAMS&gt;::_data;
  93. <a name="l00111"></a>00111
  94. <a name="l00112"></a>00112 <span class="keyword">using</span> detail::nan_functions&lt;detail::integer_t_data&lt;
  95. <a name="l00113"></a>00113 <a class="code" href="options_8hpp.html#aa350afa46bc87068c0cefb1925130b6c">BOOST_XINT_APARAMS</a>&gt;::NothrowType::value, <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t</a>&lt;
  96. <a name="l00114"></a>00114 <a class="code" href="options_8hpp.html#aa350afa46bc87068c0cefb1925130b6c">BOOST_XINT_APARAMS</a>&gt;, <a class="code" href="options_8hpp.html#aa350afa46bc87068c0cefb1925130b6c">BOOST_XINT_APARAMS</a>&gt;::is_nan;
  97. <a name="l00115"></a>00115
  98. <a name="l00116"></a>00116 <span class="keyword">using</span> detail::unsigned_negative_functions&lt;detail::integer_t_data&lt;
  99. <a name="l00117"></a>00117 <a class="code" href="options_8hpp.html#aa350afa46bc87068c0cefb1925130b6c">BOOST_XINT_APARAMS</a>&gt;::SignType::value, <a class="code" href="options_8hpp.html#aa350afa46bc87068c0cefb1925130b6c">BOOST_XINT_APARAMS</a>&gt;::
  100. <a name="l00118"></a>00118 _fix_negative_unsigned;
  101. <a name="l00119"></a>00119 <span class="preprocessor"> #endif // BOOST_XINT_DOXYGEN_IGNORE</span>
  102. <a name="l00120"></a>00120 <span class="preprocessor"></span>
  103. <a name="l00123"></a>00123 <a class="code" href="classboost_1_1xint_1_1integer__t.html#adc039392b5197a0ebd69b5744ee420eb" title="Creates a new integer with an initial value of zero.">integer_t</a>();
  104. <a name="l00124"></a>00124 <a class="code" href="classboost_1_1xint_1_1integer__t.html#adc039392b5197a0ebd69b5744ee420eb" title="Creates a new integer with an initial value of zero.">integer_t</a>(<span class="keyword">const</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a> &amp;b, <span class="keywordtype">bool</span> force_thread_safety =
  105. <a name="l00125"></a>00125 <span class="keyword">false</span>);
  106. <a name="l00127"></a>00127 <a class="code" href="classboost_1_1xint_1_1integer__t.html#adc039392b5197a0ebd69b5744ee420eb" title="Creates a new integer with an initial value of zero.">integer_t</a>(<a class="code" href="basic__types__and__includes_8hpp.html#a0533c283bce9e4d9468ea9b3a5ab509b">BOOST_XINT_RV_REF</a>(type) i) { _swap(i); }
  107. <a name="l00128"></a>00128 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> <span class="keywordtype">char</span>T&gt;
  108. <a name="l00129"></a>00129 <span class="keyword">explicit</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html#adc039392b5197a0ebd69b5744ee420eb" title="Creates a new integer with an initial value of zero.">integer_t</a>(<span class="keyword">const</span> charT *str, std::size_t base = 10);
  109. <a name="l00130"></a>00130 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> <span class="keywordtype">char</span>T&gt;
  110. <a name="l00131"></a>00131 <a class="code" href="classboost_1_1xint_1_1integer__t.html#adc039392b5197a0ebd69b5744ee420eb" title="Creates a new integer with an initial value of zero.">integer_t</a>(<span class="keyword">const</span> charT *str, <span class="keyword">const</span> charT *&amp;endptr, std::size_t base = 10);
  111. <a name="l00132"></a>00132 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> <span class="keywordtype">char</span>T, <span class="keyword">typename</span> traitsT, <span class="keyword">typename</span> allocT&gt;
  112. <a name="l00133"></a>00133 <span class="keyword">explicit</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html#adc039392b5197a0ebd69b5744ee420eb" title="Creates a new integer with an initial value of zero.">integer_t</a>(<span class="keyword">const</span> std::basic_string&lt;charT, traitsT, allocT&gt; &amp;str,
  113. <a name="l00134"></a>00134 std::size_t base = 10);
  114. <a name="l00135"></a>00135 <a class="code" href="classboost_1_1xint_1_1integer__t.html#adc039392b5197a0ebd69b5744ee420eb" title="Creates a new integer with an initial value of zero.">integer_t</a>(<span class="keyword">const</span> <a class="code" href="namespaceboost_1_1xint.html#aae3128529370506165793f2771834e58" title="The format for the binary representations of integers.">xint::binary_t</a> &amp;b, <a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a> bits = 0);
  115. <a name="l00136"></a>00136 <span class="keyword">template</span> &lt;BOOST_XINT_CLASS_BPARAMS&gt; <span class="keyword">explicit</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html#adc039392b5197a0ebd69b5744ee420eb" title="Creates a new integer with an initial value of zero.">integer_t</a>(<span class="keyword">const</span>
  116. <a name="l00137"></a>00137 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_BPARAMS&gt;</a> &amp;other, <span class="keywordtype">bool</span> force_thread_safety = <span class="keyword">false</span>);
  117. <a name="l00138"></a>00138 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Type&gt; <a class="code" href="classboost_1_1xint_1_1integer__t.html#adc039392b5197a0ebd69b5744ee420eb" title="Creates a new integer with an initial value of zero.">integer_t</a>(<span class="keyword">const</span> Type n, <span class="keyword">typename</span>
  118. <a name="l00139"></a>00139 boost::enable_if&lt;boost::is_integral&lt;Type&gt; &gt;::type* = 0);
  119. <a name="l00140"></a>00140
  120. <a name="l00141"></a>00141 <span class="preprocessor"> #ifndef BOOST_XINT_DOXYGEN_IGNORE</span>
  121. <a name="l00142"></a>00142 <span class="preprocessor"></span>
  122. <a name="l00143"></a>00143 <span class="keyword">explicit</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html#adc039392b5197a0ebd69b5744ee420eb" title="Creates a new integer with an initial value of zero.">integer_t</a>(<span class="keyword">const</span> detail::raw_integer_t&lt;BitsType::value,
  123. <a name="l00144"></a>00144 SecureType::value, Alloc&gt; &amp;c):
  124. <a name="l00145"></a>00145 detail::integer_t_data&lt;<a class="code" href="options_8hpp.html#aa350afa46bc87068c0cefb1925130b6c">BOOST_XINT_APARAMS</a>&gt;(c) { <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>)
  125. <a name="l00146"></a>00146 _data().make_unique(); }
  126. <a name="l00147"></a>00147 <span class="preprocessor"> #endif // BOOST_XINT_DOXYGEN_IGNORE</span>
  127. <a name="l00148"></a>00148 <span class="preprocessor"></span>
  128. <a name="l00149"></a>00149
  129. <a name="l00155"></a>00155 integer_t&lt;BOOST_XINT_APARAMS&gt;&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a7388d85a6b1509c214b981bc730f7c7f">operator=</a>(<a class="code" href="basic__types__and__includes_8hpp.html#a8177a6a6c68ea042f7e644d8ef7128f9">BOOST_XINT_COPY_ASSIGN_REF</a>(type)
  130. <a name="l00156"></a><a class="code" href="classboost_1_1xint_1_1integer__t.html#ab7a2481c7347c73bd927286879404bba">00156</a> c);
  131. <a name="l00157"></a>00157 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a>&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a7388d85a6b1509c214b981bc730f7c7f">operator=</a>(<a class="code" href="basic__types__and__includes_8hpp.html#a0533c283bce9e4d9468ea9b3a5ab509b">BOOST_XINT_RV_REF</a>(type) c) {
  132. <a name="l00158"></a>00158 _swap(c); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
  133. <a name="l00159"></a>00159 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Type&gt; <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a>&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a7388d85a6b1509c214b981bc730f7c7f">operator=</a>(<span class="keyword">const</span> Type
  134. <a name="l00160"></a>00160 n) { <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a> nn(n); _swap(nn); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
  135. <a name="l00161"></a>00161
  136. <a name="l00162"></a>00162 <a class="code" href="classboost_1_1xint_1_1integer__t.html#abe691a26ef01695197d98d01822ea764">operator safe_bool_type</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data.is_zero() ? 0 :
  137. <a name="l00163"></a>00163 &amp;integer_t&lt;BOOST_XINT_APARAMS&gt;::this_is_a_safe_bool_type); }
  138. <a name="l00164"></a>00164 <span class="keywordtype">bool</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html#ac15850352ec856e1a380209214cf8563">operator!</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data.is_zero(); }
  139. <a name="l00165"></a>00165 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a31ef623fef7944861c458bcd2c9b0001" title="Return the additive inverse of an integer.">operator-</a>() <span class="keyword">const</span>;
  140. <a name="l00166"></a>00166 integer_t&lt;BOOST_XINT_APARAMS&gt;&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#aa7bc0f108496999a375d55ad26e40dcf">operator+</a>() { <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
  141. <a name="l00167"></a>00167 <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt;&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#aa7bc0f108496999a375d55ad26e40dcf">operator+</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
  142. <a name="l00168"></a>00168
  143. <a name="l00169"></a>00169 <span class="preprocessor"> #ifdef BOOST_XINT_DOXYGEN_IGNORE // inherited, only here for doxygen</span>
  144. <a name="l00170"></a>00170 <span class="preprocessor"></span> integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="classboost_1_1xint_1_1integer__t.html#ad200ae35a1bb12061b9a230f9e42550d" title="The Bitwise Ones Complement (i.e. bitwise NOT) operator.">operator~</a>() <span class="keyword">const</span>;
  145. <a name="l00171"></a>00171 <span class="preprocessor"> #endif</span>
  146. <a name="l00172"></a>00172 <span class="preprocessor"></span>
  147. <a name="l00173"></a>00173 integer_t&lt;BOOST_XINT_APARAMS&gt;&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a117a5f7325a2f1a77b0d5dd31fd920c6">operator+=</a>(<span class="keyword">const</span>
  148. <a name="l00174"></a>00174 integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;b);
  149. <a name="l00175"></a>00175 integer_t&lt;BOOST_XINT_APARAMS&gt;&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a67009eed89894e082b609b0890e371cd">operator-=</a>(<span class="keyword">const</span>
  150. <a name="l00176"></a>00176 integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;b);
  151. <a name="l00177"></a>00177 integer_t&lt;BOOST_XINT_APARAMS&gt;&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a1932ceee3f8344c15059732250bac0df">operator*=</a>(<span class="keyword">const</span>
  152. <a name="l00178"></a>00178 integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;b);
  153. <a name="l00179"></a>00179 integer_t&lt;BOOST_XINT_APARAMS&gt;&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a582f45204112c860bd4884fa51c25aad">operator/=</a>(<span class="keyword">const</span>
  154. <a name="l00180"></a>00180 integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;b);
  155. <a name="l00181"></a>00181 integer_t&lt;BOOST_XINT_APARAMS&gt;&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#ac05bea273dfad811ba2addd164d1042b">operator%=</a>(<span class="keyword">const</span>
  156. <a name="l00182"></a>00182 integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;b);
  157. <a name="l00183"></a>00183
  158. <a name="l00184"></a>00184 integer_t&lt;BOOST_XINT_APARAMS&gt;&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a719c2966d9e29521eb95863eaa2ec570">operator++</a>();
  159. <a name="l00185"></a>00185 integer_t&lt;BOOST_XINT_APARAMS&gt;&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#abdbcf3ae2ff508e5fc9467b85f9e917c">operator--</a>();
  160. <a name="l00186"></a>00186 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a719c2966d9e29521eb95863eaa2ec570">operator++</a>(<span class="keywordtype">int</span>);
  161. <a name="l00187"></a>00187 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="classboost_1_1xint_1_1integer__t.html#abdbcf3ae2ff508e5fc9467b85f9e917c">operator--</a>(<span class="keywordtype">int</span>);
  162. <a name="l00188"></a>00188
  163. <a name="l00189"></a>00189 integer_t&lt;BOOST_XINT_APARAMS&gt;&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a395d69ce8b4a4fa5e8967f3b658de8ea">operator&amp;=</a>(<span class="keyword">const</span>
  164. <a name="l00190"></a>00190 integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n);
  165. <a name="l00191"></a>00191 integer_t&lt;BOOST_XINT_APARAMS&gt;&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a7a92ce81071327d56d0c21a6b37f62d9">operator|=</a>(<span class="keyword">const</span>
  166. <a name="l00192"></a>00192 integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n);
  167. <a name="l00193"></a>00193 integer_t&lt;BOOST_XINT_APARAMS&gt;&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a194e4dbdffddde2704de6267f271f53a">operator^=</a>(<span class="keyword">const</span>
  168. <a name="l00194"></a>00194 integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n);
  169. <a name="l00195"></a>00195 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="classboost_1_1xint_1_1integer__t.html#aee68d28e7f5803902ad153dbfab2e8ad" title="Left-shift an integer by a specified number of bits.">operator&lt;&lt;</a>(<a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a> shift) <span class="keyword">const</span>;
  170. <a name="l00196"></a>00196 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="classboost_1_1xint_1_1integer__t.html#afe9a935bb9de506b29f043b439a196ae" title="Right-shift an integer by a specified number of bits.">operator&gt;&gt;</a>(<a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a> shift) <span class="keyword">const</span>;
  171. <a name="l00197"></a>00197 integer_t&lt;BOOST_XINT_APARAMS&gt;&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a516ce52ae1a8332a1de8711baaea0943">operator&lt;&lt;=</a>(<a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a> shift);
  172. <a name="l00198"></a>00198 integer_t&lt;BOOST_XINT_APARAMS&gt;&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#aa67123e331f61cd7c54e6fb84e09609f">operator&gt;&gt;=</a>(<a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a> shift);
  173. <a name="l00200"></a>00200
  174. <a name="l00203"></a>00203 <span class="keywordtype">bool</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html#a28c1cf2549da47e36ada1e3a2a020654" title="Tests the lowest bit of *this to determine oddness.">is_odd</a>() <span class="keyword">const</span>;
  175. <a name="l00204"></a>00204 <span class="keywordtype">bool</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html#af7d57cc73521c4d72bc853435127b790" title="Tests the lowest bit of *this to determine evenness.">is_even</a>() <span class="keyword">const</span>;
  176. <a name="l00205"></a>00205 <span class="keywordtype">int</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html#aa278c48753019fe3deaa623eecdb16b3" title="Tests the sign of *this.">sign</a>(<span class="keywordtype">bool</span> signed_zero = <span class="keyword">false</span>) <span class="keyword">const</span>;
  177. <a name="l00206"></a>00206 std::size_t <a class="code" href="classboost_1_1xint_1_1integer__t.html#a6575f1fd58be6bf73145459b4b46afbb" title="Tells you roughly how large *this is.">hex_digits</a>() <span class="keyword">const</span>;
  178. <a name="l00207"></a>00207
  179. <a name="l00208"></a>00208 <span class="preprocessor"> #ifdef BOOST_XINT_DOXYGEN_IGNORE // inherited, only here for doxygen</span>
  180. <a name="l00209"></a>00209 <span class="preprocessor"></span> <span class="keywordtype">bool</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>() <span class="keyword">const</span>;
  181. <a name="l00210"></a>00210 <span class="preprocessor"> #endif</span>
  182. <a name="l00211"></a>00211 <span class="preprocessor"></span>
  183. <a name="l00212"></a>00212
  184. <a name="l00213"></a>00213 <span class="keyword">typedef</span> base_divide_t&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt; divide_t;
  185. <a name="l00214"></a>00214
  186. <a name="l00222"></a>00222
  187. <a name="l00223"></a>00223 <span class="keyword">static</span> integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a22a32f5e1926ced95b9400e87dfe9349" title="Calculate the value of 2e">pow2</a>(std::size_t exponent);
  188. <a name="l00224"></a>00224 <span class="keyword">static</span> integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a16b836e12f76f2560ee697fb399dbc2e" title="Calculate the value of n! ">factorial</a>(std::size_t n);
  189. <a name="l00225"></a>00225
  190. <a name="l00226"></a>00226 <span class="preprocessor"> #ifdef BOOST_XINT_DOXYGEN_IGNORE // inherited, only here for doxygen</span>
  191. <a name="l00227"></a>00227 <span class="preprocessor"></span> <span class="keyword">static</span> integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a26cf36c3ec3664dc91b8aaa86748247d" title="Returns a Not-a-Number value, for types that support it.">nan</a>();
  192. <a name="l00228"></a>00228 <span class="preprocessor"> #endif</span>
  193. <a name="l00229"></a>00229 <span class="preprocessor"></span>
  194. <a name="l00230"></a>00230 <span class="keyword">template</span> &lt;<span class="keyword">class</span> Type&gt; <span class="keyword">static</span> integer_t&lt;BOOST_XINT_APARAMS&gt;
  195. <a name="l00231"></a>00231 <a class="code" href="classboost_1_1xint_1_1integer__t.html#a1d7c4d0ae13e84bbac07e6c6eb01334e" title="Generates a random integer with specific attributes.">random_by_size</a>(Type &amp;gen, <a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a> size_in_bits, <span class="keywordtype">bool</span> high_bit_on =
  196. <a name="l00232"></a>00232 <span class="keyword">false</span>, <span class="keywordtype">bool</span> low_bit_on = <span class="keyword">false</span>, <span class="keywordtype">bool</span> can_be_negative = <span class="keyword">false</span>);
  197. <a name="l00233"></a>00233 <span class="keyword">template</span> &lt;<span class="keyword">class</span> Type&gt; <span class="keyword">static</span> integer_t&lt;BOOST_XINT_APARAMS&gt;
  198. <a name="l00234"></a>00234 <a class="code" href="classboost_1_1xint_1_1integer__t.html#afbbf1fba0d65e5348b1771003ba40ae1" title="Generate a randomly-generated prime number of a particular bit-size.">random_prime</a>(Type &amp;gen, <a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a> size_in_bits, <a class="code" href="namespaceboost_1_1xint.html#a48deb76c9c428a4b3a50177b1b0cb547" title="A callback function takes no parameters and returns a bool.">callback_t</a> callback =
  199. <a name="l00235"></a>00235 <a class="code" href="namespaceboost_1_1xint.html#a758d415a476a5eeed28dc6b5869b1696" title="An empty callback_t, used as a default parameter for some functions.">no_callback</a>);
  200. <a name="l00237"></a>00237
  201. <a name="l00238"></a>00238 <span class="preprocessor"> #ifndef BOOST_XINT_DOXYGEN_IGNORE</span>
  202. <a name="l00239"></a>00239 <span class="preprocessor"></span>
  203. <a name="l00240"></a>00240
  204. <a name="l00241"></a>00241 <span class="keywordtype">void</span> _swap(integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;s) { <span class="keyword">using</span> std::swap;
  205. <a name="l00242"></a>00242 <a class="code" href="namespaceboost_1_1xint.html#aecbaaf9b2c679d8b6f220224a6bab8dc">swap</a>(data, s.data); }
  206. <a name="l00244"></a>00244 <span class="preprocessor"> #endif</span>
  207. <a name="l00245"></a>00245 <span class="preprocessor"></span>
  208. <a name="l00246"></a>00246 <span class="keyword">private</span>:
  209. <a name="l00247"></a>00247 <a class="code" href="basic__types__and__includes_8hpp.html#a5f5634ec80010f0f87b93320fa3419f9">BOOST_XINT_COPYABLE_AND_MOVABLE</a>(type)
  210. <a name="l00248"></a>00248 };
  211. <a name="l00249"></a>00249
  212. <a name="l00251"></a>00251 <span class="comment">// Member function template definitions</span>
  213. <a name="l00252"></a><a class="code" href="classboost_1_1xint_1_1integer__t.html#adc039392b5197a0ebd69b5744ee420eb">00252</a>
  214. <a name="l00254"></a>00254 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  215. <a name="l00255"></a>00255 <a class="code" href="classboost_1_1xint_1_1integer__t.html#adc039392b5197a0ebd69b5744ee420eb" title="Creates a new integer with an initial value of zero.">integer_t&lt;BOOST_XINT_APARAMS&gt;::integer_t</a>() {
  216. <a name="l00256"></a>00256 <span class="comment">// Don&#39;t need to do anything, already preinitialized to zero.</span>
  217. <a name="l00257"></a>00257 }
  218. <a name="l00258"></a>00258
  219. <a name="l00269"></a>00269 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  220. <a name="l00270"></a>00270 <a class="code" href="classboost_1_1xint_1_1integer__t.html#adc039392b5197a0ebd69b5744ee420eb" title="Creates a new integer with an initial value of zero.">integer_t&lt;BOOST_XINT_APARAMS&gt;::integer_t</a>(<span class="keyword">const</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a> &amp;i,
  221. <a name="l00271"></a>00271 <span class="keywordtype">bool</span> force_thread_safety)
  222. <a name="l00272"></a>00272 {
  223. <a name="l00273"></a>00273 <span class="keywordflow">if</span> (Nothrow) {
  224. <a name="l00274"></a>00274 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  225. <a name="l00275"></a>00275 data = i.data;
  226. <a name="l00276"></a>00276 <span class="keywordflow">if</span> (!data.is_nan()) {
  227. <a name="l00277"></a>00277 <span class="keywordflow">if</span> (force_thread_safety || Threadsafe == <span class="keyword">true</span>)
  228. <a name="l00278"></a>00278 data.make_unique();
  229. <a name="l00279"></a>00279 }
  230. <a name="l00280"></a>00280 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  231. <a name="l00281"></a>00281 data.make_nan();
  232. <a name="l00282"></a>00282 }
  233. <a name="l00283"></a>00283 } <span class="keywordflow">else</span> {
  234. <a name="l00284"></a>00284 data = i.data;
  235. <a name="l00285"></a>00285 <span class="keywordflow">if</span> (force_thread_safety || Threadsafe == <span class="keyword">true</span>) data.make_unique();
  236. <a name="l00286"></a>00286 }
  237. <a name="l00287"></a>00287 }
  238. <a name="l00288"></a>00288
  239. <a name="l00290"></a>00290 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  240. <a name="l00291"></a>00291 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> <span class="keywordtype">char</span>T&gt;
  241. <a name="l00292"></a>00292 <a class="code" href="classboost_1_1xint_1_1integer__t.html#adc039392b5197a0ebd69b5744ee420eb" title="Creates a new integer with an initial value of zero.">integer_t&lt;BOOST_XINT_APARAMS&gt;::integer_t</a>(<span class="keyword">const</span> charT *str, std::size_t base) {
  242. <a name="l00293"></a>00293 <span class="keywordflow">if</span> (Nothrow) {
  243. <a name="l00294"></a>00294 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  244. <a name="l00295"></a>00295 <span class="keyword">const</span> std::basic_string&lt;charT&gt; &amp;tnan = detail::nan_text&lt;charT&gt;();
  245. <a name="l00296"></a>00296 <span class="keywordflow">if</span> (str[0] == tnan[0] &amp;&amp; std::basic_string&lt;charT&gt;(str) == tnan) {
  246. <a name="l00297"></a>00297 data.make_nan();
  247. <a name="l00298"></a>00298 } <span class="keywordflow">else</span> {
  248. <a name="l00299"></a>00299 data.from_string(str, base);
  249. <a name="l00300"></a>00300 <span class="keywordflow">if</span> (!Signed &amp;&amp; data.negative) _fix_negative_unsigned();
  250. <a name="l00301"></a>00301 }
  251. <a name="l00302"></a>00302 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  252. <a name="l00303"></a>00303 data.make_nan();
  253. <a name="l00304"></a>00304 }
  254. <a name="l00305"></a>00305 } <span class="keywordflow">else</span> {
  255. <a name="l00306"></a>00306 data.from_string(str, base);
  256. <a name="l00307"></a>00307 <span class="keywordflow">if</span> (!Signed &amp;&amp; data.negative) _fix_negative_unsigned();
  257. <a name="l00308"></a>00308 }
  258. <a name="l00309"></a>00309 }
  259. <a name="l00310"></a>00310
  260. <a name="l00339"></a>00339 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  261. <a name="l00340"></a>00340 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> <span class="keywordtype">char</span>T&gt;
  262. <a name="l00341"></a>00341 <a class="code" href="classboost_1_1xint_1_1integer__t.html#adc039392b5197a0ebd69b5744ee420eb" title="Creates a new integer with an initial value of zero.">integer_t&lt;BOOST_XINT_APARAMS&gt;::integer_t</a>(<span class="keyword">const</span> charT *str, <span class="keyword">const</span> charT *&amp;endptr,
  263. <a name="l00342"></a>00342 std::size_t base)
  264. <a name="l00343"></a>00343 {
  265. <a name="l00344"></a>00344 <span class="keywordflow">if</span> (Nothrow) {
  266. <a name="l00345"></a>00345 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  267. <a name="l00346"></a>00346 <span class="keyword">const</span> std::basic_string&lt;charT&gt; &amp;tnan = detail::nan_text&lt;charT&gt;();
  268. <a name="l00347"></a>00347 <span class="keywordflow">if</span> (str[0] == tnan[0]) {
  269. <a name="l00348"></a>00348 std::basic_string&lt;charT&gt; s(str);
  270. <a name="l00349"></a>00349 <span class="keywordflow">if</span> (s.substr(0, tnan.length()) == tnan) {
  271. <a name="l00350"></a>00350 data.make_nan();
  272. <a name="l00351"></a>00351 endptr = str + tnan.length();
  273. <a name="l00352"></a>00352 <span class="keywordflow">return</span>;
  274. <a name="l00353"></a>00353 }
  275. <a name="l00354"></a>00354 }
  276. <a name="l00355"></a>00355 data.from_string(str, endptr, base);
  277. <a name="l00356"></a>00356 <span class="keywordflow">if</span> (!Signed &amp;&amp; data.negative) _fix_negative_unsigned();
  278. <a name="l00357"></a>00357 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  279. <a name="l00358"></a>00358 data.make_nan();
  280. <a name="l00359"></a>00359 }
  281. <a name="l00360"></a>00360 } <span class="keywordflow">else</span> {
  282. <a name="l00361"></a>00361 data.from_string(str, endptr, base);
  283. <a name="l00362"></a>00362 <span class="keywordflow">if</span> (!Signed &amp;&amp; data.negative) _fix_negative_unsigned();
  284. <a name="l00363"></a>00363 }
  285. <a name="l00364"></a>00364 }
  286. <a name="l00365"></a>00365
  287. <a name="l00390"></a>00390 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  288. <a name="l00391"></a>00391 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> <span class="keywordtype">char</span>T, <span class="keyword">typename</span> traitsT, <span class="keyword">typename</span> allocT&gt;
  289. <a name="l00392"></a>00392 <a class="code" href="classboost_1_1xint_1_1integer__t.html#adc039392b5197a0ebd69b5744ee420eb" title="Creates a new integer with an initial value of zero.">integer_t&lt;BOOST_XINT_APARAMS&gt;::integer_t</a>(<span class="keyword">const</span> std::basic_string&lt;charT, traitsT,
  290. <a name="l00393"></a>00393 allocT&gt; &amp;str, std::size_t base)
  291. <a name="l00394"></a>00394 {
  292. <a name="l00395"></a>00395 <span class="keywordflow">if</span> (Nothrow) {
  293. <a name="l00396"></a>00396 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  294. <a name="l00397"></a>00397 <span class="keywordflow">if</span> (str == detail::nan_text&lt;charT&gt;()) data.make_nan();
  295. <a name="l00398"></a>00398 <span class="keywordflow">else</span> {
  296. <a name="l00399"></a>00399 data.from_string(str, base);
  297. <a name="l00400"></a>00400 <span class="keywordflow">if</span> (!Signed &amp;&amp; data.negative) _fix_negative_unsigned();
  298. <a name="l00401"></a>00401 }
  299. <a name="l00402"></a>00402 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  300. <a name="l00403"></a>00403 data.make_nan();
  301. <a name="l00404"></a>00404 }
  302. <a name="l00405"></a>00405 } <span class="keywordflow">else</span> {
  303. <a name="l00406"></a>00406 data.from_string(str, base);
  304. <a name="l00407"></a>00407 <span class="keywordflow">if</span> (!Signed &amp;&amp; data.negative) _fix_negative_unsigned();
  305. <a name="l00408"></a>00408 }
  306. <a name="l00409"></a>00409 }
  307. <a name="l00410"></a>00410
  308. <a name="l00432"></a>00432 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  309. <a name="l00433"></a>00433 <a class="code" href="classboost_1_1xint_1_1integer__t.html#adc039392b5197a0ebd69b5744ee420eb" title="Creates a new integer with an initial value of zero.">integer_t&lt;BOOST_XINT_APARAMS&gt;::integer_t</a>(<span class="keyword">const</span> <a class="code" href="namespaceboost_1_1xint.html#aae3128529370506165793f2771834e58" title="The format for the binary representations of integers.">xint::binary_t</a> &amp;i, <a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a>
  310. <a name="l00434"></a>00434 bits)
  311. <a name="l00435"></a>00435 {
  312. <a name="l00436"></a>00436 <span class="keywordflow">if</span> (Nothrow) {
  313. <a name="l00437"></a>00437 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  314. <a name="l00438"></a>00438 data.from_binary(i, bits);
  315. <a name="l00439"></a>00439 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  316. <a name="l00440"></a>00440 data.make_nan();
  317. <a name="l00441"></a>00441 }
  318. <a name="l00442"></a>00442 } <span class="keywordflow">else</span> {
  319. <a name="l00443"></a>00443 data.from_binary(i, bits);
  320. <a name="l00444"></a>00444 }
  321. <a name="l00445"></a>00445 }
  322. <a name="l00446"></a>00446
  323. <a name="l00459"></a>00459 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  324. <a name="l00460"></a>00460 <span class="keyword">template</span> &lt;BOOST_XINT_CLASS_BPARAMS&gt;
  325. <a name="l00461"></a>00461 <a class="code" href="classboost_1_1xint_1_1integer__t.html#adc039392b5197a0ebd69b5744ee420eb" title="Creates a new integer with an initial value of zero.">integer_t&lt;BOOST_XINT_APARAMS&gt;::integer_t</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_BPARAMS&gt; &amp;i,
  326. <a name="l00462"></a>00462 <span class="keywordtype">bool</span> force_thread_safety)
  327. <a name="l00463"></a>00463 {
  328. <a name="l00464"></a>00464 <span class="keywordflow">if</span> (Nothrow) {
  329. <a name="l00465"></a>00465 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  330. <a name="l00466"></a>00466 <span class="keywordflow">if</span> (i.is_nan()) {
  331. <a name="l00467"></a>00467 data.make_nan();
  332. <a name="l00468"></a>00468 } <span class="keywordflow">else</span> {
  333. <a name="l00469"></a>00469 data = i._data();
  334. <a name="l00470"></a>00470 <span class="keywordflow">if</span> (!data.is_nan()) {
  335. <a name="l00471"></a>00471 <span class="keywordflow">if</span> (force_thread_safety || Threadsafe == <span class="keyword">true</span>)
  336. <a name="l00472"></a>00472 data.make_unique();
  337. <a name="l00473"></a>00473 <span class="keywordflow">if</span> (!Signed &amp;&amp; data.negative) _fix_negative_unsigned();
  338. <a name="l00474"></a>00474 }
  339. <a name="l00475"></a>00475 }
  340. <a name="l00476"></a>00476 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  341. <a name="l00477"></a>00477 data.make_nan();
  342. <a name="l00478"></a>00478 }
  343. <a name="l00479"></a>00479 } <span class="keywordflow">else</span> {
  344. <a name="l00480"></a>00480 <span class="keywordflow">if</span> (i._data().is_nan()) detail::exception_handler&lt;&gt;::call(__FILE__,
  345. <a name="l00481"></a>00481 __LINE__, exceptions::not_a_number());
  346. <a name="l00482"></a>00482 data = i._data();
  347. <a name="l00483"></a>00483 <span class="keywordflow">if</span> (force_thread_safety || Threadsafe == <span class="keyword">true</span>) data.make_unique();
  348. <a name="l00484"></a>00484 <span class="keywordflow">if</span> (!Signed &amp;&amp; data.negative) _fix_negative_unsigned();
  349. <a name="l00485"></a>00485 }
  350. <a name="l00486"></a>00486 }
  351. <a name="l00487"></a>00487
  352. <a name="l00500"></a>00500 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  353. <a name="l00501"></a>00501 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Type&gt; <a class="code" href="classboost_1_1xint_1_1integer__t.html#adc039392b5197a0ebd69b5744ee420eb" title="Creates a new integer with an initial value of zero.">integer_t&lt;BOOST_XINT_APARAMS&gt;::integer_t</a>(<span class="keyword">const</span> Type n,
  354. <a name="l00502"></a>00502 <span class="keyword">typename</span> boost::enable_if&lt;boost::is_integral&lt;Type&gt; &gt;::type*)
  355. <a name="l00503"></a>00503 {
  356. <a name="l00504"></a>00504 <span class="keywordflow">if</span> (Nothrow) {
  357. <a name="l00505"></a>00505 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  358. <a name="l00506"></a>00506 <span class="keywordflow">if</span> (std::numeric_limits&lt;Type&gt;::is_signed) {
  359. <a name="l00507"></a>00507 data.set_signed(n);
  360. <a name="l00508"></a>00508 <span class="keywordflow">if</span> (!Signed &amp;&amp; data.negative) _fix_negative_unsigned();
  361. <a name="l00509"></a>00509 } <span class="keywordflow">else</span> data.set_unsigned(n);
  362. <a name="l00510"></a>00510 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  363. <a name="l00511"></a>00511 data.make_nan();
  364. <a name="l00512"></a>00512 }
  365. <a name="l00513"></a>00513 } <span class="keywordflow">else</span> {
  366. <a name="l00514"></a>00514 <span class="keywordflow">if</span> (std::numeric_limits&lt;Type&gt;::is_signed) {
  367. <a name="l00515"></a>00515 data.set_signed(n);
  368. <a name="l00516"></a>00516 <span class="keywordflow">if</span> (!Signed &amp;&amp; data.negative) _fix_negative_unsigned();
  369. <a name="l00517"></a>00517 } <span class="keywordflow">else</span> data.set_unsigned(n);
  370. <a name="l00518"></a>00518 }
  371. <a name="l00519"></a>00519 }
  372. <a name="l00520"></a><a class="code" href="classboost_1_1xint_1_1integer__t.html#a7388d85a6b1509c214b981bc730f7c7f">00520</a>
  373. <a name="l00521"></a>00521 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  374. <a name="l00522"></a>00522 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a>&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a7388d85a6b1509c214b981bc730f7c7f">integer_t&lt;BOOST_XINT_APARAMS&gt;::</a>
  375. <a name="l00523"></a>00523 <a class="code" href="classboost_1_1xint_1_1integer__t.html#a7388d85a6b1509c214b981bc730f7c7f"> operator=</a>(<a class="code" href="basic__types__and__includes_8hpp.html#a8177a6a6c68ea042f7e644d8ef7128f9">BOOST_XINT_COPY_ASSIGN_REF</a>(type) c)
  376. <a name="l00524"></a>00524 {
  377. <a name="l00525"></a>00525 <span class="keywordflow">if</span> (Nothrow) {
  378. <a name="l00526"></a>00526 <span class="keywordflow">if</span> (c._data().is_nan()) data.make_nan();
  379. <a name="l00527"></a>00527 <span class="keywordflow">else</span> {
  380. <a name="l00528"></a>00528 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  381. <a name="l00529"></a>00529 data = c.data;
  382. <a name="l00530"></a>00530 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  383. <a name="l00531"></a>00531 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  384. <a name="l00532"></a>00532 data.make_nan();
  385. <a name="l00533"></a>00533 }
  386. <a name="l00534"></a>00534 }
  387. <a name="l00535"></a>00535 } <span class="keywordflow">else</span> {
  388. <a name="l00536"></a>00536 data = c.data;
  389. <a name="l00537"></a>00537 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  390. <a name="l00538"></a>00538 }
  391. <a name="l00539"></a>00539 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
  392. <a name="l00540"></a>00540 }
  393. <a name="l00541"></a>00541
  394. <a name="l00542"></a>00542 <span class="preprocessor">#ifdef BOOST_XINT_DOXYGEN_IGNORE // Doesn&#39;t really exist, this is here for docs</span>
  395. <a name="l00543"></a>00543 <span class="preprocessor"></span>
  396. <a name="l00559"></a>00559 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  397. <a name="l00560"></a>00560 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a> <a class="code" href="classboost_1_1xint_1_1integer__t.html#ad200ae35a1bb12061b9a230f9e42550d" title="The Bitwise Ones Complement (i.e. bitwise NOT) operator.">integer_t&lt;BOOST_XINT_APARAMS&gt;::operator~</a>() <span class="keyword">const</span>;
  398. <a name="l00561"></a>00561 <span class="preprocessor">#endif // BOOST_XINT_DOXYGEN_IGNORE</span>
  399. <a name="l00562"></a>00562 <span class="preprocessor"></span>
  400. <a name="l00569"></a>00569 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  401. <a name="l00570"></a>00570 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a> <a class="code" href="classboost_1_1xint_1_1integer__t.html#a31ef623fef7944861c458bcd2c9b0001" title="Return the additive inverse of an integer.">integer_t&lt;BOOST_XINT_APARAMS&gt;::operator-</a>()<span class="keyword"> const </span>{
  402. <a name="l00571"></a>00571 <span class="keywordflow">if</span> (Nothrow) {
  403. <a name="l00572"></a>00572 <span class="keywordflow">if</span> (<a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) <span class="keywordflow">return</span> *<span class="keyword">this</span>;
  404. <a name="l00573"></a>00573 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  405. <a name="l00574"></a>00574 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a> r(*<span class="keyword">this</span>);
  406. <a name="l00575"></a>00575 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) r._make_unique();
  407. <a name="l00576"></a>00576 r.data = -r.data;
  408. <a name="l00577"></a>00577 <span class="keywordflow">if</span> (!Signed &amp;&amp; r.data.negative) r._fix_negative_unsigned();
  409. <a name="l00578"></a>00578 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  410. <a name="l00579"></a>00579 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  411. <a name="l00580"></a>00580 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  412. <a name="l00581"></a>00581 }
  413. <a name="l00582"></a>00582 } <span class="keywordflow">else</span> {
  414. <a name="l00583"></a>00583 integer_t&lt;BOOST_XINT_APARAMS&gt; r(*<span class="keyword">this</span>);
  415. <a name="l00584"></a>00584 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) r._make_unique();
  416. <a name="l00585"></a>00585 r.data = -r.data;
  417. <a name="l00586"></a>00586 <span class="keywordflow">if</span> (!Signed &amp;&amp; r.data.negative) r._fix_negative_unsigned();
  418. <a name="l00587"></a>00587 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  419. <a name="l00588"></a>00588 }
  420. <a name="l00589"></a>00589 }
  421. <a name="l00590"></a><a class="code" href="classboost_1_1xint_1_1integer__t.html#a117a5f7325a2f1a77b0d5dd31fd920c6">00590</a>
  422. <a name="l00592"></a>00592 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  423. <a name="l00593"></a>00593 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a>&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a117a5f7325a2f1a77b0d5dd31fd920c6">integer_t&lt;BOOST_XINT_APARAMS&gt;::operator+=</a>(<span class="keyword">const</span>
  424. <a name="l00594"></a>00594 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a> &amp;b)
  425. <a name="l00595"></a>00595 {
  426. <a name="l00596"></a>00596 <span class="keywordflow">if</span> (Nothrow) {
  427. <a name="l00597"></a>00597 <span class="keywordflow">if</span> (b.is_nan()) data.make_nan();
  428. <a name="l00598"></a>00598 <span class="keywordflow">if</span> (!<a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) {
  429. <a name="l00599"></a>00599 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  430. <a name="l00600"></a>00600 data += b.data;
  431. <a name="l00601"></a>00601 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  432. <a name="l00602"></a>00602 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  433. <a name="l00603"></a>00603 data.make_nan();
  434. <a name="l00604"></a>00604 }
  435. <a name="l00605"></a>00605 }
  436. <a name="l00606"></a>00606 } <span class="keywordflow">else</span> {
  437. <a name="l00607"></a>00607 data += b.data;
  438. <a name="l00608"></a>00608 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  439. <a name="l00609"></a>00609 }
  440. <a name="l00610"></a>00610 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
  441. <a name="l00611"></a>00611 }
  442. <a name="l00612"></a><a class="code" href="classboost_1_1xint_1_1integer__t.html#a67009eed89894e082b609b0890e371cd">00612</a>
  443. <a name="l00614"></a>00614 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  444. <a name="l00615"></a>00615 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a>&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a67009eed89894e082b609b0890e371cd">integer_t&lt;BOOST_XINT_APARAMS&gt;::operator-=</a>(<span class="keyword">const</span>
  445. <a name="l00616"></a>00616 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a> &amp;b)
  446. <a name="l00617"></a>00617 {
  447. <a name="l00618"></a>00618 <span class="keywordflow">if</span> (Nothrow) {
  448. <a name="l00619"></a>00619 <span class="keywordflow">if</span> (b.is_nan()) data.make_nan();
  449. <a name="l00620"></a>00620 <span class="keywordflow">if</span> (!<a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) {
  450. <a name="l00621"></a>00621 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  451. <a name="l00622"></a>00622 data -= b.data;
  452. <a name="l00623"></a>00623 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  453. <a name="l00624"></a>00624 <span class="keywordflow">if</span> (!Signed &amp;&amp; data.negative) _fix_negative_unsigned();
  454. <a name="l00625"></a>00625 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  455. <a name="l00626"></a>00626 data.make_nan();
  456. <a name="l00627"></a>00627 }
  457. <a name="l00628"></a>00628 }
  458. <a name="l00629"></a>00629 } <span class="keywordflow">else</span> {
  459. <a name="l00630"></a>00630 data -= b.data;
  460. <a name="l00631"></a>00631 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  461. <a name="l00632"></a>00632 <span class="keywordflow">if</span> (!Signed &amp;&amp; data.negative) _fix_negative_unsigned();
  462. <a name="l00633"></a>00633 }
  463. <a name="l00634"></a>00634 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
  464. <a name="l00635"></a>00635 }
  465. <a name="l00636"></a><a class="code" href="classboost_1_1xint_1_1integer__t.html#a1932ceee3f8344c15059732250bac0df">00636</a>
  466. <a name="l00638"></a>00638 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  467. <a name="l00639"></a>00639 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a>&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a1932ceee3f8344c15059732250bac0df">integer_t&lt;BOOST_XINT_APARAMS&gt;::operator*=</a>(<span class="keyword">const</span>
  468. <a name="l00640"></a>00640 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a> &amp;b)
  469. <a name="l00641"></a>00641 {
  470. <a name="l00642"></a>00642 <span class="keywordflow">if</span> (Nothrow) {
  471. <a name="l00643"></a>00643 <span class="keywordflow">if</span> (b.is_nan()) data.make_nan();
  472. <a name="l00644"></a>00644 <span class="keywordflow">if</span> (!<a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) {
  473. <a name="l00645"></a>00645 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  474. <a name="l00646"></a>00646 data *= b.data;
  475. <a name="l00647"></a>00647 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  476. <a name="l00648"></a>00648 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  477. <a name="l00649"></a>00649 data.make_nan();
  478. <a name="l00650"></a>00650 }
  479. <a name="l00651"></a>00651 }
  480. <a name="l00652"></a>00652 } <span class="keywordflow">else</span> {
  481. <a name="l00653"></a>00653 data *= b.data;
  482. <a name="l00654"></a>00654 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  483. <a name="l00655"></a>00655 }
  484. <a name="l00656"></a>00656 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
  485. <a name="l00657"></a>00657 }
  486. <a name="l00658"></a><a class="code" href="classboost_1_1xint_1_1integer__t.html#a582f45204112c860bd4884fa51c25aad">00658</a>
  487. <a name="l00660"></a>00660 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  488. <a name="l00661"></a>00661 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a>&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a582f45204112c860bd4884fa51c25aad">integer_t&lt;BOOST_XINT_APARAMS&gt;::operator/=</a>(<span class="keyword">const</span>
  489. <a name="l00662"></a>00662 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a> &amp;b)
  490. <a name="l00663"></a>00663 {
  491. <a name="l00664"></a>00664 <span class="keywordflow">if</span> (Nothrow) {
  492. <a name="l00665"></a>00665 <span class="keywordflow">if</span> (b.is_nan()) data.make_nan();
  493. <a name="l00666"></a>00666 <span class="keywordflow">if</span> (!<a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) {
  494. <a name="l00667"></a>00667 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  495. <a name="l00668"></a>00668 data /= b.data;
  496. <a name="l00669"></a>00669 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  497. <a name="l00670"></a>00670 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  498. <a name="l00671"></a>00671 data.make_nan();
  499. <a name="l00672"></a>00672 }
  500. <a name="l00673"></a>00673 }
  501. <a name="l00674"></a>00674 } <span class="keywordflow">else</span> {
  502. <a name="l00675"></a>00675 data /= b.data;
  503. <a name="l00676"></a>00676 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  504. <a name="l00677"></a>00677 }
  505. <a name="l00678"></a>00678 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
  506. <a name="l00679"></a>00679 }
  507. <a name="l00680"></a><a class="code" href="classboost_1_1xint_1_1integer__t.html#ac05bea273dfad811ba2addd164d1042b">00680</a>
  508. <a name="l00682"></a>00682 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  509. <a name="l00683"></a>00683 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a>&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#ac05bea273dfad811ba2addd164d1042b">integer_t&lt;BOOST_XINT_APARAMS&gt;::operator%=</a>(<span class="keyword">const</span>
  510. <a name="l00684"></a>00684 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a> &amp;b)
  511. <a name="l00685"></a>00685 {
  512. <a name="l00686"></a>00686 <span class="keywordflow">if</span> (Nothrow) {
  513. <a name="l00687"></a>00687 <span class="keywordflow">if</span> (b.is_nan()) data.make_nan();
  514. <a name="l00688"></a>00688 <span class="keywordflow">if</span> (!<a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) {
  515. <a name="l00689"></a>00689 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  516. <a name="l00690"></a>00690 data %= b.data;
  517. <a name="l00691"></a>00691 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  518. <a name="l00692"></a>00692 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  519. <a name="l00693"></a>00693 data.make_nan();
  520. <a name="l00694"></a>00694 }
  521. <a name="l00695"></a>00695 }
  522. <a name="l00696"></a>00696 } <span class="keywordflow">else</span> {
  523. <a name="l00697"></a>00697 data %= b.data;
  524. <a name="l00698"></a>00698 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  525. <a name="l00699"></a>00699 }
  526. <a name="l00700"></a>00700 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
  527. <a name="l00701"></a>00701 }
  528. <a name="l00702"></a>00702
  529. <a name="l00707"></a>00707 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  530. <a name="l00708"></a>00708 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a>&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a719c2966d9e29521eb95863eaa2ec570">integer_t&lt;BOOST_XINT_APARAMS&gt;::operator++</a>() {
  531. <a name="l00709"></a>00709 <span class="keywordflow">if</span> (Nothrow) {
  532. <a name="l00710"></a>00710 <span class="keywordflow">if</span> (!<a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) {
  533. <a name="l00711"></a>00711 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  534. <a name="l00712"></a>00712 ++data;
  535. <a name="l00713"></a>00713 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  536. <a name="l00714"></a>00714 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  537. <a name="l00715"></a>00715 data.make_nan();
  538. <a name="l00716"></a>00716 }
  539. <a name="l00717"></a>00717 }
  540. <a name="l00718"></a>00718 } <span class="keywordflow">else</span> {
  541. <a name="l00719"></a>00719 ++data;
  542. <a name="l00720"></a>00720 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  543. <a name="l00721"></a>00721 }
  544. <a name="l00722"></a>00722 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
  545. <a name="l00723"></a>00723 }
  546. <a name="l00724"></a>00724
  547. <a name="l00729"></a>00729 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  548. <a name="l00730"></a>00730 integer_t&lt;BOOST_XINT_APARAMS&gt;&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#abdbcf3ae2ff508e5fc9467b85f9e917c">integer_t&lt;BOOST_XINT_APARAMS&gt;::operator--</a>() {
  549. <a name="l00731"></a>00731 <span class="keywordflow">if</span> (Nothrow) {
  550. <a name="l00732"></a>00732 <span class="keywordflow">if</span> (!<a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) {
  551. <a name="l00733"></a>00733 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  552. <a name="l00734"></a>00734 --data;
  553. <a name="l00735"></a>00735 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  554. <a name="l00736"></a>00736 <span class="keywordflow">if</span> (!Signed &amp;&amp; data.negative) _fix_negative_unsigned();
  555. <a name="l00737"></a>00737 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  556. <a name="l00738"></a>00738 data.make_nan();
  557. <a name="l00739"></a>00739 }
  558. <a name="l00740"></a>00740 }
  559. <a name="l00741"></a>00741 } <span class="keywordflow">else</span> {
  560. <a name="l00742"></a>00742 --data;
  561. <a name="l00743"></a>00743 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  562. <a name="l00744"></a>00744 <span class="keywordflow">if</span> (!Signed &amp;&amp; data.negative) _fix_negative_unsigned();
  563. <a name="l00745"></a>00745 }
  564. <a name="l00746"></a>00746 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
  565. <a name="l00747"></a>00747 }
  566. <a name="l00748"></a>00748
  567. <a name="l00756"></a>00756 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  568. <a name="l00757"></a>00757 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a719c2966d9e29521eb95863eaa2ec570">integer_t&lt;BOOST_XINT_APARAMS&gt;::operator++</a>(<span class="keywordtype">int</span>) {
  569. <a name="l00758"></a>00758 <span class="keywordflow">if</span> (Nothrow) {
  570. <a name="l00759"></a>00759 <span class="keywordflow">if</span> (<a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) <span class="keywordflow">return</span> *<span class="keyword">this</span>;
  571. <a name="l00760"></a>00760 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  572. <a name="l00761"></a>00761 integer_t&lt;BOOST_XINT_APARAMS&gt; r(data++);
  573. <a name="l00762"></a>00762 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) { r._make_unique(); data.make_unique(); }
  574. <a name="l00763"></a>00763 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  575. <a name="l00764"></a>00764 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  576. <a name="l00765"></a>00765 data.make_nan();
  577. <a name="l00766"></a>00766 }
  578. <a name="l00767"></a>00767 } <span class="keywordflow">else</span> {
  579. <a name="l00768"></a>00768 integer_t&lt;BOOST_XINT_APARAMS&gt; r(data++);
  580. <a name="l00769"></a>00769 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) { r._make_unique(); data.make_unique(); }
  581. <a name="l00770"></a>00770 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  582. <a name="l00771"></a>00771 }
  583. <a name="l00772"></a>00772 }
  584. <a name="l00773"></a>00773
  585. <a name="l00781"></a>00781 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  586. <a name="l00782"></a>00782 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="classboost_1_1xint_1_1integer__t.html#abdbcf3ae2ff508e5fc9467b85f9e917c">integer_t&lt;BOOST_XINT_APARAMS&gt;::operator--</a>(<span class="keywordtype">int</span>) {
  587. <a name="l00783"></a>00783 <span class="keywordflow">if</span> (Nothrow) {
  588. <a name="l00784"></a>00784 <span class="keywordflow">if</span> (<a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) <span class="keywordflow">return</span> *<span class="keyword">this</span>;
  589. <a name="l00785"></a>00785 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  590. <a name="l00786"></a>00786 integer_t&lt;BOOST_XINT_APARAMS&gt; r(data--);
  591. <a name="l00787"></a>00787 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) { r._make_unique(); data.make_unique(); }
  592. <a name="l00788"></a>00788 <span class="keywordflow">if</span> (!Signed &amp;&amp; data.negative) _fix_negative_unsigned();
  593. <a name="l00789"></a>00789 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  594. <a name="l00790"></a>00790 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  595. <a name="l00791"></a>00791 data.make_nan();
  596. <a name="l00792"></a>00792 }
  597. <a name="l00793"></a>00793 } <span class="keywordflow">else</span> {
  598. <a name="l00794"></a>00794 integer_t&lt;BOOST_XINT_APARAMS&gt; r(data--);
  599. <a name="l00795"></a>00795 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) { r._make_unique(); data.make_unique(); }
  600. <a name="l00796"></a>00796 <span class="keywordflow">if</span> (!Signed &amp;&amp; data.negative) _fix_negative_unsigned();
  601. <a name="l00797"></a>00797 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  602. <a name="l00798"></a>00798 }
  603. <a name="l00799"></a>00799 }
  604. <a name="l00800"></a><a class="code" href="classboost_1_1xint_1_1integer__t.html#a395d69ce8b4a4fa5e8967f3b658de8ea">00800</a>
  605. <a name="l00802"></a>00802 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  606. <a name="l00803"></a>00803 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a>&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a395d69ce8b4a4fa5e8967f3b658de8ea">integer_t&lt;BOOST_XINT_APARAMS&gt;::operator&amp;=</a>(<span class="keyword">const</span>
  607. <a name="l00804"></a>00804 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a> &amp;n)
  608. <a name="l00805"></a>00805 {
  609. <a name="l00806"></a>00806 <span class="keywordflow">if</span> (Nothrow) {
  610. <a name="l00807"></a>00807 <span class="keywordflow">if</span> (n.is_nan()) data.make_nan();
  611. <a name="l00808"></a>00808 <span class="keywordflow">if</span> (!<a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) {
  612. <a name="l00809"></a>00809 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  613. <a name="l00810"></a>00810 data &amp;= n.data;
  614. <a name="l00811"></a>00811 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  615. <a name="l00812"></a>00812 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  616. <a name="l00813"></a>00813 data.make_nan();
  617. <a name="l00814"></a>00814 }
  618. <a name="l00815"></a>00815 }
  619. <a name="l00816"></a>00816 } <span class="keywordflow">else</span> {
  620. <a name="l00817"></a>00817 data &amp;= n.data;
  621. <a name="l00818"></a>00818 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  622. <a name="l00819"></a>00819 }
  623. <a name="l00820"></a>00820 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
  624. <a name="l00821"></a>00821 }
  625. <a name="l00822"></a><a class="code" href="classboost_1_1xint_1_1integer__t.html#a7a92ce81071327d56d0c21a6b37f62d9">00822</a>
  626. <a name="l00824"></a>00824 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  627. <a name="l00825"></a>00825 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a>&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a7a92ce81071327d56d0c21a6b37f62d9">integer_t&lt;BOOST_XINT_APARAMS&gt;::operator|=</a>(<span class="keyword">const</span>
  628. <a name="l00826"></a>00826 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a> &amp;n)
  629. <a name="l00827"></a>00827 {
  630. <a name="l00828"></a>00828 <span class="keywordflow">if</span> (Nothrow) {
  631. <a name="l00829"></a>00829 <span class="keywordflow">if</span> (n.is_nan()) data.make_nan();
  632. <a name="l00830"></a>00830 <span class="keywordflow">if</span> (!<a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) {
  633. <a name="l00831"></a>00831 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  634. <a name="l00832"></a>00832 data |= n.data;
  635. <a name="l00833"></a>00833 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  636. <a name="l00834"></a>00834 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  637. <a name="l00835"></a>00835 data.make_nan();
  638. <a name="l00836"></a>00836 }
  639. <a name="l00837"></a>00837 }
  640. <a name="l00838"></a>00838 } <span class="keywordflow">else</span> {
  641. <a name="l00839"></a>00839 data |= n.data;
  642. <a name="l00840"></a>00840 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  643. <a name="l00841"></a>00841 }
  644. <a name="l00842"></a>00842 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
  645. <a name="l00843"></a>00843 }
  646. <a name="l00844"></a><a class="code" href="classboost_1_1xint_1_1integer__t.html#a194e4dbdffddde2704de6267f271f53a">00844</a>
  647. <a name="l00846"></a>00846 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  648. <a name="l00847"></a>00847 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a>&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a194e4dbdffddde2704de6267f271f53a">integer_t&lt;BOOST_XINT_APARAMS&gt;::operator^=</a>(<span class="keyword">const</span>
  649. <a name="l00848"></a>00848 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a> &amp;n)
  650. <a name="l00849"></a>00849 {
  651. <a name="l00850"></a>00850 <span class="keywordflow">if</span> (Nothrow) {
  652. <a name="l00851"></a>00851 <span class="keywordflow">if</span> (n.is_nan()) data.make_nan();
  653. <a name="l00852"></a>00852 <span class="keywordflow">if</span> (!<a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) {
  654. <a name="l00853"></a>00853 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  655. <a name="l00854"></a>00854 data ^= n.data;
  656. <a name="l00855"></a>00855 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  657. <a name="l00856"></a>00856 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  658. <a name="l00857"></a>00857 data.make_nan();
  659. <a name="l00858"></a>00858 }
  660. <a name="l00859"></a>00859 }
  661. <a name="l00860"></a>00860 } <span class="keywordflow">else</span> {
  662. <a name="l00861"></a>00861 data ^= n.data;
  663. <a name="l00862"></a>00862 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  664. <a name="l00863"></a>00863 }
  665. <a name="l00864"></a>00864 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
  666. <a name="l00865"></a>00865 }
  667. <a name="l00866"></a>00866
  668. <a name="l00875"></a>00875 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  669. <a name="l00876"></a>00876 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a>
  670. <a name="l00877"></a>00877 <a class="code" href="classboost_1_1xint_1_1integer__t.html#aee68d28e7f5803902ad153dbfab2e8ad" title="Left-shift an integer by a specified number of bits.">integer_t&lt;BOOST_XINT_APARAMS&gt;::operator&lt;&lt;</a>(<a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a> shift)<span class="keyword"> const </span>{
  671. <a name="l00878"></a>00878 <span class="keywordflow">if</span> (Nothrow) {
  672. <a name="l00879"></a>00879 <span class="keywordflow">if</span> (<a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) <span class="keywordflow">return</span> *<span class="keyword">this</span>;
  673. <a name="l00880"></a>00880 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  674. <a name="l00881"></a>00881 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">integer_t&lt;BOOST_XINT_APARAMS&gt;</a> r(data &lt;&lt; shift);
  675. <a name="l00882"></a>00882 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) r._make_unique();
  676. <a name="l00883"></a>00883 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  677. <a name="l00884"></a>00884 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  678. <a name="l00885"></a>00885 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  679. <a name="l00886"></a>00886 }
  680. <a name="l00887"></a>00887 } <span class="keywordflow">else</span> {
  681. <a name="l00888"></a>00888 integer_t&lt;BOOST_XINT_APARAMS&gt; r(data &lt;&lt; shift);
  682. <a name="l00889"></a>00889 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) r._make_unique();
  683. <a name="l00890"></a>00890 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  684. <a name="l00891"></a>00891 }
  685. <a name="l00892"></a>00892 }
  686. <a name="l00893"></a>00893
  687. <a name="l00902"></a>00902 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  688. <a name="l00903"></a>00903 integer_t&lt;BOOST_XINT_APARAMS&gt;
  689. <a name="l00904"></a>00904 <a class="code" href="classboost_1_1xint_1_1integer__t.html#afe9a935bb9de506b29f043b439a196ae" title="Right-shift an integer by a specified number of bits.">integer_t&lt;BOOST_XINT_APARAMS&gt;::operator&gt;&gt;</a>(<a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a> shift)<span class="keyword"> const </span>{
  690. <a name="l00905"></a>00905 <span class="keywordflow">if</span> (Nothrow) {
  691. <a name="l00906"></a>00906 <span class="keywordflow">if</span> (<a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) <span class="keywordflow">return</span> *<span class="keyword">this</span>;
  692. <a name="l00907"></a>00907 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  693. <a name="l00908"></a>00908 integer_t&lt;BOOST_XINT_APARAMS&gt; r(data &gt;&gt; shift);
  694. <a name="l00909"></a>00909 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) r._make_unique();
  695. <a name="l00910"></a>00910 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  696. <a name="l00911"></a>00911 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  697. <a name="l00912"></a>00912 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  698. <a name="l00913"></a>00913 }
  699. <a name="l00914"></a>00914 } <span class="keywordflow">else</span> {
  700. <a name="l00915"></a>00915 integer_t&lt;BOOST_XINT_APARAMS&gt; r(data &gt;&gt; shift);
  701. <a name="l00916"></a>00916 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) r._make_unique();
  702. <a name="l00917"></a>00917 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  703. <a name="l00918"></a>00918 }
  704. <a name="l00919"></a>00919 }
  705. <a name="l00920"></a>00920
  706. <a name="l00922"></a>00922 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  707. <a name="l00923"></a>00923 integer_t&lt;BOOST_XINT_APARAMS&gt;&amp;
  708. <a name="l00924"></a>00924 <a class="code" href="classboost_1_1xint_1_1integer__t.html#a516ce52ae1a8332a1de8711baaea0943">integer_t&lt;BOOST_XINT_APARAMS&gt;::operator&lt;&lt;=</a>(<a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a> shift) {
  709. <a name="l00925"></a>00925 <span class="keywordflow">if</span> (Nothrow) {
  710. <a name="l00926"></a>00926 <span class="keywordflow">if</span> (!<a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) {
  711. <a name="l00927"></a>00927 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  712. <a name="l00928"></a>00928 data &lt;&lt;= shift;
  713. <a name="l00929"></a>00929 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  714. <a name="l00930"></a>00930 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  715. <a name="l00931"></a>00931 data.make_nan();
  716. <a name="l00932"></a>00932 }
  717. <a name="l00933"></a>00933 }
  718. <a name="l00934"></a>00934 } <span class="keywordflow">else</span> {
  719. <a name="l00935"></a>00935 data &lt;&lt;= shift;
  720. <a name="l00936"></a>00936 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  721. <a name="l00937"></a>00937 }
  722. <a name="l00938"></a>00938 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
  723. <a name="l00939"></a>00939 }
  724. <a name="l00940"></a>00940
  725. <a name="l00942"></a>00942 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  726. <a name="l00943"></a>00943 integer_t&lt;BOOST_XINT_APARAMS&gt;&amp;
  727. <a name="l00944"></a>00944 <a class="code" href="classboost_1_1xint_1_1integer__t.html#aa67123e331f61cd7c54e6fb84e09609f">integer_t&lt;BOOST_XINT_APARAMS&gt;::operator&gt;&gt;=</a>(<a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a> shift) {
  728. <a name="l00945"></a>00945 <span class="keywordflow">if</span> (Nothrow) {
  729. <a name="l00946"></a>00946 <span class="keywordflow">if</span> (!<a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) {
  730. <a name="l00947"></a>00947 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  731. <a name="l00948"></a>00948 data &gt;&gt;= shift;
  732. <a name="l00949"></a>00949 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  733. <a name="l00950"></a>00950 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  734. <a name="l00951"></a>00951 data.make_nan();
  735. <a name="l00952"></a>00952 }
  736. <a name="l00953"></a>00953 }
  737. <a name="l00954"></a>00954 } <span class="keywordflow">else</span> {
  738. <a name="l00955"></a>00955 data &gt;&gt;= shift;
  739. <a name="l00956"></a>00956 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) data.make_unique();
  740. <a name="l00957"></a>00957 }
  741. <a name="l00958"></a>00958 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
  742. <a name="l00959"></a>00959 }
  743. <a name="l00960"></a>00960
  744. <a name="l00968"></a>00968 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  745. <a name="l00969"></a>00969 <span class="keywordtype">bool</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html#a28c1cf2549da47e36ada1e3a2a020654" title="Tests the lowest bit of *this to determine oddness.">integer_t&lt;BOOST_XINT_APARAMS&gt;::is_odd</a>()<span class="keyword"> const </span>{
  746. <a name="l00970"></a>00970 <span class="keywordflow">if</span> (Nothrow &amp;&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
  747. <a name="l00971"></a>00971 <span class="keywordflow">return</span> data.is_odd();
  748. <a name="l00972"></a>00972 }
  749. <a name="l00973"></a>00973
  750. <a name="l00981"></a>00981 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  751. <a name="l00982"></a>00982 <span class="keywordtype">bool</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html#af7d57cc73521c4d72bc853435127b790" title="Tests the lowest bit of *this to determine evenness.">integer_t&lt;BOOST_XINT_APARAMS&gt;::is_even</a>()<span class="keyword"> const </span>{
  752. <a name="l00983"></a>00983 <span class="keywordflow">if</span> (Nothrow &amp;&amp; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
  753. <a name="l00984"></a>00984 <span class="keywordflow">return</span> data.is_even();
  754. <a name="l00985"></a>00985 }
  755. <a name="l00986"></a>00986
  756. <a name="l00987"></a>00987 <span class="preprocessor">#ifdef BOOST_XINT_DOXYGEN_IGNORE // Doesn&#39;t really exist, this is here for docs</span>
  757. <a name="l00988"></a>00988 <span class="preprocessor"></span>
  758. <a name="l00999"></a>00999 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  759. <a name="l01000"></a>01000 <span class="keywordtype">bool</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">integer_t&lt;BOOST_XINT_APARAMS&gt;::is_nan</a>() <span class="keyword">const</span>;
  760. <a name="l01001"></a>01001 <span class="preprocessor">#endif // BOOST_XINT_DOXYGEN_IGNORE</span>
  761. <a name="l01002"></a>01002 <span class="preprocessor"></span>
  762. <a name="l01014"></a>01014 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  763. <a name="l01015"></a>01015 <span class="keywordtype">int</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html#aa278c48753019fe3deaa623eecdb16b3" title="Tests the sign of *this.">integer_t&lt;BOOST_XINT_APARAMS&gt;::sign</a>(<span class="keywordtype">bool</span> signed_zero)<span class="keyword"> const </span>{
  764. <a name="l01016"></a>01016 <span class="keywordflow">if</span> (Nothrow) {
  765. <a name="l01017"></a>01017 <span class="keywordflow">if</span> (<a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) <span class="keywordflow">return</span> 0;
  766. <a name="l01018"></a>01018 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  767. <a name="l01019"></a>01019 <span class="keywordflow">return</span> data.sign(signed_zero);
  768. <a name="l01020"></a>01020 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  769. <a name="l01021"></a>01021 <span class="keywordflow">return</span> 0;
  770. <a name="l01022"></a>01022 }
  771. <a name="l01023"></a>01023 } <span class="keywordflow">else</span> {
  772. <a name="l01024"></a>01024 <span class="keywordflow">return</span> data.sign(signed_zero);
  773. <a name="l01025"></a>01025 }
  774. <a name="l01026"></a>01026 }
  775. <a name="l01027"></a>01027
  776. <a name="l01035"></a>01035 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  777. <a name="l01036"></a>01036 <span class="keywordtype">size_t</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html#a6575f1fd58be6bf73145459b4b46afbb" title="Tells you roughly how large *this is.">integer_t&lt;BOOST_XINT_APARAMS&gt;::hex_digits</a>()<span class="keyword"> const </span>{
  778. <a name="l01037"></a>01037 <span class="keywordflow">if</span> (Nothrow) {
  779. <a name="l01038"></a>01038 <span class="keywordflow">if</span> (<a class="code" href="classboost_1_1xint_1_1integer__t.html#a9afdf728b490f4fea0f6bd4805e96bd5" title="Tests whether the object is a Not-a-Number.">is_nan</a>()) <span class="keywordflow">return</span> 0;
  780. <a name="l01039"></a>01039 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  781. <a name="l01040"></a>01040 <span class="keywordflow">return</span> data.hex_digits();
  782. <a name="l01041"></a>01041 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  783. <a name="l01042"></a>01042 <span class="keywordflow">return</span> 0;
  784. <a name="l01043"></a>01043 }
  785. <a name="l01044"></a>01044 } <span class="keywordflow">else</span> {
  786. <a name="l01045"></a>01045 <span class="keywordflow">return</span> data.hex_digits();
  787. <a name="l01046"></a>01046 }
  788. <a name="l01047"></a>01047 }
  789. <a name="l01048"></a>01048
  790. <a name="l01062"></a>01062 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  791. <a name="l01063"></a>01063 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a22a32f5e1926ced95b9400e87dfe9349" title="Calculate the value of 2e">integer_t&lt;BOOST_XINT_APARAMS&gt;::pow2</a>(std::size_t
  792. <a name="l01064"></a>01064 exponent)
  793. <a name="l01065"></a>01065 {
  794. <a name="l01066"></a>01066 <span class="keywordflow">if</span> (Nothrow) {
  795. <a name="l01067"></a>01067 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  796. <a name="l01068"></a>01068 integer_t&lt;BOOST_XINT_APARAMS&gt; r;
  797. <a name="l01069"></a>01069 <a class="code" href="classboost_1_1xint_1_1integer__t.html#a22a32f5e1926ced95b9400e87dfe9349" title="Calculate the value of 2e">detail::pow2</a>(r.data, exponent);
  798. <a name="l01070"></a>01070 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) r._make_unique();
  799. <a name="l01071"></a>01071 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  800. <a name="l01072"></a>01072 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  801. <a name="l01073"></a>01073 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  802. <a name="l01074"></a>01074 }
  803. <a name="l01075"></a>01075 } <span class="keywordflow">else</span> {
  804. <a name="l01076"></a>01076 integer_t&lt;BOOST_XINT_APARAMS&gt; r;
  805. <a name="l01077"></a>01077 <a class="code" href="classboost_1_1xint_1_1integer__t.html#a22a32f5e1926ced95b9400e87dfe9349" title="Calculate the value of 2e">detail::pow2</a>(r.data, exponent);
  806. <a name="l01078"></a>01078 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) r._make_unique();
  807. <a name="l01079"></a>01079 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  808. <a name="l01080"></a>01080 }
  809. <a name="l01081"></a>01081 }
  810. <a name="l01082"></a>01082
  811. <a name="l01096"></a>01096 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  812. <a name="l01097"></a>01097 integer_t&lt;BOOST_XINT_APARAMS&gt;
  813. <a name="l01098"></a>01098 <a class="code" href="classboost_1_1xint_1_1integer__t.html#a16b836e12f76f2560ee697fb399dbc2e" title="Calculate the value of n! ">integer_t&lt;BOOST_XINT_APARAMS&gt;::factorial</a>(std::size_t n) {
  814. <a name="l01099"></a>01099 <span class="keywordflow">if</span> (Nothrow) {
  815. <a name="l01100"></a>01100 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  816. <a name="l01101"></a>01101 integer_t&lt;BOOST_XINT_APARAMS&gt; r;
  817. <a name="l01102"></a>01102 <a class="code" href="classboost_1_1xint_1_1integer__t.html#a16b836e12f76f2560ee697fb399dbc2e" title="Calculate the value of n! ">detail::factorial</a>(r.data, n);
  818. <a name="l01103"></a>01103 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) r._make_unique();
  819. <a name="l01104"></a>01104 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  820. <a name="l01105"></a>01105 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  821. <a name="l01106"></a>01106 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  822. <a name="l01107"></a>01107 }
  823. <a name="l01108"></a>01108 } <span class="keywordflow">else</span> {
  824. <a name="l01109"></a>01109 integer_t&lt;BOOST_XINT_APARAMS&gt; r;
  825. <a name="l01110"></a>01110 <a class="code" href="classboost_1_1xint_1_1integer__t.html#a16b836e12f76f2560ee697fb399dbc2e" title="Calculate the value of n! ">detail::factorial</a>(r.data, n);
  826. <a name="l01111"></a>01111 <span class="keywordflow">if</span> (Threadsafe == <span class="keyword">true</span>) r._make_unique();
  827. <a name="l01112"></a>01112 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  828. <a name="l01113"></a>01113 }
  829. <a name="l01114"></a>01114 }
  830. <a name="l01115"></a>01115
  831. <a name="l01116"></a>01116 <span class="preprocessor">#ifdef BOOST_XINT_DOXYGEN_IGNORE // Doesn&#39;t really exist, this is here for docs</span>
  832. <a name="l01117"></a>01117 <span class="preprocessor"></span>
  833. <a name="l01128"></a>01128 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  834. <a name="l01129"></a>01129 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="classboost_1_1xint_1_1integer__t.html#a26cf36c3ec3664dc91b8aaa86748247d" title="Returns a Not-a-Number value, for types that support it.">integer_t&lt;BOOST_XINT_APARAMS&gt;::nan</a>();
  835. <a name="l01130"></a>01130 <span class="preprocessor">#endif // BOOST_XINT_DOXYGEN_IGNORE</span>
  836. <a name="l01131"></a>01131 <span class="preprocessor"></span>
  837. <a name="l01156"></a>01156 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  838. <a name="l01157"></a>01157 <span class="keyword">template</span> &lt;<span class="keyword">class</span> Type&gt;
  839. <a name="l01158"></a>01158 integer_t&lt;BOOST_XINT_APARAMS&gt;<a class="code" href="classboost_1_1xint_1_1integer__t.html#a1d7c4d0ae13e84bbac07e6c6eb01334e" title="Generates a random integer with specific attributes.">integer_t&lt;BOOST_XINT_APARAMS&gt;::random_by_size</a>(Type
  840. <a name="l01159"></a>01159 &amp;gen, <a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a> size_in_bits, <span class="keywordtype">bool</span> high_bit_on, <span class="keywordtype">bool</span> low_bit_on, <span class="keywordtype">bool</span>
  841. <a name="l01160"></a>01160 can_be_negative)
  842. <a name="l01161"></a>01161 {
  843. <a name="l01162"></a>01162 <span class="keywordflow">if</span> (!Signed) can_be_negative = <span class="keyword">false</span>;
  844. <a name="l01163"></a>01163 <span class="keywordflow">if</span> (Nothrow) {
  845. <a name="l01164"></a>01164 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  846. <a name="l01165"></a>01165 <span class="keywordflow">return</span> integer_t&lt;BOOST_XINT_APARAMS&gt;(<a class="code" href="classboost_1_1xint_1_1integer__t.html#a1d7c4d0ae13e84bbac07e6c6eb01334e" title="Generates a random integer with specific attributes.">datatype::random_by_size</a>(gen,
  847. <a name="l01166"></a>01166 size_in_bits, high_bit_on, low_bit_on, can_be_negative));
  848. <a name="l01167"></a>01167 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  849. <a name="l01168"></a>01168 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  850. <a name="l01169"></a>01169 }
  851. <a name="l01170"></a>01170 } <span class="keywordflow">else</span> {
  852. <a name="l01171"></a>01171 <span class="keywordflow">return</span> integer_t&lt;BOOST_XINT_APARAMS&gt;(<a class="code" href="classboost_1_1xint_1_1integer__t.html#a1d7c4d0ae13e84bbac07e6c6eb01334e" title="Generates a random integer with specific attributes.">datatype::random_by_size</a>(gen,
  853. <a name="l01172"></a>01172 size_in_bits, high_bit_on, low_bit_on, can_be_negative));
  854. <a name="l01173"></a>01173 }
  855. <a name="l01174"></a>01174 }
  856. <a name="l01175"></a>01175
  857. <a name="l01203"></a>01203 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  858. <a name="l01204"></a>01204 <span class="keyword">template</span> &lt;<span class="keyword">class</span> Type&gt;
  859. <a name="l01205"></a>01205 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="classboost_1_1xint_1_1integer__t.html#afbbf1fba0d65e5348b1771003ba40ae1" title="Generate a randomly-generated prime number of a particular bit-size.">integer_t&lt;BOOST_XINT_APARAMS&gt;::random_prime</a>(Type
  860. <a name="l01206"></a>01206 &amp;gen, <a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a> size_in_bits, <a class="code" href="namespaceboost_1_1xint.html#a48deb76c9c428a4b3a50177b1b0cb547" title="A callback function takes no parameters and returns a bool.">callback_t</a> callback)
  861. <a name="l01207"></a>01207 {
  862. <a name="l01208"></a>01208 <span class="keywordflow">if</span> (Nothrow) {
  863. <a name="l01209"></a>01209 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  864. <a name="l01210"></a>01210 <span class="keywordflow">return</span> integer_t&lt;BOOST_XINT_APARAMS&gt;(<a class="code" href="classboost_1_1xint_1_1integer__t.html#afbbf1fba0d65e5348b1771003ba40ae1" title="Generate a randomly-generated prime number of a particular bit-size.">datatype::random_prime</a>(gen,
  865. <a name="l01211"></a>01211 size_in_bits, callback));
  866. <a name="l01212"></a>01212 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  867. <a name="l01213"></a>01213 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  868. <a name="l01214"></a>01214 }
  869. <a name="l01215"></a>01215 } <span class="keywordflow">else</span> {
  870. <a name="l01216"></a>01216 <span class="keywordflow">return</span> integer_t&lt;BOOST_XINT_APARAMS&gt;(<a class="code" href="classboost_1_1xint_1_1integer__t.html#afbbf1fba0d65e5348b1771003ba40ae1" title="Generate a randomly-generated prime number of a particular bit-size.">datatype::random_prime</a>(gen,
  871. <a name="l01217"></a>01217 size_in_bits, callback));
  872. <a name="l01218"></a>01218 }
  873. <a name="l01219"></a>01219 }
  874. <a name="l01220"></a>01220
  875. <a name="l01222"></a>01222 <span class="comment">// Free function template definitions</span>
  876. <a name="l01228"></a>01228 <span class="comment"></span>
  877. <a name="l01229"></a>01229
  878. <a name="l01238"></a>01238 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  879. <a name="l01239"></a>01239 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="namespaceboost_1_1xint.html#a2f1e1b068b9aa5aa1a360e3df085d14b" title="Returns the absolute value of an integer.">abs</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n) {
  880. <a name="l01240"></a>01240 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  881. <a name="l01241"></a>01241 <span class="keywordflow">if</span> (n.is_nan())
  882. <a name="l01242"></a>01242 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  883. <a name="l01243"></a>01243 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  884. <a name="l01244"></a>01244 integer_t&lt;BOOST_XINT_APARAMS&gt; r(n._data().abs());
  885. <a name="l01245"></a>01245 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == <span class="keyword">true</span>)
  886. <a name="l01246"></a>01246 r._make_unique();
  887. <a name="l01247"></a>01247 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  888. <a name="l01248"></a>01248 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  889. <a name="l01249"></a>01249 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  890. <a name="l01250"></a>01250 }
  891. <a name="l01251"></a>01251 } <span class="keywordflow">else</span> {
  892. <a name="l01252"></a>01252 integer_t&lt;BOOST_XINT_APARAMS&gt; r(n._data().abs());
  893. <a name="l01253"></a>01253 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == <span class="keyword">true</span>) r._make_unique();
  894. <a name="l01254"></a>01254 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  895. <a name="l01255"></a>01255 }
  896. <a name="l01256"></a>01256 }
  897. <a name="l01257"></a>01257
  898. <a name="l01276"></a>01276 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  899. <a name="l01277"></a>01277 <span class="keyword">typename</span> integer_t&lt;BOOST_XINT_APARAMS&gt;::divide_t <a class="code" href="namespaceboost_1_1xint.html#a27a4246ecb302ad52281c65ef05003c6" title="Calculate how many dividends would fit into divisor, with the remainder.">divide</a>(<span class="keyword">const</span>
  900. <a name="l01278"></a>01278 integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;dividend, <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt;
  901. <a name="l01279"></a>01279 &amp;divisor)
  902. <a name="l01280"></a>01280 {
  903. <a name="l01281"></a>01281 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  904. <a name="l01282"></a>01282 <span class="keywordflow">if</span> (dividend.is_nan() || divisor.is_nan()) <span class="keywordflow">return</span> <span class="keyword">typename</span>
  905. <a name="l01283"></a>01283 integer_t&lt;BOOST_XINT_APARAMS&gt;::divide_t(detail::get_nan&lt;
  906. <a name="l01284"></a>01284 integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;(), detail::get_nan&lt;
  907. <a name="l01285"></a>01285 integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;());
  908. <a name="l01286"></a>01286 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  909. <a name="l01287"></a>01287 <span class="keyword">typename</span> integer_t&lt;BOOST_XINT_APARAMS&gt;::datatype::divide_t rr =
  910. <a name="l01288"></a>01288 <a class="code" href="namespaceboost_1_1xint.html#a27a4246ecb302ad52281c65ef05003c6" title="Calculate how many dividends would fit into divisor, with the remainder.">detail::divide</a>(dividend._data(), divisor._data());
  911. <a name="l01289"></a>01289 <span class="keyword">typename</span> integer_t&lt;BOOST_XINT_APARAMS&gt;::divide_t
  912. <a name="l01290"></a>01290 r(integer_t&lt;BOOST_XINT_APARAMS&gt;(rr.quotient),
  913. <a name="l01291"></a>01291 integer_t&lt;BOOST_XINT_APARAMS&gt;(rr.remainder));
  914. <a name="l01292"></a>01292 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  915. <a name="l01293"></a>01293 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  916. <a name="l01294"></a>01294 <span class="keywordflow">return</span> <span class="keyword">typename</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html#ab7a2481c7347c73bd927286879404bba">integer_t&lt;BOOST_XINT_APARAMS&gt;::divide_t</a>(
  917. <a name="l01295"></a>01295 detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;(),
  918. <a name="l01296"></a>01296 detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;());
  919. <a name="l01297"></a>01297 }
  920. <a name="l01298"></a>01298 } <span class="keywordflow">else</span> {
  921. <a name="l01299"></a>01299 <span class="keyword">typename</span> integer_t&lt;BOOST_XINT_APARAMS&gt;::datatype::divide_t rr =
  922. <a name="l01300"></a>01300 <a class="code" href="namespaceboost_1_1xint.html#a27a4246ecb302ad52281c65ef05003c6" title="Calculate how many dividends would fit into divisor, with the remainder.">detail::divide</a>(dividend._data(), divisor._data());
  923. <a name="l01301"></a>01301 <span class="keyword">typename</span> integer_t&lt;BOOST_XINT_APARAMS&gt;::divide_t
  924. <a name="l01302"></a>01302 r(integer_t&lt;BOOST_XINT_APARAMS&gt;(rr.quotient),
  925. <a name="l01303"></a>01303 integer_t&lt;BOOST_XINT_APARAMS&gt;(rr.remainder));
  926. <a name="l01304"></a>01304 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  927. <a name="l01305"></a>01305 }
  928. <a name="l01306"></a>01306 }
  929. <a name="l01307"></a>01307
  930. <a name="l01320"></a>01320 <span class="keyword">template</span> &lt;BOOST_XINT_CLASS_APARAMS&gt;
  931. <a name="l01321"></a>01321 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="namespaceboost_1_1xint.html#a9c53a1e1a4856593e0a5d205916f992f" title="Calculate the absolute difference between two integers.">difference</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt;
  932. <a name="l01322"></a>01322 &amp;n1, <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n2)
  933. <a name="l01323"></a>01323 {
  934. <a name="l01324"></a>01324 <span class="keyword">typename</span> integer_t&lt;BOOST_XINT_APARAMS&gt;::datatype rdata = n1._data() -
  935. <a name="l01325"></a>01325 n2._data();
  936. <a name="l01326"></a>01326 rdata.negative = <span class="keyword">false</span>;
  937. <a name="l01327"></a>01327 <span class="keywordflow">return</span> integer_t&lt;BOOST_XINT_APARAMS&gt;(rdata);
  938. <a name="l01328"></a>01328 }
  939. <a name="l01330"></a>01330
  940. <a name="l01336"></a>01336
  941. <a name="l01337"></a>01337
  942. <a name="l01349"></a>01349 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  943. <a name="l01350"></a>01350 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="namespaceboost_1_1xint.html#a7a903e726e6fa1eb4a6978fdc10abc4a" title="Calculate the value of n2">square</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n) {
  944. <a name="l01351"></a>01351 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  945. <a name="l01352"></a>01352 <span class="keywordflow">if</span> (n.is_nan()) <span class="keywordflow">return</span> n;
  946. <a name="l01353"></a>01353 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  947. <a name="l01354"></a>01354 integer_t&lt;BOOST_XINT_APARAMS&gt; r(<a class="code" href="namespaceboost_1_1xint.html#a7a903e726e6fa1eb4a6978fdc10abc4a" title="Calculate the value of n2">detail::square</a>(n._data()));
  948. <a name="l01355"></a>01355 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == <span class="keyword">true</span>)
  949. <a name="l01356"></a>01356 r._make_unique();
  950. <a name="l01357"></a>01357 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  951. <a name="l01358"></a>01358 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  952. <a name="l01359"></a>01359 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  953. <a name="l01360"></a>01360 }
  954. <a name="l01361"></a>01361 } <span class="keywordflow">else</span> {
  955. <a name="l01362"></a>01362 integer_t&lt;BOOST_XINT_APARAMS&gt; r(<a class="code" href="namespaceboost_1_1xint.html#a7a903e726e6fa1eb4a6978fdc10abc4a" title="Calculate the value of n2">detail::square</a>(n._data()));
  956. <a name="l01363"></a>01363 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == <span class="keyword">true</span>) r._make_unique();
  957. <a name="l01364"></a>01364 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  958. <a name="l01365"></a>01365 }
  959. <a name="l01366"></a>01366 }
  960. <a name="l01367"></a>01367
  961. <a name="l01376"></a>01376 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  962. <a name="l01377"></a>01377 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="namespaceboost_1_1xint.html#ac03c41be124545559036ccf571da326f" title="Calculate the value of ne">pow</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n, <span class="keyword">const</span>
  963. <a name="l01378"></a>01378 integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;e)
  964. <a name="l01379"></a>01379 {
  965. <a name="l01380"></a>01380 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  966. <a name="l01381"></a>01381 <span class="keywordflow">if</span> (n.is_nan() || e.is_nan())
  967. <a name="l01382"></a>01382 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  968. <a name="l01383"></a>01383 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  969. <a name="l01384"></a>01384 integer_t&lt;BOOST_XINT_APARAMS&gt; r;
  970. <a name="l01385"></a>01385 <a class="code" href="namespaceboost_1_1xint.html#ac03c41be124545559036ccf571da326f" title="Calculate the value of ne">pow</a>(r._data(), n._data(), e._data());
  971. <a name="l01386"></a>01386 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == <span class="keyword">true</span>)
  972. <a name="l01387"></a>01387 r._make_unique();
  973. <a name="l01388"></a>01388 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  974. <a name="l01389"></a>01389 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  975. <a name="l01390"></a>01390 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  976. <a name="l01391"></a>01391 }
  977. <a name="l01392"></a>01392 } <span class="keywordflow">else</span> {
  978. <a name="l01393"></a>01393 integer_t&lt;BOOST_XINT_APARAMS&gt; r;
  979. <a name="l01394"></a>01394 <a class="code" href="namespaceboost_1_1xint.html#ac03c41be124545559036ccf571da326f" title="Calculate the value of ne">pow</a>(r._data(), n._data(), e._data());
  980. <a name="l01395"></a>01395 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == <span class="keyword">true</span>) r._make_unique();
  981. <a name="l01396"></a>01396 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  982. <a name="l01397"></a>01397 }
  983. <a name="l01398"></a>01398 }
  984. <a name="l01399"></a>01399
  985. <a name="l01415"></a>01415 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  986. <a name="l01416"></a>01416 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="namespaceboost_1_1xint.html#a72f90f48f29ed6c7c329ef2e6746f6b4" title="Calculate the square root of an integer.">square_root</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt;
  987. <a name="l01417"></a>01417 &amp;n)
  988. <a name="l01418"></a>01418 {
  989. <a name="l01419"></a>01419 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  990. <a name="l01420"></a>01420 <span class="keywordflow">if</span> (n.is_nan()) <span class="keywordflow">return</span> n;
  991. <a name="l01421"></a>01421 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  992. <a name="l01422"></a>01422 integer_t&lt;BOOST_XINT_APARAMS&gt; r(<a class="code" href="namespaceboost_1_1xint.html#a72f90f48f29ed6c7c329ef2e6746f6b4" title="Calculate the square root of an integer.">square_root</a>(n._data()));
  993. <a name="l01423"></a>01423 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == <span class="keyword">true</span>)
  994. <a name="l01424"></a>01424 r._make_unique();
  995. <a name="l01425"></a>01425 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  996. <a name="l01426"></a>01426 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  997. <a name="l01427"></a>01427 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  998. <a name="l01428"></a>01428 }
  999. <a name="l01429"></a>01429 } <span class="keywordflow">else</span> {
  1000. <a name="l01430"></a>01430 integer_t&lt;BOOST_XINT_APARAMS&gt; r(<a class="code" href="namespaceboost_1_1xint.html#a72f90f48f29ed6c7c329ef2e6746f6b4" title="Calculate the square root of an integer.">square_root</a>(n._data()));
  1001. <a name="l01431"></a>01431 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == <span class="keyword">true</span>) r._make_unique();
  1002. <a name="l01432"></a>01432 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1003. <a name="l01433"></a>01433 }
  1004. <a name="l01434"></a>01434 }
  1005. <a name="l01436"></a>01436
  1006. <a name="l01442"></a>01442
  1007. <a name="l01443"></a>01443
  1008. <a name="l01456"></a>01456 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, BOOST_XINT_CLASS_APARAMS&gt;
  1009. <a name="l01457"></a>01457 T <a class="code" href="namespaceboost_1_1xint.html#ad1c73dd3865a880bbee63ba14250ea45" title="Converts an xint::integer type to a built-in integer type.">to</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n) {
  1010. <a name="l01458"></a>01458 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1011. <a name="l01459"></a>01459 <span class="keywordflow">if</span> (n.is_nan()) <span class="keywordflow">return</span> T(0);
  1012. <a name="l01460"></a>01460 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1013. <a name="l01461"></a>01461 <span class="keywordflow">return</span> to&lt;T&gt;(n._data());
  1014. <a name="l01462"></a>01462 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1015. <a name="l01463"></a>01463 <span class="keywordflow">return</span> T(0);
  1016. <a name="l01464"></a>01464 }
  1017. <a name="l01465"></a>01465 } <span class="keywordflow">else</span> {
  1018. <a name="l01466"></a>01466 <span class="keywordflow">return</span> to&lt;T&gt;(n._data());
  1019. <a name="l01467"></a>01467 }
  1020. <a name="l01468"></a>01468 }
  1021. <a name="l01469"></a>01469
  1022. <a name="l01492"></a>01492 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> <span class="keywordtype">char</span>T, BOOST_XINT_CLASS_APARAMS&gt;
  1023. <a name="l01493"></a>01493 std::basic_string&lt;charT&gt; <a class="code" href="namespaceboost_1_1xint.html#afb1f42b7119d9954a1efe3e192af083c" title="Creates a string representation of the specified integer.">to_stringtype</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n,
  1024. <a name="l01494"></a>01494 std::size_t base = 10, <span class="keywordtype">bool</span> uppercase = <span class="keyword">false</span>)
  1025. <a name="l01495"></a>01495 {
  1026. <a name="l01496"></a>01496 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1027. <a name="l01497"></a>01497 <span class="keywordflow">if</span> (n.is_nan()) <span class="keywordflow">return</span> detail::nan_text&lt;charT&gt;();
  1028. <a name="l01498"></a>01498 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1029. <a name="l01499"></a>01499 <span class="keywordflow">return</span> detail::to_string&lt;charT&gt;(n._data(), base, uppercase);
  1030. <a name="l01500"></a>01500 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1031. <a name="l01501"></a>01501 <span class="keywordflow">return</span> std::basic_string&lt;charT&gt;();
  1032. <a name="l01502"></a>01502 }
  1033. <a name="l01503"></a>01503 } <span class="keywordflow">else</span> {
  1034. <a name="l01504"></a>01504 <span class="keywordflow">return</span> detail::to_string&lt;charT&gt;(n._data(), base, uppercase);
  1035. <a name="l01505"></a>01505 }
  1036. <a name="l01506"></a>01506 }
  1037. <a name="l01507"></a>01507
  1038. <a name="l01511"></a>01511 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1039. <a name="l01512"></a>01512 std::string <a class="code" href="namespaceboost_1_1xint.html#a1e60c4471668f1dcb8a676fbccdfd12a" title="A shorthand function that calls to_stringtype&amp;lt;char&amp;gt;.">to_string</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n, std::size_t base =
  1040. <a name="l01513"></a>01513 10, <span class="keywordtype">bool</span> uppercase = <span class="keyword">false</span>)
  1041. <a name="l01514"></a>01514 {
  1042. <a name="l01515"></a>01515 <span class="keywordflow">return</span> to_stringtype&lt;char&gt;(n, base, uppercase);
  1043. <a name="l01516"></a>01516 }
  1044. <a name="l01517"></a>01517
  1045. <a name="l01521"></a>01521 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1046. <a name="l01522"></a>01522 std::wstring <a class="code" href="namespaceboost_1_1xint.html#a8fce6e67eaedc033fc2c2a8c792db6f1" title="A shorthand function that calls to_stringtype&amp;lt;wchar_t&amp;gt;.">to_wstring</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; n, std::size_t base
  1047. <a name="l01523"></a>01523 = 10, <span class="keywordtype">bool</span> uppercase = <span class="keyword">false</span>)
  1048. <a name="l01524"></a>01524 {
  1049. <a name="l01525"></a>01525 <span class="keywordflow">return</span> to_stringtype&lt;wchar_t&gt;(n, base, uppercase);
  1050. <a name="l01526"></a>01526 }
  1051. <a name="l01527"></a>01527
  1052. <a name="l01555"></a>01555 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1053. <a name="l01556"></a>01556 <a class="code" href="namespaceboost_1_1xint.html#aae3128529370506165793f2771834e58" title="The format for the binary representations of integers.">xint::binary_t</a> <a class="code" href="namespaceboost_1_1xint.html#af63adeb454701f4425bdd158d7f33e13" title="Creates a binary representation of an integer.">to_binary</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n, <a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a> bits
  1054. <a name="l01557"></a>01557 = 0)
  1055. <a name="l01558"></a>01558 {
  1056. <a name="l01559"></a>01559 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1057. <a name="l01560"></a>01560 <span class="keywordflow">if</span> (n.is_nan()) <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#aae3128529370506165793f2771834e58" title="The format for the binary representations of integers.">xint::binary_t</a>();
  1058. <a name="l01561"></a>01561 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1059. <a name="l01562"></a>01562 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#af63adeb454701f4425bdd158d7f33e13" title="Creates a binary representation of an integer.">to_binary</a>(n._data(), bits);
  1060. <a name="l01563"></a>01563 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1061. <a name="l01564"></a>01564 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#aae3128529370506165793f2771834e58" title="The format for the binary representations of integers.">xint::binary_t</a>();
  1062. <a name="l01565"></a>01565 }
  1063. <a name="l01566"></a>01566 } <span class="keywordflow">else</span> {
  1064. <a name="l01567"></a>01567 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#af63adeb454701f4425bdd158d7f33e13" title="Creates a binary representation of an integer.">to_binary</a>(n._data(), bits);
  1065. <a name="l01568"></a>01568 }
  1066. <a name="l01569"></a>01569 }
  1067. <a name="l01571"></a>01571
  1068. <a name="l01574"></a>01574
  1069. <a name="l01585"></a>01585 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1070. <a name="l01586"></a>01586 <span class="keywordtype">bool</span> <a class="code" href="namespaceboost_1_1xint.html#ae706bb03b1afc7a0336fd319aa575661" title="Queries the value of a particular bit in an integer.">getbit</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n, <a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a> bit) {
  1071. <a name="l01587"></a>01587 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1072. <a name="l01588"></a>01588 <span class="keywordflow">if</span> (n.is_nan()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
  1073. <a name="l01589"></a>01589 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1074. <a name="l01590"></a>01590 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#ae706bb03b1afc7a0336fd319aa575661" title="Queries the value of a particular bit in an integer.">getbit</a>(n._data(), bit);
  1075. <a name="l01591"></a>01591 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1076. <a name="l01592"></a>01592 <span class="keywordflow">return</span> <span class="keyword">false</span>;
  1077. <a name="l01593"></a>01593 }
  1078. <a name="l01594"></a>01594 } <span class="keywordflow">else</span> {
  1079. <a name="l01595"></a>01595 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#ae706bb03b1afc7a0336fd319aa575661" title="Queries the value of a particular bit in an integer.">getbit</a>(n._data(), bit);
  1080. <a name="l01596"></a>01596 }
  1081. <a name="l01597"></a>01597 }
  1082. <a name="l01598"></a>01598
  1083. <a name="l01608"></a>01608 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1084. <a name="l01609"></a>01609 <span class="keywordtype">void</span> <a class="code" href="namespaceboost_1_1xint.html#a0310b7c112f4041e77e390947ad21d48" title="Sets a specific bit in an integer to one.">setbit</a>(integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n, <a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a> bit) {
  1085. <a name="l01610"></a>01610 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1086. <a name="l01611"></a>01611 <span class="keywordflow">if</span> (!n.is_nan()) {
  1087. <a name="l01612"></a>01612 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1088. <a name="l01613"></a>01613 <a class="code" href="namespaceboost_1_1xint.html#a0310b7c112f4041e77e390947ad21d48" title="Sets a specific bit in an integer to one.">setbit</a>(n._data(), bit);
  1089. <a name="l01614"></a>01614 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1090. <a name="l01615"></a>01615 <span class="comment">// Do nothing.</span>
  1091. <a name="l01616"></a>01616 }
  1092. <a name="l01617"></a>01617 }
  1093. <a name="l01618"></a>01618 } <span class="keywordflow">else</span> {
  1094. <a name="l01619"></a>01619 <a class="code" href="namespaceboost_1_1xint.html#a0310b7c112f4041e77e390947ad21d48" title="Sets a specific bit in an integer to one.">setbit</a>(n._data(), bit);
  1095. <a name="l01620"></a>01620 }
  1096. <a name="l01621"></a>01621 }
  1097. <a name="l01622"></a>01622
  1098. <a name="l01632"></a>01632 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1099. <a name="l01633"></a>01633 <span class="keywordtype">void</span> <a class="code" href="namespaceboost_1_1xint.html#a4c39b39cb61c0d8f5d6afa61794640ec" title="Sets a specific bit in an integer to zero.">clearbit</a>(integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n, <a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a> bit) {
  1100. <a name="l01634"></a>01634 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1101. <a name="l01635"></a>01635 <span class="keywordflow">if</span> (!n.is_nan()) {
  1102. <a name="l01636"></a>01636 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1103. <a name="l01637"></a>01637 <a class="code" href="namespaceboost_1_1xint.html#a4c39b39cb61c0d8f5d6afa61794640ec" title="Sets a specific bit in an integer to zero.">clearbit</a>(n._data(), bit);
  1104. <a name="l01638"></a>01638 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1105. <a name="l01639"></a>01639 <span class="comment">// Do nothing.</span>
  1106. <a name="l01640"></a>01640 }
  1107. <a name="l01641"></a>01641 }
  1108. <a name="l01642"></a>01642 } <span class="keywordflow">else</span> {
  1109. <a name="l01643"></a>01643 <a class="code" href="namespaceboost_1_1xint.html#a4c39b39cb61c0d8f5d6afa61794640ec" title="Sets a specific bit in an integer to zero.">clearbit</a>(n._data(), bit);
  1110. <a name="l01644"></a>01644 }
  1111. <a name="l01645"></a>01645 }
  1112. <a name="l01646"></a>01646
  1113. <a name="l01660"></a>01660 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1114. <a name="l01661"></a>01661 <a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a> <a class="code" href="namespaceboost_1_1xint.html#a73ff2e1bb30b9b76c3cda34361e4cf0a" title="Obtains the index of the lowest bit in an integer with a value of one.">lowestbit</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n, <a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a>
  1115. <a name="l01662"></a>01662 return_if_zero = 0)
  1116. <a name="l01663"></a>01663 {
  1117. <a name="l01664"></a>01664 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1118. <a name="l01665"></a>01665 <span class="keywordflow">if</span> (n.is_nan()) <span class="keywordflow">return</span> return_if_zero;
  1119. <a name="l01666"></a>01666 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1120. <a name="l01667"></a>01667 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#a73ff2e1bb30b9b76c3cda34361e4cf0a" title="Obtains the index of the lowest bit in an integer with a value of one.">lowestbit</a>(n._data(), return_if_zero);
  1121. <a name="l01668"></a>01668 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1122. <a name="l01669"></a>01669 <span class="keywordflow">return</span> return_if_zero;
  1123. <a name="l01670"></a>01670 }
  1124. <a name="l01671"></a>01671 } <span class="keywordflow">else</span> {
  1125. <a name="l01672"></a>01672 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#a73ff2e1bb30b9b76c3cda34361e4cf0a" title="Obtains the index of the lowest bit in an integer with a value of one.">lowestbit</a>(n._data(), return_if_zero);
  1126. <a name="l01673"></a>01673 }
  1127. <a name="l01674"></a>01674 }
  1128. <a name="l01675"></a>01675
  1129. <a name="l01689"></a>01689 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1130. <a name="l01690"></a>01690 <a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a> <a class="code" href="namespaceboost_1_1xint.html#ae9a648d29cb5b07c130354832ee42d71" title="Obtains the index of the highest bit in an integer with a value of one.">highestbit</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n, <a class="code" href="namespaceboost_1_1xint.html#ae9f6d103df04ad19a841ed3f8b94a764" title="This makes it easier to tell when an item is measured in bits.">bitsize_t</a>
  1131. <a name="l01691"></a>01691 return_if_zero = 0)
  1132. <a name="l01692"></a>01692 {
  1133. <a name="l01693"></a>01693 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1134. <a name="l01694"></a>01694 <span class="keywordflow">if</span> (n.is_nan()) <span class="keywordflow">return</span> return_if_zero;
  1135. <a name="l01695"></a>01695 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1136. <a name="l01696"></a>01696 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#ae9a648d29cb5b07c130354832ee42d71" title="Obtains the index of the highest bit in an integer with a value of one.">highestbit</a>(n._data(), return_if_zero);
  1137. <a name="l01697"></a>01697 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1138. <a name="l01698"></a>01698 <span class="keywordflow">return</span> return_if_zero;
  1139. <a name="l01699"></a>01699 }
  1140. <a name="l01700"></a>01700 } <span class="keywordflow">else</span> {
  1141. <a name="l01701"></a>01701 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#ae9a648d29cb5b07c130354832ee42d71" title="Obtains the index of the highest bit in an integer with a value of one.">highestbit</a>(n._data(), return_if_zero);
  1142. <a name="l01702"></a>01702 }
  1143. <a name="l01703"></a>01703 }
  1144. <a name="l01705"></a>01705
  1145. <a name="l01714"></a>01714
  1146. <a name="l01715"></a>01715
  1147. <a name="l01730"></a>01730 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1148. <a name="l01731"></a>01731 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="namespaceboost_1_1xint.html#a18215d233c7e0d932960b9818b1cac80" title="Get the modular product of two integers.">mulmod</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n,
  1149. <a name="l01732"></a>01732 <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;by, <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt;
  1150. <a name="l01733"></a>01733 &amp;modulus)
  1151. <a name="l01734"></a>01734 {
  1152. <a name="l01735"></a>01735 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1153. <a name="l01736"></a>01736 <span class="keywordflow">if</span> (n.is_nan() || by.is_nan() || modulus.is_nan()) <span class="keywordflow">return</span>
  1154. <a name="l01737"></a>01737 detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1155. <a name="l01738"></a>01738 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1156. <a name="l01739"></a>01739 integer_t&lt;BOOST_XINT_APARAMS&gt; r(<a class="code" href="namespaceboost_1_1xint.html#a18215d233c7e0d932960b9818b1cac80" title="Get the modular product of two integers.">mulmod</a>(n._data(), by._data(),
  1157. <a name="l01740"></a>01740 modulus._data()));
  1158. <a name="l01741"></a>01741 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == <span class="keyword">true</span>)
  1159. <a name="l01742"></a>01742 r._make_unique();
  1160. <a name="l01743"></a>01743 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1161. <a name="l01744"></a>01744 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1162. <a name="l01745"></a>01745 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1163. <a name="l01746"></a>01746 }
  1164. <a name="l01747"></a>01747 } <span class="keywordflow">else</span> {
  1165. <a name="l01748"></a>01748 integer_t&lt;BOOST_XINT_APARAMS&gt; r(<a class="code" href="namespaceboost_1_1xint.html#a18215d233c7e0d932960b9818b1cac80" title="Get the modular product of two integers.">mulmod</a>(n._data(), by._data(),
  1166. <a name="l01749"></a>01749 modulus._data()));
  1167. <a name="l01750"></a>01750 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == <span class="keyword">true</span>) r._make_unique();
  1168. <a name="l01751"></a>01751 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1169. <a name="l01752"></a>01752 }
  1170. <a name="l01753"></a>01753 }
  1171. <a name="l01754"></a>01754
  1172. <a name="l01769"></a>01769 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1173. <a name="l01770"></a>01770 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="namespaceboost_1_1xint.html#a562747ea533010136f669da4e121eaf0" title="Get the modular product of squaring an integer.">sqrmod</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n,
  1174. <a name="l01771"></a>01771 <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;modulus)
  1175. <a name="l01772"></a>01772 {
  1176. <a name="l01773"></a>01773 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1177. <a name="l01774"></a>01774 <span class="keywordflow">if</span> (n.is_nan()) <span class="keywordflow">return</span> n;
  1178. <a name="l01775"></a>01775 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1179. <a name="l01776"></a>01776 integer_t&lt;BOOST_XINT_APARAMS&gt; r = <a class="code" href="namespaceboost_1_1xint.html#a562747ea533010136f669da4e121eaf0" title="Get the modular product of squaring an integer.">sqrmod</a>(n._data(),
  1180. <a name="l01777"></a>01777 modulus._data());
  1181. <a name="l01778"></a>01778 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == <span class="keyword">true</span>)
  1182. <a name="l01779"></a>01779 r._make_unique();
  1183. <a name="l01780"></a>01780 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1184. <a name="l01781"></a>01781 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1185. <a name="l01782"></a>01782 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1186. <a name="l01783"></a>01783 }
  1187. <a name="l01784"></a>01784 } <span class="keywordflow">else</span> {
  1188. <a name="l01785"></a>01785 integer_t&lt;BOOST_XINT_APARAMS&gt; r = <a class="code" href="namespaceboost_1_1xint.html#a562747ea533010136f669da4e121eaf0" title="Get the modular product of squaring an integer.">sqrmod</a>(n._data(), modulus._data());
  1189. <a name="l01786"></a>01786 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == <span class="keyword">true</span>) r._make_unique();
  1190. <a name="l01787"></a>01787 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1191. <a name="l01788"></a>01788 }
  1192. <a name="l01789"></a>01789 }
  1193. <a name="l01790"></a>01790
  1194. <a name="l01814"></a>01814 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1195. <a name="l01815"></a>01815 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="namespaceboost_1_1xint.html#a0db2c9eb9e1516ebf7214e68bc6e9f10" title="Get the result of nexponent % modulus, keeping the intermediate results (relatively) small...">powmod</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n,
  1196. <a name="l01816"></a>01816 <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;exponent, <span class="keyword">const</span>
  1197. <a name="l01817"></a>01817 integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;modulus, <span class="keywordtype">bool</span> no_monty = <span class="keyword">false</span>)
  1198. <a name="l01818"></a>01818 {
  1199. <a name="l01819"></a>01819 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1200. <a name="l01820"></a>01820 <span class="keywordflow">if</span> (n.is_nan() || exponent.is_nan() || modulus.is_nan()) <span class="keywordflow">return</span>
  1201. <a name="l01821"></a>01821 detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1202. <a name="l01822"></a>01822 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1203. <a name="l01823"></a>01823 integer_t&lt;BOOST_XINT_APARAMS&gt; r(<a class="code" href="namespaceboost_1_1xint.html#a0db2c9eb9e1516ebf7214e68bc6e9f10" title="Get the result of nexponent % modulus, keeping the intermediate results (relatively) small...">powmod</a>(n._data(), exponent._data(),
  1204. <a name="l01824"></a>01824 modulus._data(), no_monty));
  1205. <a name="l01825"></a>01825 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == <span class="keyword">true</span>)
  1206. <a name="l01826"></a>01826 r._make_unique();
  1207. <a name="l01827"></a>01827 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1208. <a name="l01828"></a>01828 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1209. <a name="l01829"></a>01829 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1210. <a name="l01830"></a>01830 }
  1211. <a name="l01831"></a>01831 } <span class="keywordflow">else</span> {
  1212. <a name="l01832"></a>01832 integer_t&lt;BOOST_XINT_APARAMS&gt; r(<a class="code" href="namespaceboost_1_1xint.html#a0db2c9eb9e1516ebf7214e68bc6e9f10" title="Get the result of nexponent % modulus, keeping the intermediate results (relatively) small...">powmod</a>(n._data(), exponent._data(),
  1213. <a name="l01833"></a>01833 modulus._data(), no_monty));
  1214. <a name="l01834"></a>01834 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == <span class="keyword">true</span>) r._make_unique();
  1215. <a name="l01835"></a>01835 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1216. <a name="l01836"></a>01836 }
  1217. <a name="l01837"></a>01837 }
  1218. <a name="l01838"></a>01838
  1219. <a name="l01851"></a>01851 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1220. <a name="l01852"></a>01852 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="namespaceboost_1_1xint.html#acda3f5ededc57f5135418a6fb70cf3d7" title="Get the modular inverse of a number in a modulus, if there is one.">invmod</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n,
  1221. <a name="l01853"></a>01853 <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;modulus)
  1222. <a name="l01854"></a>01854 {
  1223. <a name="l01855"></a>01855 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1224. <a name="l01856"></a>01856 <span class="keywordflow">if</span> (n.is_nan() || modulus.is_nan()) <span class="keywordflow">return</span>
  1225. <a name="l01857"></a>01857 detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1226. <a name="l01858"></a>01858 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1227. <a name="l01859"></a>01859 integer_t&lt;BOOST_XINT_APARAMS&gt; r(<a class="code" href="namespaceboost_1_1xint.html#acda3f5ededc57f5135418a6fb70cf3d7" title="Get the modular inverse of a number in a modulus, if there is one.">invmod</a>(n._data(), modulus._data()));
  1228. <a name="l01860"></a>01860 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == <span class="keyword">true</span>)
  1229. <a name="l01861"></a>01861 r._make_unique();
  1230. <a name="l01862"></a>01862 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1231. <a name="l01863"></a>01863 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1232. <a name="l01864"></a>01864 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1233. <a name="l01865"></a>01865 }
  1234. <a name="l01866"></a>01866 } <span class="keywordflow">else</span> {
  1235. <a name="l01867"></a>01867 integer_t&lt;BOOST_XINT_APARAMS&gt; r(<a class="code" href="namespaceboost_1_1xint.html#acda3f5ededc57f5135418a6fb70cf3d7" title="Get the modular inverse of a number in a modulus, if there is one.">invmod</a>(n._data(), modulus._data()));
  1236. <a name="l01868"></a>01868 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == <span class="keyword">true</span>) r._make_unique();
  1237. <a name="l01869"></a>01869 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1238. <a name="l01870"></a>01870 }
  1239. <a name="l01871"></a>01871 }
  1240. <a name="l01873"></a>01873
  1241. <a name="l01879"></a>01879
  1242. <a name="l01880"></a>01880
  1243. <a name="l01920"></a>01920 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1244. <a name="l01921"></a>01921 <span class="keywordtype">int</span> <a class="code" href="namespaceboost_1_1xint.html#a029923d2a1db68bba7e08232f8ef6962" title="Tests an integer for primality.">is_probably_prime</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n, <a class="code" href="namespaceboost_1_1xint.html#a48deb76c9c428a4b3a50177b1b0cb547" title="A callback function takes no parameters and returns a bool.">callback_t</a>
  1245. <a name="l01922"></a>01922 callback = <a class="code" href="namespaceboost_1_1xint.html#a758d415a476a5eeed28dc6b5869b1696" title="An empty callback_t, used as a default parameter for some functions.">no_callback</a>)
  1246. <a name="l01923"></a>01923 {
  1247. <a name="l01924"></a>01924 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rtype;
  1248. <a name="l01925"></a>01925 <span class="keyword">typedef</span> boost::mt19937 enginetype;
  1249. <a name="l01926"></a>01926 <span class="keyword">typedef</span> boost::uniform_int&lt;rtype&gt; dist_t;
  1250. <a name="l01927"></a>01927 <span class="keyword">typedef</span> boost::variate_generator&lt;enginetype&amp;, dist_t&gt; gen_t;
  1251. <a name="l01928"></a>01928 <span class="keyword">static</span> std::auto_ptr&lt;enginetype&gt; engine(<span class="keyword">new</span>
  1252. <a name="l01929"></a>01929 enginetype(boost::uint32_t(time(0) + clock())));
  1253. <a name="l01930"></a>01930 <span class="keyword">static</span> std::auto_ptr&lt;gen_t&gt; gen(<span class="keyword">new</span> gen_t(*engine.get(),
  1254. <a name="l01931"></a>01931 dist_t((std::numeric_limits&lt;rtype&gt;::min)(),
  1255. <a name="l01932"></a>01932 (std::numeric_limits&lt;rtype&gt;::max)())));
  1256. <a name="l01933"></a>01933 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#a029923d2a1db68bba7e08232f8ef6962" title="Tests an integer for primality.">is_probably_prime</a>(n, *gen.get(), callback);
  1257. <a name="l01934"></a>01934 }
  1258. <a name="l01935"></a>01935
  1259. <a name="l01976"></a>01976 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS, <span class="keyword">typename</span> GenT&gt;
  1260. <a name="l01977"></a>01977 <span class="keywordtype">int</span> <a class="code" href="namespaceboost_1_1xint.html#a029923d2a1db68bba7e08232f8ef6962" title="Tests an integer for primality.">is_probably_prime</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n, GenT &amp;generator,
  1261. <a name="l01978"></a>01978 <a class="code" href="namespaceboost_1_1xint.html#a48deb76c9c428a4b3a50177b1b0cb547" title="A callback function takes no parameters and returns a bool.">callback_t</a> callback = <a class="code" href="namespaceboost_1_1xint.html#a758d415a476a5eeed28dc6b5869b1696" title="An empty callback_t, used as a default parameter for some functions.">no_callback</a>)
  1262. <a name="l01979"></a>01979 {
  1263. <a name="l01980"></a>01980 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1264. <a name="l01981"></a>01981 <span class="keywordflow">if</span> (n.is_nan()) <span class="keywordflow">return</span> -2;
  1265. <a name="l01982"></a>01982 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1266. <a name="l01983"></a>01983 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#a029923d2a1db68bba7e08232f8ef6962" title="Tests an integer for primality.">is_probably_prime</a>(n._data(), generator, callback);
  1267. <a name="l01984"></a>01984 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1268. <a name="l01985"></a>01985 <span class="keywordflow">return</span> -2;
  1269. <a name="l01986"></a>01986 }
  1270. <a name="l01987"></a>01987 } <span class="keywordflow">else</span> {
  1271. <a name="l01988"></a>01988 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#a029923d2a1db68bba7e08232f8ef6962" title="Tests an integer for primality.">is_probably_prime</a>(n._data(), generator, callback);
  1272. <a name="l01989"></a>01989 }
  1273. <a name="l01990"></a>01990 }
  1274. <a name="l01992"></a>01992
  1275. <a name="l01999"></a>01999
  1276. <a name="l02000"></a>02000 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt; <span class="keywordtype">bool</span> <a class="code" href="namespaceboost_1_1xint.html#af6582ad852305d615535a88f6934b247">operator&lt;</a>(<span class="keyword">const</span>
  1277. <a name="l02001"></a>02001 integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n1, <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n2)
  1278. <a name="l02002"></a>02002 {
  1279. <a name="l02003"></a>02003 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1280. <a name="l02004"></a>02004 <span class="keywordflow">if</span> (n1.is_nan() || n2.is_nan()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
  1281. <a name="l02005"></a>02005 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1282. <a name="l02006"></a>02006 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#af6582ad852305d615535a88f6934b247">operator&lt;</a>(n1._data(), n2._data());
  1283. <a name="l02007"></a>02007 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1284. <a name="l02008"></a>02008 <span class="keywordflow">return</span> <span class="keyword">false</span>;
  1285. <a name="l02009"></a>02009 }
  1286. <a name="l02010"></a>02010 } <span class="keywordflow">else</span> {
  1287. <a name="l02011"></a>02011 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#af6582ad852305d615535a88f6934b247">operator&lt;</a>(n1._data(), n2._data());
  1288. <a name="l02012"></a><a class="code" href="namespaceboost_1_1xint.html#ad1249dfdc4b99a753ef01fdf9f29a971">02012</a> }
  1289. <a name="l02013"></a>02013 }
  1290. <a name="l02014"></a>02014
  1291. <a name="l02015"></a>02015 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt; <span class="keywordtype">bool</span> <a class="code" href="namespaceboost_1_1xint.html#ad1249dfdc4b99a753ef01fdf9f29a971">operator&gt;</a>(<span class="keyword">const</span>
  1292. <a name="l02016"></a>02016 integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n1, <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n2)
  1293. <a name="l02017"></a>02017 {
  1294. <a name="l02018"></a>02018 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1295. <a name="l02019"></a>02019 <span class="keywordflow">if</span> (n1.is_nan() || n2.is_nan()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
  1296. <a name="l02020"></a>02020 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1297. <a name="l02021"></a>02021 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#ad1249dfdc4b99a753ef01fdf9f29a971">operator&gt;</a>(n1._data(), n2._data());
  1298. <a name="l02022"></a>02022 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1299. <a name="l02023"></a>02023 <span class="keywordflow">return</span> <span class="keyword">false</span>;
  1300. <a name="l02024"></a>02024 }
  1301. <a name="l02025"></a>02025 } <span class="keywordflow">else</span> {
  1302. <a name="l02026"></a>02026 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#ad1249dfdc4b99a753ef01fdf9f29a971">operator&gt;</a>(n1._data(), n2._data());
  1303. <a name="l02027"></a><a class="code" href="namespaceboost_1_1xint.html#a29b516d6231056238fd045ea36c42ae0">02027</a> }
  1304. <a name="l02028"></a>02028 }
  1305. <a name="l02029"></a>02029
  1306. <a name="l02030"></a>02030 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt; <span class="keywordtype">bool</span> <a class="code" href="namespaceboost_1_1xint.html#a29b516d6231056238fd045ea36c42ae0">operator&lt;=</a>(<span class="keyword">const</span>
  1307. <a name="l02031"></a>02031 integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n1, <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n2)
  1308. <a name="l02032"></a>02032 {
  1309. <a name="l02033"></a>02033 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1310. <a name="l02034"></a>02034 <span class="keywordflow">if</span> (n1.is_nan() || n2.is_nan()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
  1311. <a name="l02035"></a>02035 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1312. <a name="l02036"></a>02036 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#a29b516d6231056238fd045ea36c42ae0">operator&lt;=</a>(n1._data(), n2._data());
  1313. <a name="l02037"></a>02037 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1314. <a name="l02038"></a>02038 <span class="keywordflow">return</span> <span class="keyword">false</span>;
  1315. <a name="l02039"></a>02039 }
  1316. <a name="l02040"></a>02040 } <span class="keywordflow">else</span> {
  1317. <a name="l02041"></a>02041 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#a29b516d6231056238fd045ea36c42ae0">operator&lt;=</a>(n1._data(), n2._data());
  1318. <a name="l02042"></a><a class="code" href="namespaceboost_1_1xint.html#aa6f3ef7b0b233817eff62f7a2797729b">02042</a> }
  1319. <a name="l02043"></a>02043 }
  1320. <a name="l02044"></a>02044
  1321. <a name="l02045"></a>02045 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt; <span class="keywordtype">bool</span> <a class="code" href="namespaceboost_1_1xint.html#aa6f3ef7b0b233817eff62f7a2797729b">operator&gt;=</a>(<span class="keyword">const</span>
  1322. <a name="l02046"></a>02046 integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n1, <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n2)
  1323. <a name="l02047"></a>02047 {
  1324. <a name="l02048"></a>02048 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1325. <a name="l02049"></a>02049 <span class="keywordflow">if</span> (n1.is_nan() || n2.is_nan()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
  1326. <a name="l02050"></a>02050 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1327. <a name="l02051"></a>02051 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#aa6f3ef7b0b233817eff62f7a2797729b">operator&gt;=</a>(n1._data(), n2._data());
  1328. <a name="l02052"></a>02052 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1329. <a name="l02053"></a>02053 <span class="keywordflow">return</span> <span class="keyword">false</span>;
  1330. <a name="l02054"></a>02054 }
  1331. <a name="l02055"></a>02055 } <span class="keywordflow">else</span> {
  1332. <a name="l02056"></a>02056 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#aa6f3ef7b0b233817eff62f7a2797729b">operator&gt;=</a>(n1._data(), n2._data());
  1333. <a name="l02057"></a><a class="code" href="namespaceboost_1_1xint.html#a0c46591a0011463984265388dbf09de1">02057</a> }
  1334. <a name="l02058"></a>02058 }
  1335. <a name="l02059"></a>02059
  1336. <a name="l02060"></a>02060 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt; <span class="keywordtype">bool</span> <a class="code" href="namespaceboost_1_1xint.html#a0c46591a0011463984265388dbf09de1">operator==</a>(<span class="keyword">const</span>
  1337. <a name="l02061"></a>02061 integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n1, <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n2)
  1338. <a name="l02062"></a>02062 {
  1339. <a name="l02063"></a>02063 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1340. <a name="l02064"></a>02064 <span class="keywordflow">if</span> (n1.is_nan() || n2.is_nan()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
  1341. <a name="l02065"></a>02065 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1342. <a name="l02066"></a>02066 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#a0c46591a0011463984265388dbf09de1">operator==</a>(n1._data(), n2._data());
  1343. <a name="l02067"></a>02067 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1344. <a name="l02068"></a>02068 <span class="keywordflow">return</span> <span class="keyword">false</span>;
  1345. <a name="l02069"></a>02069 }
  1346. <a name="l02070"></a>02070 } <span class="keywordflow">else</span> {
  1347. <a name="l02071"></a>02071 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#a0c46591a0011463984265388dbf09de1">operator==</a>(n1._data(), n2._data());
  1348. <a name="l02072"></a><a class="code" href="namespaceboost_1_1xint.html#aed1256c8963eedf3898e339eb7c7ff5b">02072</a> }
  1349. <a name="l02073"></a>02073 }
  1350. <a name="l02074"></a>02074
  1351. <a name="l02075"></a>02075 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt; <span class="keywordtype">bool</span> <a class="code" href="namespaceboost_1_1xint.html#aed1256c8963eedf3898e339eb7c7ff5b">operator!=</a>(<span class="keyword">const</span>
  1352. <a name="l02076"></a>02076 integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n1, <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n2)
  1353. <a name="l02077"></a>02077 {
  1354. <a name="l02078"></a>02078 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1355. <a name="l02079"></a>02079 <span class="keywordflow">if</span> (n1.is_nan() || n2.is_nan()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
  1356. <a name="l02080"></a>02080 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1357. <a name="l02081"></a>02081 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#aed1256c8963eedf3898e339eb7c7ff5b">operator!=</a>(n1._data(), n2._data());
  1358. <a name="l02082"></a>02082 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1359. <a name="l02083"></a>02083 <span class="keywordflow">return</span> <span class="keyword">false</span>;
  1360. <a name="l02084"></a>02084 }
  1361. <a name="l02085"></a>02085 } <span class="keywordflow">else</span> {
  1362. <a name="l02086"></a>02086 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#aed1256c8963eedf3898e339eb7c7ff5b">operator!=</a>(n1._data(), n2._data());
  1363. <a name="l02087"></a>02087 }
  1364. <a name="l02088"></a>02088 }
  1365. <a name="l02090"></a>02090
  1366. <a name="l02095"></a>02095
  1367. <a name="l02096"></a>02096
  1368. <a name="l02105"></a>02105 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1369. <a name="l02106"></a>02106 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="namespaceboost_1_1xint.html#ac6205927ba0c25c280a6a285cb7bcfa9" title="Calculate the sum of two integers.">operator+</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n1,
  1370. <a name="l02107"></a>02107 <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n2)
  1371. <a name="l02108"></a>02108 {
  1372. <a name="l02109"></a>02109 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1373. <a name="l02110"></a>02110 <span class="keywordflow">if</span> (n1.is_nan() || n2.is_nan())
  1374. <a name="l02111"></a>02111 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1375. <a name="l02112"></a>02112 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1376. <a name="l02113"></a>02113 integer_t&lt;BOOST_XINT_APARAMS&gt; r(n1._data() + n2._data());
  1377. <a name="l02114"></a>02114 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1378. <a name="l02115"></a>02115 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1379. <a name="l02116"></a>02116 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1380. <a name="l02117"></a>02117 }
  1381. <a name="l02118"></a>02118 } <span class="keywordflow">else</span> {
  1382. <a name="l02119"></a>02119 integer_t&lt;BOOST_XINT_APARAMS&gt; r(n1._data() + n2._data());
  1383. <a name="l02120"></a>02120 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1384. <a name="l02121"></a>02121 }
  1385. <a name="l02122"></a>02122 }
  1386. <a name="l02123"></a>02123
  1387. <a name="l02132"></a>02132 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1388. <a name="l02133"></a>02133 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="namespaceboost_1_1xint.html#a81a51949d456717c045fc1d845380a66" title="Calculate the difference between two integers.">operator-</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n1,
  1389. <a name="l02134"></a>02134 <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n2)
  1390. <a name="l02135"></a>02135 {
  1391. <a name="l02136"></a>02136 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1392. <a name="l02137"></a>02137 <span class="keywordflow">if</span> (n1.is_nan() || n2.is_nan())
  1393. <a name="l02138"></a>02138 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1394. <a name="l02139"></a>02139 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1395. <a name="l02140"></a>02140 integer_t&lt;BOOST_XINT_APARAMS&gt; r(n1._data() - n2._data());
  1396. <a name="l02141"></a>02141 <span class="keywordflow">if</span> (!integer_t&lt;BOOST_XINT_APARAMS&gt;::Signed &amp;&amp; r._data().negative)
  1397. <a name="l02142"></a>02142 r._fix_negative_unsigned();
  1398. <a name="l02143"></a>02143 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1399. <a name="l02144"></a>02144 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1400. <a name="l02145"></a>02145 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1401. <a name="l02146"></a>02146 }
  1402. <a name="l02147"></a>02147 } <span class="keywordflow">else</span> {
  1403. <a name="l02148"></a>02148 integer_t&lt;BOOST_XINT_APARAMS&gt; r(n1._data() - n2._data());
  1404. <a name="l02149"></a>02149 <span class="keywordflow">if</span> (!integer_t&lt;BOOST_XINT_APARAMS&gt;::Signed &amp;&amp; r._data().negative)
  1405. <a name="l02150"></a>02150 r._fix_negative_unsigned();
  1406. <a name="l02151"></a>02151 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1407. <a name="l02152"></a>02152 }
  1408. <a name="l02153"></a>02153 }
  1409. <a name="l02154"></a>02154
  1410. <a name="l02167"></a>02167 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1411. <a name="l02168"></a>02168 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="namespaceboost_1_1xint.html#ab54d6de2a848f4d34c4e69b258cf51fb" title="Calculate the product of two integers.">operator*</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n1,
  1412. <a name="l02169"></a>02169 <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n2)
  1413. <a name="l02170"></a>02170 {
  1414. <a name="l02171"></a>02171 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1415. <a name="l02172"></a>02172 <span class="keywordflow">if</span> (n1.is_nan() || n2.is_nan())
  1416. <a name="l02173"></a>02173 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1417. <a name="l02174"></a>02174 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1418. <a name="l02175"></a>02175 integer_t&lt;BOOST_XINT_APARAMS&gt; r(n1._data() * n2._data());
  1419. <a name="l02176"></a>02176 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1420. <a name="l02177"></a>02177 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1421. <a name="l02178"></a>02178 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1422. <a name="l02179"></a>02179 }
  1423. <a name="l02180"></a>02180 } <span class="keywordflow">else</span> {
  1424. <a name="l02181"></a>02181 integer_t&lt;BOOST_XINT_APARAMS&gt; r(n1._data() * n2._data());
  1425. <a name="l02182"></a>02182 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1426. <a name="l02183"></a>02183 }
  1427. <a name="l02184"></a>02184 }
  1428. <a name="l02185"></a>02185
  1429. <a name="l02196"></a>02196 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1430. <a name="l02197"></a>02197 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="namespaceboost_1_1xint.html#a684e46a7ddfa4459f4e115b5e7e4372c" title="Calculate how many dividends would fit into divisor.">operator/</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt;
  1431. <a name="l02198"></a>02198 &amp;dividend, <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;divisor)
  1432. <a name="l02199"></a>02199 {
  1433. <a name="l02200"></a>02200 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1434. <a name="l02201"></a>02201 <span class="keywordflow">if</span> (dividend.is_nan() || divisor.is_nan()) <span class="keywordflow">return</span>
  1435. <a name="l02202"></a>02202 detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1436. <a name="l02203"></a>02203 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1437. <a name="l02204"></a>02204 integer_t&lt;BOOST_XINT_APARAMS&gt; r(dividend._data() / divisor._data());
  1438. <a name="l02205"></a>02205 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1439. <a name="l02206"></a>02206 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1440. <a name="l02207"></a>02207 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1441. <a name="l02208"></a>02208 }
  1442. <a name="l02209"></a>02209 } <span class="keywordflow">else</span> {
  1443. <a name="l02210"></a>02210 integer_t&lt;BOOST_XINT_APARAMS&gt; r(dividend._data() / divisor._data());
  1444. <a name="l02211"></a>02211 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1445. <a name="l02212"></a>02212 }
  1446. <a name="l02213"></a>02213 }
  1447. <a name="l02214"></a>02214
  1448. <a name="l02224"></a>02224 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1449. <a name="l02225"></a>02225 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="namespaceboost_1_1xint.html#a66bdb0194ae3efaba8f90c26d261f02d" title="Get the remainder after dividing a number by another.">operator%</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n1,
  1450. <a name="l02226"></a>02226 <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n2)
  1451. <a name="l02227"></a>02227 {
  1452. <a name="l02228"></a>02228 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1453. <a name="l02229"></a>02229 <span class="keywordflow">if</span> (n1.is_nan() || n2.is_nan())
  1454. <a name="l02230"></a>02230 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1455. <a name="l02231"></a>02231 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1456. <a name="l02232"></a>02232 integer_t&lt;BOOST_XINT_APARAMS&gt; r(n1._data() % n2._data());
  1457. <a name="l02233"></a>02233 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1458. <a name="l02234"></a>02234 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1459. <a name="l02235"></a>02235 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1460. <a name="l02236"></a>02236 }
  1461. <a name="l02237"></a>02237 } <span class="keywordflow">else</span> {
  1462. <a name="l02238"></a>02238 integer_t&lt;BOOST_XINT_APARAMS&gt; r(n1._data() % n2._data());
  1463. <a name="l02239"></a>02239 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1464. <a name="l02240"></a>02240 }
  1465. <a name="l02241"></a>02241 }
  1466. <a name="l02242"></a>02242
  1467. <a name="l02252"></a>02252 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1468. <a name="l02253"></a>02253 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="namespaceboost_1_1xint.html#a71f25e4f18c2222185ffef91fb7cb9bc" title="Combine two integers using a bitwise AND operation.">operator&amp;</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n1,
  1469. <a name="l02254"></a>02254 <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n2)
  1470. <a name="l02255"></a>02255 {
  1471. <a name="l02256"></a>02256 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1472. <a name="l02257"></a>02257 <span class="keywordflow">if</span> (n1.is_nan() || n2.is_nan())
  1473. <a name="l02258"></a>02258 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1474. <a name="l02259"></a>02259 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1475. <a name="l02260"></a>02260 integer_t&lt;BOOST_XINT_APARAMS&gt; r(n1._data() &amp; n2._data());
  1476. <a name="l02261"></a>02261 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1477. <a name="l02262"></a>02262 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1478. <a name="l02263"></a>02263 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1479. <a name="l02264"></a>02264 }
  1480. <a name="l02265"></a>02265 } <span class="keywordflow">else</span> {
  1481. <a name="l02266"></a>02266 integer_t&lt;BOOST_XINT_APARAMS&gt; r(n1._data() &amp; n2._data());
  1482. <a name="l02267"></a>02267 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1483. <a name="l02268"></a>02268 }
  1484. <a name="l02269"></a>02269 }
  1485. <a name="l02270"></a>02270
  1486. <a name="l02280"></a>02280 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1487. <a name="l02281"></a>02281 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="namespaceboost_1_1xint.html#aa237e24304967b310415b7eda8ff770a" title="Combine two integers using a bitwise OR operation.">operator|</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n1,
  1488. <a name="l02282"></a>02282 <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n2)
  1489. <a name="l02283"></a>02283 {
  1490. <a name="l02284"></a>02284 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1491. <a name="l02285"></a>02285 <span class="keywordflow">if</span> (n1.is_nan() || n2.is_nan())
  1492. <a name="l02286"></a>02286 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1493. <a name="l02287"></a>02287 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1494. <a name="l02288"></a>02288 integer_t&lt;BOOST_XINT_APARAMS&gt; r(n1._data() | n2._data());
  1495. <a name="l02289"></a>02289 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1496. <a name="l02290"></a>02290 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1497. <a name="l02291"></a>02291 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1498. <a name="l02292"></a>02292 }
  1499. <a name="l02293"></a>02293 } <span class="keywordflow">else</span> {
  1500. <a name="l02294"></a>02294 integer_t&lt;BOOST_XINT_APARAMS&gt; r(n1._data() | n2._data());
  1501. <a name="l02295"></a>02295 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1502. <a name="l02296"></a>02296 }
  1503. <a name="l02297"></a>02297 }
  1504. <a name="l02298"></a>02298
  1505. <a name="l02308"></a>02308 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1506. <a name="l02309"></a>02309 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="namespaceboost_1_1xint.html#a4f6f55f1245077ef9eda37a9092d8118" title="Combine two integers using a bitwise XOR operation.">operator^</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n1,
  1507. <a name="l02310"></a>02310 <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n2)
  1508. <a name="l02311"></a>02311 {
  1509. <a name="l02312"></a>02312 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1510. <a name="l02313"></a>02313 <span class="keywordflow">if</span> (n1.is_nan() || n2.is_nan())
  1511. <a name="l02314"></a>02314 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1512. <a name="l02315"></a>02315 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1513. <a name="l02316"></a>02316 integer_t&lt;BOOST_XINT_APARAMS&gt; r(n1._data() ^ n2._data());
  1514. <a name="l02317"></a>02317 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1515. <a name="l02318"></a>02318 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1516. <a name="l02319"></a>02319 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1517. <a name="l02320"></a>02320 }
  1518. <a name="l02321"></a>02321 } <span class="keywordflow">else</span> {
  1519. <a name="l02322"></a>02322 integer_t&lt;BOOST_XINT_APARAMS&gt; r(n1._data() ^ n2._data());
  1520. <a name="l02323"></a>02323 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1521. <a name="l02324"></a>02324 }
  1522. <a name="l02325"></a>02325 }
  1523. <a name="l02327"></a>02327
  1524. <a name="l02330"></a>02330
  1525. <a name="l02340"></a>02340 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1526. <a name="l02341"></a>02341 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="namespaceboost_1_1xint.html#ae79772d6fc9b83e1311931ccc30d776d" title="Calculate the Greatest Common Denominator of two integers.">gcd</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;num1,
  1527. <a name="l02342"></a>02342 <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;num2)
  1528. <a name="l02343"></a>02343 {
  1529. <a name="l02344"></a>02344 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1530. <a name="l02345"></a>02345 <span class="keywordflow">if</span> (num1.is_nan() || num2.is_nan()) <span class="keywordflow">return</span>
  1531. <a name="l02346"></a>02346 detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1532. <a name="l02347"></a>02347 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1533. <a name="l02348"></a>02348 integer_t&lt;BOOST_XINT_APARAMS&gt; r;
  1534. <a name="l02349"></a>02349 <a class="code" href="namespaceboost_1_1xint.html#ae79772d6fc9b83e1311931ccc30d776d" title="Calculate the Greatest Common Denominator of two integers.">gcd</a>(r._data(), num1._data(), num2._data());
  1535. <a name="l02350"></a>02350 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == <span class="keyword">true</span>)
  1536. <a name="l02351"></a>02351 r._make_unique();
  1537. <a name="l02352"></a>02352 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1538. <a name="l02353"></a>02353 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1539. <a name="l02354"></a>02354 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1540. <a name="l02355"></a>02355 }
  1541. <a name="l02356"></a>02356 } <span class="keywordflow">else</span> {
  1542. <a name="l02357"></a>02357 integer_t&lt;BOOST_XINT_APARAMS&gt; r;
  1543. <a name="l02358"></a>02358 <a class="code" href="namespaceboost_1_1xint.html#ae79772d6fc9b83e1311931ccc30d776d" title="Calculate the Greatest Common Denominator of two integers.">gcd</a>(r._data(), num1._data(), num2._data());
  1544. <a name="l02359"></a>02359 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == <span class="keyword">true</span>) r._make_unique();
  1545. <a name="l02360"></a>02360 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1546. <a name="l02361"></a>02361 }
  1547. <a name="l02362"></a>02362 }
  1548. <a name="l02363"></a>02363
  1549. <a name="l02374"></a>02374 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1550. <a name="l02375"></a>02375 integer_t&lt;BOOST_XINT_APARAMS&gt; <a class="code" href="namespaceboost_1_1xint.html#a9ea55f62ba2462f73dad2ef21ad206c9" title="Calculate the Least Common Multiple of two integers.">lcm</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;num1,
  1551. <a name="l02376"></a>02376 <span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;num2)
  1552. <a name="l02377"></a>02377 {
  1553. <a name="l02378"></a>02378 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1554. <a name="l02379"></a>02379 <span class="keywordflow">if</span> (num1.is_nan() || num2.is_nan()) <span class="keywordflow">return</span>
  1555. <a name="l02380"></a>02380 detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1556. <a name="l02381"></a>02381 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1557. <a name="l02382"></a>02382 integer_t&lt;BOOST_XINT_APARAMS&gt; r;
  1558. <a name="l02383"></a>02383 <a class="code" href="namespaceboost_1_1xint.html#a9ea55f62ba2462f73dad2ef21ad206c9" title="Calculate the Least Common Multiple of two integers.">lcm</a>(r._data(), num1._data(), num2._data());
  1559. <a name="l02384"></a>02384 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == <span class="keyword">true</span>)
  1560. <a name="l02385"></a>02385 r._make_unique();
  1561. <a name="l02386"></a>02386 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1562. <a name="l02387"></a>02387 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1563. <a name="l02388"></a>02388 <span class="keywordflow">return</span> detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1564. <a name="l02389"></a>02389 }
  1565. <a name="l02390"></a>02390 } <span class="keywordflow">else</span> {
  1566. <a name="l02391"></a>02391 integer_t&lt;BOOST_XINT_APARAMS&gt; r;
  1567. <a name="l02392"></a>02392 <a class="code" href="namespaceboost_1_1xint.html#a9ea55f62ba2462f73dad2ef21ad206c9" title="Calculate the Least Common Multiple of two integers.">lcm</a>(r._data(), num1._data(), num2._data());
  1568. <a name="l02393"></a>02393 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == <span class="keyword">true</span>) r._make_unique();
  1569. <a name="l02394"></a>02394 <span class="keywordflow">return</span> <a class="code" href="basic__types__and__includes_8hpp.html#a73c3b02410381da656b7cb59c7ba9314">BOOST_XINT_MOVE</a>(r);
  1570. <a name="l02395"></a>02395 }
  1571. <a name="l02396"></a>02396 }
  1572. <a name="l02397"></a>02397
  1573. <a name="l02410"></a>02410 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1574. <a name="l02411"></a>02411 <span class="keywordtype">int</span> <a class="code" href="namespaceboost_1_1xint.html#a4abea0923f506abab1aa161a72c71aec" title="Compare two integer objects.">compare</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n1, <span class="keyword">const</span>
  1575. <a name="l02412"></a>02412 integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n2, <span class="keywordtype">bool</span> ignoresign = <span class="keyword">false</span>)
  1576. <a name="l02413"></a>02413 {
  1577. <a name="l02414"></a>02414 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1578. <a name="l02415"></a>02415 <span class="keywordflow">if</span> (n1.is_nan() || n2.is_nan()) <span class="keywordflow">return</span> 2;
  1579. <a name="l02416"></a>02416 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1580. <a name="l02417"></a>02417 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#a4abea0923f506abab1aa161a72c71aec" title="Compare two integer objects.">compare</a>(n1._data(), n2._data(), ignoresign);
  1581. <a name="l02418"></a>02418 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1582. <a name="l02419"></a>02419 <span class="keywordflow">return</span> 2;
  1583. <a name="l02420"></a>02420 }
  1584. <a name="l02421"></a>02421 } <span class="keywordflow">else</span> {
  1585. <a name="l02422"></a>02422 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#a4abea0923f506abab1aa161a72c71aec" title="Compare two integer objects.">compare</a>(n1._data(), n2._data(), ignoresign);
  1586. <a name="l02423"></a>02423 }
  1587. <a name="l02424"></a>02424 }
  1588. <a name="l02425"></a>02425
  1589. <a name="l02442"></a>02442 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1590. <a name="l02443"></a>02443 std::size_t <a class="code" href="namespaceboost_1_1xint.html#ad96996fe8cf3d423a796f9c5faf9534d" title="Get the log2 value of an integer.">integer_log2</a>(<span class="keyword">const</span> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n) {
  1591. <a name="l02444"></a>02444 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1592. <a name="l02445"></a>02445 <span class="keywordflow">if</span> (n.is_nan()) <span class="keywordflow">return</span> 0;
  1593. <a name="l02446"></a>02446 <a class="code" href="internals_8hpp.html#a693c4f473d303c632864f6084c394f03">BOOST_XINT_TRY</a> {
  1594. <a name="l02447"></a>02447 <span class="keywordflow">return</span> log2(n._data());
  1595. <a name="l02448"></a>02448 } <a class="code" href="internals_8hpp.html#a5117d87820df153f9c26dd5ff8ac318a">BOOST_XINT_CATCH</a> {
  1596. <a name="l02449"></a>02449 <span class="keywordflow">return</span> 0;
  1597. <a name="l02450"></a>02450 }
  1598. <a name="l02451"></a>02451 } <span class="keywordflow">else</span> {
  1599. <a name="l02452"></a>02452 <span class="keywordflow">return</span> log2(n._data());
  1600. <a name="l02453"></a>02453 }
  1601. <a name="l02454"></a>02454 }
  1602. <a name="l02456"></a>02456
  1603. <a name="l02458"></a>02458 <span class="preprocessor">#define BOOST_XINT_ANY_COMPARE(rtype, op, sub) \</span>
  1604. <a name="l02459"></a>02459 <span class="preprocessor"> template &lt;BOOST_XINT_CLASS_APARAMS, typename N&gt; \</span>
  1605. <a name="l02460"></a>02460 <span class="preprocessor"> rtype sub(const integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n1, const N n2, typename \</span>
  1606. <a name="l02461"></a>02461 <span class="preprocessor"> boost::enable_if&lt;boost::is_integral&lt;N&gt; &gt;::type* = 0) \</span>
  1607. <a name="l02462"></a>02462 <span class="preprocessor"> { \</span>
  1608. <a name="l02463"></a>02463 <span class="preprocessor"> if (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) { \</span>
  1609. <a name="l02464"></a>02464 <span class="preprocessor"> BOOST_XINT_TRY { \</span>
  1610. <a name="l02465"></a>02465 <span class="preprocessor"> return op(n1, integer_t&lt;BOOST_XINT_APARAMS&gt;(n2)); \</span>
  1611. <a name="l02466"></a>02466 <span class="preprocessor"> } BOOST_XINT_CATCH { \</span>
  1612. <a name="l02467"></a>02467 <span class="preprocessor"> return rtype(0); \</span>
  1613. <a name="l02468"></a>02468 <span class="preprocessor"> } \</span>
  1614. <a name="l02469"></a>02469 <span class="preprocessor"> } else { \</span>
  1615. <a name="l02470"></a>02470 <span class="preprocessor"> return op(n1, integer_t&lt;BOOST_XINT_APARAMS&gt;(n2)); \</span>
  1616. <a name="l02471"></a>02471 <span class="preprocessor"> } \</span>
  1617. <a name="l02472"></a>02472 <span class="preprocessor"> } \</span>
  1618. <a name="l02473"></a>02473 <span class="preprocessor"> \</span>
  1619. <a name="l02474"></a>02474 <span class="preprocessor"> template &lt;BOOST_XINT_CLASS_APARAMS, typename N&gt; \</span>
  1620. <a name="l02475"></a>02475 <span class="preprocessor"> rtype op(const integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n1, const N n2) { \</span>
  1621. <a name="l02476"></a>02476 <span class="preprocessor"> return BOOST_XINT_MOVE(sub(n1, n2)); \</span>
  1622. <a name="l02477"></a>02477 <span class="preprocessor"> } \</span>
  1623. <a name="l02478"></a>02478 <span class="preprocessor"> \</span>
  1624. <a name="l02479"></a>02479 <span class="preprocessor"> template &lt;typename N, BOOST_XINT_CLASS_APARAMS&gt; \</span>
  1625. <a name="l02480"></a>02480 <span class="preprocessor"> rtype sub(const N n1, const integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n2, typename \</span>
  1626. <a name="l02481"></a>02481 <span class="preprocessor"> boost::enable_if&lt;boost::is_integral&lt;N&gt; &gt;::type* = 0) \</span>
  1627. <a name="l02482"></a>02482 <span class="preprocessor"> { \</span>
  1628. <a name="l02483"></a>02483 <span class="preprocessor"> if (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) { \</span>
  1629. <a name="l02484"></a>02484 <span class="preprocessor"> BOOST_XINT_TRY { \</span>
  1630. <a name="l02485"></a>02485 <span class="preprocessor"> return op(integer_t&lt;BOOST_XINT_APARAMS&gt;(n1), n2); \</span>
  1631. <a name="l02486"></a>02486 <span class="preprocessor"> } BOOST_XINT_CATCH { \</span>
  1632. <a name="l02487"></a>02487 <span class="preprocessor"> return rtype(0); \</span>
  1633. <a name="l02488"></a>02488 <span class="preprocessor"> } \</span>
  1634. <a name="l02489"></a>02489 <span class="preprocessor"> } else { \</span>
  1635. <a name="l02490"></a>02490 <span class="preprocessor"> return op(integer_t&lt;BOOST_XINT_APARAMS&gt;(n1), n2); \</span>
  1636. <a name="l02491"></a>02491 <span class="preprocessor"> } \</span>
  1637. <a name="l02492"></a>02492 <span class="preprocessor"> } \</span>
  1638. <a name="l02493"></a>02493 <span class="preprocessor"> \</span>
  1639. <a name="l02494"></a>02494 <span class="preprocessor"> template &lt;typename N, BOOST_XINT_CLASS_APARAMS&gt; \</span>
  1640. <a name="l02495"></a>02495 <span class="preprocessor"> rtype op(const N n1, const integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n2) { \</span>
  1641. <a name="l02496"></a>02496 <span class="preprocessor"> return BOOST_XINT_MOVE(sub(n1, n2)); \</span>
  1642. <a name="l02497"></a>02497 <span class="preprocessor"> }</span>
  1643. <a name="l02498"></a>02498 <span class="preprocessor"></span>
  1644. <a name="l02499"></a>02499 <a class="code" href="integer_8hpp.html#afa5105b6b0b1b54f1b9aaafc4004a685" title="Allows for comparisons between integer_t types and other integral values.">BOOST_XINT_ANY_COMPARE</a>(<span class="keywordtype">bool</span>, <span class="keyword">operator</span>&lt;, _sublt)
  1645. <a name="l02500"></a>02500 <a class="code" href="integer_8hpp.html#afa5105b6b0b1b54f1b9aaafc4004a685" title="Allows for comparisons between integer_t types and other integral values.">BOOST_XINT_ANY_COMPARE</a>(<span class="keywordtype">bool</span>, operator&gt;, _subgt)
  1646. <a name="l02501"></a>02501 <a class="code" href="integer_8hpp.html#afa5105b6b0b1b54f1b9aaafc4004a685" title="Allows for comparisons between integer_t types and other integral values.">BOOST_XINT_ANY_COMPARE</a>(<span class="keywordtype">bool</span>, operator&lt;=, _suble)
  1647. <a name="l02502"></a>02502 <a class="code" href="integer_8hpp.html#afa5105b6b0b1b54f1b9aaafc4004a685" title="Allows for comparisons between integer_t types and other integral values.">BOOST_XINT_ANY_COMPARE</a>(<span class="keywordtype">bool</span>, operator&gt;=, _subge)
  1648. <a name="l02503"></a>02503 <a class="code" href="integer_8hpp.html#afa5105b6b0b1b54f1b9aaafc4004a685" title="Allows for comparisons between integer_t types and other integral values.">BOOST_XINT_ANY_COMPARE</a>(<span class="keywordtype">bool</span>, operator==, _subeq)
  1649. <a name="l02504"></a>02504 <a class="code" href="integer_8hpp.html#afa5105b6b0b1b54f1b9aaafc4004a685" title="Allows for comparisons between integer_t types and other integral values.">BOOST_XINT_ANY_COMPARE</a>(<span class="keywordtype">bool</span>, operator!=, _subne)
  1650. <a name="l02505"></a><a class="code" href="integer_8hpp.html#a80138c91fff1f86edb6fe96603cfa948">02505</a> <a class="code" href="integer_8hpp.html#afa5105b6b0b1b54f1b9aaafc4004a685" title="Allows for comparisons between integer_t types and other integral values.">BOOST_XINT_ANY_COMPARE</a>(<span class="keywordtype">int</span>, <a class="code" href="namespaceboost_1_1xint.html#a4abea0923f506abab1aa161a72c71aec" title="Compare two integer objects.">compare</a>, _subcompare)
  1651. <a name="l02506"></a>02506
  1652. <a name="l02508"></a>02508 <span class="preprocessor">#define BOOST_XINT_ANY_MATH(op, sub) \</span>
  1653. <a name="l02509"></a>02509 <span class="preprocessor"> template &lt;BOOST_XINT_CLASS_APARAMS, typename N&gt; \</span>
  1654. <a name="l02510"></a>02510 <span class="preprocessor"> integer_t&lt;BOOST_XINT_APARAMS&gt; sub(const integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n1, \</span>
  1655. <a name="l02511"></a>02511 <span class="preprocessor"> const N n2, typename boost::enable_if&lt;boost::is_integral&lt;N&gt; &gt;::type* = \</span>
  1656. <a name="l02512"></a>02512 <span class="preprocessor"> 0) \</span>
  1657. <a name="l02513"></a>02513 <span class="preprocessor"> { \</span>
  1658. <a name="l02514"></a>02514 <span class="preprocessor"> if (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) { \</span>
  1659. <a name="l02515"></a>02515 <span class="preprocessor"> BOOST_XINT_TRY { \</span>
  1660. <a name="l02516"></a>02516 <span class="preprocessor"> integer_t&lt;BOOST_XINT_APARAMS&gt; r(op(n1, \</span>
  1661. <a name="l02517"></a>02517 <span class="preprocessor"> integer_t&lt;BOOST_XINT_APARAMS&gt;(n2))); \</span>
  1662. <a name="l02518"></a>02518 <span class="preprocessor"> if (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == true) \</span>
  1663. <a name="l02519"></a>02519 <span class="preprocessor"> r._make_unique(); \</span>
  1664. <a name="l02520"></a>02520 <span class="preprocessor"> if (!integer_t&lt;BOOST_XINT_APARAMS&gt;::Signed &amp;&amp; \</span>
  1665. <a name="l02521"></a>02521 <span class="preprocessor"> r._data().negative) r._fix_negative_unsigned(); \</span>
  1666. <a name="l02522"></a>02522 <span class="preprocessor"> return BOOST_XINT_MOVE(r); \</span>
  1667. <a name="l02523"></a>02523 <span class="preprocessor"> } BOOST_XINT_CATCH { \</span>
  1668. <a name="l02524"></a>02524 <span class="preprocessor"> return detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;(); \</span>
  1669. <a name="l02525"></a>02525 <span class="preprocessor"> } \</span>
  1670. <a name="l02526"></a>02526 <span class="preprocessor"> } else { \</span>
  1671. <a name="l02527"></a>02527 <span class="preprocessor"> integer_t&lt;BOOST_XINT_APARAMS&gt; r(op(n1, \</span>
  1672. <a name="l02528"></a>02528 <span class="preprocessor"> integer_t&lt;BOOST_XINT_APARAMS&gt;(n2))); \</span>
  1673. <a name="l02529"></a>02529 <span class="preprocessor"> if (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == true) \</span>
  1674. <a name="l02530"></a>02530 <span class="preprocessor"> r._make_unique(); \</span>
  1675. <a name="l02531"></a>02531 <span class="preprocessor"> if (!integer_t&lt;BOOST_XINT_APARAMS&gt;::Signed &amp;&amp; r._data().negative) \</span>
  1676. <a name="l02532"></a>02532 <span class="preprocessor"> r._fix_negative_unsigned(); \</span>
  1677. <a name="l02533"></a>02533 <span class="preprocessor"> return BOOST_XINT_MOVE(r); \</span>
  1678. <a name="l02534"></a>02534 <span class="preprocessor"> } \</span>
  1679. <a name="l02535"></a>02535 <span class="preprocessor"> } \</span>
  1680. <a name="l02536"></a>02536 <span class="preprocessor"> \</span>
  1681. <a name="l02537"></a>02537 <span class="preprocessor"> template &lt;BOOST_XINT_CLASS_APARAMS, typename N&gt; \</span>
  1682. <a name="l02538"></a>02538 <span class="preprocessor"> integer_t&lt;BOOST_XINT_APARAMS&gt; op(const integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n1, \</span>
  1683. <a name="l02539"></a>02539 <span class="preprocessor"> const N n2) \</span>
  1684. <a name="l02540"></a>02540 <span class="preprocessor"> { \</span>
  1685. <a name="l02541"></a>02541 <span class="preprocessor"> return BOOST_XINT_MOVE(sub(n1, n2)); \</span>
  1686. <a name="l02542"></a>02542 <span class="preprocessor"> } \</span>
  1687. <a name="l02543"></a>02543 <span class="preprocessor"> \</span>
  1688. <a name="l02544"></a>02544 <span class="preprocessor"> template &lt;typename N, BOOST_XINT_CLASS_APARAMS&gt; \</span>
  1689. <a name="l02545"></a>02545 <span class="preprocessor"> integer_t&lt;BOOST_XINT_APARAMS&gt; sub(const N n1, const \</span>
  1690. <a name="l02546"></a>02546 <span class="preprocessor"> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n2, typename \</span>
  1691. <a name="l02547"></a>02547 <span class="preprocessor"> boost::enable_if&lt;boost::is_integral&lt;N&gt; &gt;::type* = 0) \</span>
  1692. <a name="l02548"></a>02548 <span class="preprocessor"> { \</span>
  1693. <a name="l02549"></a>02549 <span class="preprocessor"> if (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) { \</span>
  1694. <a name="l02550"></a>02550 <span class="preprocessor"> BOOST_XINT_TRY { \</span>
  1695. <a name="l02551"></a>02551 <span class="preprocessor"> integer_t&lt;BOOST_XINT_APARAMS&gt; \</span>
  1696. <a name="l02552"></a>02552 <span class="preprocessor"> r(op(integer_t&lt;BOOST_XINT_APARAMS&gt;(n1), n2)); \</span>
  1697. <a name="l02553"></a>02553 <span class="preprocessor"> if (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == true) \</span>
  1698. <a name="l02554"></a>02554 <span class="preprocessor"> r._make_unique(); \</span>
  1699. <a name="l02555"></a>02555 <span class="preprocessor"> if (!integer_t&lt;BOOST_XINT_APARAMS&gt;::Signed &amp;&amp; \</span>
  1700. <a name="l02556"></a>02556 <span class="preprocessor"> r._data().negative) r._fix_negative_unsigned(); \</span>
  1701. <a name="l02557"></a>02557 <span class="preprocessor"> return BOOST_XINT_MOVE(r); \</span>
  1702. <a name="l02558"></a>02558 <span class="preprocessor"> } BOOST_XINT_CATCH { \</span>
  1703. <a name="l02559"></a>02559 <span class="preprocessor"> return detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;(); \</span>
  1704. <a name="l02560"></a>02560 <span class="preprocessor"> } \</span>
  1705. <a name="l02561"></a>02561 <span class="preprocessor"> } else { \</span>
  1706. <a name="l02562"></a>02562 <span class="preprocessor"> integer_t&lt;BOOST_XINT_APARAMS&gt; \</span>
  1707. <a name="l02563"></a>02563 <span class="preprocessor"> r(op(integer_t&lt;BOOST_XINT_APARAMS&gt;(n1), n2)); \</span>
  1708. <a name="l02564"></a>02564 <span class="preprocessor"> if (integer_t&lt;BOOST_XINT_APARAMS&gt;::Threadsafe == true) \</span>
  1709. <a name="l02565"></a>02565 <span class="preprocessor"> r._make_unique(); \</span>
  1710. <a name="l02566"></a>02566 <span class="preprocessor"> if (!integer_t&lt;BOOST_XINT_APARAMS&gt;::Signed &amp;&amp; r._data().negative) \</span>
  1711. <a name="l02567"></a>02567 <span class="preprocessor"> r._fix_negative_unsigned(); \</span>
  1712. <a name="l02568"></a>02568 <span class="preprocessor"> return BOOST_XINT_MOVE(r); \</span>
  1713. <a name="l02569"></a>02569 <span class="preprocessor"> } \</span>
  1714. <a name="l02570"></a>02570 <span class="preprocessor"> } \</span>
  1715. <a name="l02571"></a>02571 <span class="preprocessor"> \</span>
  1716. <a name="l02572"></a>02572 <span class="preprocessor"> template &lt;typename N, BOOST_XINT_CLASS_APARAMS&gt; \</span>
  1717. <a name="l02573"></a>02573 <span class="preprocessor"> integer_t&lt;BOOST_XINT_APARAMS&gt; op(const N n1, const \</span>
  1718. <a name="l02574"></a>02574 <span class="preprocessor"> integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n2) \</span>
  1719. <a name="l02575"></a>02575 <span class="preprocessor"> { \</span>
  1720. <a name="l02576"></a>02576 <span class="preprocessor"> return BOOST_XINT_MOVE(sub(n1, n2)); \</span>
  1721. <a name="l02577"></a>02577 <span class="preprocessor"> }</span>
  1722. <a name="l02578"></a>02578 <span class="preprocessor"></span>
  1723. <a name="l02579"></a>02579 <a class="code" href="integer_8hpp.html#a80138c91fff1f86edb6fe96603cfa948" title="Allows for operations between integer_t types and other integral values.">BOOST_XINT_ANY_MATH</a>(<a class="code" href="namespaceboost_1_1xint.html#ac03c41be124545559036ccf571da326f" title="Calculate the value of ne">pow</a>, _subpow)
  1724. <a name="l02580"></a>02580 <a class="code" href="integer_8hpp.html#a80138c91fff1f86edb6fe96603cfa948" title="Allows for operations between integer_t types and other integral values.">BOOST_XINT_ANY_MATH</a>(<a class="code" href="namespaceboost_1_1xint.html#a18215d233c7e0d932960b9818b1cac80" title="Get the modular product of two integers.">mulmod</a>, _submulmod)
  1725. <a name="l02581"></a>02581 <a class="code" href="integer_8hpp.html#a80138c91fff1f86edb6fe96603cfa948" title="Allows for operations between integer_t types and other integral values.">BOOST_XINT_ANY_MATH</a>(<a class="code" href="namespaceboost_1_1xint.html#a562747ea533010136f669da4e121eaf0" title="Get the modular product of squaring an integer.">sqrmod</a>, _subsqrmod)
  1726. <a name="l02582"></a>02582 <a class="code" href="integer_8hpp.html#a80138c91fff1f86edb6fe96603cfa948" title="Allows for operations between integer_t types and other integral values.">BOOST_XINT_ANY_MATH</a>(<a class="code" href="namespaceboost_1_1xint.html#a0db2c9eb9e1516ebf7214e68bc6e9f10" title="Get the result of nexponent % modulus, keeping the intermediate results (relatively) small...">powmod</a>, _subpowmod)
  1727. <a name="l02583"></a>02583 <a class="code" href="integer_8hpp.html#a80138c91fff1f86edb6fe96603cfa948" title="Allows for operations between integer_t types and other integral values.">BOOST_XINT_ANY_MATH</a>(<a class="code" href="namespaceboost_1_1xint.html#acda3f5ededc57f5135418a6fb70cf3d7" title="Get the modular inverse of a number in a modulus, if there is one.">invmod</a>, _subinvmod)
  1728. <a name="l02584"></a>02584 <a class="code" href="integer_8hpp.html#a80138c91fff1f86edb6fe96603cfa948" title="Allows for operations between integer_t types and other integral values.">BOOST_XINT_ANY_MATH</a>(operator+, _subadd)
  1729. <a name="l02585"></a>02585 <a class="code" href="integer_8hpp.html#a80138c91fff1f86edb6fe96603cfa948" title="Allows for operations between integer_t types and other integral values.">BOOST_XINT_ANY_MATH</a>(operator-, _subsubtract)
  1730. <a name="l02586"></a>02586 <a class="code" href="integer_8hpp.html#a80138c91fff1f86edb6fe96603cfa948" title="Allows for operations between integer_t types and other integral values.">BOOST_XINT_ANY_MATH</a>(operator*, _submultiply)
  1731. <a name="l02587"></a>02587 <a class="code" href="integer_8hpp.html#a80138c91fff1f86edb6fe96603cfa948" title="Allows for operations between integer_t types and other integral values.">BOOST_XINT_ANY_MATH</a>(operator/, _subdivide)
  1732. <a name="l02588"></a>02588 <a class="code" href="integer_8hpp.html#a80138c91fff1f86edb6fe96603cfa948" title="Allows for operations between integer_t types and other integral values.">BOOST_XINT_ANY_MATH</a>(operator%, _submod)
  1733. <a name="l02589"></a>02589 <a class="code" href="integer_8hpp.html#a80138c91fff1f86edb6fe96603cfa948" title="Allows for operations between integer_t types and other integral values.">BOOST_XINT_ANY_MATH</a>(operator&amp;, _subbitand)
  1734. <a name="l02590"></a>02590 <a class="code" href="integer_8hpp.html#a80138c91fff1f86edb6fe96603cfa948" title="Allows for operations between integer_t types and other integral values.">BOOST_XINT_ANY_MATH</a>(operator|, _subbitor)
  1735. <a name="l02591"></a>02591 <a class="code" href="integer_8hpp.html#a80138c91fff1f86edb6fe96603cfa948" title="Allows for operations between integer_t types and other integral values.">BOOST_XINT_ANY_MATH</a>(operator^, _subbitxor)
  1736. <a name="l02592"></a>02592 <a class="code" href="integer_8hpp.html#a80138c91fff1f86edb6fe96603cfa948" title="Allows for operations between integer_t types and other integral values.">BOOST_XINT_ANY_MATH</a>(<a class="code" href="namespaceboost_1_1xint.html#ae79772d6fc9b83e1311931ccc30d776d" title="Calculate the Greatest Common Denominator of two integers.">gcd</a>, _subgcd)
  1737. <a name="l02593"></a>02593 <a class="code" href="integer_8hpp.html#a80138c91fff1f86edb6fe96603cfa948" title="Allows for operations between integer_t types and other integral values.">BOOST_XINT_ANY_MATH</a>(<a class="code" href="namespaceboost_1_1xint.html#a9ea55f62ba2462f73dad2ef21ad206c9" title="Calculate the Least Common Multiple of two integers.">lcm</a>, _sublcm)
  1738. <a name="l02594"></a>02594
  1739. <a name="l02597"></a>02597 template &lt;typename charT, typename traits, <a class="code" href="options_8hpp.html#aeebffc787ad64df0fd45d351e3c36d89">BOOST_XINT_CLASS_APARAMS</a>&gt; inline
  1740. <a name="l02598"></a>02598 std::basic_ostream&lt;charT,traits&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;charT,
  1741. <a name="l02599"></a>02599 traits&gt; &amp;out, const integer_t&lt;<a class="code" href="options_8hpp.html#aa350afa46bc87068c0cefb1925130b6c">BOOST_XINT_APARAMS</a>&gt; &amp;n)
  1742. <a name="l02600"></a>02600 {
  1743. <a name="l02601"></a>02601 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow &amp;&amp; n.is_nan()) <span class="keywordflow">return</span>
  1744. <a name="l02602"></a>02602 <span class="keyword">operator</span>&lt;&lt;(out, detail::nan_text&lt;charT&gt;());
  1745. <a name="l02603"></a>02603 <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1xint.html#ac3c6e6cc5558add06e5945a32dcf66a4">operator&lt;&lt;</a>(out, n._data());
  1746. <a name="l02604"></a><a class="code" href="namespaceboost_1_1xint.html#a98de11cf4ef9d97a4f1d1b450f8287fa">02604</a> }
  1747. <a name="l02605"></a>02605
  1748. <a name="l02606"></a>02606 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> <span class="keywordtype">char</span>T, <span class="keyword">typename</span> traits, BOOST_XINT_CLASS_APARAMS&gt; <span class="keyword">inline</span>
  1749. <a name="l02607"></a>02607 std::basic_istream&lt;charT,traits&gt;&amp; <a class="code" href="namespaceboost_1_1xint.html#a98de11cf4ef9d97a4f1d1b450f8287fa">operator&gt;&gt;</a>(std::basic_istream&lt;charT,
  1750. <a name="l02608"></a>02608 traits&gt; &amp;in, integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;n)
  1751. <a name="l02609"></a>02609 {
  1752. <a name="l02610"></a>02610 <span class="comment">//if (in.flags() &amp;</span>
  1753. <a name="l02611"></a>02611
  1754. <a name="l02612"></a>02612 <span class="keywordflow">if</span> (integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow) {
  1755. <a name="l02613"></a>02613 <span class="keyword">const</span> std::basic_string&lt;charT&gt; &amp;tnan = detail::nan_text&lt;charT&gt;();
  1756. <a name="l02614"></a>02614 charT nextchar = charT(in.peek());
  1757. <a name="l02615"></a>02615 <span class="keywordflow">if</span> (nextchar == tnan[0]) {
  1758. <a name="l02616"></a>02616 <span class="comment">// Must be either #NaN# or an error</span>
  1759. <a name="l02617"></a>02617 std::vector&lt;charT&gt; buffer;
  1760. <a name="l02618"></a>02618
  1761. <a name="l02619"></a>02619 charT p = 0;
  1762. <a name="l02620"></a>02620 <span class="keywordflow">for</span> (std::size_t i = 0; i &lt; tnan.length(); ++i) {
  1763. <a name="l02621"></a>02621 in &gt;&gt; p;
  1764. <a name="l02622"></a>02622 buffer.push_back(p);
  1765. <a name="l02623"></a>02623 }
  1766. <a name="l02624"></a>02624 buffer.push_back(0);
  1767. <a name="l02625"></a>02625
  1768. <a name="l02626"></a>02626 std::basic_string&lt;charT&gt; str(&amp;buffer[0]);
  1769. <a name="l02627"></a>02627 <span class="keywordflow">if</span> (str == tnan)
  1770. <a name="l02628"></a>02628 n = detail::get_nan&lt;integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1771. <a name="l02629"></a>02629 <span class="keywordflow">else</span> in.setstate(std::ios::failbit);
  1772. <a name="l02630"></a>02630 <span class="keywordflow">return</span> in;
  1773. <a name="l02631"></a>02631 }
  1774. <a name="l02632"></a>02632 }
  1775. <a name="l02633"></a>02633 <a class="code" href="namespaceboost_1_1xint.html#a98de11cf4ef9d97a4f1d1b450f8287fa">operator&gt;&gt;</a>(in, n._data());
  1776. <a name="l02634"></a>02634 <span class="keywordflow">if</span> (!integer_t&lt;BOOST_XINT_APARAMS&gt;::Signed &amp;&amp; n._data().negative)
  1777. <a name="l02635"></a>02635 n._fix_negative_unsigned();
  1778. <a name="l02636"></a>02636 <span class="keywordflow">return</span> in;
  1779. <a name="l02637"></a>02637 }
  1780. <a name="l02639"></a>02639
  1781. <a name="l02640"></a>02640 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1782. <a name="l02641"></a>02641 <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespaceboost_1_1xint.html#aecbaaf9b2c679d8b6f220224a6bab8dc">swap</a>(integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;left,
  1783. <a name="l02642"></a>02642 integer_t&lt;BOOST_XINT_APARAMS&gt; &amp;right)
  1784. <a name="l02643"></a>02643 {
  1785. <a name="l02644"></a>02644 left._swap(right);
  1786. <a name="l02645"></a>02645 }
  1787. <a name="l02646"></a>02646
  1788. <a name="l02651"></a>02651 <span class="keyword">typedef</span> integer_t&lt;&gt; integer;
  1789. <a name="l02652"></a>02652
  1790. <a name="l02658"></a>02658 <span class="keyword">typedef</span> integer_t&lt;options::nothrow&gt; nothrow_integer;
  1791. <a name="l02659"></a>02659
  1792. <a name="l02660"></a>02660 } <span class="comment">// namespace xint</span>
  1793. <a name="l02661"></a>02661 } <span class="comment">// namespace boost</span>
  1794. <a name="l02662"></a>02662
  1795. <a name="l02663"></a>02663 <span class="preprocessor">#ifndef BOOST_XINT_DOXYGEN_IGNORE</span>
  1796. <a name="l02664"></a>02664 <span class="preprocessor"></span><span class="keyword">namespace </span>std {
  1797. <a name="l02665"></a>02665
  1798. <a name="l02666"></a>02666 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1799. <a name="l02667"></a>02667 <span class="keyword">class </span>numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt; {
  1800. <a name="l02668"></a>02668 <span class="keyword">public</span>:
  1801. <a name="l02669"></a>02669 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_specialized;
  1802. <a name="l02670"></a>02670
  1803. <a name="l02671"></a>02671 <span class="keyword">static</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt;</a> min
  1804. <a name="l02672"></a>02672 BOOST_PREVENT_MACRO_SUBSTITUTION() throw()
  1805. <a name="l02673"></a>02673 {
  1806. <a name="l02674"></a>02674 <span class="keywordflow">if</span> (<a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt;::Bits</a>)
  1807. <a name="l02675"></a>02675 <span class="keywordflow">return</span> -~(<a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt;</a>());
  1808. <a name="l02676"></a>02676 <span class="keywordflow">else</span> <span class="keywordflow">return</span> 0;
  1809. <a name="l02677"></a>02677 }
  1810. <a name="l02678"></a>02678 <span class="keyword">static</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt;</a> max
  1811. <a name="l02679"></a>02679 BOOST_PREVENT_MACRO_SUBSTITUTION() throw()
  1812. <a name="l02680"></a>02680 {
  1813. <a name="l02681"></a>02681 <span class="keywordflow">if</span> (<a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt;::Bits</a>)
  1814. <a name="l02682"></a>02682 <span class="keywordflow">return</span> ~(<a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt;</a>());
  1815. <a name="l02683"></a>02683 <span class="keywordflow">else</span> <span class="keywordflow">return</span> 0;
  1816. <a name="l02684"></a>02684 }
  1817. <a name="l02685"></a>02685
  1818. <a name="l02686"></a>02686 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> digits;
  1819. <a name="l02687"></a>02687 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> digits10;
  1820. <a name="l02688"></a>02688 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_signed;
  1821. <a name="l02689"></a>02689 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_integer;
  1822. <a name="l02690"></a>02690 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_exact;
  1823. <a name="l02691"></a>02691 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> radix;
  1824. <a name="l02692"></a>02692 <span class="keyword">static</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt;</a> epsilon() throw() { <span class="keywordflow">return</span>
  1825. <a name="l02693"></a>02693 0; }
  1826. <a name="l02694"></a>02694 <span class="keyword">static</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt;</a> round_error() throw() {
  1827. <a name="l02695"></a>02695 <span class="keywordflow">return</span> 0; }
  1828. <a name="l02696"></a>02696
  1829. <a name="l02697"></a>02697 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> min_exponent; <span class="comment">// N/A</span>
  1830. <a name="l02698"></a>02698 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> min_exponent10; <span class="comment">// N/A</span>
  1831. <a name="l02699"></a>02699 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> max_exponent; <span class="comment">// N/A</span>
  1832. <a name="l02700"></a>02700 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> max_exponent10; <span class="comment">// N/A</span>
  1833. <a name="l02701"></a>02701
  1834. <a name="l02702"></a>02702 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> has_infinity; <span class="comment">// N/A</span>
  1835. <a name="l02703"></a>02703 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> has_quiet_NaN;
  1836. <a name="l02704"></a>02704 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> has_signaling_NaN; <span class="comment">// N/A</span>
  1837. <a name="l02705"></a>02705 <span class="keyword">static</span> <span class="keyword">const</span> float_denorm_style has_denorm; <span class="comment">// N/A</span>
  1838. <a name="l02706"></a>02706 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> has_denorm_loss; <span class="comment">// N/A</span>
  1839. <a name="l02707"></a>02707
  1840. <a name="l02708"></a>02708 <span class="keyword">static</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt;</a> infinity() throw() {
  1841. <a name="l02709"></a>02709 <span class="keywordflow">return</span> 0; } <span class="comment">// N/A</span>
  1842. <a name="l02710"></a>02710 <span class="keyword">static</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt;</a> quiet_NaN() throw() {
  1843. <a name="l02711"></a>02711 <span class="keywordflow">if</span> (<a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow</a>) <span class="keywordflow">return</span> boost::
  1844. <a name="l02712"></a>02712 xint::detail::get_nan&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;();
  1845. <a name="l02713"></a>02713 <span class="keywordflow">else</span> <span class="keywordflow">return</span> 0;
  1846. <a name="l02714"></a>02714 }
  1847. <a name="l02715"></a>02715 <span class="keyword">static</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt;</a> signaling_NaN() throw() {
  1848. <a name="l02716"></a>02716 <span class="keywordflow">return</span> 0; } <span class="comment">// N/A</span>
  1849. <a name="l02717"></a>02717 <span class="keyword">static</span> <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt;</a> denorm_min() throw() {
  1850. <a name="l02718"></a>02718 <span class="keywordflow">return</span> 0; } <span class="comment">// N/A</span>
  1851. <a name="l02719"></a>02719
  1852. <a name="l02720"></a>02720 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_iec559; <span class="comment">// N/A</span>
  1853. <a name="l02721"></a>02721 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_bounded;
  1854. <a name="l02722"></a>02722 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_modulo;
  1855. <a name="l02723"></a>02723
  1856. <a name="l02724"></a>02724 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> traps; <span class="comment">// I assume this means exceptions?</span>
  1857. <a name="l02725"></a>02725 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> tinyness_before; <span class="comment">// N/A</span>
  1858. <a name="l02726"></a>02726 <span class="keyword">static</span> <span class="keyword">const</span> float_round_style round_style; <span class="comment">// N/A</span>
  1859. <a name="l02727"></a>02727 };
  1860. <a name="l02728"></a>02728
  1861. <a name="l02729"></a>02729 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1862. <a name="l02730"></a>02730 <span class="keyword">const</span> <span class="keywordtype">bool</span> numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;::
  1863. <a name="l02731"></a>02731 is_specialized = <span class="keyword">true</span>;
  1864. <a name="l02732"></a>02732
  1865. <a name="l02733"></a>02733 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1866. <a name="l02734"></a>02734 <span class="keyword">const</span> <span class="keywordtype">int</span> numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;::digits =
  1867. <a name="l02735"></a>02735 <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(<a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt;::Bits</a>);
  1868. <a name="l02736"></a>02736
  1869. <a name="l02737"></a>02737 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1870. <a name="l02738"></a>02738 <span class="keyword">const</span> <span class="keywordtype">int</span> numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;::digits10
  1871. <a name="l02739"></a>02739 = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(boost::xint::detail::log10_bits(
  1872. <a name="l02740"></a>02740 <a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt;::Bits</a>));
  1873. <a name="l02741"></a>02741
  1874. <a name="l02742"></a>02742 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1875. <a name="l02743"></a>02743 <span class="keyword">const</span> <span class="keywordtype">bool</span> numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;::
  1876. <a name="l02744"></a>02744 is_signed = (<a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt;::Signed</a> ? <span class="keyword">true</span> :
  1877. <a name="l02745"></a>02745 <span class="keyword">false</span>);
  1878. <a name="l02746"></a>02746
  1879. <a name="l02747"></a>02747 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1880. <a name="l02748"></a>02748 <span class="keyword">const</span> <span class="keywordtype">bool</span> numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;::
  1881. <a name="l02749"></a>02749 is_integer = <span class="keyword">true</span>;
  1882. <a name="l02750"></a>02750
  1883. <a name="l02751"></a>02751 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1884. <a name="l02752"></a>02752 <span class="keyword">const</span> <span class="keywordtype">bool</span> numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;::is_exact
  1885. <a name="l02753"></a>02753 = <span class="keyword">true</span>;
  1886. <a name="l02754"></a>02754
  1887. <a name="l02755"></a>02755 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1888. <a name="l02756"></a>02756 <span class="keyword">const</span> <span class="keywordtype">int</span> numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;::radix =
  1889. <a name="l02757"></a>02757 2;
  1890. <a name="l02758"></a>02758
  1891. <a name="l02759"></a>02759 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1892. <a name="l02760"></a>02760 <span class="keyword">const</span> <span class="keywordtype">int</span> numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;::
  1893. <a name="l02761"></a>02761 min_exponent = 0;
  1894. <a name="l02762"></a>02762
  1895. <a name="l02763"></a>02763 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1896. <a name="l02764"></a>02764 <span class="keyword">const</span> <span class="keywordtype">int</span> numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;::
  1897. <a name="l02765"></a>02765 min_exponent10 = 0;
  1898. <a name="l02766"></a>02766
  1899. <a name="l02767"></a>02767 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1900. <a name="l02768"></a>02768 <span class="keyword">const</span> <span class="keywordtype">int</span> numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;::
  1901. <a name="l02769"></a>02769 max_exponent = 0;
  1902. <a name="l02770"></a>02770
  1903. <a name="l02771"></a>02771 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1904. <a name="l02772"></a>02772 <span class="keyword">const</span> <span class="keywordtype">int</span> numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;::
  1905. <a name="l02773"></a>02773 max_exponent10 = 0;
  1906. <a name="l02774"></a>02774
  1907. <a name="l02775"></a>02775 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1908. <a name="l02776"></a>02776 <span class="keyword">const</span> <span class="keywordtype">bool</span> numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;::
  1909. <a name="l02777"></a>02777 has_infinity = <span class="keyword">false</span>;
  1910. <a name="l02778"></a>02778
  1911. <a name="l02779"></a>02779 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1912. <a name="l02780"></a>02780 <span class="keyword">const</span> <span class="keywordtype">bool</span> numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;::
  1913. <a name="l02781"></a>02781 has_quiet_NaN = (<a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow</a> ? <span class="keyword">true</span>
  1914. <a name="l02782"></a>02782 : <span class="keyword">false</span>);
  1915. <a name="l02783"></a>02783
  1916. <a name="l02784"></a>02784 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1917. <a name="l02785"></a>02785 <span class="keyword">const</span> <span class="keywordtype">bool</span> numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;::
  1918. <a name="l02786"></a>02786 has_signaling_NaN = <span class="keyword">false</span>;
  1919. <a name="l02787"></a>02787
  1920. <a name="l02788"></a>02788 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1921. <a name="l02789"></a>02789 <span class="keyword">const</span> float_denorm_style numeric_limits&lt;<a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t</a>&lt;
  1922. <a name="l02790"></a>02790 <a class="code" href="options_8hpp.html#aa350afa46bc87068c0cefb1925130b6c">BOOST_XINT_APARAMS</a>&gt; &gt;::has_denorm = denorm_absent;
  1923. <a name="l02791"></a>02791
  1924. <a name="l02792"></a>02792 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1925. <a name="l02793"></a>02793 <span class="keyword">const</span> <span class="keywordtype">bool</span> numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;::
  1926. <a name="l02794"></a>02794 has_denorm_loss = <span class="keyword">false</span>;
  1927. <a name="l02795"></a>02795
  1928. <a name="l02796"></a>02796 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1929. <a name="l02797"></a>02797 <span class="keyword">const</span> <span class="keywordtype">bool</span> numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;::
  1930. <a name="l02798"></a>02798 is_iec559 = <span class="keyword">false</span>;
  1931. <a name="l02799"></a>02799
  1932. <a name="l02800"></a>02800 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1933. <a name="l02801"></a>02801 <span class="keyword">const</span> <span class="keywordtype">bool</span> numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;::
  1934. <a name="l02802"></a>02802 is_bounded = (<a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt;::Bits</a> == 0 ? <span class="keyword">false</span>
  1935. <a name="l02803"></a>02803 : <span class="keyword">true</span>);
  1936. <a name="l02804"></a>02804
  1937. <a name="l02805"></a>02805 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1938. <a name="l02806"></a>02806 <span class="keyword">const</span> <span class="keywordtype">bool</span> numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;::
  1939. <a name="l02807"></a>02807 is_modulo = (<a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt;::Bits</a> == 0 ? <span class="keyword">false</span> :
  1940. <a name="l02808"></a>02808 <span class="keyword">true</span>);
  1941. <a name="l02809"></a>02809
  1942. <a name="l02810"></a>02810 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1943. <a name="l02811"></a>02811 <span class="keyword">const</span> <span class="keywordtype">bool</span> numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;::traps =
  1944. <a name="l02812"></a>02812 (<a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt;::Nothrow</a> ? <span class="keyword">false</span> : <span class="keyword">true</span>);
  1945. <a name="l02813"></a>02813
  1946. <a name="l02814"></a>02814 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1947. <a name="l02815"></a>02815 <span class="keyword">const</span> <span class="keywordtype">bool</span> numeric_limits&lt;boost::xint::integer_t&lt;BOOST_XINT_APARAMS&gt; &gt;::
  1948. <a name="l02816"></a>02816 tinyness_before = <span class="keyword">false</span>;
  1949. <a name="l02817"></a>02817
  1950. <a name="l02818"></a>02818 <span class="keyword">template</span>&lt;BOOST_XINT_CLASS_APARAMS&gt;
  1951. <a name="l02819"></a>02819 <span class="keyword">const</span> float_round_style numeric_limits&lt;<a class="code" href="classboost_1_1xint_1_1integer__t.html" title="The integer_t class template.">boost::xint::integer_t</a>&lt;
  1952. <a name="l02820"></a>02820 <a class="code" href="options_8hpp.html#aa350afa46bc87068c0cefb1925130b6c">BOOST_XINT_APARAMS</a>&gt; &gt;::round_style = round_indeterminate;
  1953. <a name="l02821"></a>02821
  1954. <a name="l02822"></a>02822 } <span class="comment">// namespace std</span>
  1955. <a name="l02823"></a>02823
  1956. <a name="l02824"></a>02824 <span class="preprocessor">#ifdef _MSC_VER</span>
  1957. <a name="l02825"></a>02825 <span class="preprocessor"></span><span class="preprocessor"> #pragma warning(pop)</span>
  1958. <a name="l02826"></a>02826 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
  1959. <a name="l02827"></a>02827 <span class="preprocessor"></span>
  1960. <a name="l02828"></a>02828 <span class="preprocessor">#endif // BOOST_XINT_DOXYGEN_IGNORE</span>
  1961. <a name="l02829"></a>02829 <span class="preprocessor"></span><span class="preprocessor">#endif // BOOST_INCLUDED_XINT_INTEGER_HPP</span>
  1962. </pre></div></div>
  1963. </div>
  1964. <hr>
  1965. <p><i>&copy; Copyright Chad Nelson, 2010-2011. Distributed under the Boost Software
  1966. License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  1967. <a href=http://www.boost.org/LICENSE_1_0.txt>http://www.boost.org/LICENSE_1_0.txt</a>)
  1968. </i></p>
  1969. <p><i>Documentation generated on Wed Mar 9 2011 22:56:48 by&nbsp;<a href="http://www.doxygen.org/index.html">
  1970. <img class="footer" src="doxygen.png" alt="doxygen"/></a>
  1971. 1.7.1</small></address></i></p>