This gets around the documented issue from java 9 and later where simply
using -source and -target might result in newer APIs still getting used
anyway. This version will ensure the compiled classes work on the
intended version.
This also fixes a warning that javac printed.
All notable changes to this project will be documented in this file. This change log follows the conventions of [keepachangelog.com](http://keepachangelog.com/).
## [Unreleased]
### Added
- New `coffi.mem/defstruct` macro to allow the definition of struct types with more performant serdes
- Support for named union members in c-layout (thanks to @jjttjj)
## [1.0.486] - 2024-10-04
### Fixed
- Bug where one too many indirections is used when serializing/deserializing pointer types
@ -149,6 +154,7 @@ All notable changes to this project will be documented in this file. This change
- Support for serializing and deserializing arbitrary Clojure functions
- Support for serializing and deserializing arbitrary Clojure data structures
@ -151,6 +152,7 @@ These features are planned for future releases.
- Improve error messages from defcfn macro
- Mapped memory
- Helper macros for custom serde implementations for composite data types (this is in progress [for structs](https://github.com/IGJoshua/coffi/issues/12)!)
- Support for GraalVM Native Image (once their support for FFM becomes mature)
<p>Unions in coffi are rather limited. They can be serialized, but not deserialized without external information.</p>
<pre><codeclass="language-clojure">[::mem/union
@ -15,7 +16,7 @@
(float? %) ::mem/float
(double? %) ::mem/double)]
</code></pre>
<p>This is a minimal union in coffi. If the <code>:dispatch</code> keyword argument is not passed, then the union cannot be serialized, as coffi would not know which type to serialize the values as. In the example with a tagged union, a dispatch function was not provided because the type was only used for the native layout.</p>
<p>This is a minimal union in coffi. If the <code>:dispatch</code> keyword argument is not passed, then the union cannot be serialized, as coffi would not know which type to serialize the values as. In <ahref="04-Custom-Types.md#tagged-union">the example with a tagged union</a>, a dispatch function was not provided because the type was only used for the native layout.</p>
<p>In addition to a dispatch function, when serializing a union an extract function may also be provided. In the case of the value in the tagged union from before, it could be represented for serialization purposes like so:</p>
</div></div><divclass="public anchor"id="var-cfn"><h3>cfn</h3><divclass="usage"><code>(cfn symbol args ret)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a Clojure function to call the native function referenced by <code>symbol</code>.</p>
<p>The function returned will serialize any passed arguments into the <code>args</code> types, and deserialize the return to the <code>ret</code> type.</p>
<p>If your <code>args</code> and <code>ret</code> are constants, then it is more efficient to call <ahref="coffi.ffi.html#var-make-downcall">make-downcall</a> followed by <ahref="coffi.ffi.html#var-make-serde-wrapper">make-serde-wrapper</a> because the latter has an inline definition which will result in less overhead from serdes.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/ffi.clj#L438">view source</a></div></div><divclass="public anchor"id="var-const"><h3>const</h3><divclass="usage"><code>(const symbol-or-addr type)</code></div><divclass="doc"><divclass="markdown"><p>Gets the value of a constant stored in <code>symbol-or-addr</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/ffi.clj#L606">view source</a></div></div><divclass="public anchor"id="var-defcfn"><h3>defcfn</h3><h4class="type">macro</h4><divclass="usage"><code>(defcfn name docstring? attr-map? symbol arg-types ret-type)</code><code>(defcfn name docstring? attr-map? symbol arg-types ret-type native-fn & fn-tail)</code></div><divclass="doc"><divclass="markdown"><p>Defines a Clojure function which maps to a native function.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/ffi.clj#L438">view source</a></div></div><divclass="public anchor"id="var-const"><h3>const</h3><divclass="usage"><code>(const symbol-or-addr type)</code></div><divclass="doc"><divclass="markdown"><p>Gets the value of a constant stored in <code>symbol-or-addr</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/ffi.clj#L606">view source</a></div></div><divclass="public anchor"id="var-defcfn"><h3>defcfn</h3><h4class="type">macro</h4><divclass="usage"><code>(defcfn name docstring? attr-map? symbol arg-types ret-type)</code><code>(defcfn name docstring? attr-map? symbol arg-types ret-type native-fn & fn-tail)</code></div><divclass="doc"><divclass="markdown"><p>Defines a Clojure function which maps to a native function.</p>
<p><code>name</code> is the symbol naming the resulting var. <code>symbol</code> is a symbol or string naming the library symbol to link against. <code>arg-types</code> is a vector of qualified keywords representing the argument types. <code>ret-type</code> is a single qualified keyword representing the return type. <code>fn-tail</code> is the body of the function (potentially with multiple arities) which wraps the native one. Inside the function, <code>native-fn</code> is bound to a function that will serialize its arguments, call the native function, and deserialize its return type. If any body is present, you must call this function in order to call the native code.</p>
<p>If no <code>fn-tail</code> is provided, then the resulting function will simply serialize the arguments according to <code>arg-types</code>, call the native function, and deserialize the return value.</p>
<p>The number of args in the <code>fn-tail</code> need not match the number of <code>arg-types</code> for the native function. It need only call the native wrapper function with the correct arguments.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/ffi.clj#L780">view source</a></div></div><divclass="public anchor"id="var-defconst"><h3>defconst</h3><h4class="type">macro</h4><divclass="usage"><code>(defconst symbol docstring? symbol-or-addr type)</code></div><divclass="doc"><divclass="markdown"><p>Defines a var named by <code>symbol</code> to be the value of the given <code>type</code> from <code>symbol-or-addr</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/ffi.clj#L617">view source</a></div></div><divclass="public anchor"id="var-defvar"><h3>defvar</h3><h4class="type">macro</h4><divclass="usage"><code>(defvar symbol docstring? symbol-or-addr type)</code></div><divclass="doc"><divclass="markdown"><p>Defines a var named by <code>symbol</code> to be a reference to the native memory from <code>symbol-or-addr</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/ffi.clj#L683">view source</a></div></div><divclass="public anchor"id="var-ensure-symbol"><h3>ensure-symbol</h3><divclass="usage"><code>(ensure-symbol symbol-or-addr)</code></div><divclass="doc"><divclass="markdown"><p>Returns the argument if it is a <ahref="null">MemorySegment</a>, otherwise calls <ahref="coffi.ffi.html#var-find-symbol">find-symbol</a> on it.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/ffi.clj#L198">view source</a></div></div><divclass="public anchor"id="var-find-symbol"><h3>find-symbol</h3><divclass="usage"><code>(find-symbol sym)</code></div><divclass="doc"><divclass="markdown"><p>Gets the <ahref="null">MemorySegment</a> of a symbol from the loaded libraries.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/ffi.clj#L38">view source</a></div></div><divclass="public anchor"id="var-freset.21"><h3>freset!</h3><divclass="usage"><code>(freset! static-var newval)</code></div><divclass="doc"><divclass="markdown"><p>Sets the value of <code>static-var</code> to <code>newval</code>, running it through <ahref="coffi.mem.html#var-serialize">serialize</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/ffi.clj#L647">view source</a></div></div><divclass="public anchor"id="var-fswap.21"><h3>fswap!</h3><divclass="usage"><code>(fswap! static-var f & args)</code></div><divclass="doc"><divclass="markdown"><p>Non-atomically runs the function <code>f</code> over the value stored in <code>static-var</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/ffi.clj#L780">view source</a></div></div><divclass="public anchor"id="var-defconst"><h3>defconst</h3><h4class="type">macro</h4><divclass="usage"><code>(defconst symbol docstring? symbol-or-addr type)</code></div><divclass="doc"><divclass="markdown"><p>Defines a var named by <code>symbol</code> to be the value of the given <code>type</code> from <code>symbol-or-addr</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/ffi.clj#L617">view source</a></div></div><divclass="public anchor"id="var-defvar"><h3>defvar</h3><h4class="type">macro</h4><divclass="usage"><code>(defvar symbol docstring? symbol-or-addr type)</code></div><divclass="doc"><divclass="markdown"><p>Defines a var named by <code>symbol</code> to be a reference to the native memory from <code>symbol-or-addr</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/ffi.clj#L683">view source</a></div></div><divclass="public anchor"id="var-ensure-symbol"><h3>ensure-symbol</h3><divclass="usage"><code>(ensure-symbol symbol-or-addr)</code></div><divclass="doc"><divclass="markdown"><p>Returns the argument if it is a <ahref="null">MemorySegment</a>, otherwise calls <ahref="coffi.ffi.html#var-find-symbol">find-symbol</a> on it.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/ffi.clj#L198">view source</a></div></div><divclass="public anchor"id="var-find-symbol"><h3>find-symbol</h3><divclass="usage"><code>(find-symbol sym)</code></div><divclass="doc"><divclass="markdown"><p>Gets the <ahref="null">MemorySegment</a> of a symbol from the loaded libraries.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/ffi.clj#L38">view source</a></div></div><divclass="public anchor"id="var-freset.21"><h3>freset!</h3><divclass="usage"><code>(freset! static-var newval)</code></div><divclass="doc"><divclass="markdown"><p>Sets the value of <code>static-var</code> to <code>newval</code>, running it through <ahref="coffi.mem.html#var-serialize">serialize</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/ffi.clj#L647">view source</a></div></div><divclass="public anchor"id="var-fswap.21"><h3>fswap!</h3><divclass="usage"><code>(fswap! static-var f & args)</code></div><divclass="doc"><divclass="markdown"><p>Non-atomically runs the function <code>f</code> over the value stored in <code>static-var</code>.</p>
<p>The value is deserialized before passing it to <code>f</code>, and serialized before putting the value into <code>static-var</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/ffi.clj#L656">view source</a></div></div><divclass="public anchor"id="var-load-library"><h3>load-library</h3><divclass="usage"><code>(load-library path)</code></div><divclass="doc"><divclass="markdown"><p>Loads the library at <code>path</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/ffi.clj#L33">view source</a></div></div><divclass="public anchor"id="var-load-system-library"><h3>load-system-library</h3><divclass="usage"><code>(load-system-library libname)</code></div><divclass="doc"><divclass="markdown"><p>Loads the library named <code>libname</code> from the system’s load path.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/ffi.clj#L28">view source</a></div></div><divclass="public anchor"id="var-make-downcall"><h3>make-downcall</h3><divclass="usage"><code>(make-downcall symbol-or-addr args ret)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a downcall function reference to <code>symbol-or-addr</code> with the given <code>args</code> and <code>ret</code> types.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/ffi.clj#L656">view source</a></div></div><divclass="public anchor"id="var-load-library"><h3>load-library</h3><divclass="usage"><code>(load-library path)</code></div><divclass="doc"><divclass="markdown"><p>Loads the library at <code>path</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/ffi.clj#L33">view source</a></div></div><divclass="public anchor"id="var-load-system-library"><h3>load-system-library</h3><divclass="usage"><code>(load-system-library libname)</code></div><divclass="doc"><divclass="markdown"><p>Loads the library named <code>libname</code> from the system’s load path.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/ffi.clj#L28">view source</a></div></div><divclass="public anchor"id="var-make-downcall"><h3>make-downcall</h3><divclass="usage"><code>(make-downcall symbol-or-addr args ret)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a downcall function reference to <code>symbol-or-addr</code> with the given <code>args</code> and <code>ret</code> types.</p>
<p>The function returned takes only arguments whose types match exactly the <ahref="coffi.mem.html#var-java-layout">java-layout</a> for that type, and returns an argument with exactly the <ahref="coffi.mem.html#var-java-layout">java-layout</a> of the <code>ret</code> type. This function will perform no serialization or deserialization of arguments or the return type.</p>
<p>If the <code>ret</code> type is non-primitive, then the returned function will take a first argument of a <ahref="null">SegmentAllocator</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/ffi.clj#L206">view source</a></div></div><divclass="public anchor"id="var-make-serde-varargs-wrapper"><h3>make-serde-varargs-wrapper</h3><divclass="usage"><code>(make-serde-varargs-wrapper varargs-factory required-args ret-type)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a wrapper function for the <code>varargs-factory</code> which produces functions that serialize the arguments and deserialize the return value.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/ffi.clj#L426">view source</a></div></div><divclass="public anchor"id="var-make-serde-wrapper"><h3>make-serde-wrapper</h3><divclass="usage"><code>(make-serde-wrapper downcall arg-types ret-type)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a wrapper function for the <code>downcall</code> which serializes the arguments and deserializes the return value.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/ffi.clj#L407">view source</a></div></div><divclass="public anchor"id="var-make-varargs-factory"><h3>make-varargs-factory</h3><divclass="usage"><code>(make-varargs-factory symbol required-args ret)</code></div><divclass="doc"><divclass="markdown"><p>Returns a function for constructing downcalls with additional types for arguments.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/ffi.clj#L206">view source</a></div></div><divclass="public anchor"id="var-make-serde-varargs-wrapper"><h3>make-serde-varargs-wrapper</h3><divclass="usage"><code>(make-serde-varargs-wrapper varargs-factory required-args ret-type)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a wrapper function for the <code>varargs-factory</code> which produces functions that serialize the arguments and deserialize the return value.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/ffi.clj#L426">view source</a></div></div><divclass="public anchor"id="var-make-serde-wrapper"><h3>make-serde-wrapper</h3><divclass="usage"><code>(make-serde-wrapper downcall arg-types ret-type)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a wrapper function for the <code>downcall</code> which serializes the arguments and deserializes the return value.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/ffi.clj#L407">view source</a></div></div><divclass="public anchor"id="var-make-varargs-factory"><h3>make-varargs-factory</h3><divclass="usage"><code>(make-varargs-factory symbol required-args ret)</code></div><divclass="doc"><divclass="markdown"><p>Returns a function for constructing downcalls with additional types for arguments.</p>
<p>The <code>required-args</code> are the types of the first arguments passed to the downcall handle, and the values passed to the returned function are only the varargs types.</p>
<p>The returned function is memoized, so that only one downcall function will be generated per combination of argument types.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/ffi.clj#L222">view source</a></div></div><divclass="public anchor"id="var-reify-libspec"><h3>reify-libspec</h3><divclass="usage"><code>(reify-libspec libspec)</code></div><divclass="doc"><divclass="markdown"><p>Loads all the symbols specified in the <code>libspec</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/ffi.clj#L222">view source</a></div></div><divclass="public anchor"id="var-reify-libspec"><h3>reify-libspec</h3><divclass="usage"><code>(reify-libspec libspec)</code></div><divclass="doc"><divclass="markdown"><p>Loads all the symbols specified in the <code>libspec</code>.</p>
<p>The value of each key of the passed map is transformed as by <ahref="coffi.ffi.html#var-reify-symbolspec">reify-symbolspec</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/ffi.clj#L742">view source</a></div></div><divclass="public anchor"id="var-reify-symbolspec"><h3>reify-symbolspec</h3><h4class="type">multimethod</h4><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>Takes a spec for a symbol reference and returns a live value for that type.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/ffi.clj#L701">view source</a></div></div><divclass="public anchor"id="var-static-variable"><h3>static-variable</h3><divclass="usage"><code>(static-variable symbol-or-addr type)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a reference to a mutable value stored in <code>symbol-or-addr</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/ffi.clj#L742">view source</a></div></div><divclass="public anchor"id="var-reify-symbolspec"><h3>reify-symbolspec</h3><h4class="type">multimethod</h4><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>Takes a spec for a symbol reference and returns a live value for that type.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/ffi.clj#L701">view source</a></div></div><divclass="public anchor"id="var-static-variable"><h3>static-variable</h3><divclass="usage"><code>(static-variable symbol-or-addr type)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a reference to a mutable value stored in <code>symbol-or-addr</code>.</p>
<p>The returned value can be dereferenced, and has metadata.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/ffi.clj#L672">view source</a></div></div><divclass="public anchor"id="var-static-variable-segment"><h3>static-variable-segment</h3><divclass="usage"><code>(static-variable-segment static-var)</code></div><divclass="doc"><divclass="markdown"><p>Gets the backing <ahref="null">MemorySegment</a> from <code>static-var</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/ffi.clj#L672">view source</a></div></div><divclass="public anchor"id="var-static-variable-segment"><h3>static-variable-segment</h3><divclass="usage"><code>(static-variable-segment static-var)</code></div><divclass="doc"><divclass="markdown"><p>Gets the backing <ahref="null">MemorySegment</a> from <code>static-var</code>.</p>
<p>This is primarily useful when you need to pass the static variable’s address to a native function which takes an <ahref="null">Addressable</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/ffi.clj#L664">view source</a></div></div><divclass="public anchor"id="var-vacfn-factory"><h3>vacfn-factory</h3><divclass="usage"><code>(vacfn-factory symbol required-args ret)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a varargs factory to call the native function referenced by <code>symbol</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/ffi.clj#L664">view source</a></div></div><divclass="public anchor"id="var-vacfn-factory"><h3>vacfn-factory</h3><divclass="usage"><code>(vacfn-factory symbol required-args ret)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a varargs factory to call the native function referenced by <code>symbol</code>.</p>
<p>The function returned takes any number of type arguments and returns a specialized Clojure function for calling the native function with those arguments.</p>
<html><head><metacharset="UTF-8"/><title>coffi.layout documentation</title><linkrel="stylesheet"type="text/css"href="css/default.css"/><linkrel="stylesheet"type="text/css"href="css/highlight.css"/><scripttype="text/javascript"src="js/highlight.min.js"></script><scripttype="text/javascript"src="js/jquery.min.js"></script><scripttype="text/javascript"src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><divid="header"><h2>Generated by <ahref="https://github.com/weavejester/codox">Codox</a></h2><h1><ahref="index.html"><spanclass="project-title"><spanclass="project-name">coffi</span><spanclass="project-version">v1.0.486</span></span></a></h1></div><divclass="sidebar primary"><h3class="no-link"><spanclass="inner">Project</span></h3><ulclass="index-link"><liclass="depth-1 "><ahref="index.html"><divclass="inner">Index</div></a></li></ul><h3class="no-link"><spanclass="inner">Topics</span></h3><ul><liclass="depth-1 "><ahref="01-Getting-Started.html"><divclass="inner"><span>Getting Started</span></div></a></li><liclass="depth-1 "><ahref="02-Memory-Management.html"><divclass="inner"><span>Memory Management</span></div></a></li><liclass="depth-1 "><ahref="03-Builtin-Types.html"><divclass="inner"><span>Built-in Types **WIP**</span></div></a></li><liclass="depth-1 "><ahref="04-Custom-Types.html"><divclass="inner"><span>Custom Types</span></div></a></li><liclass="depth-1 "><ahref="05-Low-Level-Wrappers.html"><divclass="inner"><span>Low-Level Wrappers</span></div></a></li><liclass="depth-1 "><ahref="50-Data-Model.html"><divclass="inner"><span>Data Model</span></div></a></li><liclass="depth-1 "><ahref="99-Benchmarks.html"><divclass="inner"><span>Benchmarks **OUTDATED**</span></div></a></li></ul><h3class="no-link"><spanclass="inner">Namespaces</span></h3><ul><liclass="depth-1"><divclass="no-link"><divclass="inner"><spanclass="tree"><spanclass="top"></span><spanclass="bottom"></span></span><span>coffi</span></div></div></li><liclass="depth-2 branch"><ahref="coffi.ffi.html"><divclass="inner"><spanclass="tree"><spanclass="top"></span><spanclass="bottom"></span></span><span>ffi</span></div></a></li><liclass="depth-2 branch current"><ahref="coffi.layout.html"><divclass="inner"><spanclass="tree"><spanclass="top"></span><spanclass="bottom"></span></span><span>layout</span></div></a></li><liclass="depth-2"><ahref="coffi.mem.html"><divclass="inner"><spanclass="tree"><spanclass="top"></span><spanclass="bottom"></span></span><span>mem</span></div></a></li></ul></div><divclass="sidebar secondary"><h3><ahref="#top"><spanclass="inner">Public Vars</span></a></h3><ul><liclass="depth-1"><ahref="coffi.layout.html#var-with-c-layout"><divclass="inner"><span>with-c-layout</span></div></a></li></ul></div><divclass="namespace-docs"id="content"><h1class="anchor"id="top">coffi.layout</h1><divclass="doc"><divclass="markdown"><p>Functions for adjusting the layout of structs.</p>
</div></div><divclass="public anchor"id="var-with-c-layout"><h3>with-c-layout</h3><divclass="usage"><code>(with-c-layout struct-spec)</code></div><divclass="doc"><divclass="markdown"><p>Forces a struct specification to C layout rules.</p>
<p>This will add padding fields between fields to match C alignment requirements.</p>
<p>If the native representation of the type is a primitive (whether or not other data beyond the primitive is associated with it, as e.g. a pointer), then <ahref="coffi.mem.html#var-primitive-type">primitive-type</a> must be overriden to return which primitive type it is serialized as, then <ahref="coffi.mem.html#var-serialize*">serialize*</a> and <ahref="coffi.mem.html#var-deserialize*">deserialize*</a> should be overriden.</p>
<p>If the native representation of the type is a composite type, like a union, struct, or array, then <ahref="coffi.mem.html#var-c-layout">c-layout</a> must be overriden to return the native layout of the type, and <ahref="coffi.mem.html#var-serialize-into">serialize-into</a> and <ahref="coffi.mem.html#var-deserialize-from">deserialize-from</a> should be overriden to allow marshaling values of the type into and out of memory segments.</p>
</div></div><divclass="public anchor"id="var-address-of"><h3>address-of</h3><divclass="usage"><code>(address-of addressable)</code></div><divclass="doc"><divclass="markdown"><p>Gets the address of a given segment as a number.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L106">view source</a></div></div><divclass="public anchor"id="var-address.3F"><h3>address?</h3><divclass="usage"><code>(address? addr)</code></div><divclass="doc"><divclass="markdown"><p>Checks if an object is a memory address.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L108">view source</a></div></div><divclass="public anchor"id="var-address.3F"><h3>address?</h3><divclass="usage"><code>(address? addr)</code></div><divclass="doc"><divclass="markdown"><p>Checks if an object is a memory address.</p>
<p><code>nil</code> is considered an address.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L124">view source</a></div></div><divclass="public anchor"id="var-align-of"><h3>align-of</h3><divclass="usage"><code>(align-of type)</code></div><divclass="doc"><divclass="markdown"><p>The alignment in bytes of the given <code>type</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L126">view source</a></div></div><divclass="public anchor"id="var-align-of"><h3>align-of</h3><divclass="usage"><code>(align-of type)</code></div><divclass="doc"><divclass="markdown"><p>The alignment in bytes of the given <code>type</code>.</p>
<p>If an <code>arena</code> is provided, the allocation will be reclaimed when it is closed.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L91">view source</a></div></div><divclass="public anchor"id="var-alloc-instance"><h3>alloc-instance</h3><divclass="usage"><code>(alloc-instance type)</code><code>(alloc-instance type arena)</code></div><divclass="doc"><divclass="markdown"><p>Allocates a memory segment for the given <code>type</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L818">view source</a></div></div><divclass="public anchor"id="var-alloc-with"><h3>alloc-with</h3><divclass="usage"><code>(alloc-with allocator size)</code><code>(alloc-with allocator size alignment)</code></div><divclass="doc"><divclass="markdown"><p>Allocates <code>size</code> bytes using the <code>allocator</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L99">view source</a></div></div><divclass="public anchor"id="var-arena-allocator"><h3>arena-allocator</h3><divclass="usage"><code>(arena-allocator arena)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a <ahref="null">SegmentAllocator</a> from the given <ahref="null">Arena</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L93">view source</a></div></div><divclass="public anchor"id="var-alloc-instance"><h3>alloc-instance</h3><divclass="usage"><code>(alloc-instance type)</code><code>(alloc-instance type arena)</code></div><divclass="doc"><divclass="markdown"><p>Allocates a memory segment for the given <code>type</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L820">view source</a></div></div><divclass="public anchor"id="var-alloc-with"><h3>alloc-with</h3><divclass="usage"><code>(alloc-with allocator size)</code><code>(alloc-with allocator size alignment)</code></div><divclass="doc"><divclass="markdown"><p>Allocates <code>size</code> bytes using the <code>allocator</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L101">view source</a></div></div><divclass="public anchor"id="var-arena-allocator"><h3>arena-allocator</h3><divclass="usage"><code>(arena-allocator arena)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a <ahref="null">SegmentAllocator</a> from the given <ahref="null">Arena</a>.</p>
<p>This is primarily used when working with unwrapped downcall functions. When a downcall function returns a non-primitive type, it must be provided with an allocator.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L80">view source</a></div></div><divclass="public anchor"id="var-as-segment"><h3>as-segment</h3><divclass="usage"><code>(as-segment address)</code><code>(as-segment address size)</code><code>(as-segment address size arena)</code><code>(as-segment address size arena cleanup)</code></div><divclass="doc"><divclass="markdown"><p>Dereferences an <code>address</code> into a memory segment associated with the <code>arena</code> (default global).</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L156">view source</a></div></div><divclass="public anchor"id="var-auto-arena"><h3>auto-arena</h3><divclass="usage"><code>(auto-arena)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a new memory arena that is managed by the garbage collector.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L82">view source</a></div></div><divclass="public anchor"id="var-as-segment"><h3>as-segment</h3><divclass="usage"><code>(as-segment address)</code><code>(as-segment address size)</code><code>(as-segment address size arena)</code><code>(as-segment address size arena cleanup)</code></div><divclass="doc"><divclass="markdown"><p>Dereferences an <code>address</code> into a memory segment associated with the <code>arena</code> (default global).</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L158">view source</a></div></div><divclass="public anchor"id="var-auto-arena"><h3>auto-arena</h3><divclass="usage"><code>(auto-arena)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a new memory arena that is managed by the garbage collector.</p>
<p>The arena may be shared across threads, and all resources created with it will be cleaned up at the same time, when all references have been collected.</p>
<p>This type of arena cannot be closed, and therefore should not be created in a <ahref="null">with-open</a> clause.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L187">view source</a></div></div><divclass="public anchor"id="var-byte-layout"><h3>byte-layout</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The <ahref="null">MemoryLayout</a> for a byte in <ahref="coffi.mem.html#var-native-endian">native-endian</a><ahref="null">ByteOrder</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L205">view source</a></div></div><divclass="public anchor"id="var-c-layout"><h3>c-layout</h3><h4class="type">multimethod</h4><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>Gets the layout object for a given <code>type</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L189">view source</a></div></div><divclass="public anchor"id="var-byte-layout"><h3>byte-layout</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The <ahref="null">MemoryLayout</a> for a byte in <ahref="coffi.mem.html#var-native-endian">native-endian</a><ahref="null">ByteOrder</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L207">view source</a></div></div><divclass="public anchor"id="var-c-layout"><h3>c-layout</h3><h4class="type">multimethod</h4><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>Gets the layout object for a given <code>type</code>.</p>
<p>If a type is primitive it will return the appropriate primitive layout (see <ahref="null">c-prim-layout</a>).</p>
<p>Otherwise, it should return a <ahref="null">GroupLayout</a> for the given type.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L729">view source</a></div></div><divclass="public anchor"id="var-char-layout"><h3>char-layout</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The <ahref="null">MemoryLayout</a> for a c-sized char in <ahref="coffi.mem.html#var-native-endian">native-endian</a><ahref="null">ByteOrder</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L221">view source</a></div></div><divclass="public anchor"id="var-clone-segment"><h3>clone-segment</h3><divclass="usage"><code>(clone-segment segment)</code><code>(clone-segment segment arena)</code></div><divclass="doc"><divclass="markdown"><p>Clones the content of <code>segment</code> into a new segment of the same size.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L174">view source</a></div></div><divclass="public anchor"id="var-confined-arena"><h3>confined-arena</h3><divclass="usage"><code>(confined-arena)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a new arena for use only in this thread.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L731">view source</a></div></div><divclass="public anchor"id="var-char-layout"><h3>char-layout</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The <ahref="null">MemoryLayout</a> for a c-sized char in <ahref="coffi.mem.html#var-native-endian">native-endian</a><ahref="null">ByteOrder</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L223">view source</a></div></div><divclass="public anchor"id="var-clone-segment"><h3>clone-segment</h3><divclass="usage"><code>(clone-segment segment)</code><code>(clone-segment segment arena)</code></div><divclass="doc"><divclass="markdown"><p>Clones the content of <code>segment</code> into a new segment of the same size.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L176">view source</a></div></div><divclass="public anchor"id="var-confined-arena"><h3>confined-arena</h3><divclass="usage"><code>(confined-arena)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a new arena for use only in this thread.</p>
<p>The memory allocated within this arena is cheap to allocate, like a native stack.</p>
<p>The memory allocated within this arena will be cleared once it is closed, so it is usually a good idea to create it in a <ahref="null">with-open</a> clause.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L40">view source</a></div></div><divclass="public anchor"id="var-copy-segment"><h3>copy-segment</h3><divclass="usage"><code>(copy-segment dest src)</code></div><divclass="doc"><divclass="markdown"><p>Copies the content to <code>dest</code> from <code>src</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L42">view source</a></div></div><divclass="public anchor"id="var-copy-segment"><h3>copy-segment</h3><divclass="usage"><code>(copy-segment dest src)</code></div><divclass="doc"><divclass="markdown"><p>Copies the content to <code>dest</code> from <code>src</code>.</p>
<p>Returns <code>dest</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L167">view source</a></div></div><divclass="public anchor"id="var-defalias"><h3>defalias</h3><h4class="type">macro</h4><divclass="usage"><code>(defalias new-type aliased-type)</code></div><divclass="doc"><divclass="markdown"><p>Defines a type alias from <code>new-type</code> to <code>aliased-type</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L169">view source</a></div></div><divclass="public anchor"id="var-defalias"><h3>defalias</h3><h4class="type">macro</h4><divclass="usage"><code>(defalias new-type aliased-type)</code></div><divclass="doc"><divclass="markdown"><p>Defines a type alias from <code>new-type</code> to <code>aliased-type</code>.</p>
<p>This creates needed serialization and deserialization implementations for the aliased type.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L1319">view source</a></div></div><divclass="public anchor"id="var-deserialize"><h3>deserialize</h3><divclass="usage"><code>(deserialize obj type)</code></div><divclass="doc"><divclass="markdown"><p>Deserializes an arbitrary type.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L1326">view source</a></div></div><divclass="public anchor"id="var-deserialize"><h3>deserialize</h3><divclass="usage"><code>(deserialize obj type)</code></div><divclass="doc"><divclass="markdown"><p>Deserializes an arbitrary type.</p>
<p>For types which have a primitive representation, this deserializes the primitive representation. For types which do not, this deserializes out of a segment.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L1092">view source</a></div></div><divclass="public anchor"id="var-deserialize*"><h3>deserialize*</h3><h4class="type">multimethod</h4><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>Deserializes a primitive object into a Clojure data structure.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L1094">view source</a></div></div><divclass="public anchor"id="var-deserialize*"><h3>deserialize*</h3><h4class="type">multimethod</h4><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>Deserializes a primitive object into a Clojure data structure.</p>
<p>This is intended for use with types that are returned as a primitive but which need additional processing before they can be returned.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L1033">view source</a></div></div><divclass="public anchor"id="var-deserialize-from"><h3>deserialize-from</h3><h4class="type">multimethod</h4><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>Deserializes the given segment into a Clojure data structure.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L1035">view source</a></div></div><divclass="public anchor"id="var-deserialize-from"><h3>deserialize-from</h3><h4class="type">multimethod</h4><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>Deserializes the given segment into a Clojure data structure.</p>
<p>For types that serialize to primitives, a default implementation will deserialize the primitive before calling <ahref="coffi.mem.html#var-deserialize*">deserialize*</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L970">view source</a></div></div><divclass="public anchor"id="var-double-alignment"><h3>double-alignment</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The alignment in bytes of a c-sized double.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L277">view source</a></div></div><divclass="public anchor"id="var-double-layout"><h3>double-layout</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The <ahref="null">MemoryLayout</a> for a c-sized double in <ahref="coffi.mem.html#var-native-endian">native-endian</a><ahref="null">ByteOrder</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L229">view source</a></div></div><divclass="public anchor"id="var-double-size"><h3>double-size</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The size in bytes of a c-sized double.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L253">view source</a></div></div><divclass="public anchor"id="var-float-alignment"><h3>float-alignment</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The alignment in bytes of a c-sized float.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L273">view source</a></div></div><divclass="public anchor"id="var-float-layout"><h3>float-layout</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The <ahref="null">MemoryLayout</a> for a c-sized float in <ahref="coffi.mem.html#var-native-endian">native-endian</a><ahref="null">ByteOrder</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L225">view source</a></div></div><divclass="public anchor"id="var-float-size"><h3>float-size</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The size in bytes of a c-sized float.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L249">view source</a></div></div><divclass="public anchor"id="var-global-arena"><h3>global-arena</h3><divclass="usage"><code>(global-arena)</code></div><divclass="doc"><divclass="markdown"><p>Constructs the global arena, which will never reclaim its resources.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L972">view source</a></div></div><divclass="public anchor"id="var-double-alignment"><h3>double-alignment</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The alignment in bytes of a c-sized double.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L279">view source</a></div></div><divclass="public anchor"id="var-double-layout"><h3>double-layout</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The <ahref="null">MemoryLayout</a> for a c-sized double in <ahref="coffi.mem.html#var-native-endian">native-endian</a><ahref="null">ByteOrder</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L231">view source</a></div></div><divclass="public anchor"id="var-double-size"><h3>double-size</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The size in bytes of a c-sized double.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L255">view source</a></div></div><divclass="public anchor"id="var-float-alignment"><h3>float-alignment</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The alignment in bytes of a c-sized float.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L275">view source</a></div></div><divclass="public anchor"id="var-float-layout"><h3>float-layout</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The <ahref="null">MemoryLayout</a> for a c-sized float in <ahref="coffi.mem.html#var-native-endian">native-endian</a><ahref="null">ByteOrder</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L227">view source</a></div></div><divclass="public anchor"id="var-float-size"><h3>float-size</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The size in bytes of a c-sized float.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L251">view source</a></div></div><divclass="public anchor"id="var-global-arena"><h3>global-arena</h3><divclass="usage"><code>(global-arena)</code></div><divclass="doc"><divclass="markdown"><p>Constructs the global arena, which will never reclaim its resources.</p>
<p>This arena may be shared across threads, but is intended mainly in cases where memory is allocated with <ahref="coffi.mem.html#var-alloc">alloc</a> but is either never freed or whose management is relinquished to a native library, such as when returned from a callback.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L70">view source</a></div></div><divclass="public anchor"id="var-int-alignment"><h3>int-alignment</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The alignment in bytes of a c-sized int.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L265">view source</a></div></div><divclass="public anchor"id="var-int-layout"><h3>int-layout</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The <ahref="null">MemoryLayout</a> for a c-sized int in <ahref="coffi.mem.html#var-native-endian">native-endian</a><ahref="null">ByteOrder</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L213">view source</a></div></div><divclass="public anchor"id="var-int-size"><h3>int-size</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The size in bytes of a c-sized int.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L241">view source</a></div></div><divclass="public anchor"id="var-java-layout"><h3>java-layout</h3><divclass="usage"><code>(java-layout type)</code></div><divclass="doc"><divclass="markdown"><p>Gets the Java class to an argument of this type for a method handle.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L72">view source</a></div></div><divclass="public anchor"id="var-int-alignment"><h3>int-alignment</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The alignment in bytes of a c-sized int.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L267">view source</a></div></div><divclass="public anchor"id="var-int-layout"><h3>int-layout</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The <ahref="null">MemoryLayout</a> for a c-sized int in <ahref="coffi.mem.html#var-native-endian">native-endian</a><ahref="null">ByteOrder</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L215">view source</a></div></div><divclass="public anchor"id="var-int-size"><h3>int-size</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The size in bytes of a c-sized int.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L243">view source</a></div></div><divclass="public anchor"id="var-java-layout"><h3>java-layout</h3><divclass="usage"><code>(java-layout type)</code></div><divclass="doc"><divclass="markdown"><p>Gets the Java class to an argument of this type for a method handle.</p>
<p>If a type serializes to a primitive it returns return a Java primitive type. Otherwise, it returns <ahref="null">MemorySegment</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L796">view source</a></div></div><divclass="public anchor"id="var-java-prim-layout"><h3>java-prim-layout</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>Map of primitive type names to the Java types for a method handle.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L798">view source</a></div></div><divclass="public anchor"id="var-java-prim-layout"><h3>java-prim-layout</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>Map of primitive type names to the Java types for a method handle.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L193">view source</a></div></div><divclass="public anchor"id="var-long-alignment"><h3>long-alignment</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The alignment in bytes of a c-sized long.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L269">view source</a></div></div><divclass="public anchor"id="var-long-layout"><h3>long-layout</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The <ahref="null">MemoryLayout</a> for a c-sized long in <ahref="coffi.mem.html#var-native-endian">native-endian</a><ahref="null">ByteOrder</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L217">view source</a></div></div><divclass="public anchor"id="var-long-size"><h3>long-size</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The size in bytes of a c-sized long.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L245">view source</a></div></div><divclass="public anchor"id="var-native-endian"><h3>native-endian</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The <ahref="null">ByteOrder</a> for the native endianness of the current hardware.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L195">view source</a></div></div><divclass="public anchor"id="var-long-alignment"><h3>long-alignment</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The alignment in bytes of a c-sized long.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L271">view source</a></div></div><divclass="public anchor"id="var-long-layout"><h3>long-layout</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The <ahref="null">MemoryLayout</a> for a c-sized long in <ahref="coffi.mem.html#var-native-endian">native-endian</a><ahref="null">ByteOrder</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L219">view source</a></div></div><divclass="public anchor"id="var-long-size"><h3>long-size</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The size in bytes of a c-sized long.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L247">view source</a></div></div><divclass="public anchor"id="var-native-endian"><h3>native-endian</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The <ahref="null">ByteOrder</a> for the native endianness of the current hardware.</p>
<p>While this object is safe to pass to functions which serialize to a pointer, it’s generally encouraged to simply pass <code>nil</code>. This value primarily exists to make it easier to write custom types with a primitive pointer representation.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L111">view source</a></div></div><divclass="public anchor"id="var-null.3F"><h3>null?</h3><divclass="usage"><code>(null? addr)</code></div><divclass="doc"><divclass="markdown"><p>Checks if a memory address is null.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L119">view source</a></div></div><divclass="public anchor"id="var-pointer-alignment"><h3>pointer-alignment</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The alignment in bytes of a c-sized pointer.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L281">view source</a></div></div><divclass="public anchor"id="var-pointer-layout"><h3>pointer-layout</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The <ahref="null">MemoryLayout</a> for a native pointer in <ahref="coffi.mem.html#var-native-endian">native-endian</a><ahref="null">ByteOrder</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L233">view source</a></div></div><divclass="public anchor"id="var-pointer-size"><h3>pointer-size</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The size in bytes of a c-sized pointer.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L257">view source</a></div></div><divclass="public anchor"id="var-primitive-type"><h3>primitive-type</h3><h4class="type">multimethod</h4><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>Gets the primitive type that is used to pass as an argument for the <code>type</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L113">view source</a></div></div><divclass="public anchor"id="var-null.3F"><h3>null?</h3><divclass="usage"><code>(null? addr)</code></div><divclass="doc"><divclass="markdown"><p>Checks if a memory address is null.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L121">view source</a></div></div><divclass="public anchor"id="var-pointer-alignment"><h3>pointer-alignment</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The alignment in bytes of a c-sized pointer.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L283">view source</a></div></div><divclass="public anchor"id="var-pointer-layout"><h3>pointer-layout</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The <ahref="null">MemoryLayout</a> for a native pointer in <ahref="coffi.mem.html#var-native-endian">native-endian</a><ahref="null">ByteOrder</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L235">view source</a></div></div><divclass="public anchor"id="var-pointer-size"><h3>pointer-size</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The size in bytes of a c-sized pointer.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L259">view source</a></div></div><divclass="public anchor"id="var-primitive-type"><h3>primitive-type</h3><h4class="type">multimethod</h4><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>Gets the primitive type that is used to pass as an argument for the <code>type</code>.</p>
<p>This is for objects which are passed to native functions as primitive types, but which need additional logic to be performed during serialization and deserialization.</p>
<p>Implementations of this method should take into account that type arguments may not always be evaluated before passing to this function.</p>
<p>Returns nil for any type which does not have a primitive representation.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L676">view source</a></div></div><divclass="public anchor"id="var-primitive-types"><h3>primitive-types</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>A set of all primitive types.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L666">view source</a></div></div><divclass="public anchor"id="var-primitive.3F"><h3>primitive?</h3><divclass="usage"><code>(primitive? type)</code></div><divclass="doc"><divclass="markdown"><p>A predicate to determine if a given type is primitive.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L671">view source</a></div></div><divclass="public anchor"id="var-read-address"><h3>read-address</h3><divclass="usage"><code>(read-address segment)</code><code>(read-address segment offset)</code></div><divclass="doc"><divclass="markdown"><p>Reads an address from the <code>segment</code>, at an optional <code>offset</code>, wrapped in a <ahref="null">MemorySegment</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L442">view source</a></div></div><divclass="public anchor"id="var-read-byte"><h3>read-byte</h3><divclass="usage"><code>(read-byte segment)</code><code>(read-byte segment offset)</code></div><divclass="doc"><divclass="markdown"><p>Reads a <ahref="null">byte</a> from the <code>segment</code>, at an optional <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L285">view source</a></div></div><divclass="public anchor"id="var-read-char"><h3>read-char</h3><divclass="usage"><code>(read-char segment)</code><code>(read-char segment offset)</code></div><divclass="doc"><divclass="markdown"><p>Reads a <ahref="null">char</a> from the <code>segment</code>, at an optional <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L376">view source</a></div></div><divclass="public anchor"id="var-read-double"><h3>read-double</h3><divclass="usage"><code>(read-double segment)</code><code>(read-double segment offset)</code><code>(read-double segment offset byte-order)</code></div><divclass="doc"><divclass="markdown"><p>Reads a <ahref="null">double</a> from the <code>segment</code>, at an optional <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L678">view source</a></div></div><divclass="public anchor"id="var-primitive-types"><h3>primitive-types</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>A set of all primitive types.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L668">view source</a></div></div><divclass="public anchor"id="var-primitive.3F"><h3>primitive?</h3><divclass="usage"><code>(primitive? type)</code></div><divclass="doc"><divclass="markdown"><p>A predicate to determine if a given type is primitive.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L673">view source</a></div></div><divclass="public anchor"id="var-read-address"><h3>read-address</h3><divclass="usage"><code>(read-address segment)</code><code>(read-address segment offset)</code></div><divclass="doc"><divclass="markdown"><p>Reads an address from the <code>segment</code>, at an optional <code>offset</code>, wrapped in a <ahref="null">MemorySegment</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L444">view source</a></div></div><divclass="public anchor"id="var-read-byte"><h3>read-byte</h3><divclass="usage"><code>(read-byte segment)</code><code>(read-byte segment offset)</code></div><divclass="doc"><divclass="markdown"><p>Reads a <ahref="null">byte</a> from the <code>segment</code>, at an optional <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L287">view source</a></div></div><divclass="public anchor"id="var-read-char"><h3>read-char</h3><divclass="usage"><code>(read-char segment)</code><code>(read-char segment offset)</code></div><divclass="doc"><divclass="markdown"><p>Reads a <ahref="null">char</a> from the <code>segment</code>, at an optional <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L378">view source</a></div></div><divclass="public anchor"id="var-read-double"><h3>read-double</h3><divclass="usage"><code>(read-double segment)</code><code>(read-double segment offset)</code><code>(read-double segment offset byte-order)</code></div><divclass="doc"><divclass="markdown"><p>Reads a <ahref="null">double</a> from the <code>segment</code>, at an optional <code>offset</code>.</p>
<p>If <code>byte-order</code> is not provided, it defaults to <ahref="coffi.mem.html#var-native-endian">native-endian</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L417">view source</a></div></div><divclass="public anchor"id="var-read-float"><h3>read-float</h3><divclass="usage"><code>(read-float segment)</code><code>(read-float segment offset)</code><code>(read-float segment offset byte-order)</code></div><divclass="doc"><divclass="markdown"><p>Reads a <ahref="null">float</a> from the <code>segment</code>, at an optional <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L419">view source</a></div></div><divclass="public anchor"id="var-read-float"><h3>read-float</h3><divclass="usage"><code>(read-float segment)</code><code>(read-float segment offset)</code><code>(read-float segment offset byte-order)</code></div><divclass="doc"><divclass="markdown"><p>Reads a <ahref="null">float</a> from the <code>segment</code>, at an optional <code>offset</code>.</p>
<p>If <code>byte-order</code> is not provided, it defaults to <ahref="coffi.mem.html#var-native-endian">native-endian</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L392">view source</a></div></div><divclass="public anchor"id="var-read-int"><h3>read-int</h3><divclass="usage"><code>(read-int segment)</code><code>(read-int segment offset)</code><code>(read-int segment offset byte-order)</code></div><divclass="doc"><divclass="markdown"><p>Reads a <ahref="null">int</a> from the <code>segment</code>, at an optional <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L394">view source</a></div></div><divclass="public anchor"id="var-read-int"><h3>read-int</h3><divclass="usage"><code>(read-int segment)</code><code>(read-int segment offset)</code><code>(read-int segment offset byte-order)</code></div><divclass="doc"><divclass="markdown"><p>Reads a <ahref="null">int</a> from the <code>segment</code>, at an optional <code>offset</code>.</p>
<p>If <code>byte-order</code> is not provided, it defaults to <ahref="coffi.mem.html#var-native-endian">native-endian</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L326">view source</a></div></div><divclass="public anchor"id="var-read-long"><h3>read-long</h3><divclass="usage"><code>(read-long segment)</code><code>(read-long segment offset)</code><code>(read-long segment offset byte-order)</code></div><divclass="doc"><divclass="markdown"><p>Reads a <ahref="null">long</a> from the <code>segment</code>, at an optional <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L328">view source</a></div></div><divclass="public anchor"id="var-read-long"><h3>read-long</h3><divclass="usage"><code>(read-long segment)</code><code>(read-long segment offset)</code><code>(read-long segment offset byte-order)</code></div><divclass="doc"><divclass="markdown"><p>Reads a <ahref="null">long</a> from the <code>segment</code>, at an optional <code>offset</code>.</p>
<p>If <code>byte-order</code> is not provided, it defaults to <ahref="coffi.mem.html#var-native-endian">native-endian</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L351">view source</a></div></div><divclass="public anchor"id="var-read-short"><h3>read-short</h3><divclass="usage"><code>(read-short segment)</code><code>(read-short segment offset)</code><code>(read-short segment offset byte-order)</code></div><divclass="doc"><divclass="markdown"><p>Reads a <ahref="null">short</a> from the <code>segment</code>, at an optional <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L353">view source</a></div></div><divclass="public anchor"id="var-read-short"><h3>read-short</h3><divclass="usage"><code>(read-short segment)</code><code>(read-short segment offset)</code><code>(read-short segment offset byte-order)</code></div><divclass="doc"><divclass="markdown"><p>Reads a <ahref="null">short</a> from the <code>segment</code>, at an optional <code>offset</code>.</p>
<p>If <code>byte-order</code> is not provided, it defaults to <ahref="coffi.mem.html#var-native-endian">native-endian</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L301">view source</a></div></div><divclass="public anchor"id="var-reinterpret"><h3>reinterpret</h3><divclass="usage"><code>(reinterpret segment size)</code><code>(reinterpret segment size arena)</code><code>(reinterpret segment size arena cleanup)</code></div><divclass="doc"><divclass="markdown"><p>Reinterprets the <code>segment</code> as having the passed <code>size</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L303">view source</a></div></div><divclass="public anchor"id="var-reinterpret"><h3>reinterpret</h3><divclass="usage"><code>(reinterpret segment size)</code><code>(reinterpret segment size arena)</code><code>(reinterpret segment size arena cleanup)</code></div><divclass="doc"><divclass="markdown"><p>Reinterprets the <code>segment</code> as having the passed <code>size</code>.</p>
<p>If <code>arena</code> is passed, the scope of the <code>segment</code> is associated with the arena, as well as its access constraints. If <code>cleanup</code> is passed, it will be a 1-argument function of a fresh memory segment backed by the same memory as the returned segment which should perform any required cleanup operations. It will be called when the <code>arena</code> is closed.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L138">view source</a></div></div><divclass="public anchor"id="var-seq-of"><h3>seq-of</h3><divclass="usage"><code>(seq-of type segment)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a lazy sequence of <code>type</code> elements deserialized from <code>segment</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L1104">view source</a></div></div><divclass="public anchor"id="var-serialize"><h3>serialize</h3><divclass="usage"><code>(serialize obj type)</code><code>(serialize obj type arena)</code></div><divclass="doc"><divclass="markdown"><p>Serializes an arbitrary type.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L140">view source</a></div></div><divclass="public anchor"id="var-seq-of"><h3>seq-of</h3><divclass="usage"><code>(seq-of type segment)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a lazy sequence of <code>type</code> elements deserialized from <code>segment</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L1106">view source</a></div></div><divclass="public anchor"id="var-serialize"><h3>serialize</h3><divclass="usage"><code>(serialize obj type)</code><code>(serialize obj type arena)</code></div><divclass="doc"><divclass="markdown"><p>Serializes an arbitrary type.</p>
<p>For types which have a primitive representation, this serializes into that representation. For types which do not, it allocates a new segment and serializes into that.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L954">view source</a></div></div><divclass="public anchor"id="var-serialize*"><h3>serialize*</h3><h4class="type">multimethod</h4><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>Constructs a serialized version of the <code>obj</code> and returns it.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L956">view source</a></div></div><divclass="public anchor"id="var-serialize*"><h3>serialize*</h3><h4class="type">multimethod</h4><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>Constructs a serialized version of the <code>obj</code> and returns it.</p>
<p>Any new allocations made during the serialization should be tied to the given <code>arena</code>, except in extenuating circumstances.</p>
<p>This method should only be implemented for types that serialize to primitives.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L825">view source</a></div></div><divclass="public anchor"id="var-serialize-into"><h3>serialize-into</h3><h4class="type">multimethod</h4><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>Writes a serialized version of the <code>obj</code> to the given <code>segment</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L827">view source</a></div></div><divclass="public anchor"id="var-serialize-into"><h3>serialize-into</h3><h4class="type">multimethod</h4><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>Writes a serialized version of the <code>obj</code> to the given <code>segment</code>.</p>
<p>Any new allocations made during the serialization should be tied to the given <code>arena</code>, except in extenuating circumstances.</p>
<p>This method should be implemented for any type which does not override <ahref="coffi.mem.html#var-c-layout">c-layout</a>.</p>
<p>For any other type, this will serialize it as <ahref="coffi.mem.html#var-serialize*">serialize*</a> before writing the result value into the <code>segment</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L885">view source</a></div></div><divclass="public anchor"id="var-shared-arena"><h3>shared-arena</h3><divclass="usage"><code>(shared-arena)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a new shared memory arena.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L887">view source</a></div></div><divclass="public anchor"id="var-shared-arena"><h3>shared-arena</h3><divclass="usage"><code>(shared-arena)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a new shared memory arena.</p>
<p>This arena can be shared across threads and memory allocated in it will only be cleaned up once any thread accessing the arena closes it.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L51">view source</a></div></div><divclass="public anchor"id="var-short-alignment"><h3>short-alignment</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The alignment in bytes of a c-sized short.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L261">view source</a></div></div><divclass="public anchor"id="var-short-layout"><h3>short-layout</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The <ahref="null">MemoryLayout</a> for a c-sized short in <ahref="coffi.mem.html#var-native-endian">native-endian</a><ahref="null">ByteOrder</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L209">view source</a></div></div><divclass="public anchor"id="var-short-size"><h3>short-size</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The size in bytes of a c-sized short.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L237">view source</a></div></div><divclass="public anchor"id="var-size-of"><h3>size-of</h3><divclass="usage"><code>(size-of type)</code></div><divclass="doc"><divclass="markdown"><p>The size in bytes of the given <code>type</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L804">view source</a></div></div><divclass="public anchor"id="var-slice"><h3>slice</h3><divclass="usage"><code>(slice segment offset)</code><code>(slice segment offset size)</code></div><divclass="doc"><divclass="markdown"><p>Get a slice over the <code>segment</code> with the given <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L131">view source</a></div></div><divclass="public anchor"id="var-slice-segments"><h3>slice-segments</h3><divclass="usage"><code>(slice-segments segment size)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a lazy seq of <code>size</code>-length memory segments, sliced from <code>segment</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L180">view source</a></div></div><divclass="public anchor"id="var-write-address"><h3>write-address</h3><divclass="usage"><code>(write-address segment value)</code><code>(write-address segment offset value)</code></div><divclass="doc"><divclass="markdown"><p>Writes the address of the <ahref="null">MemorySegment</a><code>value</code> to the <code>segment</code>, at an optional <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L640">view source</a></div></div><divclass="public anchor"id="var-write-byte"><h3>write-byte</h3><divclass="usage"><code>(write-byte segment value)</code><code>(write-byte segment offset value)</code></div><divclass="doc"><divclass="markdown"><p>Writes a <ahref="null">byte</a> to the <code>segment</code>, at an optional <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L458">view source</a></div></div><divclass="public anchor"id="var-write-char"><h3>write-char</h3><divclass="usage"><code>(write-char segment value)</code><code>(write-char segment offset value)</code></div><divclass="doc"><divclass="markdown"><p>Writes a <ahref="null">char</a> to the <code>segment</code>, at an optional <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L560">view source</a></div></div><divclass="public anchor"id="var-write-double"><h3>write-double</h3><divclass="usage"><code>(write-double segment value)</code><code>(write-double segment offset value)</code><code>(write-double segment offset byte-order value)</code></div><divclass="doc"><divclass="markdown"><p>Writes a <ahref="null">double</a> to the <code>segment</code>, at an optional <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L53">view source</a></div></div><divclass="public anchor"id="var-short-alignment"><h3>short-alignment</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The alignment in bytes of a c-sized short.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L263">view source</a></div></div><divclass="public anchor"id="var-short-layout"><h3>short-layout</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The <ahref="null">MemoryLayout</a> for a c-sized short in <ahref="coffi.mem.html#var-native-endian">native-endian</a><ahref="null">ByteOrder</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L211">view source</a></div></div><divclass="public anchor"id="var-short-size"><h3>short-size</h3><divclass="usage"></div><divclass="doc"><divclass="markdown"><p>The size in bytes of a c-sized short.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L239">view source</a></div></div><divclass="public anchor"id="var-size-of"><h3>size-of</h3><divclass="usage"><code>(size-of type)</code></div><divclass="doc"><divclass="markdown"><p>The size in bytes of the given <code>type</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L806">view source</a></div></div><divclass="public anchor"id="var-slice"><h3>slice</h3><divclass="usage"><code>(slice segment offset)</code><code>(slice segment offset size)</code></div><divclass="doc"><divclass="markdown"><p>Get a slice over the <code>segment</code> with the given <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L133">view source</a></div></div><divclass="public anchor"id="var-slice-segments"><h3>slice-segments</h3><divclass="usage"><code>(slice-segments segment size)</code></div><divclass="doc"><divclass="markdown"><p>Constructs a lazy seq of <code>size</code>-length memory segments, sliced from <code>segment</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L182">view source</a></div></div><divclass="public anchor"id="var-write-address"><h3>write-address</h3><divclass="usage"><code>(write-address segment value)</code><code>(write-address segment offset value)</code></div><divclass="doc"><divclass="markdown"><p>Writes the address of the <ahref="null">MemorySegment</a><code>value</code> to the <code>segment</code>, at an optional <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L642">view source</a></div></div><divclass="public anchor"id="var-write-byte"><h3>write-byte</h3><divclass="usage"><code>(write-byte segment value)</code><code>(write-byte segment offset value)</code></div><divclass="doc"><divclass="markdown"><p>Writes a <ahref="null">byte</a> to the <code>segment</code>, at an optional <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L460">view source</a></div></div><divclass="public anchor"id="var-write-char"><h3>write-char</h3><divclass="usage"><code>(write-char segment value)</code><code>(write-char segment offset value)</code></div><divclass="doc"><divclass="markdown"><p>Writes a <ahref="null">char</a> to the <code>segment</code>, at an optional <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L562">view source</a></div></div><divclass="public anchor"id="var-write-double"><h3>write-double</h3><divclass="usage"><code>(write-double segment value)</code><code>(write-double segment offset value)</code><code>(write-double segment offset byte-order value)</code></div><divclass="doc"><divclass="markdown"><p>Writes a <ahref="null">double</a> to the <code>segment</code>, at an optional <code>offset</code>.</p>
<p>If <code>byte-order</code> is not provided, it defaults to <ahref="coffi.mem.html#var-native-endian">native-endian</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L612">view source</a></div></div><divclass="public anchor"id="var-write-float"><h3>write-float</h3><divclass="usage"><code>(write-float segment value)</code><code>(write-float segment offset value)</code><code>(write-float segment offset byte-order value)</code></div><divclass="doc"><divclass="markdown"><p>Writes a <ahref="null">float</a> to the <code>segment</code>, at an optional <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L614">view source</a></div></div><divclass="public anchor"id="var-write-float"><h3>write-float</h3><divclass="usage"><code>(write-float segment value)</code><code>(write-float segment offset value)</code><code>(write-float segment offset byte-order value)</code></div><divclass="doc"><divclass="markdown"><p>Writes a <ahref="null">float</a> to the <code>segment</code>, at an optional <code>offset</code>.</p>
<p>If <code>byte-order</code> is not provided, it defaults to <ahref="coffi.mem.html#var-native-endian">native-endian</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L584">view source</a></div></div><divclass="public anchor"id="var-write-int"><h3>write-int</h3><divclass="usage"><code>(write-int segment value)</code><code>(write-int segment offset value)</code><code>(write-int segment offset byte-order value)</code></div><divclass="doc"><divclass="markdown"><p>Writes a <ahref="null">int</a> to the <code>segment</code>, at an optional <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L586">view source</a></div></div><divclass="public anchor"id="var-write-int"><h3>write-int</h3><divclass="usage"><code>(write-int segment value)</code><code>(write-int segment offset value)</code><code>(write-int segment offset byte-order value)</code></div><divclass="doc"><divclass="markdown"><p>Writes a <ahref="null">int</a> to the <code>segment</code>, at an optional <code>offset</code>.</p>
<p>If <code>byte-order</code> is not provided, it defaults to <ahref="coffi.mem.html#var-native-endian">native-endian</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L504">view source</a></div></div><divclass="public anchor"id="var-write-long"><h3>write-long</h3><divclass="usage"><code>(write-long segment value)</code><code>(write-long segment offset value)</code><code>(write-long segment offset byte-order value)</code></div><divclass="doc"><divclass="markdown"><p>Writes a <ahref="null">long</a> to the <code>segment</code>, at an optional <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L506">view source</a></div></div><divclass="public anchor"id="var-write-long"><h3>write-long</h3><divclass="usage"><code>(write-long segment value)</code><code>(write-long segment offset value)</code><code>(write-long segment offset byte-order value)</code></div><divclass="doc"><divclass="markdown"><p>Writes a <ahref="null">long</a> to the <code>segment</code>, at an optional <code>offset</code>.</p>
<p>If <code>byte-order</code> is not provided, it defaults to <ahref="coffi.mem.html#var-native-endian">native-endian</a>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/58eaffdf543a3aa00436dafef2c65b247ad3f916/src/clj/coffi/mem.clj#L532">view source</a></div></div><divclass="public anchor"id="var-write-short"><h3>write-short</h3><divclass="usage"><code>(write-short segment value)</code><code>(write-short segment offset value)</code><code>(write-short segment offset byte-order value)</code></div><divclass="doc"><divclass="markdown"><p>Writes a <ahref="null">short</a> to the <code>segment</code>, at an optional <code>offset</code>.</p>
</div></div><divclass="src-link"><ahref="https://github.com/IGJoshua/coffi/blob/2d708fa7724cd2055357f37cefb93a6177ddf281/src/clj/coffi/mem.clj#L534">view source</a></div></div><divclass="public anchor"id="var-write-short"><h3>write-short</h3><divclass="usage"><code>(write-short segment value)</code><code>(write-short segment offset value)</code><code>(write-short segment offset byte-order value)</code></div><divclass="doc"><divclass="markdown"><p>Writes a <ahref="null">short</a> to the <code>segment</code>, at an optional <code>offset</code>.</p>
<p>If <code>byte-order</code> is not provided, it defaults to <ahref="coffi.mem.html#var-native-endian">native-endian</a>.</p>