rtic/dev/api/hash32/index.html
2024-10-24 05:57:30 +00:00

32 lines
No EOL
6.7 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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="32-bit hashing algorithms"><title>hash32 - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2,SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../static.files/rustdoc-492a78a4a87dcc01.css"><meta name="rustdoc-vars" data-root-path="../" data-static-root-path="../static.files/" data-current-crate="hash32" data-themes="" data-resource-suffix="" data-rustdoc-version="1.82.0 (f6e511eec 2024-10-15)" data-channel="1.82.0" data-search-js="search-a99f1315e7cc5121.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../static.files/storage-118b08c4c78b968e.js"></script><script defer src="../crates.js"></script><script defer src="../static.files/main-921df33f47b8780c.js"></script><noscript><link rel="stylesheet" href="../static.files/noscript-3b12f09e550e0385.css"></noscript><link rel="alternate icon" type="image/png" href="../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc mod crate"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle" title="show sidebar"></button></nav><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../hash32/index.html">hash32</a><span class="version">0.3.1</span></h2></div><div class="sidebar-elems"><ul class="block"><li><a id="all-types" href="all.html">All Items</a></li></ul><section><ul class="block"><li><a href="#structs">Structs</a></li><li><a href="#traits">Traits</a></li></ul></section></div></nav><div class="sidebar-resizer"></div><main><div class="width-limiter"><rustdoc-search></rustdoc-search><section id="main-content" class="content"><div class="main-heading"><h1>Crate <a class="mod" href="#">hash32</a><button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><span class="out-of-band"><a class="src" href="../src/hash32/lib.rs.html#1-141">source</a> · <button id="toggle-all-docs" title="collapse all docs">[<span>&#x2212;</span>]</button></span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>32-bit hashing algorithms</p>
<h2 id="why"><a class="doc-anchor" href="#why">§</a>Why?</h2>
<p>Because 32-bit architectures are a thing (e.g. ARM Cortex-M) and you dont want your hashing
function to pull in a bunch of slow 64-bit compiler intrinsics (software implementations of
64-bit operations).</p>
<h2 id="relationship-to-corehash"><a class="doc-anchor" href="#relationship-to-corehash">§</a>Relationship to <code>core::hash</code></h2>
<p>This crate extends <a href="https://doc.rust-lang.org/std/hash/index.html"><code>core::hash</code></a> with a 32-bit version of <code>Hasher</code>, which extends
<code>core::hash::Hasher</code>. It requires that the hasher only performs 32-bit operations when computing
the hash, and adds <a href="trait.Hasher.html#tymethod.finish32" title="method hash32::Hasher::finish32"><code>finish32</code></a> to get the hashers result as a <code>u32</code>. The standard <code>finish</code>
method should just zero-extend this result.</p>
<p>Since it extends <code>core::hash::Hasher</code>, <code>Hasher</code> can be used with any type which implements the
standard <code>Hash</code> trait.</p>
<p>This crate also adds a version of <code>BuildHasherDefault</code> with a const constructor, to work around
the <code>core</code> versions lack of one.</p>
<h2 id="hashers"><a class="doc-anchor" href="#hashers">§</a>Hashers</h2>
<p>This crate provides implementations of the following 32-bit hashing algorithms:</p>
<ul>
<li><a href="struct.FnvHasher.html">Fowler-Noll-Vo</a></li>
<li><a href="struct.Murmur3Hasher.html">MurmurHash3</a></li>
</ul>
<h2 id="generic-code"><a class="doc-anchor" href="#generic-code">§</a>Generic code</h2>
<p>In generic code, the trait bound <code>H: core::hash::Hasher</code> accepts <em>both</em> 64-bit hashers like
<code>std::collections::hash_map::DefaultHasher</code>; and 32-bit hashers like the ones defined in this
crate (<code>hash32::FnvHasher</code> and <code>hash32::Murmur3Hasher</code>)</p>
<p>The trait bound <code>H: hash32::Hasher</code> is <em>more</em> restrictive as it only accepts 32-bit hashers.</p>
<p>The <code>BuildHasherDefault&lt;H&gt;</code> type implements the <code>core::hash::BuildHasher</code> trait so it can
construct both 32-bit and 64-bit hashers. To constrain the type to only produce 32-bit hasher
you can add the trait bound <code>H::Hasher: hash32::Hasher</code></p>
<h2 id="msrv"><a class="doc-anchor" href="#msrv">§</a>MSRV</h2>
<p>This crate is guaranteed to compile on latest stable Rust. It <em>might</em> compile on older
versions but that may change in any new patch release.</p>
</div></details><h2 id="structs" class="section-header">Structs<a href="#structs" class="anchor">§</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.BuildHasherDefault.html" title="struct hash32::BuildHasherDefault">Build<wbr>Hasher<wbr>Default</a></div><div class="desc docblock-short">A copy of <a href="https://doc.rust-lang.org/core/hash/struct.BuildHasherDefault.html"><code>core::hash::BuildHasherDefault</code></a>, but with a const constructor.</div></li><li><div class="item-name"><a class="struct" href="struct.FnvHasher.html" title="struct hash32::FnvHasher">FnvHasher</a></div><div class="desc docblock-short">32-bit Fowler-Noll-Vo hasher</div></li><li><div class="item-name"><a class="struct" href="struct.Murmur3Hasher.html" title="struct hash32::Murmur3Hasher">Murmur3<wbr>Hasher</a></div><div class="desc docblock-short">32-bit MurmurHash3 hasher</div></li></ul><h2 id="traits" class="section-header">Traits<a href="#traits" class="anchor">§</a></h2><ul class="item-table"><li><div class="item-name"><a class="trait" href="trait.Hasher.html" title="trait hash32::Hasher">Hasher</a></div><div class="desc docblock-short">An extension of <a href="https://doc.rust-lang.org/core/hash/trait.Hasher.html">core::hash::Hasher</a> for hashers which use 32 bits.</div></li></ul></section></div></main></body></html>