2024-10-04 20:27:06 +00:00
< !DOCTYPE html PUBLIC ""
"">
2024-10-04 20:35:05 +00:00
< html > < head > < meta charset = "UTF-8" / > < title > Built-in Types **WIP**< / title > < link rel = "stylesheet" type = "text/css" href = "css/default.css" / > < link rel = "stylesheet" type = "text/css" href = "css/highlight.css" / > < script type = "text/javascript" src = "js/highlight.min.js" > < / script > < script type = "text/javascript" src = "js/jquery.min.js" > < / script > < script type = "text/javascript" src = "js/page_effects.js" > < / script > < script > hljs . initHighlightingOnLoad ( ) ; < / script > < / head > < body > < div id = "header" > < h2 > Generated by < a href = "https://github.com/weavejester/codox" > Codox< / a > < / h2 > < h1 > < a href = "index.html" > < span class = "project-title" > < span class = "project-name" > coffi< / span > < span class = "project-version" > v1.0.486< / span > < / span > < / a > < / h1 > < / div > < div class = "sidebar primary" > < h3 class = "no-link" > < span class = "inner" > Project< / span > < / h3 > < ul class = "index-link" > < li class = "depth-1 " > < a href = "index.html" > < div class = "inner" > Index< / div > < / a > < / li > < / ul > < h3 class = "no-link" > < span class = "inner" > Topics< / span > < / h3 > < ul > < li class = "depth-1 " > < a href = "01-Getting-Started.html" > < div class = "inner" > < span > Getting Started< / span > < / div > < / a > < / li > < li class = "depth-1 " > < a href = "02-Memory-Management.html" > < div class = "inner" > < span > Memory Management< / span > < / div > < / a > < / li > < li class = "depth-1 current" > < a href = "03-Builtin-Types.html" > < div class = "inner" > < span > Built-in Types **WIP**< / span > < / div > < / a > < / li > < li class = "depth-1 " > < a href = "04-Custom-Types.html" > < div class = "inner" > < span > Custom Types< / span > < / div > < / a > < / li > < li class = "depth-1 " > < a href = "05-Low-Level-Wrappers.html" > < div class = "inner" > < span > Low-Level Wrappers< / span > < / div > < / a > < / li > < li class = "depth-1 " > < a href = "50-Data-Model.html" > < div class = "inner" > < span > Data Model< / span > < / div > < / a > < / li > < li class = "depth-1 " > < a href = "99-Benchmarks.html" > < div class = "inner" > < span > Benchmarks **OUTDATED**< / span > < / div > < / a > < / li > < / ul > < h3 class = "no-link" > < span class = "inner" > Namespaces< / span > < / h3 > < ul > < li class = "depth-1" > < div class = "no-link" > < div class = "inner" > < span class = "tree" > < span class = "top" > < / span > < span class = "bottom" > < / span > < / span > < span > coffi< / span > < / div > < / div > < / li > < li class = "depth-2 branch" > < a href = "coffi.ffi.html" > < div class = "inner" > < span class = "tree" > < span class = "top" > < / span > < span class = "bottom" > < / span > < / span > < span > ffi< / span > < / div > < / a > < / li > < li class = "depth-2 branch" > < a href = "coffi.layout.html" > < div class = "inner" > < span class = "tree" > < span class = "top" > < / span > < span class = "bottom" > < / span > < / span > < span > layout< / span > < / div > < / a > < / li > < li class = "depth-2" > < a href = "coffi.mem.html" > < div class = "inner" > < span class = "tree" > < span class = "top" > < / span > < span class = "bottom" > < / span > < / span > < span > mem< / span > < / div > < / a > < / li > < / ul > < / div > < div class = "document" id = "content" > < div class = "doc" > < div class = "markdown" > < h1 > < a href = "#built-in-types-wip" id = "built-in-types-wip" > < / a > Built-in Types < strong > WIP< / strong > < / h1 >
2024-11-22 15:16:24 +00:00
< h3 > < a href = "#primitives" id = "primitives" > < / a > Primitives< / h3 >
< h3 > < a href = "#arrays" id = "arrays" > < / a > Arrays< / h3 >
< h3 > < a href = "#pointers" id = "pointers" > < / a > Pointers< / h3 >
< h3 > < a href = "#structs" id = "structs" > < / a > Structs< / h3 >
< h3 > < a href = "#enums" id = "enums" > < / a > Enums< / h3 >
< h3 > < a href = "#flagsets" id = "flagsets" > < / a > Flagsets< / h3 >
< h3 > < a href = "#unions" id = "unions" > < / a > Unions< / h3 >
2024-10-04 20:27:06 +00:00
< p > Unions in coffi are rather limited. They can be serialized, but not deserialized without external information.< / p >
< pre > < code class = "language-clojure" > [::mem/union
#{::mem/float ::mem/double}
:dispatch #(cond
(float? %) ::mem/float
(double? %) ::mem/double)]
< / code > < / pre >
2024-11-22 15:14:52 +00:00
< 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 < a href = "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 >
2024-10-04 20:27:06 +00:00
< 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 >
< pre > < code class = "language-clojure" > [::mem/union
#{::mem/int ::mem/c-string}
:dispatch #(case (first %)
:ok ::mem/int
:err ::mem/c-string)
:extract second]
< / code > < / pre >
< p > This union however would not include the tag when serialized.< / p >
< p > If a union is deserialized, then all that coffi does is to allocate a new segment of the appropriate size with an implicit arena so that it may later be garbage collected, and copies the data from the source segment into it. It’ s up to the user to call < code > deserialize-from< / code > on that segment with the appropriate type.< / p >
2024-11-22 15:16:24 +00:00
< h3 > < a href = "#raw-types" id = "raw-types" > < / a > Raw Types< / h3 >
2024-10-04 20:27:06 +00:00
< / div > < / div > < / div > < / body > < / html >