我正在编写Google Brotli解压缩算法的Rust实现,该算法在流末尾使用固定数量的“隐式零”来启用某些优化。访问由Take或Chain包装的读取组件
Google C的实现使用了各种计数器的意大利面代码,但我想在Rust std :: io库中使用适配器。类似:
pub struct StreamBitReader<R> {
reader: Chain<R,Take<Repeat>>,
...
}
其中“R”是底层Read
该比特读取器结构被包裹。但是,在很多情况下,解压缩算法会检查是否有“溢出”流,并通过检查读取的隐式零字节数来完成此操作。这似乎是不可能的安全锈,因为没有办法获得Chain
组件的参考,除非我失去了一些东西。
当构建Chain
时,它将获取(移动)底层Read
结构的所有权,然后隐藏在私有成员中。
有什么办法来构建Take<Repeat>
部分,这样我可以甚至在Chain
适配器取得所有权访问limit()
新生力量Take
?