ocaml-trace/trace-fuchsia/Trace_fuchsia/Buf_chain/index.html
2025-12-12 13:56:43 +00:00

2 lines
7.2 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>Buf_chain (trace-fuchsia.Trace_fuchsia.Buf_chain)</title><meta charset="utf-8"/><link rel="stylesheet" href="../../../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 3.1.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">Index</a> &#x00BB; <a href="../../index.html">trace-fuchsia</a> &#x00BB; <a href="../index.html">Trace_fuchsia</a> &#x00BB; Buf_chain</nav><header class="odoc-preamble"><h1>Module <code><span>Trace_fuchsia.Buf_chain</span></code></h1><p>A set of buffers in use, and a set of ready buffers</p></header><div class="odoc-content"><div class="odoc-spec"><div class="spec type anchored" id="type-buffers"><a href="#type-buffers" class="anchor"></a><code><span><span class="keyword">type</span> buffers</span><span> = </span></code><ol><li id="type-buffers.B_one" class="def variant constructor anchored"><a href="#type-buffers.B_one" class="anchor"></a><code><span>| </span><span><span class="constructor">B_one</span> <span class="keyword">of</span> </span><span>{</span></code><ol><li id="type-buffers.buf" class="def record field anchored"><a href="#type-buffers.buf" class="anchor"></a><code><span><span class="keyword">mutable</span> buf : <a href="../Buf/index.html#type-t">Buf.t</a>;</span></code></li></ol><code><span>}</span></code></li><li id="type-buffers.B_many" class="def variant constructor anchored"><a href="#type-buffers.B_many" class="anchor"></a><code><span>| </span><span><span class="constructor">B_many</span> <span class="keyword">of</span> <span><span><a href="../Buf/index.html#type-t">Buf.t</a> <span class="xref-unresolved">Trace_fuchsia__.Lock.t</span></span> array</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>mask(thread id) -&gt; buffer. This reduces contention</p><span class="comment-delim">*)</span></div></li></ol></div><div class="spec-doc"><p>Buffers in use</p></div></div><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> t</span><span> = </span><span>{</span></code><ol><li id="type-t.bufs" class="def record field anchored"><a href="#type-t.bufs" class="anchor"></a><code><span>bufs : <a href="#type-buffers">buffers</a>;</span></code></li><li id="type-t.has_ready" class="def record field anchored"><a href="#type-t.has_ready" class="anchor"></a><code><span>has_ready : <span>bool <a href="../../../ocaml/Stdlib/Atomic/index.html#type-t">Stdlib.Atomic.t</a></span>;</span></code></li><li id="type-t.ready" class="def record field anchored"><a href="#type-t.ready" class="anchor"></a><code><span>ready : <span><span><a href="../Buf/index.html#type-t">Buf.t</a> <a href="../../../ocaml/Stdlib/Queue/index.html#type-t">Stdlib.Queue.t</a></span> <span class="xref-unresolved">Trace_fuchsia__.Lock.t</span></span>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Buffers that are full (enough) and must be written</p><span class="comment-delim">*)</span></div></li><li id="type-t.buf_pool" class="def record field anchored"><a href="#type-t.buf_pool" class="anchor"></a><code><span>buf_pool : <a href="../Buf_pool/index.html#type-t">Buf_pool.t</a>;</span></code></li></ol><code><span>}</span></code></div><div class="spec-doc"><p>A set of buffers, some of which are ready to be written</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><span class="label">sharded</span>:bool <span class="arrow">&#45;&gt;</span></span> <span><span class="label">buf_pool</span>:<a href="../Buf_pool/index.html#type-t">Buf_pool.t</a> <span class="arrow">&#45;&gt;</span></span> <span>unit <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p>Create a buffer chain.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">sharded</span> <p>if true, multiple buffers are created, to reduce contention on each buffer in case of concurrent access. This makes the buf chain thread-safe. If false, there is only one (unprotected) buffer.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-ready_all_non_empty"><a href="#val-ready_all_non_empty" class="anchor"></a><code><span><span class="keyword">val</span> ready_all_non_empty : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Move all non-empty buffers to <code>ready</code></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-has_ready"><a href="#val-has_ready" class="anchor"></a><code><span><span class="keyword">val</span> has_ready : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> bool</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-pop_ready"><a href="#val-pop_ready" class="anchor"></a><code><span><span class="keyword">val</span> pop_ready : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><span class="label">f</span>:<span>(<span><span><a href="../Buf/index.html#type-t">Buf.t</a> <a href="../../../ocaml/Stdlib/Queue/index.html#type-t">Stdlib.Queue.t</a></span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p>Get access to ready buffers, then clean them up automatically</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-max_size_word"><a href="#val-max_size_word" class="anchor"></a><code><span><span class="keyword">val</span> max_size_word : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> int</span></code></div><div class="spec-doc"><p>Maximum size available, in words, for a single message</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-with_buf"><a href="#val-with_buf" class="anchor"></a><code><span><span class="keyword">val</span> with_buf : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><span class="label">available_word</span>:int <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><a href="../Buf/index.html#type-t">Buf.t</a> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p>Obtain a buffer with at least <code>available_word</code> 64-bit words</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-dispose"><a href="#val-dispose" class="anchor"></a><code><span><span class="keyword">val</span> dispose : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Dispose of resources (here, recycle buffers)</p></div></div></div></body></html>