ocaml-containers/2.3/containers/CCMixtbl/index.html
2018-08-06 11:54:50 -05:00

32 lines
No EOL
11 KiB
HTML

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CCMixtbl (containers.CCMixtbl)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><meta name="generator" content="doc-ock-html v1.0.0-1-g1fc9bf0"/></head><body><nav id="top"><a href="../index.html">Up</a> &mdash; <span class="package">package <a href="../index.html">containers</a></span></nav><header><h1><span class="keyword">Module</span> <span class="module-path">CCMixtbl</span></h1></header><h2>Hash Table with Heterogeneous Keys</h2><p>From https://github.com/mjambon/mixtbl (thanks to him).
Example:</p><pre><code class="code"> let inj_int = CCMixtbl.create_inj () ;;
let tbl = CCMixtbl.create 10 ;;
OUnit.assert_equal None (CCMixtbl.get ~inj:inj_int tbl &quot;a&quot;);;
CCMixtbl.set inj_int tbl &quot;a&quot; 1;;
OUnit.assert_equal (Some 1) (CCMixtbl.get ~inj:inj_int tbl &quot;a&quot;);;
let inj_string = CCMixtbl.create_inj () ;;
CCMixtbl.set inj_string tbl &quot;b&quot; &quot;Hello&quot;;
OUnit.assert_equal (Some &quot;Hello&quot;) (CCMixtbl.get inj_string tbl &quot;b&quot;);;
OUnit.assert_equal None (CCMixtbl.get inj_string tbl &quot;a&quot;);;
OUnit.assert_equal (Some 1) (CCMixtbl.get inj_int tbl &quot;a&quot;);;
CCMixtbl.set inj_string tbl &quot;a&quot; &quot;Bye&quot;;;
OUnit.assert_equal None (CCMixtbl.get inj_int tbl &quot;a&quot;);;
OUnit.assert_equal (Some &quot;Bye&quot;) (CCMixtbl.get inj_string tbl &quot;a&quot;);;</code></pre><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.6</li></ul><div class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>'a t</code><code></code><code></code></div><div class="doc"><p>A hash table containing values of different types.
The type parameter <code class="code">'a</code> represents the type of the keys.</p></div></div><div class="spec type" id="type-injection"><a href="#type-injection" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>'b injection</code><code></code><code></code></div><div class="doc"><p>An accessor for values of type 'b in any table. Values put
in the table using a key can only be retrieved using this
very same key.</p></div></div><div class="spec val" id="val-create"><a href="#val-create" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>create : int <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">create n</code> creates a hash table of initial size <code class="code">n</code>.</p></div></div><div class="spec val" id="val-create_inj"><a href="#val-create_inj" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>create_inj : unit <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-injection">injection</a></code></div><div class="doc"><p>Return a value that works for a given type of values. This function is
normally called once for each type of value. Several keys may be
created for the same type, but a value set with a given setter can only be
retrieved with the matching getter. The same key can be reused
across multiple tables (although not in a thread-safe way).</p></div></div><div class="spec val" id="val-get"><a href="#val-get" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>get : inj:<span class="type-var">'b</span> <a href="index.html#type-injection">injection</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> option</code></div><div class="doc"><p>Get the value corresponding to this key, if it exists and
belongs to the same key.</p></div></div><div class="spec val" id="val-set"><a href="#val-set" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>set : inj:<span class="type-var">'b</span> <a href="index.html#type-injection">injection</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p>Bind the key to the value, using <code class="code">inj</code>.</p></div></div><div class="spec val" id="val-find"><a href="#val-find" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>find : inj:<span class="type-var">'b</span> <a href="index.html#type-injection">injection</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span></code></div><div class="doc"><p>Find the value for the given key, which must be of the right type.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Not_found</span>: if either the key is not found, or if its value
doesn't belong to the right type.</li></ul></div></div><div class="spec val" id="val-length"><a href="#val-length" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>length : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> int</code></div><div class="doc"><p>Number of bindings.</p></div></div><div class="spec val" id="val-clear"><a href="#val-clear" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>clear : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p>Clear content of the hashtable.</p></div></div><div class="spec val" id="val-remove"><a href="#val-remove" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>remove : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p>Remove the binding for this key.</p></div></div><div class="spec val" id="val-copy"><a href="#val-copy" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>copy : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Copy of the table.</p></div></div><div class="spec val" id="val-mem"><a href="#val-mem" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>mem : inj:<span class="type-var">_</span> <a href="index.html#type-injection">injection</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"><p>Is the given key in the table, with the right type?</p></div></div><div class="spec val" id="val-iter_keys"><a href="#val-iter_keys" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>iter_keys : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> unit) <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p>Iterate on the keys of this table.</p></div></div><div class="spec val" id="val-fold_keys"><a href="#val-fold_keys" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>fold_keys : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span>) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span></code></div><div class="doc"><p>Fold over the keys.</p></div></div><h3>Iterators</h3><div class="spec type" id="type-sequence"><a href="#type-sequence" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>'a sequence</code><code><span class="keyword"> = </span>(<span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> unit) <span class="keyword">&#8209;&gt;</span> unit</code><code></code></div><div class="doc"></div></div><div class="spec val" id="val-keys_seq"><a href="#val-keys_seq" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>keys_seq : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-sequence">sequence</a></code></div><div class="doc"><p>All the keys.</p></div></div><div class="spec val" id="val-bindings_of"><a href="#val-bindings_of" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>bindings_of : inj:<span class="type-var">'b</span> <a href="index.html#type-injection">injection</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span><span class="keyword"> * </span><span class="type-var">'b</span>) <a href="index.html#type-sequence">sequence</a></code></div><div class="doc"><p>All the bindings that come from the corresponding injection.</p></div></div><div class="spec type" id="type-value"><a href="#type-value" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>value</code><code></code><code><span class="keyword"> = </span></code><table class="variant"><tr id="type-value.Value" class="anchored"><td class="def constructor"><a href="#type-value.Value" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Value</span><span class="keyword"> : </span>(<span class="type-var">'b</span> <a href="index.html#type-injection">injection</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> option) <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-value">value</a></code></td></tr></table><code></code></div><div class="doc"></div></div><div class="spec val" id="val-bindings"><a href="#val-bindings" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>bindings : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span><span class="keyword"> * </span><a href="index.html#type-value">value</a>) <a href="index.html#type-sequence">sequence</a></code></div><div class="doc"><p>Iterate on all bindings.</p></div></div></body></html>