0.1.0 |
|
---|
#86 in #indexing
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>
是一个受信任的范围。 -
对于范围,如果证明参数
Emptiness
是NonEmpty
,则该范围已知至少有一个元素。观察:非空范围始终有一个有效的开头索引,因此它可以与索引表示互换。 -
索引也使用相同的证明参数。一个
NonEmpty
索引指向一个有效元素,而一个Unknown
索引是一个边缘索引(它可以用来切片容器,但不能用来解引用到元素)。 -
所有范围都有一个
.first()
方法来获取范围中的第一个索引,但只有在范围非空时,返回的索引也是NonEmpty
并且可以解引用。
借用
- 索引和范围可以自由复制,并且自身不跟踪底层数据。所有对底层数据的访问都通过
Container
(例如通过使用受信任的索引索引容器)进行。