-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
- Loading branch information
There are no files selected for viewing
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Large diffs are not rendered by default.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
<!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 `src/encoding/hex/encode.rs`."><title>encode.rs - source</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-fecee23daa4e8a6d.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="wiwi" data-themes="meadow" data-resource-suffix="" data-rustdoc-version="1.83.0-nightly (d6c8169c1 2024-09-03)" data-channel="nightly" data-search-js="search-a99f1315e7cc5121.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../static.files/storage-118b08c4c78b968e.js"></script><script defer src="../../../../static.files/src-script-e66d777a5a92e9b2.js"></script><script defer src="../../../../src-files.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 src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="src-sidebar-title"><h2>Files</h2></div></nav><div class="sidebar-resizer"></div><main><rustdoc-search></rustdoc-search><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a> | ||
<a href="#2" id="2">2</a> | ||
<a href="#3" id="3">3</a> | ||
<a href="#4" id="4">4</a> | ||
<a href="#5" id="5">5</a> | ||
<a href="#6" id="6">6</a> | ||
<a href="#7" id="7">7</a> | ||
<a href="#8" id="8">8</a> | ||
<a href="#9" id="9">9</a> | ||
<a href="#10" id="10">10</a> | ||
<a href="#11" id="11">11</a> | ||
<a href="#12" id="12">12</a> | ||
<a href="#13" id="13">13</a> | ||
<a href="#14" id="14">14</a> | ||
<a href="#15" id="15">15</a> | ||
<a href="#16" id="16">16</a> | ||
<a href="#17" id="17">17</a> | ||
<a href="#18" id="18">18</a> | ||
<a href="#19" id="19">19</a> | ||
<a href="#20" id="20">20</a> | ||
<a href="#21" id="21">21</a> | ||
<a href="#22" id="22">22</a> | ||
<a href="#23" id="23">23</a> | ||
<a href="#24" id="24">24</a> | ||
<a href="#25" id="25">25</a> | ||
<a href="#26" id="26">26</a> | ||
<a href="#27" id="27">27</a> | ||
<a href="#28" id="28">28</a> | ||
<a href="#29" id="29">29</a> | ||
<a href="#30" id="30">30</a> | ||
<a href="#31" id="31">31</a> | ||
<a href="#32" id="32">32</a> | ||
<a href="#33" id="33">33</a> | ||
<a href="#34" id="34">34</a> | ||
<a href="#35" id="35">35</a> | ||
<a href="#36" id="36">36</a> | ||
<a href="#37" id="37">37</a> | ||
<a href="#38" id="38">38</a> | ||
<a href="#39" id="39">39</a> | ||
<a href="#40" id="40">40</a> | ||
<a href="#41" id="41">41</a> | ||
<a href="#42" id="42">42</a> | ||
<a href="#43" id="43">43</a> | ||
<a href="#44" id="44">44</a> | ||
<a href="#45" id="45">45</a> | ||
<a href="#46" id="46">46</a> | ||
<a href="#47" id="47">47</a> | ||
<a href="#48" id="48">48</a> | ||
<a href="#49" id="49">49</a> | ||
<a href="#50" id="50">50</a> | ||
<a href="#51" id="51">51</a> | ||
<a href="#52" id="52">52</a> | ||
<a href="#53" id="53">53</a> | ||
<a href="#54" id="54">54</a> | ||
<a href="#55" id="55">55</a> | ||
<a href="#56" id="56">56</a> | ||
<a href="#57" id="57">57</a> | ||
</pre></div><pre class="rust"><code><span class="doccomment">//! Internal encoding implementations | ||
|
||
</span><span class="kw">use </span><span class="kw">crate</span>::util_unsafe::UnsafeBufWriteGuard; | ||
|
||
<span class="doccomment">/// Length of encoding table (not actually used in encoding/decoding data) | ||
</span><span class="kw">pub const </span>TABLE_ENCODER_LEN: usize = <span class="number">16</span>; | ||
|
||
<span class="doccomment">/// Encoding table of lowercased characters, length 16, mapping a value from 0-15 | ||
/// to a hex byte (lower letters) | ||
/// | ||
/// Note: this table is not actually used in the encoding/decoding implementation | ||
</span><span class="kw">pub static </span>TABLE_ENCODER_LOWER: [u8; TABLE_ENCODER_LEN] = <span class="kw-2">*</span><span class="string">b"0123456789abcdef"</span>; | ||
|
||
<span class="doccomment">/// Encoding table of uppercased characters, length 16, mapping a value from 0-15 | ||
/// to a hex byte (upper letters) | ||
/// | ||
/// Note: this table is not actually used in the encoding/decoding implementation | ||
</span><span class="kw">pub static </span>TABLE_ENCODER_UPPER: [u8; TABLE_ENCODER_LEN] = <span class="kw-2">*</span><span class="string">b"0123456789ABCDEF"</span>; | ||
|
||
<span class="doccomment">/// Reads `rounds` bytes from `bytes_ptr`, encoding them into 2 hex chars | ||
/// per byte, then writes the output into `dest` | ||
/// | ||
/// # SAFETY | ||
/// | ||
/// - `bytes_ptr` must be valid for `num_rounds` bytes of reads | ||
/// - `dest` must have enough capacity to write `num_rounds * 2` bytes into | ||
</span><span class="kw">pub unsafe fn </span>generic<<span class="kw">const </span>UPPER: bool>( | ||
<span class="kw-2">mut </span>bytes_ptr: <span class="kw-2">*const </span>u8, | ||
dest: <span class="kw-2">&mut </span>UnsafeBufWriteGuard, | ||
rounds: usize | ||
) { | ||
<span class="kw">let </span>char_a = <span class="kw">if </span>UPPER { <span class="string">b'A' </span>} <span class="kw">else </span>{ <span class="string">b'a' </span>} - <span class="number">10</span>; | ||
<span class="kw">let </span>char_0 = <span class="string">b'0'</span>; | ||
|
||
<span class="kw">for _ in </span><span class="number">0</span>..rounds { | ||
<span class="comment">// SAFETY: we loop `num_rounds` times only, reading a byte each time, | ||
// and caller promises that `bytes_ptr` is valid to read for at least | ||
// that many bytes | ||
</span><span class="kw">let </span>byte = <span class="kw">unsafe </span>{ <span class="kw-2">*</span>bytes_ptr }; | ||
|
||
<span class="comment">// SAFETY: same invariant as above. It's sound to have the pointer pointing | ||
// to the end of the memory section (as long as it isn't dereferenced) | ||
</span>bytes_ptr = <span class="kw">unsafe </span>{ bytes_ptr.add(<span class="number">1</span>) }; | ||
|
||
<span class="kw">let </span>char1 = byte >> <span class="number">4</span>; | ||
<span class="kw">let </span>char2 = byte & <span class="number">0xf</span>; | ||
|
||
<span class="kw">let </span>chars = [ | ||
<span class="kw">if </span>char1 > <span class="number">9 </span>{ char_a } <span class="kw">else </span>{ char_0 } + char1, | ||
<span class="kw">if </span>char2 > <span class="number">9 </span>{ char_a } <span class="kw">else </span>{ char_0 } + char2 | ||
]; | ||
|
||
<span class="comment">// SAFETY: caller guarantees `dest` is writeable to for at least | ||
// `num_rounds * 2` bytes, so we can write 2 bytes every iteration | ||
</span><span class="kw">unsafe </span>{ dest.write_bytes_const::<<span class="number">2</span>>(chars.as_ptr()) } | ||
} | ||
} | ||
</code></pre></div></section></main></body></html> |