#container #allocations #nested #elements #stores #object #indirection-collapsing

flatvec

一种消解间接引用的容器,其所有元素存储在最多2次分配中

3 个版本 (破坏性更新)

0.3.0 2021年10月30日
0.2.0 2021年3月6日
0.1.0 2020年10月13日

#16 in #allocations

MIT/Apache

17KB
326

flatvec

一种从 nested 演化而来的消解间接引用的容器。

此包提供了一种容器 FlatVec 和两种特质,IntoFlatFromFlat。一个 FlatVec 是一个类型参数,而 IntoFlatFromFlat 都是两个类型参数。这些类型参数不需要相同。

这允许在最小/零拷贝使用的同时消解间接引用,如 examples/domain_name.rs 中所示。

此接口还允许一些有趣的其他应用,如 examples/gzip.rs


lib.rs:

一种从 nested 演化而来的消解间接引用的容器。

FlatVec 可以像 Vec<String>Vec<Vec<u8>> 一样使用,但最多只需要2次堆分配(目前总是2次,但应该会随着1.51版本而改变)。

FlatVec 中插入和检索是通过两种特质 IntoFlatFromFlat 来实现的,它们都是两个类型的泛型。使用此包的最简单方法是为你自己的包中的某个类型 T 实现 impl IntoFlat<T, u8> for Timpl FromFlat<'_, T, u8> for T

但是,由于接口支持泛型后端类型参数,扁平化输入对象可以存储为任何方便的表示形式。`u8` 是一个合理的默认选择,但可能并不完全适合你的应用程序。

此外,由于 FromFlat 有生命周期参数,访问 FlatVec 中存储的对象可以是一个零拷贝操作。例如,可以将带有间接引用的对象平坦化到一个密集的内存存储中,然后通过引用包装句柄类型来稍后访问它们。一个简单的例子可以在 examples/domain_name.rs 中找到。

此接口非常强大,实际上相当于内存序列化和转换都在一个步骤中完成。例如,用户可以构建一个压缩所有元素使用 gzip 的 FlatVec。这不一定是个好主意,但你可以这样做。

依赖项

~255KB