ocaml-containers/3.15/containers-data/CCMixtbl/index.html
Sebastian Provenzano 6214d6bd10 add 3.15 docs
2024-11-18 14:28:31 -06:00

22 lines
12 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 xmlns="http://www.w3.org/1999/xhtml"><head><title>CCMixtbl (containers-data.CCMixtbl)</title><meta charset="utf-8"/><link rel="stylesheet" href="../../odoc.support/odoc.css"/><meta name="generator" content="odoc 2.4.3"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../odoc.support/highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../index.html">containers-data</a> &#x00BB; CCMixtbl</nav><header class="odoc-preamble"><h1>Module <code><span>CCMixtbl</span></code></h1><p>Hash Table with Heterogeneous Keys</p><p>From https://github.com/mjambon/mixtbl (thanks to him). Example:</p><pre class="language-ocaml"><code>let inj_int = CCMixtbl.create_inj () ;;
let tbl = CCMixtbl.create 10 ;;
assert_equal None (CCMixtbl.get ~inj:inj_int tbl &quot;a&quot;);;
CCMixtbl.set inj_int tbl &quot;a&quot; 1;;
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;;
assert_equal (Some &quot;Hello&quot;) (CCMixtbl.get inj_string tbl &quot;b&quot;);;
assert_equal None (CCMixtbl.get inj_string tbl &quot;a&quot;);;
assert_equal (Some 1) (CCMixtbl.get inj_int tbl &quot;a&quot;);;
CCMixtbl.set inj_string tbl &quot;a&quot; &quot;Bye&quot;;;
assert_equal None (CCMixtbl.get inj_int tbl &quot;a&quot;);;
assert_equal (Some &quot;Bye&quot;) (CCMixtbl.get inj_string tbl &quot;a&quot;);;</code></pre><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.6</li></ul></header><nav class="odoc-toc"><ul><li><a href="#iterators">Iterators</a></li></ul></nav><div class="odoc-content"><div class="odoc-spec"><div class="spec type anchored" id="type-t"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a t</span></span></code></div><div class="spec-doc"><p>A hash table containing values of different types. The type parameter <code>'a</code> represents the type of the keys.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-injection"><a href="#type-injection" class="anchor"></a><code><span><span class="keyword">type</span> <span>'b injection</span></span></code></div><div class="spec-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="odoc-spec"><div class="spec value anchored" id="val-create"><a href="#val-create" class="anchor"></a><code><span><span class="keyword">val</span> create : <span>int <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>create n</code> creates a hash table of initial size <code>n</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-create_inj"><a href="#val-create_inj" class="anchor"></a><code><span><span class="keyword">val</span> create_inj : <span>unit <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-injection">injection</a></span></span></code></div><div class="spec-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="odoc-spec"><div class="spec value anchored" id="val-get"><a href="#val-get" class="anchor"></a><code><span><span class="keyword">val</span> get : <span><span class="label">inj</span>:<span><span class="type-var">'b</span> <a href="#type-injection">injection</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> option</span></span></code></div><div class="spec-doc"><p>Get the value corresponding to this key, if it exists and belongs to the same key.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-set"><a href="#val-set" class="anchor"></a><code><span><span class="keyword">val</span> set : <span><span class="label">inj</span>:<span><span class="type-var">'b</span> <a href="#type-injection">injection</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Bind the key to the value, using <code>inj</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-find"><a href="#val-find" class="anchor"></a><code><span><span class="keyword">val</span> find : <span><span class="label">inj</span>:<span><span class="type-var">'b</span> <a href="#type-injection">injection</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span></span></code></div><div class="spec-doc"><p>Find the value for the given key, which must be of the right type.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <code>Not_found</code> <p>if either the key is not found, or if its value doesn't belong to the right type.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-length"><a href="#val-length" class="anchor"></a><code><span><span class="keyword">val</span> length : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> int</span></code></div><div class="spec-doc"><p>Number of bindings.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-clear"><a href="#val-clear" class="anchor"></a><code><span><span class="keyword">val</span> clear : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Clear content of the hashtable.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-remove"><a href="#val-remove" class="anchor"></a><code><span><span class="keyword">val</span> remove : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Remove the binding for this key.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-copy"><a href="#val-copy" class="anchor"></a><code><span><span class="keyword">val</span> copy : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Copy of the table.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-mem"><a href="#val-mem" class="anchor"></a><code><span><span class="keyword">val</span> mem : <span><span class="label">inj</span>:<span><span class="type-var">_</span> <a href="#type-injection">injection</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> bool</span></code></div><div class="spec-doc"><p>Is the given key in the table, with the right type?</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-iter_keys"><a href="#val-iter_keys" class="anchor"></a><code><span><span class="keyword">val</span> iter_keys : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Iterate on the keys of this table.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-fold_keys"><a href="#val-fold_keys" class="anchor"></a><code><span><span class="keyword">val</span> fold_keys : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span class="type-var">'b</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span></span></code></div><div class="spec-doc"><p>Fold over the keys.</p></div></div><h3 id="iterators"><a href="#iterators" class="anchor"></a>Iterators</h3><div class="odoc-spec"><div class="spec type anchored" id="type-iter"><a href="#type-iter" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a iter</span></span><span> = <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-keys_iter"><a href="#val-keys_iter" class="anchor"></a><code><span><span class="keyword">val</span> keys_iter : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-iter">iter</a></span></span></code></div><div class="spec-doc"><p>All the keys.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-bindings_of"><a href="#val-bindings_of" class="anchor"></a><code><span><span class="keyword">val</span> bindings_of : <span><span class="label">inj</span>:<span><span class="type-var">'b</span> <a href="#type-injection">injection</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> <a href="#type-iter">iter</a></span></span></code></div><div class="spec-doc"><p>All the bindings that come from the corresponding injection.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-value"><a href="#type-value" class="anchor"></a><code><span><span class="keyword">type</span> value</span><span> = </span></code><ol><li id="type-value.Value" class="def variant constructor anchored"><a href="#type-value.Value" class="anchor"></a><code><span>| </span><span><span class="constructor">Value</span> : <span>(<span><span><span class="type-var">'b</span> <a href="#type-injection">injection</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> option</span>)</span> <span class="arrow">&#45;&gt;</span> <a href="#type-value">value</a></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-bindings"><a href="#val-bindings" class="anchor"></a><code><span><span class="keyword">val</span> bindings : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span class="type-var">'a</span> * <a href="#type-value">value</a>)</span> <a href="#type-iter">iter</a></span></span></code></div><div class="spec-doc"><p>Iterate on all bindings.</p></div></div></div></body></html>