blob: 9c0aa3d6ca4fc0e4751b77c2db2c0537451d590a [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="Values need to be strictly monotonic mapped to a `Internal` value (u64 or u128) that can be used in fast field codecs."><meta name="keywords" content="rust, rustlang, rust-lang, StrictlyMonotonicFn"><title>StrictlyMonotonicFn in fastfield_codecs - Rust</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="sidebar-items.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 trait"><!--[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">&#9776;</button><a class="sidebar-logo" href="../fastfield_codecs/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../fastfield_codecs/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">StrictlyMonotonicFn</a></h2><div class="sidebar-elems"><section><h3><a href="#required-methods">Required Methods</a></h3><ul class="block"><li><a href="#tymethod.inverse">inverse</a></li><li><a href="#tymethod.mapping">mapping</a></li></ul><h3><a href="#provided-methods">Provided Methods</a></h3><ul class="block"><li><a href="#method.inverse_coerce">inverse_coerce</a></li><li><a href="#method.mapping_coerce">mapping_coerce</a></li></ul><h3><a href="#implementors">Implementors</a></h3></section><h2><a href="index.html">In fastfield_codecs</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><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="main-heading"><h1 class="fqn">Trait <a href="index.html">fastfield_codecs</a>::<wbr><a class="trait" href="#">StrictlyMonotonicFn</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../src/fastfield_codecs/monotonic_mapping.rs.html#36-59">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span></div><div class="item-decl"><pre class="rust trait"><code>pub trait StrictlyMonotonicFn&lt;External:&nbsp;Copy, Internal:&nbsp;Copy&gt; {
fn <a href="#tymethod.mapping" class="fnname">mapping</a>(&amp;self, inp: External) -&gt; Internal;
<span class="item-spacer"></span> fn <a href="#tymethod.inverse" class="fnname">inverse</a>(&amp;self, out: Internal) -&gt; External;
fn <a href="#method.mapping_coerce" class="fnname">mapping_coerce</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inp: RangeInclusive&lt;External&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;) -&gt; RangeInclusive&lt;Internal&gt; { ... }
<span class="item-spacer"></span> fn <a href="#method.inverse_coerce" class="fnname">inverse_coerce</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out: RangeInclusive&lt;Internal&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;) -&gt; RangeInclusive&lt;External&gt; { ... }
}</code></pre></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Values need to be strictly monotonic mapped to a <code>Internal</code> value (u64 or u128) that can be
used in fast field codecs.</p>
<p>The monotonic mapping is required so that <code>PartialOrd</code> can be used on <code>Internal</code> without
converting to <code>External</code>.</p>
<p>All strictly monotonic functions are invertible because they are guaranteed to have a one-to-one
mapping from their range to their domain. The <code>inverse</code> method is required when opening a codec,
so a value can be converted back to its original domain (e.g. ip address or f64) from its
internal representation.</p>
</div></details><h2 id="required-methods" class="small-section-header">Required Methods<a href="#required-methods" class="anchor"></a></h2><div class="methods"><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.mapping" class="method has-srclink"><a class="srclink rightside" href="../src/fastfield_codecs/monotonic_mapping.rs.html#38">source</a><h4 class="code-header">fn <a href="#tymethod.mapping" class="fnname">mapping</a>(&amp;self, inp: External) -&gt; Internal</h4></section></summary><div class="docblock"><p>Strictly monotonically maps the value from External to Internal.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.inverse" class="method has-srclink"><a class="srclink rightside" href="../src/fastfield_codecs/monotonic_mapping.rs.html#40">source</a><h4 class="code-header">fn <a href="#tymethod.inverse" class="fnname">inverse</a>(&amp;self, out: Internal) -&gt; External</h4></section></summary><div class="docblock"><p>Inverse of <code>mapping</code>. Maps the value from Internal to External.</p>
</div></details></div><h2 id="provided-methods" class="small-section-header">Provided Methods<a href="#provided-methods" class="anchor"></a></h2><div class="methods"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.mapping_coerce" class="method has-srclink"><a class="srclink rightside" href="../src/fastfield_codecs/monotonic_mapping.rs.html#52-54">source</a><h4 class="code-header">fn <a href="#method.mapping_coerce" class="fnname">mapping_coerce</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;inp: RangeInclusive&lt;External&gt;<br>) -&gt; RangeInclusive&lt;Internal&gt;</h4></section></summary><div class="docblock"><p>Maps a user provded value from External to Internal.
It may be necessary to coerce the value if it is outside the value space.
In that case it tries to find the next greater value in the value space.</p>
<p>Returns a bool to mark if a value was outside the value space and had to be coerced <em>up</em>.
With that information we can detect if two values in a range both map outside the same value
space.</p>
<p>coerce_up means the next valid upper value in the value space will be chosen if the value
has to be coerced.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.inverse_coerce" class="method has-srclink"><a class="srclink rightside" href="../src/fastfield_codecs/monotonic_mapping.rs.html#56-58">source</a><h4 class="code-header">fn <a href="#method.inverse_coerce" class="fnname">inverse_coerce</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;out: RangeInclusive&lt;Internal&gt;<br>) -&gt; RangeInclusive&lt;External&gt;</h4></section></summary><div class="docblock"><p>Inverse of <code>mapping_coerce</code>.</p>
</div></details></div><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor"></a></h2><div id="implementors-list"></div><script src="../implementors/fastfield_codecs/monotonic_mapping/trait.StrictlyMonotonicFn.js" async></script></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="fastfield_codecs" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.0-nightly (5c8bff74b 2022-10-21)" ></div></body></html>