mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 11:15:31 -05:00
4 lines
No EOL
18 KiB
HTML
4 lines
No EOL
18 KiB
HTML
<!DOCTYPE html>
|
||
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CCHash (containers.CCHash)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.0.0"/><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</a> » CCHash</nav><header class="odoc-preamble"><h1>Module <code><span>CCHash</span></code></h1><p>Hash combinators</p><p>The API of this module is stable as per semantic versioning, like the rest of containers. However the exact implementation of hashing function can change and should not be relied on (i.e. hashing a value always returns the same integer <b>within a run of a program</b>, not across versions of OCaml and Containers).</p></header><nav class="odoc-toc"><ul><li><a href="#definitions">Definitions</a></li><li><a href="#base-hash-combinators">Base hash combinators</a></li><li><a href="#iterators">Iterators</a></li></ul></nav><div class="odoc-content"><h3 id="definitions"><a href="#definitions" class="anchor"></a>Definitions</h3><div class="odoc-spec"><div class="spec type" id="type-hash" class="anchored"><a href="#type-hash" class="anchor"></a><code><span><span class="keyword">type</span> hash</span><span> = int</span></code></div><div class="spec-doc"><p>A hash value is a positive integer.</p></div></div><div class="odoc-spec"><div class="spec type" id="type-t" class="anchored"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a t</span></span><span> = <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <a href="#type-hash">hash</a></span></code></div><div class="spec-doc"><p>A hash function for values of type <code>'a</code>.</p></div></div><div class="odoc-spec"><div class="spec value" id="val-const" class="anchored"><a href="#val-const" class="anchor"></a><code><span><span class="keyword">val</span> const : <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <span><span class="type-var">_</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>const h</code> hashes any value into <code>h</code>. Use with caution!.</p></div></div><div class="odoc-spec"><div class="spec value" id="val-const0" class="anchored"><a href="#val-const0" class="anchor"></a><code><span><span class="keyword">val</span> const0 : <span><span class="type-var">_</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Always return 0. Useful for ignoring elements. Example: <code>Hash.(pair string const0)</code> will map pairs <code>("a", 1)</code> and <code>("a", 2)</code> to the same hash, but not the same as <code>("b", 1)</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 1.5</li></ul></div></div><div class="odoc-spec"><div class="spec value" id="val-int" class="anchored"><a href="#val-int" class="anchor"></a><code><span><span class="keyword">val</span> int : <span>int <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-bool" class="anchored"><a href="#val-bool" class="anchor"></a><code><span><span class="keyword">val</span> bool : <span>bool <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-char" class="anchored"><a href="#val-char" class="anchor"></a><code><span><span class="keyword">val</span> char : <span>char <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-int32" class="anchored"><a href="#val-int32" class="anchor"></a><code><span><span class="keyword">val</span> int32 : <span>int32 <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-int64" class="anchored"><a href="#val-int64" class="anchor"></a><code><span><span class="keyword">val</span> int64 : <span>int64 <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-nativeint" class="anchored"><a href="#val-nativeint" class="anchor"></a><code><span><span class="keyword">val</span> nativeint : <span>nativeint <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-slice" class="anchored"><a href="#val-slice" class="anchor"></a><code><span><span class="keyword">val</span> slice : <span>string <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>int <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>slice s i len state</code> hashes the slice <code>i, …, i+len-1</code> of <code>s</code> into <code>state</code>.</p></div></div><div class="odoc-spec"><div class="spec value" id="val-bytes" class="anchored"><a href="#val-bytes" class="anchor"></a><code><span><span class="keyword">val</span> bytes : <span>bytes <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Hash a byte array.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 3.5</li></ul></div></div><div class="odoc-spec"><div class="spec value" id="val-string" class="anchored"><a href="#val-string" class="anchor"></a><code><span><span class="keyword">val</span> string : <span>string <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-list" class="anchored"><a href="#val-list" class="anchor"></a><code><span><span class="keyword">val</span> list : <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> list</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-array" class="anchored"><a href="#val-array" class="anchor"></a><code><span><span class="keyword">val</span> array : <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> array</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-opt" class="anchored"><a href="#val-opt" class="anchor"></a><code><span><span class="keyword">val</span> opt : <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> option</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-pair" class="anchored"><a href="#val-pair" class="anchor"></a><code><span><span class="keyword">val</span> pair : <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">'b</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-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-triple" class="anchored"><a href="#val-triple" class="anchor"></a><code><span><span class="keyword">val</span> triple : <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">'b</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span><span class="type-var">'c</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 class="type-var">'c</span>)</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-quad" class="anchored"><a href="#val-quad" class="anchor"></a><code><span><span class="keyword">val</span> quad : <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">'b</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span><span class="type-var">'c</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span><span class="type-var">'d</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 class="type-var">'c</span> * <span class="type-var">'d</span>)</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-map" class="anchored"><a href="#val-map" class="anchor"></a><code><span><span class="keyword">val</span> map : <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><span><span class="type-var">'b</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><code>map f h</code> is the hasher that takes <code>x</code>, and uses <code>h</code> to hash <code>f x</code>.</p><p>For example:</p><pre><code>module Str_set = Set.Make(String)
|
||
|
||
let hash_str_set : Str_set.t CCHash.t = CCHash.(map Str_set.to_seq @@ seq string)</code></pre><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 3.5</li></ul></div></div><div class="odoc-spec"><div class="spec value" id="val-if_" class="anchored"><a href="#val-if_" class="anchor"></a><code><span><span class="keyword">val</span> if_ : <span>bool <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> <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>Decide which hash function to use depending on the boolean.</p></div></div><div class="odoc-spec"><div class="spec value" id="val-poly" class="anchored"><a href="#val-poly" class="anchor"></a><code><span><span class="keyword">val</span> poly : <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>poly x</code> is <code>Hashtbl.hash x</code>. The regular polymorphic hash function.</p></div></div><div class="odoc-spec"><div class="spec value" id="val-list_comm" class="anchored"><a href="#val-list_comm" class="anchor"></a><code><span><span class="keyword">val</span> list_comm : <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> list</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Commutative version of <a href="#val-list"><code>list</code></a>. Lists that are equal up to permutation will have the same hash.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 1.0</li></ul></div></div><div class="odoc-spec"><div class="spec value" id="val-array_comm" class="anchored"><a href="#val-array_comm" class="anchor"></a><code><span><span class="keyword">val</span> array_comm : <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> array</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Commutative version of <a href="#val-array"><code>array</code></a>. Arrays that are equal up to permutation will have the same hash.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 1.0</li></ul></div></div><h3 id="base-hash-combinators"><a href="#base-hash-combinators" class="anchor"></a>Base hash combinators</h3><div class="odoc-spec"><div class="spec value" id="val-combine" class="anchored"><a href="#val-combine" class="anchor"></a><code><span><span class="keyword">val</span> combine : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <a href="#type-hash">hash</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-combine2" class="anchored"><a href="#val-combine2" class="anchor"></a><code><span><span class="keyword">val</span> combine2 : <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <a href="#type-hash">hash</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-combine3" class="anchored"><a href="#val-combine3" class="anchor"></a><code><span><span class="keyword">val</span> combine3 : <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <a href="#type-hash">hash</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-combine4" class="anchored"><a href="#val-combine4" class="anchor"></a><code><span><span class="keyword">val</span> combine4 : <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <a href="#type-hash">hash</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-combine5" class="anchored"><a href="#val-combine5" class="anchor"></a><code><span><span class="keyword">val</span> combine5 : <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <a href="#type-hash">hash</a></span></code></div><div class="spec-doc"><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 2.1</li></ul></div></div><div class="odoc-spec"><div class="spec value" id="val-combine6" class="anchored"><a href="#val-combine6" class="anchor"></a><code><span><span class="keyword">val</span> combine6 : <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <span><a href="#type-hash">hash</a> <span class="arrow">-></span></span> <a href="#type-hash">hash</a></span></code></div><div class="spec-doc"><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 2.1</li></ul></div></div><h3 id="iterators"><a href="#iterators" class="anchor"></a>Iterators</h3><div class="odoc-spec"><div class="spec type" id="type-iter" class="anchored"><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 type" id="type-gen" class="anchored"><a href="#type-gen" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a gen</span></span><span> = <span>unit <span class="arrow">-></span></span> <span><span class="type-var">'a</span> option</span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-seq" class="anchored"><a href="#val-seq" class="anchor"></a><code><span><span class="keyword">val</span> seq : <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="xref-unresolved">Stdlib</span>.Seq.t</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-iter" class="anchored"><a href="#val-iter" class="anchor"></a><code><span><span class="keyword">val</span> iter : <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-iter">iter</a></span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-gen" class="anchored"><a href="#val-gen" class="anchor"></a><code><span><span class="keyword">val</span> gen : <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-gen">gen</a></span> <a href="#type-t">t</a></span></span></code></div></div></div></body></html> |