blob: 8ac294d9bc036b6cb3e1ca700aa4d7ef705d30d0 [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="Implementation of a Deterministic Finite Automaton for a Levenshtein Automaton targeting UTF-8 encoded strings."><meta name="keywords" content="rust, rustlang, rust-lang, DFA"><title>DFA in levenshtein_automata - 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 struct"><!--[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="../levenshtein_automata/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="../levenshtein_automata/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">DFA</a></h2><div class="sidebar-elems"><section><h3><a href="#implementations">Methods</a></h3><ul class="block"><li><a href="#method.distance">distance</a></li><li><a href="#method.eval">eval</a></li><li><a href="#method.initial_state">initial_state</a></li><li><a href="#method.num_states">num_states</a></li><li><a href="#method.transition">transition</a></li></ul><h3><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><ul class="block"><li><a href="#impl-RefUnwindSafe-for-DFA">RefUnwindSafe</a></li><li><a href="#impl-Send-for-DFA">Send</a></li><li><a href="#impl-Sync-for-DFA">Sync</a></li><li><a href="#impl-Unpin-for-DFA">Unpin</a></li><li><a href="#impl-UnwindSafe-for-DFA">UnwindSafe</a></li></ul><h3><a href="#blanket-implementations">Blanket Implementations</a></h3><ul class="block"><li><a href="#impl-Any-for-DFA">Any</a></li><li><a href="#impl-Borrow%3CT%3E-for-DFA">Borrow&lt;T&gt;</a></li><li><a href="#impl-BorrowMut%3CT%3E-for-DFA">BorrowMut&lt;T&gt;</a></li><li><a href="#impl-From%3CT%3E-for-DFA">From&lt;T&gt;</a></li><li><a href="#impl-Into%3CU%3E-for-DFA">Into&lt;U&gt;</a></li><li><a href="#impl-TryFrom%3CU%3E-for-DFA">TryFrom&lt;U&gt;</a></li><li><a href="#impl-TryInto%3CU%3E-for-DFA">TryInto&lt;U&gt;</a></li></ul></section><h2><a href="index.html">In levenshtein_automata</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">Struct <a href="index.html">levenshtein_automata</a>::<wbr><a class="struct" href="#">DFA</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/levenshtein_automata/dfa.rs.html#45-49">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 struct"><code>pub struct DFA { /* private fields */ }</code></pre></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Implementation of a Deterministic Finite Automaton for
a Levenshtein Automaton targeting UTF-8 encoded strings.</p>
<p>The automaton does not validate <code>utf-8</code>.
It will not return errors when fed with invalid <code>utf-8</code></p>
<p>The only <code>sink</code> state is guaranteed to be <code>SINK</code>.</p>
<p>This means that if you reach the sink state you are
guaranteed that regardless of the sequence of bytes
you might consume in the future, you will always
remain in the same state.</p>
<p>This property can be exploited to abort further
evaluation.</p>
<h2 id="usage"><a href="#usage">Usage</a></h2>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>state = dfa.initial_state();
<span class="kw">for </span><span class="kw-2">&amp;</span>byte <span class="kw">in </span>str.as_bytes() {
state = dfa.transition(state, byte);
<span class="kw">if </span>state == SINK_STATE {
<span class="kw">break</span>;
}
}
<span class="kw">let </span>distance = dfa.distance(state);</code></pre></div>
</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor"></a></h2><div id="implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-DFA" class="impl has-srclink"><a class="srclink rightside" href="../src/levenshtein_automata/dfa.rs.html#51-83">source</a><a href="#impl-DFA" class="anchor"></a><h3 class="code-header">impl <a class="struct" href="struct.DFA.html" title="struct levenshtein_automata::DFA">DFA</a></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.initial_state" class="method has-srclink"><a class="srclink rightside" href="../src/levenshtein_automata/dfa.rs.html#53-55">source</a><h4 class="code-header">pub fn <a href="#method.initial_state" class="fnname">initial_state</a>(&amp;self) -&gt; u32</h4></section></summary><div class="docblock"><p>Returns the initial state</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.eval" class="method has-srclink"><a class="srclink rightside" href="../src/levenshtein_automata/dfa.rs.html#60-66">source</a><h4 class="code-header">pub fn <a href="#method.eval" class="fnname">eval</a>&lt;B:&nbsp;AsRef&lt;[u8]&gt;&gt;(&amp;self, text: B) -&gt; <a class="enum" href="enum.Distance.html" title="enum levenshtein_automata::Distance">Distance</a></h4></section></summary><div class="docblock"><p>Helper function that consumes all of the bytes
a sequence of bytes and returns the resulting
distance.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.distance" class="method has-srclink"><a class="srclink rightside" href="../src/levenshtein_automata/dfa.rs.html#70-72">source</a><h4 class="code-header">pub fn <a href="#method.distance" class="fnname">distance</a>(&amp;self, state_id: u32) -&gt; <a class="enum" href="enum.Distance.html" title="enum levenshtein_automata::Distance">Distance</a></h4></section></summary><div class="docblock"><p>Returns the Levenshtein distance associated to the
current state.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.num_states" class="method has-srclink"><a class="srclink rightside" href="../src/levenshtein_automata/dfa.rs.html#75-77">source</a><h4 class="code-header">pub fn <a href="#method.num_states" class="fnname">num_states</a>(&amp;self) -&gt; usize</h4></section></summary><div class="docblock"><p>Returns the number of states in the <code>DFA</code>.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.transition" class="method has-srclink"><a class="srclink rightside" href="../src/levenshtein_automata/dfa.rs.html#80-82">source</a><h4 class="code-header">pub fn <a href="#method.transition" class="fnname">transition</a>(&amp;self, from_state_id: u32, b: u8) -&gt; u32</h4></section></summary><div class="docblock"><p>Returns the destination state reached after consuming a given byte.</p>
</div></details></div></details></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor"></a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe-for-DFA" class="impl has-srclink"><a href="#impl-RefUnwindSafe-for-DFA" class="anchor"></a><h3 class="code-header">impl RefUnwindSafe for <a class="struct" href="struct.DFA.html" title="struct levenshtein_automata::DFA">DFA</a></h3></section><section id="impl-Send-for-DFA" class="impl has-srclink"><a href="#impl-Send-for-DFA" class="anchor"></a><h3 class="code-header">impl Send for <a class="struct" href="struct.DFA.html" title="struct levenshtein_automata::DFA">DFA</a></h3></section><section id="impl-Sync-for-DFA" class="impl has-srclink"><a href="#impl-Sync-for-DFA" class="anchor"></a><h3 class="code-header">impl Sync for <a class="struct" href="struct.DFA.html" title="struct levenshtein_automata::DFA">DFA</a></h3></section><section id="impl-Unpin-for-DFA" class="impl has-srclink"><a href="#impl-Unpin-for-DFA" class="anchor"></a><h3 class="code-header">impl Unpin for <a class="struct" href="struct.DFA.html" title="struct levenshtein_automata::DFA">DFA</a></h3></section><section id="impl-UnwindSafe-for-DFA" class="impl has-srclink"><a href="#impl-UnwindSafe-for-DFA" class="anchor"></a><h3 class="code-header">impl UnwindSafe for <a class="struct" href="struct.DFA.html" title="struct levenshtein_automata::DFA">DFA</a></h3></section></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor"></a></h2><div id="blanket-implementations-list"><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Any-for-DFA" class="impl has-srclink"><a href="#impl-Any-for-DFA" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; Any for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: 'static + ?Sized,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl has-srclink"><a href="#method.type_id" class="anchor"></a><h4 class="code-header">fn <a class="fnname">type_id</a>(&amp;self) -&gt; TypeId</h4></section></summary><div class='docblock'>Gets the <code>TypeId</code> of <code>self</code>. <a>Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Borrow%3CT%3E-for-DFA" class="impl has-srclink"><a href="#impl-Borrow%3CT%3E-for-DFA" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; Borrow&lt;T&gt; for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?Sized,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span><a href="#method.borrow" class="anchor"></a><h4 class="code-header">fn <a class="fnname">borrow</a>(&amp;self) -&gt; &amp;T</h4></section></summary><div class='docblock'>Immutably borrows from an owned value. <a>Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-BorrowMut%3CT%3E-for-DFA" class="impl has-srclink"><a href="#impl-BorrowMut%3CT%3E-for-DFA" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; BorrowMut&lt;T&gt; for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?Sized,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span><a href="#method.borrow_mut" class="anchor"></a><h4 class="code-header">fn <a class="fnname">borrow_mut</a>(&amp;mut self) -&gt; &amp;mut T</h4></section></summary><div class='docblock'>Mutably borrows from an owned value. <a>Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-From%3CT%3E-for-DFA" class="impl has-srclink"><a href="#impl-From%3CT%3E-for-DFA" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; From&lt;T&gt; for T</h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.from" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></span><a href="#method.from" class="anchor"></a><h4 class="code-header">fn <a class="fnname">from</a>(t: T) -&gt; T</h4></section></summary><div class="docblock"><p>Returns the argument unchanged.</p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-DFA" class="impl has-srclink"><a href="#impl-Into%3CU%3E-for-DFA" class="anchor"></a><h3 class="code-header">impl&lt;T, U&gt; Into&lt;U&gt; for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: From&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.into" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></span><a href="#method.into" class="anchor"></a><h4 class="code-header">fn <a class="fnname">into</a>(self) -&gt; U</h4></section></summary><div class="docblock"><p>Calls <code>U::from(self)</code>.</p>
<p>That is, this conversion is whatever the implementation of
<code>[From]&lt;T&gt; for U</code> chooses to do.</p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-TryFrom%3CU%3E-for-DFA" class="impl has-srclink"><a href="#impl-TryFrom%3CU%3E-for-DFA" class="anchor"></a><h3 class="code-header">impl&lt;T, U&gt; TryFrom&lt;U&gt; for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: Into&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Error-1" class="anchor"></a><h4 class="code-header">type <a class="associatedtype">Error</a> = Infallible</h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.try_from" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></span><a href="#method.try_from" class="anchor"></a><h4 class="code-header">fn <a class="fnname">try_from</a>(value: U) -&gt; Result&lt;T, &lt;T as TryFrom&lt;U&gt;&gt;::Error&gt;</h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-TryInto%3CU%3E-for-DFA" class="impl has-srclink"><a href="#impl-TryInto%3CU%3E-for-DFA" class="anchor"></a><h3 class="code-header">impl&lt;T, U&gt; TryInto&lt;U&gt; for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: TryFrom&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Error" class="anchor"></a><h4 class="code-header">type <a class="associatedtype">Error</a> = &lt;U as TryFrom&lt;T&gt;&gt;::Error</h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.try_into" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></span><a href="#method.try_into" class="anchor"></a><h4 class="code-header">fn <a class="fnname">try_into</a>(self) -&gt; Result&lt;U, &lt;U as TryFrom&lt;T&gt;&gt;::Error&gt;</h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details></div></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="levenshtein_automata" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.0-nightly (5c8bff74b 2022-10-21)" ></div></body></html>