blob: f21987bd313d27c5099f5b0c0531519560c1157f [file] [log] [blame]
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `/root/.cargo/registry/src/github.com-1ecc6299db9ec823/aho-corasick-1.0.2/src/util/int.rs`."><meta name="keywords" content="rust, rustlang, rust-lang"><title>int.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../../../normalize.css"><link rel="stylesheet" href="../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../../../ayu.css" disabled><link rel="stylesheet" href="../../../dark.css" disabled><link rel="stylesheet" href="../../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../../storage.js"></script><script defer src="../../../source-script.js"></script><script defer src="../../../source-files.js"></script><script defer src="../../../main.js"></script><noscript><link rel="stylesheet" href="../../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../../favicon.svg"></head><body class="rustdoc source"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><a class="sidebar-logo" href="../../../aho_corasick/index.html"><div class="logo-container"><img class="rust-logo" src="../../../rust-logo.svg" alt="logo"></div></a></nav><main><div class="width-limiter"><nav class="sub"><a class="sub-logo-container" href="../../../aho_corasick/index.html"><img class="rust-logo" src="../../../rust-logo.svg" alt="logo"></a><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../wheel.svg"></a></div></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><pre class="src-line-numbers"><span id="1">1</span>
<span id="2">2</span>
<span id="3">3</span>
<span id="4">4</span>
<span id="5">5</span>
<span id="6">6</span>
<span id="7">7</span>
<span id="8">8</span>
<span id="9">9</span>
<span id="10">10</span>
<span id="11">11</span>
<span id="12">12</span>
<span id="13">13</span>
<span id="14">14</span>
<span id="15">15</span>
<span id="16">16</span>
<span id="17">17</span>
<span id="18">18</span>
<span id="19">19</span>
<span id="20">20</span>
<span id="21">21</span>
<span id="22">22</span>
<span id="23">23</span>
<span id="24">24</span>
<span id="25">25</span>
<span id="26">26</span>
<span id="27">27</span>
<span id="28">28</span>
<span id="29">29</span>
<span id="30">30</span>
<span id="31">31</span>
<span id="32">32</span>
<span id="33">33</span>
<span id="34">34</span>
<span id="35">35</span>
<span id="36">36</span>
<span id="37">37</span>
<span id="38">38</span>
<span id="39">39</span>
<span id="40">40</span>
<span id="41">41</span>
<span id="42">42</span>
<span id="43">43</span>
<span id="44">44</span>
<span id="45">45</span>
<span id="46">46</span>
<span id="47">47</span>
<span id="48">48</span>
<span id="49">49</span>
<span id="50">50</span>
<span id="51">51</span>
<span id="52">52</span>
<span id="53">53</span>
<span id="54">54</span>
<span id="55">55</span>
<span id="56">56</span>
<span id="57">57</span>
<span id="58">58</span>
<span id="59">59</span>
<span id="60">60</span>
<span id="61">61</span>
<span id="62">62</span>
<span id="63">63</span>
<span id="64">64</span>
<span id="65">65</span>
<span id="66">66</span>
<span id="67">67</span>
<span id="68">68</span>
<span id="69">69</span>
<span id="70">70</span>
<span id="71">71</span>
<span id="72">72</span>
<span id="73">73</span>
<span id="74">74</span>
<span id="75">75</span>
<span id="76">76</span>
<span id="77">77</span>
<span id="78">78</span>
<span id="79">79</span>
<span id="80">80</span>
<span id="81">81</span>
<span id="82">82</span>
<span id="83">83</span>
<span id="84">84</span>
<span id="85">85</span>
<span id="86">86</span>
<span id="87">87</span>
<span id="88">88</span>
<span id="89">89</span>
<span id="90">90</span>
<span id="91">91</span>
<span id="92">92</span>
<span id="93">93</span>
<span id="94">94</span>
<span id="95">95</span>
<span id="96">96</span>
<span id="97">97</span>
<span id="98">98</span>
<span id="99">99</span>
<span id="100">100</span>
<span id="101">101</span>
<span id="102">102</span>
<span id="103">103</span>
<span id="104">104</span>
<span id="105">105</span>
<span id="106">106</span>
<span id="107">107</span>
<span id="108">108</span>
<span id="109">109</span>
<span id="110">110</span>
<span id="111">111</span>
<span id="112">112</span>
<span id="113">113</span>
<span id="114">114</span>
<span id="115">115</span>
<span id="116">116</span>
<span id="117">117</span>
<span id="118">118</span>
<span id="119">119</span>
<span id="120">120</span>
<span id="121">121</span>
<span id="122">122</span>
<span id="123">123</span>
<span id="124">124</span>
<span id="125">125</span>
<span id="126">126</span>
<span id="127">127</span>
<span id="128">128</span>
<span id="129">129</span>
<span id="130">130</span>
<span id="131">131</span>
<span id="132">132</span>
<span id="133">133</span>
<span id="134">134</span>
<span id="135">135</span>
<span id="136">136</span>
<span id="137">137</span>
<span id="138">138</span>
<span id="139">139</span>
<span id="140">140</span>
<span id="141">141</span>
<span id="142">142</span>
<span id="143">143</span>
<span id="144">144</span>
<span id="145">145</span>
<span id="146">146</span>
<span id="147">147</span>
<span id="148">148</span>
<span id="149">149</span>
<span id="150">150</span>
<span id="151">151</span>
<span id="152">152</span>
<span id="153">153</span>
<span id="154">154</span>
<span id="155">155</span>
<span id="156">156</span>
<span id="157">157</span>
<span id="158">158</span>
<span id="159">159</span>
<span id="160">160</span>
<span id="161">161</span>
<span id="162">162</span>
<span id="163">163</span>
<span id="164">164</span>
<span id="165">165</span>
<span id="166">166</span>
<span id="167">167</span>
<span id="168">168</span>
<span id="169">169</span>
<span id="170">170</span>
<span id="171">171</span>
<span id="172">172</span>
<span id="173">173</span>
<span id="174">174</span>
<span id="175">175</span>
<span id="176">176</span>
<span id="177">177</span>
<span id="178">178</span>
<span id="179">179</span>
<span id="180">180</span>
<span id="181">181</span>
<span id="182">182</span>
<span id="183">183</span>
<span id="184">184</span>
<span id="185">185</span>
<span id="186">186</span>
<span id="187">187</span>
<span id="188">188</span>
<span id="189">189</span>
<span id="190">190</span>
<span id="191">191</span>
<span id="192">192</span>
<span id="193">193</span>
<span id="194">194</span>
<span id="195">195</span>
<span id="196">196</span>
<span id="197">197</span>
<span id="198">198</span>
<span id="199">199</span>
<span id="200">200</span>
<span id="201">201</span>
<span id="202">202</span>
<span id="203">203</span>
<span id="204">204</span>
<span id="205">205</span>
<span id="206">206</span>
<span id="207">207</span>
<span id="208">208</span>
<span id="209">209</span>
<span id="210">210</span>
<span id="211">211</span>
<span id="212">212</span>
<span id="213">213</span>
<span id="214">214</span>
<span id="215">215</span>
<span id="216">216</span>
<span id="217">217</span>
<span id="218">218</span>
<span id="219">219</span>
<span id="220">220</span>
<span id="221">221</span>
<span id="222">222</span>
<span id="223">223</span>
<span id="224">224</span>
<span id="225">225</span>
<span id="226">226</span>
<span id="227">227</span>
<span id="228">228</span>
<span id="229">229</span>
<span id="230">230</span>
</pre><pre class="rust"><code><span class="doccomment">/*!
This module provides several integer oriented traits for converting between
both fixed size integers and integers whose size varies based on the target
(like `usize`).
The main design principle for this module is to centralize all uses of `as`.
The thinking here is that `as` makes it very easy to perform accidental lossy
conversions, and if we centralize all its uses here under more descriptive
higher level operations, its use and correctness becomes easier to audit.
This was copied mostly wholesale from `regex-automata`.
NOTE: for simplicity, we don&#39;t take target pointer width into account here for
`usize` conversions. Since we currently only panic in debug mode, skipping the
check when it can be proven it isn&#39;t needed at compile time doesn&#39;t really
matter. Now, if we wind up wanting to do as many checks as possible in release
mode, then we would want to skip those when we know the conversions are always
non-lossy.
*/
</span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">trait </span>U8 {
<span class="kw">fn </span>as_usize(<span class="self">self</span>) -&gt; usize;
}
<span class="kw">impl </span>U8 <span class="kw">for </span>u8 {
<span class="kw">fn </span>as_usize(<span class="self">self</span>) -&gt; usize {
usize::from(<span class="self">self</span>)
}
}
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">trait </span>U16 {
<span class="kw">fn </span>as_usize(<span class="self">self</span>) -&gt; usize;
<span class="kw">fn </span>low_u8(<span class="self">self</span>) -&gt; u8;
<span class="kw">fn </span>high_u8(<span class="self">self</span>) -&gt; u8;
}
<span class="kw">impl </span>U16 <span class="kw">for </span>u16 {
<span class="kw">fn </span>as_usize(<span class="self">self</span>) -&gt; usize {
usize::from(<span class="self">self</span>)
}
<span class="kw">fn </span>low_u8(<span class="self">self</span>) -&gt; u8 {
<span class="self">self </span><span class="kw">as </span>u8
}
<span class="kw">fn </span>high_u8(<span class="self">self</span>) -&gt; u8 {
(<span class="self">self </span>&gt;&gt; <span class="number">8</span>) <span class="kw">as </span>u8
}
}
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">trait </span>U32 {
<span class="kw">fn </span>as_usize(<span class="self">self</span>) -&gt; usize;
<span class="kw">fn </span>low_u8(<span class="self">self</span>) -&gt; u8;
<span class="kw">fn </span>low_u16(<span class="self">self</span>) -&gt; u16;
<span class="kw">fn </span>high_u16(<span class="self">self</span>) -&gt; u16;
}
<span class="kw">impl </span>U32 <span class="kw">for </span>u32 {
<span class="attribute">#[inline]
</span><span class="kw">fn </span>as_usize(<span class="self">self</span>) -&gt; usize {
<span class="attribute">#[cfg(debug_assertions)]
</span>{
usize::try_from(<span class="self">self</span>).expect(<span class="string">&quot;u32 overflowed usize&quot;</span>)
}
<span class="attribute">#[cfg(not(debug_assertions))]
</span>{
<span class="self">self </span><span class="kw">as </span>usize
}
}
<span class="kw">fn </span>low_u8(<span class="self">self</span>) -&gt; u8 {
<span class="self">self </span><span class="kw">as </span>u8
}
<span class="kw">fn </span>low_u16(<span class="self">self</span>) -&gt; u16 {
<span class="self">self </span><span class="kw">as </span>u16
}
<span class="kw">fn </span>high_u16(<span class="self">self</span>) -&gt; u16 {
(<span class="self">self </span>&gt;&gt; <span class="number">16</span>) <span class="kw">as </span>u16
}
}
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">trait </span>U64 {
<span class="kw">fn </span>as_usize(<span class="self">self</span>) -&gt; usize;
<span class="kw">fn </span>low_u8(<span class="self">self</span>) -&gt; u8;
<span class="kw">fn </span>low_u16(<span class="self">self</span>) -&gt; u16;
<span class="kw">fn </span>low_u32(<span class="self">self</span>) -&gt; u32;
<span class="kw">fn </span>high_u32(<span class="self">self</span>) -&gt; u32;
}
<span class="kw">impl </span>U64 <span class="kw">for </span>u64 {
<span class="kw">fn </span>as_usize(<span class="self">self</span>) -&gt; usize {
<span class="attribute">#[cfg(debug_assertions)]
</span>{
usize::try_from(<span class="self">self</span>).expect(<span class="string">&quot;u64 overflowed usize&quot;</span>)
}
<span class="attribute">#[cfg(not(debug_assertions))]
</span>{
<span class="self">self </span><span class="kw">as </span>usize
}
}
<span class="kw">fn </span>low_u8(<span class="self">self</span>) -&gt; u8 {
<span class="self">self </span><span class="kw">as </span>u8
}
<span class="kw">fn </span>low_u16(<span class="self">self</span>) -&gt; u16 {
<span class="self">self </span><span class="kw">as </span>u16
}
<span class="kw">fn </span>low_u32(<span class="self">self</span>) -&gt; u32 {
<span class="self">self </span><span class="kw">as </span>u32
}
<span class="kw">fn </span>high_u32(<span class="self">self</span>) -&gt; u32 {
(<span class="self">self </span>&gt;&gt; <span class="number">32</span>) <span class="kw">as </span>u32
}
}
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">trait </span>I32 {
<span class="kw">fn </span>as_usize(<span class="self">self</span>) -&gt; usize;
<span class="kw">fn </span>to_bits(<span class="self">self</span>) -&gt; u32;
<span class="kw">fn </span>from_bits(n: u32) -&gt; i32;
}
<span class="kw">impl </span>I32 <span class="kw">for </span>i32 {
<span class="kw">fn </span>as_usize(<span class="self">self</span>) -&gt; usize {
<span class="attribute">#[cfg(debug_assertions)]
</span>{
usize::try_from(<span class="self">self</span>).expect(<span class="string">&quot;i32 overflowed usize&quot;</span>)
}
<span class="attribute">#[cfg(not(debug_assertions))]
</span>{
<span class="self">self </span><span class="kw">as </span>usize
}
}
<span class="kw">fn </span>to_bits(<span class="self">self</span>) -&gt; u32 {
<span class="self">self </span><span class="kw">as </span>u32
}
<span class="kw">fn </span>from_bits(n: u32) -&gt; i32 {
n <span class="kw">as </span>i32
}
}
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">trait </span>Usize {
<span class="kw">fn </span>as_u8(<span class="self">self</span>) -&gt; u8;
<span class="kw">fn </span>as_u16(<span class="self">self</span>) -&gt; u16;
<span class="kw">fn </span>as_u32(<span class="self">self</span>) -&gt; u32;
<span class="kw">fn </span>as_u64(<span class="self">self</span>) -&gt; u64;
}
<span class="kw">impl </span>Usize <span class="kw">for </span>usize {
<span class="kw">fn </span>as_u8(<span class="self">self</span>) -&gt; u8 {
<span class="attribute">#[cfg(debug_assertions)]
</span>{
u8::try_from(<span class="self">self</span>).expect(<span class="string">&quot;usize overflowed u8&quot;</span>)
}
<span class="attribute">#[cfg(not(debug_assertions))]
</span>{
<span class="self">self </span><span class="kw">as </span>u8
}
}
<span class="kw">fn </span>as_u16(<span class="self">self</span>) -&gt; u16 {
<span class="attribute">#[cfg(debug_assertions)]
</span>{
u16::try_from(<span class="self">self</span>).expect(<span class="string">&quot;usize overflowed u16&quot;</span>)
}
<span class="attribute">#[cfg(not(debug_assertions))]
</span>{
<span class="self">self </span><span class="kw">as </span>u16
}
}
<span class="kw">fn </span>as_u32(<span class="self">self</span>) -&gt; u32 {
<span class="attribute">#[cfg(debug_assertions)]
</span>{
u32::try_from(<span class="self">self</span>).expect(<span class="string">&quot;usize overflowed u32&quot;</span>)
}
<span class="attribute">#[cfg(not(debug_assertions))]
</span>{
<span class="self">self </span><span class="kw">as </span>u32
}
}
<span class="kw">fn </span>as_u64(<span class="self">self</span>) -&gt; u64 {
<span class="attribute">#[cfg(debug_assertions)]
</span>{
u64::try_from(<span class="self">self</span>).expect(<span class="string">&quot;usize overflowed u64&quot;</span>)
}
<span class="attribute">#[cfg(not(debug_assertions))]
</span>{
<span class="self">self </span><span class="kw">as </span>u64
}
}
}
<span class="comment">// Pointers aren&#39;t integers, but we convert pointers to integers to perform
// offset arithmetic in some places. (And no, we don&#39;t convert the integers
// back to pointers.) So add &#39;as_usize&#39; conversions here too for completeness.
//
// These &#39;as&#39; casts are actually okay because they&#39;re always non-lossy. But the
// idea here is to just try and remove as much &#39;as&#39; as possible, particularly
// in this crate where we are being really paranoid about offsets and making
// sure we don&#39;t panic on inputs that might be untrusted. This way, the &#39;as&#39;
// casts become easier to audit if they&#39;re all in one place, even when some of
// them are actually okay 100% of the time.
</span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">trait </span>Pointer {
<span class="kw">fn </span>as_usize(<span class="self">self</span>) -&gt; usize;
}
<span class="kw">impl</span>&lt;T&gt; Pointer <span class="kw">for </span><span class="kw-2">*const </span>T {
<span class="kw">fn </span>as_usize(<span class="self">self</span>) -&gt; usize {
<span class="self">self </span><span class="kw">as </span>usize
}
}
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">trait </span>PointerMut {
<span class="kw">fn </span>as_usize(<span class="self">self</span>) -&gt; usize;
}
<span class="kw">impl</span>&lt;T&gt; PointerMut <span class="kw">for </span><span class="kw-2">*mut </span>T {
<span class="kw">fn </span>as_usize(<span class="self">self</span>) -&gt; usize {
<span class="self">self </span><span class="kw">as </span>usize
}
}
</code></pre></div>
</section></div></main><div id="rustdoc-vars" data-root-path="../../../" data-current-crate="aho_corasick" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.0-nightly (5c8bff74b 2022-10-21)" ></div></body></html>