39. 通用 prupose 序列化
archive 模块实现了通用的序列化基础设施。
所有函数和交易品种都在 “archive” 模块中,使用 require 来访问它。
require daslib/archive
要正确支持特定类型的序列化,您需要为其定义并实现 serialize 方法。 例如,这是 DECS 实现组件序列化的方式::
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
存档字段为
version |
uint |
reading |
bool |
stream |
|
存档是序列化、流和状态(版本和读取状态)的组合。
39.1. Classes
- Serializer
序列化程序的基类。
它的定义如下
- 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 |
将二进制数据写入流。
- 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 |
从流中读取二进制数据。
- Serializer.error(self: Serializer; code: string const)
argument |
argument type |
---|---|
self |
|
code |
string const |
向存档报告错误
- Serializer.OK(self: Serializer)
OK 返回 bool
档案的返回状态
- MemSerializer : Serializer
此序列化器将数据存储在内存中(在数组<uint8>中)
它的定义如下
data : array<uint8>readOffset : intlastError : string
- MemSerializer.write(self: Serializer; bytes: void? const implicit; size: int const)
write 返回 bool
argument |
argument type |
---|---|
self |
|
bytes |
void? const implicit |
size |
int const |
在数据末尾附加字节。
- MemSerializer.read(self: Serializer; bytes: void? const implicit; size: int const)
read 返回 bool
argument |
argument type |
---|---|
self |
|
bytes |
void? const implicit |
size |
int const |
从数据中读取字节,前进读取位置。
- MemSerializer.error(self: Serializer; code: string const)
argument |
argument type |
---|---|
self |
|
code |
string const |
设置最后一个错误代码。
- MemSerializer.OK(self: Serializer)
OK 返回 bool
实现 ‘OK’ 方法,如果序列化程序处于有效状态,则返回 true。
- MemSerializer.extractData(self: MemSerializer)
extractData returns array<uint8>
从序列化程序中提取数据。
- MemSerializer.getCopyOfData(self: MemSerializer)
getCopyOfData returns array<uint8>
返回 seiralizer 中的数据副本。
- MemSerializer.getLastError(self: MemSerializer)
getLastError returns string
返回最后一个序列化错误。
39.2. 序列化
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)& |
序列化原始数据(原始 Pod 的直接字节数)
- read_raw(arch: Archive; value: auto(TT)&)
read_raw returns auto
argument |
argument type |
---|---|
arch |
|
value |
auto(TT)& |
读取原始数据(原始 Pod 的直接字节数)
- write_raw(arch: Archive; value: auto(TT)&)
write_raw returns auto
argument |
argument type |
---|---|
arch |
|
value |
auto(TT)& |
写入原始数据(原始 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& |
将对象保存到内存存档。Result 是<uint8>包含序列化数据的数组。
- 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 |
从内存存档中加载对象。`data`是从`mem_archive_save`返回的包含序列化数据的array<uint8>数组。