39. General prupose serialization
The archive module implements general purpose serialization infrastructure.
All functions and symbols are in “archive” module, use require to get access to it.
require daslib/archive
To correctly support serialization of the specific type, you need to define and implement serialize method for it. For example this is how DECS implements component serialization:
def public serialize ( var arch:Archive; var src:Component )
    arch |> serialize(src.name)
    arch |> serialize(src.hash)
    arch |> serialize(src.stride)
    arch |> serialize(src.info)
    invoke(src.info.serializer, arch, src.data)
- Archive
Archive fields are
| version | uint | 
| reading | bool | 
| stream | |
Archive is a combination of serialization stream, and state (version, and reading status).
39.1. Classes
- Serializer
Base class for serializers.
it defines as follows
- Serializer.write(self: Serializer; bytes: void? const implicit; size: int const)
write returns bool
| argument | argument type | 
|---|---|
| self | |
| bytes | void? const implicit | 
| size | int const | 
Write binary data to stream.
- Serializer.read(self: Serializer; bytes: void? const implicit; size: int const)
read returns bool
| argument | argument type | 
|---|---|
| self | |
| bytes | void? const implicit | 
| size | int const | 
Read binary data from stream.
- Serializer.error(self: Serializer; code: string const)
| argument | argument type | 
|---|---|
| self | |
| code | string const | 
Report error to the archive
- Serializer.OK(self: Serializer)
OK returns bool
Return status of the archive
- MemSerializer : Serializer
This serializer stores data in memory (in the array<uint8>)
it defines as follows
data : array<uint8>readOffset : intlastError : string
- MemSerializer.write(self: Serializer; bytes: void? const implicit; size: int const)
write returns bool
| argument | argument type | 
|---|---|
| self | |
| bytes | void? const implicit | 
| size | int const | 
Appends bytes at the end of the data.
- MemSerializer.read(self: Serializer; bytes: void? const implicit; size: int const)
read returns bool
| argument | argument type | 
|---|---|
| self | |
| bytes | void? const implicit | 
| size | int const | 
Reads bytes from data, advances the reading position.
- MemSerializer.error(self: Serializer; code: string const)
| argument | argument type | 
|---|---|
| self | |
| code | string const | 
Sets the last error code.
- MemSerializer.OK(self: Serializer)
OK returns bool
Implements ‘OK’ method, which returns true if the serializer is in a valid state.
- MemSerializer.extractData(self: MemSerializer)
extractData returns array<uint8>
Extract the data from the serializer.
- MemSerializer.getCopyOfData(self: MemSerializer)
getCopyOfData returns array<uint8>
Returns copy of the data from the seiralizer.
- MemSerializer.getLastError(self: MemSerializer)
getLastError returns string const
Returns last serialization error.
39.2. Serialization
serialize (arch:archive::Archive -const;value:math::float3x3 -const) : void
serialize (arch:archive::Archive -const;value:math::float3x4 -const) : void
serialize (arch:archive::Archive -const;value:math::float4x4 -const) : void
serialize (arch:archive::Archive -const;value:string& -const) : void
serialize_raw (arch:archive::Archive -const;value:auto(TT)& -const) : auto
read_raw (arch:archive::Archive -const;value:auto(TT)& -const) : auto
write_raw (arch:archive::Archive -const;value:auto(TT)& -const) : auto
serialize (arch:archive::Archive -const;value:auto(TT)& -const) : auto
serialize (arch:archive::Archive -const;value:auto(TT)& -const) : auto
serialize (arch:archive::Archive -const;value:auto(TT)& -const) : auto
serialize (arch:archive::Archive -const;value:auto(TT)& -const) : auto
serialize (arch:archive::Archive -const;value:auto(TT)& -const) : auto
serialize (arch:archive::Archive -const;value:auto(TT)[] -const) : auto
serialize (arch:archive::Archive -const;value:array<auto(TT)> -const) : auto
serialize (arch:archive::Archive -const;value:table<auto(KT);auto(VT)> -const) : auto
serialize (arch:archive::Archive -const;value:auto(TT)? -const) : auto
- serialize(arch: Archive; value: float3x3)
| argument | argument type | 
|---|---|
| arch | |
| value | |
todo: implement preallocat string with raii
- serialize(arch: Archive; value: float3x4)
| argument | argument type | 
|---|---|
| arch | |
| value | |
todo: implement preallocat string with raii
- serialize(arch: Archive; value: float4x4)
| argument | argument type | 
|---|---|
| arch | |
| value | |
todo: implement preallocat string with raii
- serialize(arch: Archive; value: string&)
| argument | argument type | 
|---|---|
| arch | |
| value | string& | 
todo: implement preallocat string with raii
- serialize_raw(arch: Archive; value: auto(TT)&)
serialize_raw returns auto
| argument | argument type | 
|---|---|
| arch | |
| value | auto(TT)& | 
Serialize raw data (straight up bytes for raw pod)
- read_raw(arch: Archive; value: auto(TT)&)
read_raw returns auto
| argument | argument type | 
|---|---|
| arch | |
| value | auto(TT)& | 
Read raw data (straight up bytes for raw pod)
- write_raw(arch: Archive; value: auto(TT)&)
write_raw returns auto
| argument | argument type | 
|---|---|
| arch | |
| value | auto(TT)& | 
Write raw data (straight up bytes for raw pod)
- serialize(arch: Archive; value: auto(TT)&)
serialize returns auto
| argument | argument type | 
|---|---|
| arch | |
| value | auto(TT)& | 
todo: implement preallocat string with raii
- serialize(arch: Archive; value: auto(TT)&)
serialize returns auto
| argument | argument type | 
|---|---|
| arch | |
| value | auto(TT)& | 
todo: implement preallocat string with raii
- serialize(arch: Archive; value: auto(TT)&)
serialize returns auto
| argument | argument type | 
|---|---|
| arch | |
| value | auto(TT)& | 
todo: implement preallocat string with raii
- serialize(arch: Archive; value: auto(TT)&)
serialize returns auto
| argument | argument type | 
|---|---|
| arch | |
| value | auto(TT)& | 
todo: implement preallocat string with raii
- serialize(arch: Archive; value: auto(TT)&)
serialize returns auto
| argument | argument type | 
|---|---|
| arch | |
| value | auto(TT)& | 
todo: implement preallocat string with raii
- serialize(arch: Archive; value: auto(TT)[])
serialize returns auto
| argument | argument type | 
|---|---|
| arch | |
| value | auto(TT)[-1] | 
todo: implement preallocat string with raii
- serialize(arch: Archive; value: array<auto(TT)>)
serialize returns auto
| argument | argument type | 
|---|---|
| arch | |
| value | array<auto(TT)> | 
todo: implement preallocat string with raii
- serialize(arch: Archive; value: table<auto(KT);auto(VT)>)
serialize returns auto
| argument | argument type | 
|---|---|
| arch | |
| value | table<auto(KT);auto(VT)> | 
todo: implement preallocat string with raii
- serialize(arch: Archive; value: auto(TT)?)
serialize returns auto
| argument | argument type | 
|---|---|
| arch | |
| value | auto(TT)? | 
todo: implement preallocat string with raii
39.3. Memory archive
- mem_archive_save(t: auto&)
mem_archive_save returns auto
| argument | argument type | 
|---|---|
| t | auto& | 
Saves the object to a memory archive. Result is array<uint8> with the serialized data.
- mem_archive_load(data: array<uint8>; t: auto&; canfail: bool const)
mem_archive_load returns bool
| argument | argument type | 
|---|---|
| data | array<uint8> | 
| t | auto& | 
| canfail | bool const | 
Loads the object from a memory archive. data is the array<uint8> with the serialized data, returned from mem_archive_save.