Files
tantivy/master/fst/raw/struct.Fst.html
2018-04-10 01:26:48 +00:00

361 lines
49 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="API documentation for the Rust `Fst` struct in crate `fst`.">
<meta name="keywords" content="rust, rustlang, rust-lang, Fst">
<title>fst::raw::Fst - Rust</title>
<link rel="stylesheet" type="text/css" href="../../normalize.css">
<link rel="stylesheet" type="text/css" href="../../rustdoc.css"
id="mainThemeStyle">
<link rel="stylesheet" type="text/css" href="../../dark.css">
<link rel="stylesheet" type="text/css" href="../../light.css" id="themeStyle">
<script src="../../storage.js"></script>
</head>
<body class="rustdoc struct">
<!--[if lte IE 8]>
<div class="warning">
This old browser is unsupported and will most likely display funky
things.
</div>
<![endif]-->
<nav class="sidebar">
<div class="sidebar-menu">&#9776;</div>
<p class='location'>Struct Fst</p><div class="sidebar-elems"><div class="block items"><a class="sidebar-title" href="#methods">Methods</a><div class="sidebar-links"><a href="#method.from_path">from_path</a><a href="#method.from_mmap">from_mmap</a><a href="#method.from_bytes">from_bytes</a><a href="#method.from_static_slice">from_static_slice</a><a href="#method.from_shared_bytes">from_shared_bytes</a><a href="#method.get">get</a><a href="#method.contains_key">contains_key</a><a href="#method.stream">stream</a><a href="#method.range">range</a><a href="#method.search">search</a><a href="#method.len">len</a><a href="#method.is_empty">is_empty</a><a href="#method.size">size</a><a href="#method.op">op</a><a href="#method.is_disjoint">is_disjoint</a><a href="#method.is_subset">is_subset</a><a href="#method.is_superset">is_superset</a><a href="#method.fst_type">fst_type</a><a href="#method.root">root</a><a href="#method.node">node</a><a href="#method.to_vec">to_vec</a></div><a class="sidebar-title" href="#implementations">Trait Implementations</a><div class="sidebar-links"><a href="#impl-From%3CFst%3E">From&lt;Fst&gt;</a><a href="#impl-AsRef%3CFst%3E">AsRef&lt;Fst&gt;</a><a href="#impl-IntoStreamer%3C%27a%3E">IntoStreamer&lt;&#39;a&gt;</a></div><a class="sidebar-title" href="#synthetic-implementations">Auto Trait Implementations</a><div class="sidebar-links"><a href="#impl-Send">Send</a><a href="#impl-Sync">Sync</a></div></div><p class='location'><a href='../index.html'>fst</a>::<wbr><a href='index.html'>raw</a></p><script>window.sidebarCurrent = {name: 'Fst', ty: 'struct', relpath: ''};</script><script defer src="sidebar-items.js"></script></div>
</nav>
<div class="theme-picker">
<button id="theme-picker" aria-label="Pick another theme!">
<img src="../../brush.svg" width="18" alt="Pick another theme!">
</button>
<div id="theme-choices"></div>
</div>
<script src="../../theme.js"></script>
<nav class="sub">
<form class="search-form js-only">
<div class="search-container">
<input class="search-input" name="search"
autocomplete="off"
placeholder="Click or press S to search, ? for more options…"
type="search">
</div>
</form>
</nav>
<section id='main' class="content"><h1 class='fqn'><span class='in-band'>Struct <a href='../index.html'>fst</a>::<wbr><a href='index.html'>raw</a>::<wbr><a class="struct" href=''>Fst</a></span><span class='out-of-band'><span id='render-detail'>
<a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">
[<span class='inner'>&#x2212;</span>]
</a>
</span><a class='srclink' href='../../src/fst/raw/mod.rs.html#278-283' title='goto source code'>[src]</a></span></h1><div class="docblock type-decl"><pre class='rust struct'>pub struct Fst { /* fields omitted */ }</pre></div><div class='docblock'><p>An acyclic deterministic finite state transducer.</p>
<h1 id="how-does-it-work" class="section-header"><a href="#how-does-it-work">How does it work?</a></h1>
<p>The short answer: it's just like a prefix trie, which compresses keys
based only on their prefixes, except that a automaton/transducer also
compresses suffixes.</p>
<p>The longer answer is that keys in an automaton are stored only in the
transitions from one state to another. A key can be acquired by tracing
a path from the root of the automaton to any match state. The inputs along
each transition are concatenated. Once a match state is reached, the
concatenation of inputs up until that point corresponds to a single key.</p>
<p>But why is it called a transducer instead of an automaton? A finite state
transducer is just like a finite state automaton, except that it has output
transitions in addition to input transitions. Namely, the value associated
with any particular key is determined by summing the outputs along every
input transition that leads to the key's corresponding match state.</p>
<p>This is best demonstrated with a couple images. First, let's ignore the
&quot;transducer&quot; aspect and focus on a plain automaton.</p>
<p>Consider that your keys are abbreviations of some of the months in the
Gregorian calendar:</p>
<div class='information'><div class='tooltip ignore'><span class='tooltiptext'>This example is not tested</span></div></div><pre class="rust rust-example-rendered ignore">
<span class="ident">jan</span>
<span class="ident">feb</span>
<span class="ident">mar</span>
<span class="ident">apr</span>
<span class="ident">may</span>
<span class="ident">jun</span>
<span class="ident">jul</span></pre>
<p>The corresponding automaton that stores all of these as keys looks like
this:</p>
<p><img src="http://burntsushi.net/stuff/months-set.png" alt="finite state automaton" /></p>
<p>Notice here how the prefix and suffix of <code>jan</code> and <code>jun</code> are shared.
Similarly, the prefixes of <code>jun</code> and <code>jul</code> are shared and the prefixes
of <code>mar</code> and <code>may</code> are shared.</p>
<p>All of the keys from this automaton can be enumerated in lexicographic
order by following every transition from each node in lexicographic
order. Since it is acyclic, the procedure will terminate.</p>
<p>A key can be found by tracing it through the transitions in the automaton.
For example, the key <code>aug</code> is known not to be in the automaton by only
visiting the root state (because there is no <code>a</code> transition). For another
example, the key <code>jax</code> is known not to be in the set only after moving
through the transitions for <code>j</code> and <code>a</code>. Namely, after those transitions
are followed, there are no transitions for <code>x</code>.</p>
<p>Notice here that looking up a key is proportional the length of the key
itself. Namely, lookup time is not affected by the number of keys in the
automaton!</p>
<p>Additionally, notice that the automaton exploits the fact that many keys
share common prefixes and suffixes. For example, <code>jun</code> and <code>jul</code> are
represented with no more states than would be required to represent either
one on its own. Instead, the only change is a single extra transition. This
is a form of compression and is key to how the automatons produced by this
crate are so small.</p>
<p>Let's move on to finite state transducers. Consider the same set of keys
as above, but let's assign their numeric month values:</p>
<div class='information'><div class='tooltip ignore'><span class='tooltiptext'>This example is not tested</span></div></div><pre class="rust rust-example-rendered ignore">
<span class="ident">jan</span>,<span class="number">1</span>
<span class="ident">feb</span>,<span class="number">2</span>
<span class="ident">mar</span>,<span class="number">3</span>
<span class="ident">apr</span>,<span class="number">4</span>
<span class="ident">may</span>,<span class="number">5</span>
<span class="ident">jun</span>,<span class="number">6</span>
<span class="ident">jul</span>,<span class="number">7</span></pre>
<p>The corresponding transducer looks very similar to the automaton above,
except outputs have been added to some of the transitions:</p>
<p><img src="http://burntsushi.net/stuff/months-map.png" alt="finite state transducer" /></p>
<p>All of the operations with a transducer are the same as described above
for automatons. Additionally, the same compression techniques are used:
common prefixes and suffixes in keys are exploited.</p>
<p>The key difference is that some transitions have been given an output.
As one follows input transitions, one must sum the outputs as they
are seen. (A transition with no output represents the additive identity,
or <code>0</code> in this case.) For example, when looking up <code>feb</code>, the transition
<code>f</code> has output <code>2</code>, the transition <code>e</code> has output <code>0</code>, and the transition
<code>b</code> also has output <code>0</code>. The sum of these is <code>2</code>, which is exactly the
value we associated with <code>feb</code>.</p>
<p>For another more interesting example, consider <code>jul</code>. The <code>j</code> transition
has output <code>1</code>, the <code>u</code> transition has output <code>5</code> and the <code>l</code> transition
has output <code>1</code>. Summing these together gets us <code>7</code>, which is again the
correct value associated with <code>jul</code>. Notice that if we instead looked up
the <code>jun</code> key, then the <code>n</code> transition would be followed instead of the
<code>l</code> transition, which has no output. Therefore, the <code>jun</code> key equals
<code>1+5+0=6</code>.</p>
<p>The trick to transducers is that there exists a unique path through the
transducer for every key, and its outputs are stored appropriately along
this path such that the correct value is returned when they are all summed
together. This process also enables the data that makes up each value to be
shared across many values in the transducer in exactly the same way that
keys are shared. This is yet another form of compression!</p>
<h1 id="bonus-a-billion-strings" class="section-header"><a href="#bonus-a-billion-strings">Bonus: a billion strings</a></h1>
<p>The amount of compression one can get from automata can be absolutely
ridiuclous. Consider the particular case of storing all billion strings
in the range <code>0000000001-1000000000</code>, e.g.,</p>
<div class='information'><div class='tooltip ignore'><span class='tooltiptext'>This example is not tested</span></div></div><pre class="rust rust-example-rendered ignore">
<span class="number">0000000001</span>
<span class="number">0000000002</span>
...
<span class="number">0000000100</span>
<span class="number">0000000101</span>
...
<span class="number">0999999999</span>
<span class="number">1000000000</span></pre>
<p>The corresponding automaton looks like this:</p>
<p>![finite state automaton - one billion strings]
(http://burntsushi.net/stuff/one-billion.png)</p>
<p>Indeed, the on disk size of this automaton is a mere <strong>251 bytes</strong>.</p>
<p>Of course, this is a bit of a pathological best case, but it does serve
to show how good compression can be in the optimal case.</p>
<p>Also, check out the
<a href="http://burntsushi.net/stuff/one-billion-map.svg">corresponding transducer</a>
that maps each string to its integer value. It's a bit bigger, but still
only takes up <strong>896 bytes</strong> of space on disk. This demonstrates that
output values are also compressible.</p>
<h1 id="does-this-crate-produce-minimal-transducers" class="section-header"><a href="#does-this-crate-produce-minimal-transducers">Does this crate produce minimal transducers?</a></h1>
<p>For any non-trivial sized set of keys, it is unlikely that this crate will
produce a minimal transducer. As far as this author knows, guaranteeing a
minimal transducer requires working memory proportional to the number of
states. This can be quite costly and is anathema to the main design goal of
this crate: provide the ability to work with gigantic sets of strings with
constant memory overhead.</p>
<p>Instead, construction of a finite state transducer uses a cache of
states. More frequently used states are cached and reused, which provides
reasonably good compression ratios. (No comprehensive benchmarks exist to
back up this claim.)</p>
<p>It is possible that this crate may expose a way to guarantee minimal
construction of transducers at the expense of exorbitant memory
requirements.</p>
<h1 id="bibliography" class="section-header"><a href="#bibliography">Bibliography</a></h1>
<p>I initially got the idea to use finite state tranducers to represent
ordered sets/maps from
<a href="http://blog.mikemccandless.com/2010/12/using-finite-state-transducers-in.html">Michael
McCandless'</a>
work on incorporating transducers in Lucene.</p>
<p>However, my work would also not have been possible without the hard work
of many academics, especially
<a href="http://galaxy.eti.pg.gda.pl/katedry/kiw/pracownicy/Jan.Daciuk/personal/">Jan Daciuk</a>.</p>
<ul>
<li><a href="http://www.mitpressjournals.org/doi/pdfplus/10.1162/089120100561601">Incremental construction of minimal acyclic finite-state automata</a>
(Section 3 provides a decent overview of the algorithm used to construct
transducers in this crate, assuming all outputs are <code>0</code>.)</li>
<li><a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.24.3698&amp;rep=rep1&amp;type=pdf">Direct Construction of Minimal Acyclic Subsequential Transducers</a>
(The whole thing. The proof is dense but illuminating. The algorithm at
the end is the money shot, namely, it incorporates output values.)</li>
<li><a href="http://www.researchgate.net/profile/Jii_Dvorsky/publication/221568039_Word_Random_Access_Compression/links/0c96052c095630d5b3000000.pdf#page=116">Experiments with Automata Compression</a>, <a href="http://www.cs.put.poznan.pl/dweiss/site/publications/download/fsacomp.pdf">Smaller Representation of Finite State Automata</a>
(various compression techniques for representing states/transitions)</li>
<li><a href="http://www.pg.gda.pl/%7Ejandac/thesis.ps.gz">Jan Daciuk's dissertation</a>
(excellent for in depth overview)</li>
<li><a href="http://www.cs.mun.ca/%7Eharold/Courses/Old/CS4750/Diary/q3p2qx4lv71m5vew.pdf">Comparison of Construction Algorithms for Minimal, Acyclic, Deterministic, Finite-State Automata from Sets of Strings</a>
(excellent for surface level overview)</li>
</ul>
</div>
<h2 id='methods' class='small-section-header'>
Methods<a href='#methods' class='anchor'></a>
</h2>
<h3 id='impl' class='impl'><span class='in-band'><table class='table-display'><tbody><tr><td><code>impl <a class="struct" href="../../fst/raw/struct.Fst.html" title="struct fst::raw::Fst">Fst</a></code><a href='#impl' class='anchor'></a></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#285-555' title='goto source code'>[src]</a></span></td></tr></tbody></table></h3><div class='impl-items'><h4 id='method.from_path' class="method"><span id='from_path.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.from_path' class='fnname'>from_path</a>&lt;P:&nbsp;<a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/std/path/struct.Path.html" title="struct std::path::Path">Path</a>&gt;&gt;(path: P) -&gt; <a class="type" href="../../fst/type.Result.html" title="type fst::Result">Result</a>&lt;Self&gt;</code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#293-295' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Opens a transducer stored at the given file path via a memory map.</p>
<p>The fst must have been written with a compatible finite state
transducer builder (<code>Builder</code> qualifies). If the format is invalid or
if there is a mismatch between the API version of this library and the
fst, then an error is returned.</p>
</div><h4 id='method.from_mmap' class="method"><span id='from_mmap.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.from_mmap' class='fnname'>from_mmap</a>(mmap: <a class="struct" href="../../fst/raw/struct.MmapReadOnly.html" title="struct fst::raw::MmapReadOnly">MmapReadOnly</a>) -&gt; <a class="type" href="../../fst/type.Result.html" title="type fst::Result">Result</a>&lt;Self&gt;</code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#303-305' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Opens a transducer from a <code>MmapReadOnly</code>.</p>
<p>This is useful if a transducer is serialized to only a part of a file.
A <code>MmapReadOnly</code> lets one control which region of the file is used for
the transducer.</p>
</div><h4 id='method.from_bytes' class="method"><span id='from_bytes.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.from_bytes' class='fnname'>from_bytes</a>(bytes: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>&gt;) -&gt; <a class="type" href="../../fst/type.Result.html" title="type fst::Result">Result</a>&lt;Self&gt;</code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#315-317' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Creates a transducer from its representation as a raw byte sequence.</p>
<p>Note that this operation is very cheap (no allocations and no copies).</p>
<p>The fst must have been written with a compatible finite state
transducer builder (<code>Builder</code> qualifies). If the format is invalid or
if there is a mismatch between the API version of this library and the
fst, then an error is returned.</p>
</div><h4 id='method.from_static_slice' class="method"><span id='from_static_slice.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.from_static_slice' class='fnname'>from_static_slice</a>(bytes: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;'static [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>) -&gt; <a class="type" href="../../fst/type.Result.html" title="type fst::Result">Result</a>&lt;Self&gt;</code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#323-325' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Creates a transducer from its representation as a raw byte sequence.</p>
<p>This accepts a static byte slice, which may be useful if the Fst
is embedded into source code.</p>
</div><h4 id='method.from_shared_bytes' class="method"><span id='from_shared_bytes.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.from_shared_bytes' class='fnname'>from_shared_bytes</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;bytes: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/arc/struct.Arc.html" title="struct alloc::arc::Arc">Arc</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>&gt;&gt;, <br>&nbsp;&nbsp;&nbsp;&nbsp;offset: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;len: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a><br>) -&gt; <a class="type" href="../../fst/type.Result.html" title="type fst::Result">Result</a>&lt;Self&gt;</code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#332-338' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Creates a transducer from a shared vector at the given offset and
length.</p>
<p>This permits creating multiple transducers from a single region of
owned memory.</p>
</div><h4 id='method.get' class="method"><span id='get.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.get' class='fnname'>get</a>&lt;B:&nbsp;<a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>&gt;&gt;(&amp;self, key: B) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="../../fst/raw/struct.Output.html" title="struct fst::raw::Output">Output</a>&gt;</code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#400-418' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Retrieves the value associated with a key.</p>
<p>If the key does not exist, then <code>None</code> is returned.</p>
</div><h4 id='method.contains_key' class="method"><span id='contains_key.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.contains_key' class='fnname'>contains_key</a>&lt;B:&nbsp;<a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>&gt;&gt;(&amp;self, key: B) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#421-430' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Returns true if and only if the given key is in this FST.</p>
</div><h4 id='method.stream' class="method"><span id='stream.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.stream' class='fnname'>stream</a>(&amp;self) -&gt; <a class="struct" href="../../fst/raw/struct.Stream.html" title="struct fst::raw::Stream">Stream</a></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#434-436' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Return a lexicographically ordered stream of all key-value pairs in
this fst.</p>
</div><h4 id='method.range' class="method"><span id='range.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.range' class='fnname'>range</a>(&amp;self) -&gt; <a class="struct" href="../../fst/raw/struct.StreamBuilder.html" title="struct fst::raw::StreamBuilder">StreamBuilder</a></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#442-444' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Return a builder for range queries.</p>
<p>A range query returns a subset of key-value pairs in this fst in a
range given in lexicographic order.</p>
</div><h4 id='method.search' class="method"><span id='search.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.search' class='fnname'>search</a>&lt;A:&nbsp;<a class="trait" href="../../fst/automaton/trait.Automaton.html" title="trait fst::automaton::Automaton">Automaton</a>&gt;(&amp;self, aut: A) -&gt; <a class="struct" href="../../fst/raw/struct.StreamBuilder.html" title="struct fst::raw::StreamBuilder">StreamBuilder</a>&lt;A&gt;</code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#447-449' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Executes an automaton on the keys of this map.</p>
</div><h4 id='method.len' class="method"><span id='len.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.len' class='fnname'>len</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#452-454' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Returns the number of keys in this fst.</p>
</div><h4 id='method.is_empty' class="method"><span id='is_empty.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.is_empty' class='fnname'>is_empty</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#457-459' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Returns true if and only if this fst has no keys.</p>
</div><h4 id='method.size' class="method"><span id='size.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.size' class='fnname'>size</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#462-464' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Returns the number of bytes used by this fst.</p>
</div><h4 id='method.op' class="method"><span id='op.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.op' class='fnname'>op</a>(&amp;self) -&gt; <a class="struct" href="../../fst/raw/struct.OpBuilder.html" title="struct fst::raw::OpBuilder">OpBuilder</a></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#472-474' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Creates a new fst operation with this fst added to it.</p>
<p>The <code>OpBuilder</code> type can be used to add additional fst streams
and perform set operations like union, intersection, difference and
symmetric difference on the keys of the fst. These set operations also
allow one to specify how conflicting values are merged in the stream.</p>
</div><h4 id='method.is_disjoint' class="method"><span id='is_disjoint.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.is_disjoint' class='fnname'>is_disjoint</a>&lt;'f, I, S&gt;(&amp;self, stream: I) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a> <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;I: for&lt;'a&gt; <a class="trait" href="../../fst/trait.IntoStreamer.html" title="trait fst::IntoStreamer">IntoStreamer</a>&lt;'a, Into = S, Item = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;'a [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>, <a class="struct" href="../../fst/raw/struct.Output.html" title="struct fst::raw::Output">Output</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a>&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;S: 'f + for&lt;'a&gt; <a class="trait" href="../../fst/trait.Streamer.html" title="trait fst::Streamer">Streamer</a>&lt;'a, Item = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;'a [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>, <a class="struct" href="../../fst/raw/struct.Output.html" title="struct fst::raw::Output">Output</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a>&gt;,&nbsp;</span></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#481-485' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Returns true if and only if the <code>self</code> fst is disjoint with the fst
<code>stream</code>.</p>
<p><code>stream</code> must be a lexicographically ordered sequence of byte strings
with associated values.</p>
</div><h4 id='method.is_subset' class="method"><span id='is_subset.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.is_subset' class='fnname'>is_subset</a>&lt;'f, I, S&gt;(&amp;self, stream: I) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a> <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;I: for&lt;'a&gt; <a class="trait" href="../../fst/trait.IntoStreamer.html" title="trait fst::IntoStreamer">IntoStreamer</a>&lt;'a, Into = S, Item = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;'a [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>, <a class="struct" href="../../fst/raw/struct.Output.html" title="struct fst::raw::Output">Output</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a>&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;S: 'f + for&lt;'a&gt; <a class="trait" href="../../fst/trait.Streamer.html" title="trait fst::Streamer">Streamer</a>&lt;'a, Item = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;'a [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>, <a class="struct" href="../../fst/raw/struct.Output.html" title="struct fst::raw::Output">Output</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a>&gt;,&nbsp;</span></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#492-501' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Returns true if and only if the <code>self</code> fst is a subset of the fst
<code>stream</code>.</p>
<p><code>stream</code> must be a lexicographically ordered sequence of byte strings
with associated values.</p>
</div><h4 id='method.is_superset' class="method"><span id='is_superset.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.is_superset' class='fnname'>is_superset</a>&lt;'f, I, S&gt;(&amp;self, stream: I) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a> <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;I: for&lt;'a&gt; <a class="trait" href="../../fst/trait.IntoStreamer.html" title="trait fst::IntoStreamer">IntoStreamer</a>&lt;'a, Into = S, Item = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;'a [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>, <a class="struct" href="../../fst/raw/struct.Output.html" title="struct fst::raw::Output">Output</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a>&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;S: 'f + for&lt;'a&gt; <a class="trait" href="../../fst/trait.Streamer.html" title="trait fst::Streamer">Streamer</a>&lt;'a, Item = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;'a [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>, <a class="struct" href="../../fst/raw/struct.Output.html" title="struct fst::raw::Output">Output</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a>&gt;,&nbsp;</span></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#508-517' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Returns true if and only if the <code>self</code> fst is a superset of the fst
<code>stream</code>.</p>
<p><code>stream</code> must be a lexicographically ordered sequence of byte strings
with associated values.</p>
</div><h4 id='method.fst_type' class="method"><span id='fst_type.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.fst_type' class='fnname'>fst_type</a>(&amp;self) -&gt; <a class="type" href="../../fst/raw/type.FstType.html" title="type fst::raw::FstType">FstType</a></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#526-528' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Returns the underlying type of this fst.</p>
<p>FstType is a convention used to indicate the type of the underlying
transducer.</p>
<p>This crate reserves the range 0-255 (inclusive) but currently leaves
the meaning of 0-255 unspecified.</p>
</div><h4 id='method.root' class="method"><span id='root.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.root' class='fnname'>root</a>(&amp;self) -&gt; <a class="struct" href="../../fst/raw/struct.Node.html" title="struct fst::raw::Node">Node</a></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#531-533' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Returns the root node of this fst.</p>
</div><h4 id='method.node' class="method"><span id='node.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.node' class='fnname'>node</a>(&amp;self, addr: <a class="type" href="../../fst/raw/type.CompiledAddr.html" title="type fst::raw::CompiledAddr">CompiledAddr</a>) -&gt; <a class="struct" href="../../fst/raw/struct.Node.html" title="struct fst::raw::Node">Node</a></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#538-540' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Returns the node at the given address.</p>
<p>Node addresses can be obtained by reading transitions on <code>Node</code> values.</p>
</div><h4 id='method.to_vec' class="method"><span id='to_vec.v' class='invisible'><table class='table-display'><tbody><tr><td><code>pub fn <a href='#method.to_vec' class='fnname'>to_vec</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>&gt;</code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#543-545' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Returns a copy of the binary contents of this FST.</p>
</div></div>
<h2 id='implementations' class='small-section-header'>
Trait Implementations<a href='#implementations' class='anchor'></a>
</h2>
<div id='implementations-list'><h3 id='impl-From%3CFst%3E' class='impl'><span class='in-band'><table class='table-display'><tbody><tr><td><code>impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;<a class="struct" href="../../fst/raw/struct.Fst.html" title="struct fst::raw::Fst">Fst</a>&gt; for <a class="struct" href="../../fst/struct.Map.html" title="struct fst::Map">Map</a></code><a href='#impl-From%3CFst%3E' class='anchor'></a></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/map.rs.html#376-380' title='goto source code'>[src]</a></span></td></tr></tbody></table></h3><div class='impl-items'><h4 id='method.from' class="method"><span id='from.v' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(fst: <a class="struct" href="../../fst/raw/struct.Fst.html" title="struct fst::raw::Fst">Fst</a>) -&gt; <a class="struct" href="../../fst/struct.Map.html" title="struct fst::Map">Map</a></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/map.rs.html#377-379' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Performs the conversion.</p>
</div></div><h3 id='impl-AsRef%3CFst%3E' class='impl'><span class='in-band'><table class='table-display'><tbody><tr><td><code>impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a>&lt;<a class="struct" href="../../fst/raw/struct.Fst.html" title="struct fst::raw::Fst">Fst</a>&gt; for <a class="struct" href="../../fst/struct.Map.html" title="struct fst::Map">Map</a></code><a href='#impl-AsRef%3CFst%3E' class='anchor'></a></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/map.rs.html#383-387' title='goto source code'>[src]</a></span></td></tr></tbody></table></h3><div class='docblock'><p>Returns the underlying finite state transducer.</p>
</div><div class='impl-items'><h4 id='method.as_ref' class="method"><span id='as_ref.v' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html#tymethod.as_ref' class='fnname'>as_ref</a>(&amp;self) -&gt; &amp;<a class="struct" href="../../fst/raw/struct.Fst.html" title="struct fst::raw::Fst">Fst</a></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/map.rs.html#384-386' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Performs the conversion.</p>
</div></div><h3 id='impl-IntoStreamer%3C%27a%3E' class='impl'><span class='in-band'><table class='table-display'><tbody><tr><td><code>impl&lt;'a, 'f&gt; <a class="trait" href="../../fst/trait.IntoStreamer.html" title="trait fst::IntoStreamer">IntoStreamer</a>&lt;'a&gt; for &amp;'f <a class="struct" href="../../fst/raw/struct.Fst.html" title="struct fst::raw::Fst">Fst</a></code><a href='#impl-IntoStreamer%3C%27a%3E' class='anchor'></a></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#557-564' title='goto source code'>[src]</a></span></td></tr></tbody></table></h3><div class='impl-items'><h4 id='associatedtype.Item' class="type"><span id='Item.t' class='invisible'><code>type <a href='../../fst/trait.IntoStreamer.html#associatedtype.Item' class="type">Item</a> = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;'a [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>, <a class="struct" href="../../fst/raw/struct.Output.html" title="struct fst::raw::Output">Output</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a></code></span></h4>
<div class='docblock'><p>The type of the item emitted by the stream.</p>
</div><h4 id='associatedtype.Into' class="type"><span id='Into.t' class='invisible'><code>type <a href='../../fst/trait.IntoStreamer.html#associatedtype.Into' class="type">Into</a> = <a class="struct" href="../../fst/raw/struct.Stream.html" title="struct fst::raw::Stream">Stream</a>&lt;'f&gt;</code></span></h4>
<div class='docblock'><p>The type of the stream to be constructed.</p>
</div><h4 id='method.into_stream' class="method"><span id='into_stream.v' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='../../fst/trait.IntoStreamer.html#tymethod.into_stream' class='fnname'>into_stream</a>(self) -&gt; Self::<a class="type" href="../../fst/trait.IntoStreamer.html#associatedtype.Into" title="type fst::IntoStreamer::Into">Into</a></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/raw/mod.rs.html#561-563' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Construct a stream from <code>Self</code>.</p>
</div></div><h3 id='impl-AsRef%3CFst%3E-1' class='impl'><span class='in-band'><table class='table-display'><tbody><tr><td><code>impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a>&lt;<a class="struct" href="../../fst/raw/struct.Fst.html" title="struct fst::raw::Fst">Fst</a>&gt; for <a class="struct" href="../../fst/struct.Set.html" title="struct fst::Set">Set</a></code><a href='#impl-AsRef%3CFst%3E-1' class='anchor'></a></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/set.rs.html#329-333' title='goto source code'>[src]</a></span></td></tr></tbody></table></h3><div class='docblock'><p>Returns the underlying finite state transducer.</p>
</div><div class='impl-items'><h4 id='method.as_ref-1' class="method"><span id='as_ref.v-1' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html#tymethod.as_ref' class='fnname'>as_ref</a>(&amp;self) -&gt; &amp;<a class="struct" href="../../fst/raw/struct.Fst.html" title="struct fst::raw::Fst">Fst</a></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/set.rs.html#330-332' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Performs the conversion.</p>
</div></div><h3 id='impl-From%3CFst%3E-1' class='impl'><span class='in-band'><table class='table-display'><tbody><tr><td><code>impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;<a class="struct" href="../../fst/raw/struct.Fst.html" title="struct fst::raw::Fst">Fst</a>&gt; for <a class="struct" href="../../fst/struct.Set.html" title="struct fst::Set">Set</a></code><a href='#impl-From%3CFst%3E-1' class='anchor'></a></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/set.rs.html#345-349' title='goto source code'>[src]</a></span></td></tr></tbody></table></h3><div class='impl-items'><h4 id='method.from-1' class="method"><span id='from.v-1' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(fst: <a class="struct" href="../../fst/raw/struct.Fst.html" title="struct fst::raw::Fst">Fst</a>) -&gt; <a class="struct" href="../../fst/struct.Set.html" title="struct fst::Set">Set</a></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/fst/set.rs.html#346-348' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Performs the conversion.</p>
</div></div></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'>
<h3 id='impl-Send' class='impl'><span class='in-band'><table class='table-display'><tbody><tr><td><code>impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="struct" href="../../fst/raw/struct.Fst.html" title="struct fst::raw::Fst">Fst</a></code><a href='#impl-Send' class='anchor'></a></span></td><td><span class='out-of-band'></span></td></tr></tbody></table></h3><div class='impl-items'></div><h3 id='impl-Sync' class='impl'><span class='in-band'><table class='table-display'><tbody><tr><td><code>impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="struct" href="../../fst/raw/struct.Fst.html" title="struct fst::raw::Fst">Fst</a></code><a href='#impl-Sync' class='anchor'></a></span></td><td><span class='out-of-band'></span></td></tr></tbody></table></h3><div class='impl-items'></div></div></section>
<section id='search' class="content hidden"></section>
<section class="footer"></section>
<aside id="help" class="hidden">
<div>
<h1 class="hidden">Help</h1>
<div class="shortcuts">
<h2>Keyboard Shortcuts</h2>
<dl>
<dt><kbd>?</kbd></dt>
<dd>Show this help dialog</dd>
<dt><kbd>S</kbd></dt>
<dd>Focus the search field</dd>
<dt><kbd></kbd></dt>
<dd>Move up in search results</dd>
<dt><kbd></kbd></dt>
<dd>Move down in search results</dd>
<dt><kbd></kbd></dt>
<dd>Switch tab</dd>
<dt><kbd>&#9166;</kbd></dt>
<dd>Go to active search result</dd>
<dt><kbd>+</kbd></dt>
<dd>Expand all sections</dd>
<dt><kbd>-</kbd></dt>
<dd>Collapse all sections</dd>
</dl>
</div>
<div class="infos">
<h2>Search Tricks</h2>
<p>
Prefix searches with a type followed by a colon (e.g.
<code>fn:</code>) to restrict the search to a given type.
</p>
<p>
Accepted types are: <code>fn</code>, <code>mod</code>,
<code>struct</code>, <code>enum</code>,
<code>trait</code>, <code>type</code>, <code>macro</code>,
and <code>const</code>.
</p>
<p>
Search functions by type signature (e.g.
<code>vec -> usize</code> or <code>* -> vec</code>)
</p>
</div>
</div>
</aside>
<script>
window.rootPath = "../../";
window.currentCrate = "fst";
</script>
<script src="../../main.js"></script>
<script defer src="../../search-index.js"></script>
</body>
</html>