#indexing #数据结构 #no-std #generativity

已撤回 indexing-str

使用“generativity”进行可靠的未检查索引;bluss/indexing的分支

0.1.0 2019年5月15日

#86 in #indexing

MIT/Apache

40KB
864

indexing

在Rust中使用“generativity”进行可靠的未检查索引(通过独特的生命周期参数进行品牌化)。

这是bluss/indexing的分支,大部分代码直接从中获得灵感。

此分支仅支持不可变操作,不提供指针索引/范围,并且不允许在不引用容器的情况下操作索引/范围。作为这些限制的交换,它适用于Rust的UTF-8字符串类型的完全可靠、完全未检查的索引。


lib.rs:

使用生成生命周期的技术进行可靠的未检查索引,扩展到字符串切片,不提供指针或可变性支持。

对Gankro和Bluss特别表示感谢,他们为原始indexing包做出了贡献,本包明显借鉴了其所有智慧。

基本结构

  • 使用scope函数创建作用域;在此作用域内,有一个Container对象,具有两个作用:1) 提供或验证受信任的索引、指针和范围;2) 通过这些索引和范围提供对底层数据的访问。

  • 容器及其索引和范围通过一个生命周期参数'id进行“品牌化”,它是一个标识符。品牌化项目不能离开它们的作用域,并且它们将项目唯一地绑定到特定的容器。这使得人们可以信任它们。

  • Index<'id>是一个受信任的索引

  • Range<'id, Emptiness>是一个受信任的范围。

  • 对于范围,如果证明参数EmptinessNonEmpty,则该范围已知至少有一个元素。观察:非空范围始终有一个有效的开头索引,因此它可以与索引表示互换。

  • 索引也使用相同的证明参数。一个NonEmpty索引指向一个有效元素,而一个Unknown索引是一个边缘索引(它可以用来切片容器,但不能用来解引用到元素)。

  • 所有范围都有一个.first()方法来获取范围中的第一个索引,但只有在范围非空时,返回的索引也是NonEmpty并且可以解引用。

借用

  • 索引和范围可以自由复制,并且自身不跟踪底层数据。所有对底层数据的访问都通过Container(例如通过使用受信任的索引索引容器)进行。

依赖项