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:01:52 +00:00
< h3 > < a href = "#todo-primitives-primitives" id = "todo-primitives-primitives" > < / a > TODO Primitives {#primitives}< / h3 >
< h3 > < a href = "#todo-arrays-arrays" id = "todo-arrays-arrays" > < / a > TODO Arrays {#arrays}< / h3 >
< h3 > < a href = "#todo-pointers-pointers" id = "todo-pointers-pointers" > < / a > TODO Pointers {#pointers}< / h3 >
< h3 > < a href = "#todo-structs-structs" id = "todo-structs-structs" > < / a > TODO Structs {#structs}< / h3 >
< h3 > < a href = "#todo-enums-enums" id = "todo-enums-enums" > < / a > TODO Enums {#enums}< / h3 >
< h3 > < a href = "#todo-flagsets-flagsets" id = "todo-flagsets-flagsets" > < / a > TODO Flagsets {#flagsets}< / h3 >
2024-11-22 15:05:27 +00:00
< h3 > < a href = "#todo-functions-functions" id = "todo-functions-functions" > < / a > TODO Functions {#functions}< / h3 >
2024-11-22 15:01:52 +00:00
< h3 > < a href = "#unions-unions" id = "unions-unions" > < / a > Unions {#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:03:28 +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:01:52 +00:00
< h3 > < a href = "#todo-raw-types-raw-types" id = "todo-raw-types-raw-types" > < / a > TODO Raw Types {#raw-types}< / h3 >
2024-10-04 20:27:06 +00:00
< / div > < / div > < / div > < / body > < / html >