tur/serial
serializable continuations for persistent workflow state.
Since: Phase 21
Bytes
(Bytes)
bytes-alloc
(bytes-alloc [n : int] :)
allocate a zeroed length-prefixed byte buffer of n bytes.
| n | number of data bytes to allocate (not counting the 8-byte length prefix) |
A :ptr<void> to the new bytes value; free with bytes-free.
(def b (bytes-alloc 16)) ; => 16-byte zeroed buffer
Since: Phase 21
bytes-len
(bytes-len [^borrow b : Bytes] :)
return the number of data bytes stored in a bytes value.
| b | bytes pointer from bytes-alloc or a serialize call |
The data length as :int (0 for null pointer).
Since: Phase 21
bytes-data
(bytes-data [^borrow b : Bytes] :)
return a raw pointer to the data region of a bytes value (past the length prefix).
| b | bytes pointer from bytes-alloc or a serialize call |
:ptr<void> to the first data byte, or NULL for a null pointer.
Since: Phase 21
bytes-free
(bytes-free [b : Bytes] :)
free a bytes value allocated by bytes-alloc or serialize.
| b | bytes pointer to free |
Since: Phase 21
bytes-concat
(bytes-concat [^borrow a : Bytes ^borrow b : Bytes] :)
concatenate two bytes values into a new heap-allocated bytes value.
| a | first bytes value (may be null, treated as empty) | |
| b | second bytes value (may be null, treated as empty) |
A new bytes value containing all bytes of a followed by all bytes of b.
(bytes-concat ba bb) ; => new bytes with ba then bb
Since: Phase 21
Serializable[int]
(definstance Serializable [int])
serialize/deserialize int64 as 8 little-endian bytes.
Since: Phase 21
Serializable[bool]
(definstance Serializable [bool])
serialize/deserialize bool as a single byte (0 = false, 1 = true).
Since: Phase 21
Serializable[float]
(definstance Serializable [float])
serialize/deserialize float64 as 8 bytes IEEE 754 little-endian.
Since: Phase 21
Serializable[cstr]
(definstance Serializable [cstr])
serialize/deserialize a cstr as a 4-byte LE length prefix followed by UTF-8 bytes.
Since: Phase 21
Serializable[ptr<void>]
(definstance Serializable [ptr<void>])
serialize/deserialize a bytes value as an 8-byte LE length followed by raw data.
Since: Phase 21
serial-pair-bytes
(serial-pair-bytes [fst : int snd : int] :)
raw [len=16][fst][snd] Pair byte layout from two int64
| fst | first element's int64 carrier | |
| snd | second element's int64 carrier |
A raw :ptr<void> bytes value (see the module note on the raw-buffer surface).
Since: end-to-end-monomorphization (M4 bucket-D)
Serializable[Pair]
(definstance Serializable [Pair])
serialize a Pair[A B] as its two int64 element carriers.
Since: cps-transform-plan (value-typed cont env codec)
Serializable[Option]
(definstance Serializable [Option])
serialize an Option[A] as a presence flag + carrier.
Since: cps-transform-plan (value-typed cont env codec)
cont-to-file
(cont-to-file [b ptr<void> path : cstr] :)
write a serialised continuation bytes value to a file.
| b | bytes value from serial-cont->bytes / save-cont! | |
| path | filesystem path to write (overwritten if it exists) |
1 on success, 0 on failure.
(cont-to-file k-bytes "/tmp/checkpoint.bin") ; => 1
Since: Phase 21
cont-from-file
(cont-from-file [path : cstr] :)
read a serialised continuation bytes value from a file.
| path | filesystem path previously written by cont-to-file |
A bytes :ptr<void> on success, NULL on any I/O or allocation failure.
(def k-bytes (cont-from-file "/tmp/checkpoint.bin"))
Since: Phase 21