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

archive::Serializer ?

存档是序列化、流和状态(版本和读取状态)的组合。

39.1. Classes

Serializer

序列化程序的基类。

它的定义如下

Serializer.write(self: Serializer; bytes: void? const implicit; size: int const)

write returns bool

argument

argument type

self

archive::Serializer

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

archive::Serializer

bytes

void? const implicit

size

int const

从流中读取二进制数据。

Serializer.error(self: Serializer; code: string const)

argument

argument type

self

archive::Serializer

code

string const

向存档报告错误

Serializer.OK(self: Serializer)

OK 返回 bool

档案的返回状态

MemSerializer : Serializer

此序列化器将数据存储在内存中(在数组<uint8>中)

它的定义如下

data : array<uint8>
readOffset : int
lastError : string
MemSerializer.write(self: Serializer; bytes: void? const implicit; size: int const)

write 返回 bool

argument

argument type

self

archive::Serializer

bytes

void? const implicit

size

int const

在数据末尾附加字节。

MemSerializer.read(self: Serializer; bytes: void? const implicit; size: int const)

read 返回 bool

argument

argument type

self

archive::Serializer

bytes

void? const implicit

size

int const

从数据中读取字节,前进读取位置。

MemSerializer.error(self: Serializer; code: string const)

argument

argument type

self

archive::Serializer

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; value: float3x3)

argument

argument type

arch

archive::Archive

value

math::float3x3

todo: implement preallocat string with raii

serialize(arch: Archive; value: float3x4)

argument

argument type

arch

archive::Archive

value

math::float3x4

todo: implement preallocat string with raii

serialize(arch: Archive; value: float4x4)

argument

argument type

arch

archive::Archive

value

math::float4x4

todo: implement preallocat string with raii

serialize(arch: Archive; value: string&)

argument

argument type

arch

archive::Archive

value

string&

todo: implement preallocat string with raii

serialize_raw(arch: Archive; value: auto(TT)&)

serialize_raw returns auto

argument

argument type

arch

archive::Archive

value

auto(TT)&

序列化原始数据(原始 Pod 的直接字节数)

read_raw(arch: Archive; value: auto(TT)&)

read_raw returns auto

argument

argument type

arch

archive::Archive

value

auto(TT)&

读取原始数据(原始 Pod 的直接字节数)

write_raw(arch: Archive; value: auto(TT)&)

write_raw returns auto

argument

argument type

arch

archive::Archive

value

auto(TT)&

写入原始数据(原始 Pod 的直接字节数)

serialize(arch: Archive; value: auto(TT)&)

serialize returns auto

argument

argument type

arch

archive::Archive

value

auto(TT)&

todo: implement preallocat string with raii

serialize(arch: Archive; value: auto(TT)&)

serialize returns auto

argument

argument type

arch

archive::Archive

value

auto(TT)&

todo: implement preallocat string with raii

serialize(arch: Archive; value: auto(TT)&)

serialize returns auto

argument

argument type

arch

archive::Archive

value

auto(TT)&

todo: implement preallocat string with raii

serialize(arch: Archive; value: auto(TT)&)

serialize returns auto

argument

argument type

arch

archive::Archive

value

auto(TT)&

todo: implement preallocat string with raii

serialize(arch: Archive; value: auto(TT)&)

serialize returns auto

argument

argument type

arch

archive::Archive

value

auto(TT)&

todo: implement preallocat string with raii

serialize(arch: Archive; value: auto(TT)[])

serialize returns auto

argument

argument type

arch

archive::Archive

value

auto(TT)[-1]

todo: implement preallocat string with raii

serialize(arch: Archive; value: array<auto(TT)>)

serialize returns auto

argument

argument type

arch

archive::Archive

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

archive::Archive

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

archive::Archive

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>数组。