3 个版本 (破坏性更新)
0.3.0 | 2021年10月30日 |
---|---|
0.2.0 | 2021年3月6日 |
0.1.0 | 2020年10月13日 |
#16 in #allocations
17KB
326 行
flatvec
一种从 nested 演化而来的消解间接引用的容器。
此包提供了一种容器 FlatVec
和两种特质,IntoFlat
和 FromFlat
。一个 FlatVec
是一个类型参数,而 IntoFlat
和 FromFlat
都是两个类型参数。这些类型参数不需要相同。
这允许在最小/零拷贝使用的同时消解间接引用,如 examples/domain_name.rs
中所示。
此接口还允许一些有趣的其他应用,如 examples/gzip.rs
。
lib.rs
:
一种从 nested 演化而来的消解间接引用的容器。
FlatVec
可以像 Vec<String>
或 Vec<Vec<u8>>
一样使用,但最多只需要2次堆分配(目前总是2次,但应该会随着1.51版本而改变)。
向 FlatVec
中插入和检索是通过两种特质 IntoFlat
和 FromFlat
来实现的,它们都是两个类型的泛型。使用此包的最简单方法是为你自己的包中的某个类型 T
实现 impl IntoFlat<T, u8> for T
和 impl FromFlat<'_, T, u8> for T
。
但是,由于接口支持泛型后端类型参数,扁平化输入对象可以存储为任何方便的表示形式。`u8` 是一个合理的默认选择,但可能并不完全适合你的应用程序。
此外,由于 FromFlat
有生命周期参数,访问 FlatVec
中存储的对象可以是一个零拷贝操作。例如,可以将带有间接引用的对象平坦化到一个密集的内存存储中,然后通过引用包装句柄类型来稍后访问它们。一个简单的例子可以在 examples/domain_name.rs
中找到。
此接口非常强大,实际上相当于内存序列化和转换都在一个步骤中完成。例如,用户可以构建一个压缩所有元素使用 gzip 的 FlatVec
。这不一定是个好主意,但你可以这样做。
依赖项
~255KB