summaryrefslogtreecommitdiff
path: root/static/freebsd/man3/arb.3 3.html
diff options
context:
space:
mode:
authorJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 19:55:43 -0400
committerJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 19:55:43 -0400
commitac5e55f5f2af5b92794c2aded46c6bae85b5f5ed (patch)
tree9367490586c84cba28652e443e3166d66c33b0d9 /static/freebsd/man3/arb.3 3.html
parent253e67c8b3a72b3a4757fdbc5845297628db0a4a (diff)
docs: Added All FreeBSD Manuals
Diffstat (limited to 'static/freebsd/man3/arb.3 3.html')
-rw-r--r--static/freebsd/man3/arb.3 3.html550
1 files changed, 550 insertions, 0 deletions
diff --git a/static/freebsd/man3/arb.3 3.html b/static/freebsd/man3/arb.3 3.html
new file mode 100644
index 00000000..f8219d50
--- /dev/null
+++ b/static/freebsd/man3/arb.3 3.html
@@ -0,0 +1,550 @@
+<table class="head">
+ <tr>
+ <td class="head-ltitle">ARB(3)</td>
+ <td class="head-vol">Library Functions Manual</td>
+ <td class="head-rtitle">ARB(3)</td>
+ </tr>
+</table>
+<div class="manual-text">
+<section class="Sh">
+<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
+<p class="Pp"><code class="Nm">ARB_PROTOTYPE</code>,
+ <code class="Nm">ARB_PROTOTYPE_STATIC</code>,
+ <code class="Nm">ARB_PROTOTYPE_INSERT</code>,
+ <code class="Nm">ARB_PROTOTYPE_INSERT_COLOR</code>,
+ <code class="Nm">ARB_PROTOTYPE_REMOVE</code>,
+ <code class="Nm">ARB_PROTOTYPE_REMOVE_COLOR</code>,
+ <code class="Nm">ARB_PROTOTYPE_FIND</code>,
+ <code class="Nm">ARB_PROTOTYPE_NFIND</code>,
+ <code class="Nm">ARB_PROTOTYPE_NEXT</code>,
+ <code class="Nm">ARB_PROTOTYPE_PREV</code>,
+ <code class="Nm">ARB_PROTOTYPE_MINMAX</code>,
+ <code class="Nm">ARB_PROTOTYPE_REINSERT</code>,
+ <code class="Nm">ARB_GENERATE</code>,
+ <code class="Nm">ARB_GENERATE_STATIC</code>,
+ <code class="Nm">ARB_GENERATE_INSERT</code>,
+ <code class="Nm">ARB_GENERATE_INSERT_COLOR</code>,
+ <code class="Nm">ARB_GENERATE_REMOVE</code>,
+ <code class="Nm">ARB_GENERATE_REMOVE_COLOR</code>,
+ <code class="Nm">ARB_GENERATE_FIND</code>,
+ <code class="Nm">ARB_GENERATE_NFIND</code>,
+ <code class="Nm">ARB_GENERATE_NEXT</code>,
+ <code class="Nm">ARB_GENERATE_PREV</code>,
+ <code class="Nm">ARB_GENERATE_MINMAX</code>,
+ <code class="Nm">ARB_GENERATE_REINSERT</code>,
+ <code class="Nm">ARB8_ENTRY</code>, <code class="Nm">ARB16_ENTRY</code>,
+ <code class="Nm">ARB32_ENTRY</code>, <code class="Nm">ARB8_HEAD</code>,
+ <code class="Nm">ARB16_HEAD</code>, <code class="Nm">ARB32_HEAD</code>,
+ <code class="Nm">ARB_ALLOCSIZE</code>,
+ <code class="Nm">ARB_INITIALIZER</code>, <code class="Nm">ARB_ROOT</code>,
+ <code class="Nm">ARB_EMPTY</code>, <code class="Nm">ARB_FULL</code>,
+ <code class="Nm">ARB_CURNODES</code>, <code class="Nm">ARB_MAXNODES</code>,
+ <code class="Nm">ARB_NEXT</code>, <code class="Nm">ARB_PREV</code>,
+ <code class="Nm">ARB_MIN</code>, <code class="Nm">ARB_MAX</code>,
+ <code class="Nm">ARB_FIND</code>, <code class="Nm">ARB_NFIND</code>,
+ <code class="Nm">ARB_LEFT</code>, <code class="Nm">ARB_LEFTIDX</code>,
+ <code class="Nm">ARB_RIGHT</code>, <code class="Nm">ARB_RIGHTIDX</code>,
+ <code class="Nm">ARB_PARENT</code>, <code class="Nm">ARB_PARENTIDX</code>,
+ <code class="Nm">ARB_GETFREE</code>, <code class="Nm">ARB_FREEIDX</code>,
+ <code class="Nm">ARB_FOREACH</code>,
+ <code class="Nm">ARB_FOREACH_FROM</code>,
+ <code class="Nm">ARB_FOREACH_SAFE</code>,
+ <code class="Nm">ARB_FOREACH_REVERSE</code>,
+ <code class="Nm">ARB_FOREACH_REVERSE_FROM</code>,
+ <code class="Nm">ARB_FOREACH_REVERSE_SAFE</code>,
+ <code class="Nm">ARB_INIT</code>, <code class="Nm">ARB_INSERT</code>,
+ <code class="Nm">ARB_REMOVE</code>, <code class="Nm">ARB_REINSERT</code>,
+ <code class="Nm">ARB_RESET_TREE</code> &#x2014; <span class="Nd">array-based
+ red-black trees</span></p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
+<p class="Pp"><code class="In">#include
+ &lt;<a class="In">sys/arb.h</a>&gt;</code></p>
+<p class="Pp"><code class="Fn">ARB_PROTOTYPE</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">FIELD</var>,
+ <var class="Fa" style="white-space: nowrap;">CMP</var>);</p>
+<p class="Pp"><code class="Fn">ARB_PROTOTYPE_STATIC</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">FIELD</var>,
+ <var class="Fa" style="white-space: nowrap;">CMP</var>);</p>
+<p class="Pp"><code class="Fn">ARB_PROTOTYPE_INSERT</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">ATTR</var>);</p>
+<p class="Pp"><code class="Fn">ARB_PROTOTYPE_INSERT_COLOR</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">ATTR</var>);</p>
+<p class="Pp"><code class="Fn">ARB_PROTOTYPE_REMOVE</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">ATTR</var>);</p>
+<p class="Pp"><code class="Fn">ARB_PROTOTYPE_REMOVE_COLOR</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">ATTR</var>);</p>
+<p class="Pp"><code class="Fn">ARB_PROTOTYPE_FIND</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">ATTR</var>);</p>
+<p class="Pp"><code class="Fn">ARB_PROTOTYPE_NFIND</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">ATTR</var>);</p>
+<p class="Pp"><code class="Fn">ARB_PROTOTYPE_NEXT</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">ATTR</var>);</p>
+<p class="Pp"><code class="Fn">ARB_PROTOTYPE_PREV</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">ATTR</var>);</p>
+<p class="Pp"><code class="Fn">ARB_PROTOTYPE_MINMAX</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">ATTR</var>);</p>
+<p class="Pp"><code class="Fn">ARB_PROTOTYPE_REINSERT</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">ATTR</var>);</p>
+<p class="Pp"><code class="Fn">ARB_GENERATE</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">FIELD</var>,
+ <var class="Fa" style="white-space: nowrap;">CMP</var>);</p>
+<p class="Pp"><code class="Fn">ARB_GENERATE_STATIC</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">FIELD</var>,
+ <var class="Fa" style="white-space: nowrap;">CMP</var>);</p>
+<p class="Pp"><code class="Fn">ARB_GENERATE_INSERT</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">FIELD</var>,
+ <var class="Fa" style="white-space: nowrap;">CMP</var>,
+ <var class="Fa" style="white-space: nowrap;">ATTR</var>);</p>
+<p class="Pp"><code class="Fn">ARB_GENERATE_INSERT_COLOR</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">FIELD</var>,
+ <var class="Fa" style="white-space: nowrap;">ATTR</var>);</p>
+<p class="Pp"><code class="Fn">ARB_GENERATE_REMOVE</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">FIELD</var>,
+ <var class="Fa" style="white-space: nowrap;">ATTR</var>);</p>
+<p class="Pp"><code class="Fn">ARB_GENERATE_REMOVE_COLOR</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">FIELD</var>,
+ <var class="Fa" style="white-space: nowrap;">ATTR</var>);</p>
+<p class="Pp"><code class="Fn">ARB_GENERATE_FIND</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">FIELD</var>,
+ <var class="Fa" style="white-space: nowrap;">CMP</var>,
+ <var class="Fa" style="white-space: nowrap;">ATTR</var>);</p>
+<p class="Pp"><code class="Fn">ARB_GENERATE_NFIND</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">FIELD</var>,
+ <var class="Fa" style="white-space: nowrap;">CMP</var>,
+ <var class="Fa" style="white-space: nowrap;">ATTR</var>);</p>
+<p class="Pp"><code class="Fn">ARB_GENERATE_NEXT</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">FIELD</var>,
+ <var class="Fa" style="white-space: nowrap;">ATTR</var>);</p>
+<p class="Pp"><code class="Fn">ARB_GENERATE_PREV</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">FIELD</var>,
+ <var class="Fa" style="white-space: nowrap;">ATTR</var>);</p>
+<p class="Pp"><code class="Fn">ARB_GENERATE_MINMAX</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">FIELD</var>,
+ <var class="Fa" style="white-space: nowrap;">ATTR</var>);</p>
+<p class="Pp"><code class="Fn">ARB_GENERATE_REINSERT</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>,
+ <var class="Fa" style="white-space: nowrap;">FIELD</var>,
+ <var class="Fa" style="white-space: nowrap;">CMP</var>,
+ <var class="Fa" style="white-space: nowrap;">ATTR</var>);</p>
+<p class="Pp"><code class="Fn">ARB&lt;8|16|32&gt;_ENTRY</code>();</p>
+<p class="Pp"><code class="Fn">ARB&lt;8|16|32&gt;_HEAD</code>(<var class="Fa" style="white-space: nowrap;">HEADNAME</var>,
+ <var class="Fa" style="white-space: nowrap;">TYPE</var>);</p>
+<p class="Pp"><var class="Ft">size_t</var>
+ <br/>
+ <code class="Fn">ARB_ALLOCSIZE</code>(<var class="Fa" style="white-space: nowrap;">ARB_HEAD
+ *head</var>,
+ <var class="Fa" style="white-space: nowrap;">int&lt;8|16|32&gt;_t
+ maxnodes</var>, <var class="Fa" style="white-space: nowrap;">struct TYPE
+ *elm</var>);</p>
+<p class="Pp"><code class="Fn">ARB_INITIALIZER</code>(<var class="Fa" style="white-space: nowrap;">ARB_HEAD
+ *head</var>,
+ <var class="Fa" style="white-space: nowrap;">int&lt;8|16|32&gt;_t
+ maxnodes</var>);</p>
+<p class="Pp"><var class="Ft">struct TYPE *</var>
+ <br/>
+ <code class="Fn">ARB_ROOT</code>(<var class="Fa" style="white-space: nowrap;">ARB_HEAD
+ *head</var>);</p>
+<p class="Pp"><var class="Ft">bool</var>
+ <br/>
+ <code class="Fn">ARB_EMPTY</code>(<var class="Fa" style="white-space: nowrap;">ARB_HEAD
+ *head</var>);</p>
+<p class="Pp"><var class="Ft">bool</var>
+ <br/>
+ <code class="Fn">ARB_FULL</code>(<var class="Fa" style="white-space: nowrap;">ARB_HEAD
+ *head</var>);</p>
+<p class="Pp"><var class="Ft">int&lt;8|16|32&gt;_t</var>
+ <br/>
+ <code class="Fn">ARB_CURNODES</code>(<var class="Fa" style="white-space: nowrap;">ARB_HEAD
+ *head</var>);</p>
+<p class="Pp"><var class="Ft">int&lt;8|16|32&gt;_t</var>
+ <br/>
+ <code class="Fn">ARB_MAXNODES</code>(<var class="Fa" style="white-space: nowrap;">ARB_HEAD
+ *head</var>);</p>
+<p class="Pp"><var class="Ft">struct TYPE *</var>
+ <br/>
+ <code class="Fn">ARB_NEXT</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">ARB_HEAD *head</var>,
+ <var class="Fa" style="white-space: nowrap;">struct TYPE *elm</var>);</p>
+<p class="Pp"><var class="Ft">struct TYPE *</var>
+ <br/>
+ <code class="Fn">ARB_PREV</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">ARB_HEAD *head</var>,
+ <var class="Fa" style="white-space: nowrap;">struct TYPE *elm</var>);</p>
+<p class="Pp"><var class="Ft">struct TYPE *</var>
+ <br/>
+ <code class="Fn">ARB_MIN</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">ARB_HEAD *head</var>);</p>
+<p class="Pp"><var class="Ft">struct TYPE *</var>
+ <br/>
+ <code class="Fn">ARB_MAX</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">ARB_HEAD *head</var>);</p>
+<p class="Pp"><var class="Ft">struct TYPE *</var>
+ <br/>
+ <code class="Fn">ARB_FIND</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">ARB_HEAD *head</var>,
+ <var class="Fa" style="white-space: nowrap;">struct TYPE *elm</var>);</p>
+<p class="Pp"><var class="Ft">struct TYPE *</var>
+ <br/>
+ <code class="Fn">ARB_NFIND</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">ARB_HEAD *head</var>,
+ <var class="Fa" style="white-space: nowrap;">struct TYPE *elm</var>);</p>
+<p class="Pp"><var class="Ft">struct TYPE *</var>
+ <br/>
+ <code class="Fn">ARB_LEFT</code>(<var class="Fa" style="white-space: nowrap;">struct
+ TYPE *elm</var>, <var class="Fa" style="white-space: nowrap;">ARB_ENTRY
+ NAME</var>);</p>
+<p class="Pp"><var class="Ft">int&lt;8|16|32&gt;_t</var>
+ <br/>
+ <code class="Fn">ARB_LEFTIDX</code>(<var class="Fa" style="white-space: nowrap;">struct
+ TYPE *elm</var>, <var class="Fa" style="white-space: nowrap;">ARB_ENTRY
+ NAME</var>);</p>
+<p class="Pp"><var class="Ft">struct TYPE *</var>
+ <br/>
+ <code class="Fn">ARB_RIGHT</code>(<var class="Fa" style="white-space: nowrap;">struct
+ TYPE *elm</var>, <var class="Fa" style="white-space: nowrap;">ARB_ENTRY
+ NAME</var>);</p>
+<p class="Pp"><var class="Ft">int&lt;8|16|32&gt;_t</var>
+ <br/>
+ <code class="Fn">ARB_RIGHTIDX</code>(<var class="Fa" style="white-space: nowrap;">struct
+ TYPE *elm</var>, <var class="Fa" style="white-space: nowrap;">ARB_ENTRY
+ NAME</var>);</p>
+<p class="Pp"><var class="Ft">struct TYPE *</var>
+ <br/>
+ <code class="Fn">ARB_PARENT</code>(<var class="Fa" style="white-space: nowrap;">struct
+ TYPE *elm</var>, <var class="Fa" style="white-space: nowrap;">ARB_ENTRY
+ NAME</var>);</p>
+<p class="Pp"><var class="Ft">int&lt;8|16|32&gt;_t</var>
+ <br/>
+ <code class="Fn">ARB_PARENTIDX</code>(<var class="Fa" style="white-space: nowrap;">struct
+ TYPE *elm</var>, <var class="Fa" style="white-space: nowrap;">ARB_ENTRY
+ NAME</var>);</p>
+<p class="Pp"><var class="Ft">struct TYPE *</var>
+ <br/>
+ <code class="Fn">ARB_GETFREE</code>(<var class="Fa" style="white-space: nowrap;">ARB_HEAD
+ *head</var>, <var class="Fa" style="white-space: nowrap;">FIELD</var>);</p>
+<p class="Pp"><var class="Ft">int&lt;8|16|32&gt;_t</var>
+ <br/>
+ <code class="Fn">ARB_FREEIDX</code>(<var class="Fa" style="white-space: nowrap;">ARB_HEAD
+ *head</var>);</p>
+<p class="Pp"><code class="Fn">ARB_FOREACH</code>(<var class="Fa" style="white-space: nowrap;">VARNAME</var>,
+ <var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">ARB_HEAD *head</var>);</p>
+<p class="Pp"><code class="Fn">ARB_FOREACH_FROM</code>(<var class="Fa" style="white-space: nowrap;">VARNAME</var>,
+ <var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">POS_VARNAME</var>);</p>
+<p class="Pp"><code class="Fn">ARB_FOREACH_SAFE</code>(<var class="Fa" style="white-space: nowrap;">VARNAME</var>,
+ <var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">ARB_HEAD *head</var>,
+ <var class="Fa" style="white-space: nowrap;">TEMP_VARNAME</var>);</p>
+<p class="Pp"><code class="Fn">ARB_FOREACH_REVERSE</code>(<var class="Fa" style="white-space: nowrap;">VARNAME</var>,
+ <var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">ARB_HEAD *head</var>);</p>
+<p class="Pp"><code class="Fn">ARB_FOREACH_REVERSE_FROM</code>(<var class="Fa" style="white-space: nowrap;">VARNAME</var>,
+ <var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">POS_VARNAME</var>);</p>
+<p class="Pp"><code class="Fn">ARB_FOREACH_REVERSE_SAFE</code>(<var class="Fa" style="white-space: nowrap;">VARNAME</var>,
+ <var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">ARB_HEAD *head</var>,
+ <var class="Fa" style="white-space: nowrap;">TEMP_VARNAME</var>);</p>
+<p class="Pp"><var class="Ft">void</var>
+ <br/>
+ <code class="Fn">ARB_INIT</code>(<var class="Fa" style="white-space: nowrap;">struct
+ TYPE *elm</var>, <var class="Fa" style="white-space: nowrap;">FIELD</var>,
+ <var class="Fa" style="white-space: nowrap;">ARB_HEAD *head</var>,
+ <var class="Fa" style="white-space: nowrap;">int&lt;8|16|32&gt;_t
+ maxnodes</var>);</p>
+<p class="Pp"><var class="Ft">struct TYPE *</var>
+ <br/>
+ <code class="Fn">ARB_INSERT</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">ARB_HEAD *head</var>,
+ <var class="Fa" style="white-space: nowrap;">struct TYPE *elm</var>);</p>
+<p class="Pp"><var class="Ft">struct TYPE *</var>
+ <br/>
+ <code class="Fn">ARB_REMOVE</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">ARB_HEAD *head</var>,
+ <var class="Fa" style="white-space: nowrap;">struct TYPE *elm</var>);</p>
+<p class="Pp"><var class="Ft">struct TYPE *</var>
+ <br/>
+ <code class="Fn">ARB_REINSERT</code>(<var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">ARB_HEAD *head</var>,
+ <var class="Fa" style="white-space: nowrap;">struct TYPE *elm</var>);</p>
+<p class="Pp"><var class="Ft">void</var>
+ <br/>
+ <code class="Fn">ARB_RESET_TREE</code>(<var class="Fa" style="white-space: nowrap;">ARB_HEAD
+ *head</var>, <var class="Fa" style="white-space: nowrap;">NAME</var>,
+ <var class="Fa" style="white-space: nowrap;">int&lt;8|16|32&gt;_t
+ maxnodes</var>);</p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
+<p class="Pp">These macros define data structures for and array-based red-black
+ trees. They use a single, continuous chunk of memory, and are useful e.g.,
+ when the tree needs to be transferred between userspace and kernel.</p>
+<p class="Pp" id="ARB_HEAD">In the macro definitions, <var class="Fa">TYPE</var>
+ is the name tag of a user defined structure that must contain a field of
+ type <var class="Vt">ARB_ENTRY</var>, named <var class="Fa">ENTRYNAME</var>.
+ The argument <var class="Fa">HEADNAME</var> is the name tag of a user
+ defined structure that must be declared using the
+ <a class="permalink" href="#ARB_HEAD"><code class="Fn">ARB_HEAD</code></a>()
+ macro. The argument <var class="Fa">NAME</var> has to be a unique name
+ prefix for every tree that is defined.</p>
+<p class="Pp" id="ARB_PROTOTYPE">The function prototypes are declared with
+ <a class="permalink" href="#ARB_PROTOTYPE"><code class="Fn">ARB_PROTOTYPE</code></a>(),
+ or
+ <a class="permalink" href="#ARB_PROTOTYPE_STATIC"><code class="Fn" id="ARB_PROTOTYPE_STATIC">ARB_PROTOTYPE_STATIC</code></a>().
+ The function bodies are generated with
+ <code class="Fn">ARB_GENERATE</code>(), or
+ <code class="Fn">ARB_GENERATE_STATIC</code>(). See the examples below for
+ further explanation of how these macros are used.</p>
+<p class="Pp">A red-black tree is a binary search tree with the node color as an
+ extra attribute. It fulfills a set of conditions:</p>
+<ol class="Bl-enum Bd-indent">
+ <li>Every search path from the root to a leaf consists of the same number of
+ black nodes.</li>
+ <li>Each red node (except for the root) has a black parent.</li>
+ <li>Each leaf node is black.</li>
+</ol>
+<p class="Pp" id="O">Every operation on a red-black tree is bounded as
+ <a class="permalink" href="#O"><code class="Fn">O</code></a>(<var class="Fa">lg
+ n</var>). The maximum height of a red-black tree is
+ <a class="permalink" href="#2lg"><code class="Fn" id="2lg">2lg</code></a>(<var class="Fa">n
+ + 1</var>).</p>
+<p class="Pp" id="ARB_*"><a class="permalink" href="#ARB_*"><code class="Fn">ARB_*</code></a>()
+ trees require entries to be allocated as an array, and uses array indices to
+ link entries together. The maximum number of <code class="Fn">ARB_*</code>()
+ tree entries is therefore constrained by the minimum of array size and
+ choice of signed integer data type used to store array indices. Use
+ <a class="permalink" href="#ARB_ALLOCSIZE"><code class="Fn" id="ARB_ALLOCSIZE">ARB_ALLOCSIZE</code></a>()
+ to compute the size of memory chunk to allocate.</p>
+<p class="Pp" id="ARB_HEAD~2">A red-black tree is headed by a structure defined
+ by the
+ <a class="permalink" href="#ARB_HEAD~2"><code class="Fn">ARB_HEAD</code></a>()
+ macro. A structure is declared with either of the following:</p>
+<div class="Bd Pp
+ Bd-indent"><a class="permalink" href="#ARB_8_16_32__HEAD"><code class="Fn" id="ARB_8_16_32__HEAD">ARB&lt;8|16|32&gt;_HEAD</code></a>(<var class="Fa">HEADNAME</var>,
+ <var class="Fa">TYPE</var>) <var class="Va">head</var>;</div>
+<p class="Pp">where <var class="Fa">HEADNAME</var> is the name of the structure
+ to be defined, and struct <var class="Fa">TYPE</var> is the type of the
+ elements to be inserted into the tree.</p>
+<p class="Pp" id="ARB_HEAD~3">The
+ <a class="permalink" href="#ARB_HEAD~3"><code class="Fn">ARB_HEAD</code></a>()
+ variant includes a suffix denoting the signed integer data type size (in
+ bits) used to store array indices. For example,
+ <a class="permalink" href="#ARB_HEAD8"><code class="Fn" id="ARB_HEAD8">ARB_HEAD8</code></a>()
+ creates a red-black tree head structure with 8-bit signed array indices
+ capable of indexing up to 128 entries.</p>
+<p class="Pp" id="ARB_ENTRY">The
+ <a class="permalink" href="#ARB_ENTRY"><code class="Fn">ARB_ENTRY</code></a>()
+ macro declares a structure that allows elements to be connected in the tree.
+ Similarly to the
+ <a class="permalink" href="#ARB_8_16_32__HEAD~2"><code class="Fn" id="ARB_8_16_32__HEAD~2">ARB&lt;8|16|32&gt;_HEAD</code></a>()
+ macro, the <code class="Fn">ARB_ENTRY</code>() variant includes a suffix
+ denoting the signed integer data type size (in bits) used to store array
+ indices. Entries should use the same number of bits as the tree head
+ structure they will be linked into.</p>
+<p class="Pp" id="ARB_PROTOTYPE~2">In order to use the functions that manipulate
+ the tree structure, their prototypes need to be declared with the
+ <a class="permalink" href="#ARB_PROTOTYPE~2"><code class="Fn">ARB_PROTOTYPE</code></a>()
+ or
+ <a class="permalink" href="#ARB_PROTOTYPE_STATIC~2"><code class="Fn" id="ARB_PROTOTYPE_STATIC~2">ARB_PROTOTYPE_STATIC</code></a>()
+ macro, where <var class="Fa">NAME</var> is a unique identifier for this
+ particular tree. The <var class="Fa">TYPE</var> argument is the type of the
+ structure that is being managed by the tree. The <var class="Fa">FIELD</var>
+ argument is the name of the element defined by
+ <code class="Fn">ARB_ENTRY</code>(). Individual prototypes can be declared
+ with
+ <a class="permalink" href="#ARB_PROTOTYPE_INSERT"><code class="Fn" id="ARB_PROTOTYPE_INSERT">ARB_PROTOTYPE_INSERT</code></a>(),
+ <a class="permalink" href="#ARB_PROTOTYPE_INSERT_COLOR"><code class="Fn" id="ARB_PROTOTYPE_INSERT_COLOR">ARB_PROTOTYPE_INSERT_COLOR</code></a>(),
+ <a class="permalink" href="#ARB_PROTOTYPE_REMOVE"><code class="Fn" id="ARB_PROTOTYPE_REMOVE">ARB_PROTOTYPE_REMOVE</code></a>(),
+ <a class="permalink" href="#ARB_PROTOTYPE_REMOVE_COLOR"><code class="Fn" id="ARB_PROTOTYPE_REMOVE_COLOR">ARB_PROTOTYPE_REMOVE_COLOR</code></a>(),
+ <a class="permalink" href="#ARB_PROTOTYPE_FIND"><code class="Fn" id="ARB_PROTOTYPE_FIND">ARB_PROTOTYPE_FIND</code></a>(),
+ <a class="permalink" href="#ARB_PROTOTYPE_NFIND"><code class="Fn" id="ARB_PROTOTYPE_NFIND">ARB_PROTOTYPE_NFIND</code></a>(),
+ <a class="permalink" href="#ARB_PROTOTYPE_NEXT"><code class="Fn" id="ARB_PROTOTYPE_NEXT">ARB_PROTOTYPE_NEXT</code></a>(),
+ <a class="permalink" href="#ARB_PROTOTYPE_PREV"><code class="Fn" id="ARB_PROTOTYPE_PREV">ARB_PROTOTYPE_PREV</code></a>(),
+ <a class="permalink" href="#ARB_PROTOTYPE_MINMAX"><code class="Fn" id="ARB_PROTOTYPE_MINMAX">ARB_PROTOTYPE_MINMAX</code></a>(),
+ and
+ <a class="permalink" href="#ARB_PROTOTYPE_REINSERT"><code class="Fn" id="ARB_PROTOTYPE_REINSERT">ARB_PROTOTYPE_REINSERT</code></a>()
+ in case not all functions are required. The individual prototype macros
+ expect <var class="Fa">NAME</var>, <var class="Fa">TYPE</var>, and
+ <var class="Fa">ATTR</var> arguments. The <var class="Fa">ATTR</var>
+ argument must be empty for global functions or <var class="Fa">static</var>
+ for static functions.</p>
+<p class="Pp" id="ARB_GENERATE">The function bodies are generated with the
+ <a class="permalink" href="#ARB_GENERATE"><code class="Fn">ARB_GENERATE</code></a>()
+ or
+ <a class="permalink" href="#ARB_GENERATE_STATIC"><code class="Fn" id="ARB_GENERATE_STATIC">ARB_GENERATE_STATIC</code></a>()
+ macro. These macros take the same arguments as the
+ <code class="Fn">ARB_PROTOTYPE</code>() and
+ <code class="Fn">ARB_PROTOTYPE_STATIC</code>() macros, but should be used
+ only once. As an alternative individual function bodies are generated with
+ the
+ <a class="permalink" href="#ARB_GENERATE_INSERT"><code class="Fn" id="ARB_GENERATE_INSERT">ARB_GENERATE_INSERT</code></a>(),
+ <a class="permalink" href="#ARB_GENERATE_INSERT_COLOR"><code class="Fn" id="ARB_GENERATE_INSERT_COLOR">ARB_GENERATE_INSERT_COLOR</code></a>(),
+ <a class="permalink" href="#ARB_GENERATE_REMOVE"><code class="Fn" id="ARB_GENERATE_REMOVE">ARB_GENERATE_REMOVE</code></a>(),
+ <a class="permalink" href="#ARB_GENERATE_REMOVE_COLOR"><code class="Fn" id="ARB_GENERATE_REMOVE_COLOR">ARB_GENERATE_REMOVE_COLOR</code></a>(),
+ <a class="permalink" href="#ARB_GENERATE_FIND"><code class="Fn" id="ARB_GENERATE_FIND">ARB_GENERATE_FIND</code></a>(),
+ <a class="permalink" href="#ARB_GENERATE_NFIND"><code class="Fn" id="ARB_GENERATE_NFIND">ARB_GENERATE_NFIND</code></a>(),
+ <a class="permalink" href="#ARB_GENERATE_NEXT"><code class="Fn" id="ARB_GENERATE_NEXT">ARB_GENERATE_NEXT</code></a>(),
+ <a class="permalink" href="#ARB_GENERATE_PREV"><code class="Fn" id="ARB_GENERATE_PREV">ARB_GENERATE_PREV</code></a>(),
+ <a class="permalink" href="#ARB_GENERATE_MINMAX"><code class="Fn" id="ARB_GENERATE_MINMAX">ARB_GENERATE_MINMAX</code></a>(),
+ and
+ <a class="permalink" href="#ARB_GENERATE_REINSERT"><code class="Fn" id="ARB_GENERATE_REINSERT">ARB_GENERATE_REINSERT</code></a>()
+ macros.</p>
+<p class="Pp">Finally, the <var class="Fa">CMP</var> argument is the name of a
+ function used to compare tree nodes with each other. The function takes two
+ arguments of type <var class="Vt">struct TYPE *</var>. If the first argument
+ is smaller than the second, the function returns a value smaller than zero.
+ If they are equal, the function returns zero. Otherwise, it should return a
+ value greater than zero. The compare function defines the order of the tree
+ elements.</p>
+<p class="Pp" id="ARB_INIT">The
+ <a class="permalink" href="#ARB_INIT"><code class="Fn">ARB_INIT</code></a>()
+ macro initializes the tree referenced by <var class="Fa">head</var>, with
+ the array length of <var class="Fa">maxnodes</var>.</p>
+<p class="Pp" id="ARB_INITIALIZER">The red-black tree can also be initialized
+ statically by using the
+ <a class="permalink" href="#ARB_INITIALIZER"><code class="Fn">ARB_INITIALIZER</code></a>()
+ macro:</p>
+<div class="Bd Pp
+ Bd-indent"><a class="permalink" href="#ARB_8_16_32__HEAD~3"><code class="Fn" id="ARB_8_16_32__HEAD~3">ARB&lt;8|16|32&gt;_HEAD</code></a>(<var class="Fa">HEADNAME</var>,
+ <var class="Fa">TYPE</var>) <var class="Va">head</var> =
+ <code class="Fn">ARB_INITIALIZER</code>(<var class="Fa">&amp;head</var>,
+ <var class="Fa">maxnodes</var>);</div>
+<p class="Pp" id="ARB_INSERT">The
+ <a class="permalink" href="#ARB_INSERT"><code class="Fn">ARB_INSERT</code></a>()
+ macro inserts the new element <var class="Fa">elm</var> into the tree.</p>
+<p class="Pp" id="ARB_REMOVE">The
+ <a class="permalink" href="#ARB_REMOVE"><code class="Fn">ARB_REMOVE</code></a>()
+ macro removes the element <var class="Fa">elm</var> from the tree pointed by
+ <var class="Fa">head</var>.</p>
+<p class="Pp" id="ARB_FIND">The
+ <a class="permalink" href="#ARB_FIND"><code class="Fn">ARB_FIND</code></a>()
+ and
+ <a class="permalink" href="#ARB_NFIND"><code class="Fn" id="ARB_NFIND">ARB_NFIND</code></a>()
+ macros can be used to find a particular element in the tree.</p>
+<div class="Bd Pp Bd-indent Li">
+<pre>struct TYPE find, *res;
+find.key = 30;
+res = ARB_FIND(NAME, head, &amp;find);</pre>
+</div>
+<p class="Pp" id="ARB_ROOT">The
+ <a class="permalink" href="#ARB_ROOT"><code class="Fn">ARB_ROOT</code></a>(),
+ <a class="permalink" href="#ARB_MIN"><code class="Fn" id="ARB_MIN">ARB_MIN</code></a>(),
+ <a class="permalink" href="#ARB_MAX"><code class="Fn" id="ARB_MAX">ARB_MAX</code></a>(),
+ <a class="permalink" href="#ARB_NEXT"><code class="Fn" id="ARB_NEXT">ARB_NEXT</code></a>(),
+ and
+ <a class="permalink" href="#ARB_PREV"><code class="Fn" id="ARB_PREV">ARB_PREV</code></a>()
+ macros can be used to traverse the tree:</p>
+<p class="Pp"></p>
+<div class="Bd Bd-indent"><code class="Li">for (np = ARB_MIN(NAME, &amp;head);
+ np != NULL; np = ARB_NEXT(NAME, &amp;head, np))</code></div>
+<p class="Pp" id="ARB_FOREACH">Or, for simplicity, one can use the
+ <a class="permalink" href="#ARB_FOREACH"><code class="Fn">ARB_FOREACH</code></a>()
+ or
+ <a class="permalink" href="#ARB_FOREACH_REVERSE"><code class="Fn" id="ARB_FOREACH_REVERSE">ARB_FOREACH_REVERSE</code></a>()
+ macro:</p>
+<div class="Bd Pp
+ Bd-indent"><code class="Fn">ARB_FOREACH</code>(<var class="Fa">np</var>,
+ <var class="Fa">NAME</var>, <var class="Fa">head</var>)</div>
+<p class="Pp" id="ARB_FOREACH_SAFE">The macros
+ <a class="permalink" href="#ARB_FOREACH_SAFE"><code class="Fn">ARB_FOREACH_SAFE</code></a>()
+ and
+ <a class="permalink" href="#ARB_FOREACH_REVERSE_SAFE"><code class="Fn" id="ARB_FOREACH_REVERSE_SAFE">ARB_FOREACH_REVERSE_SAFE</code></a>()
+ traverse the tree referenced by head in a forward or reverse direction
+ respectively, assigning each element in turn to np. However, unlike their
+ unsafe counterparts, they permit both the removal of np as well as freeing
+ it from within the loop safely without interfering with the traversal.</p>
+<p class="Pp" id="ARB_FOREACH_FROM">Both
+ <a class="permalink" href="#ARB_FOREACH_FROM"><code class="Fn">ARB_FOREACH_FROM</code></a>()
+ and
+ <a class="permalink" href="#ARB_FOREACH_REVERSE_FROM"><code class="Fn" id="ARB_FOREACH_REVERSE_FROM">ARB_FOREACH_REVERSE_FROM</code></a>()
+ may be used to continue an interrupted traversal in a forward or reverse
+ direction respectively. The head pointer is not required. The pointer to the
+ node from where to resume the traversal should be passed as their last
+ argument, and will be overwritten to provide safe traversal.</p>
+<p class="Pp" id="ARB_EMPTY">The
+ <a class="permalink" href="#ARB_EMPTY"><code class="Fn">ARB_EMPTY</code></a>()
+ macro should be used to check whether a red-black tree is empty.</p>
+<p class="Pp" id="ARB_FULL">Given that ARB trees have an intrinsic upper bound
+ on the number of entries, some ARB-specific additional macros are defined.
+ The
+ <a class="permalink" href="#ARB_FULL"><code class="Fn">ARB_FULL</code></a>()
+ macro returns a boolean indicating whether the current number of tree
+ entries equals the tree's maximum. The
+ <a class="permalink" href="#ARB_CURNODES"><code class="Fn" id="ARB_CURNODES">ARB_CURNODES</code></a>()
+ and
+ <a class="permalink" href="#ARB_MAXNODES"><code class="Fn" id="ARB_MAXNODES">ARB_MAXNODES</code></a>()
+ macros return the current and maximum number of entries respectively. The
+ <a class="permalink" href="#ARB_GETFREE"><code class="Fn" id="ARB_GETFREE">ARB_GETFREE</code></a>()
+ macro returns a pointer to the next free entry in the array of entries,
+ ready to be linked into the tree. The <code class="Fn">ARB_INSERT</code>()
+ returns <code class="Dv">NULL</code> if the element was inserted in the tree
+ successfully, otherwise they return a pointer to the element with the
+ colliding key.</p>
+<p class="Pp" id="ARB_REMOVE~2">Accordingly,
+ <a class="permalink" href="#ARB_REMOVE~2"><code class="Fn">ARB_REMOVE</code></a>()
+ returns the pointer to the removed element otherwise they return
+ <code class="Dv">NULL</code> to indicate an error.</p>
+<p class="Pp" id="ARB_REINSERT">The
+ <a class="permalink" href="#ARB_REINSERT"><code class="Fn">ARB_REINSERT</code></a>()
+ macro updates the position of the element <var class="Fa">elm</var> in the
+ tree. This must be called if a member of a <code class="Nm">tree</code> is
+ modified in a way that affects comparison, such as by modifying a node's
+ key. This is a lower overhead alternative to removing the element and
+ reinserting it again.</p>
+<p class="Pp" id="ARB_RESET_TREE">The
+ <a class="permalink" href="#ARB_RESET_TREE"><code class="Fn">ARB_RESET_TREE</code></a>()
+ macro discards the tree topology. It does not modify embedded object values
+ or the free list.</p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
+ ALSO</a></h1>
+<p class="Pp"><a class="Xr">queue(3)</a>, <a class="Xr">tree(3)</a></p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
+<p class="Pp">The <code class="Nm">ARB</code> macros first appeared in
+ <span class="Ux">FreeBSD 13.0</span>.</p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
+<p class="Pp">The <code class="Nm">ARB</code> macros were implemented by
+ <span class="An">Lawrence Stewart</span>
+ &lt;<a class="Mt" href="mailto:lstewart@FreeBSD.org">lstewart@FreeBSD.org</a>&gt;,
+ based on <a class="Xr">tree(3)</a> macros written by
+ <br/>
+ <span class="An">Niels Provos</span>.</p>
+</section>
+</div>
+<table class="foot">
+ <tr>
+ <td class="foot-date">October 14, 2019</td>
+ <td class="foot-os">FreeBSD 15.0</td>
+ </tr>
+</table>