mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 11:15:31 -05:00
22 lines
12 KiB
HTML
22 lines
12 KiB
HTML
<!DOCTYPE html>
|
||
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CCMixtbl (containers-data.CCMixtbl)</title><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.3.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../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> » 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 "a");;
|
||
|
||
CCMixtbl.set inj_int tbl "a" 1;;
|
||
|
||
assert_equal (Some 1) (CCMixtbl.get ~inj:inj_int tbl "a");;
|
||
|
||
let inj_string = CCMixtbl.create_inj () ;;
|
||
|
||
CCMixtbl.set inj_string tbl "b" "Hello";
|
||
|
||
assert_equal (Some "Hello") (CCMixtbl.get inj_string tbl "b");;
|
||
assert_equal None (CCMixtbl.get inj_string tbl "a");;
|
||
assert_equal (Some 1) (CCMixtbl.get inj_int tbl "a");;
|
||
CCMixtbl.set inj_string tbl "a" "Bye";;
|
||
|
||
assert_equal None (CCMixtbl.get inj_int tbl "a");;
|
||
assert_equal (Some "Bye") (CCMixtbl.get inj_string tbl "a");;</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">-></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">-></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">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></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">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></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">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></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">-></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">-></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">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></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">-></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">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></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">-></span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> unit)</span> <span class="arrow">-></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">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span><span>(<span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'b</span>)</span> <span class="arrow">-></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">-></span></span> unit)</span> <span class="arrow">-></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">-></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">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></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">-></span></span> <span><span class="type-var">'b</span> option</span>)</span> <span class="arrow">-></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">-></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>
|