9个不稳定版本
0.5.1 | 2023年8月10日 |
---|---|
0.5.0 | 2023年6月24日 |
0.4.2 | 2022年8月23日 |
0.3.0 | 2022年8月22日 |
0.0.0 |
|
#862 在 数据结构
每月31次下载
30KB
501 行
ref_kind
此crate提供了两种引用类型:不可变和可变。所有这些都在一个枚举 RefKind
中表示,允许存储不可变和可变引用。
但最重要的是,此crate允许通过创建一个新集合来存储这些引用,从而从集合中检索出许多可变引用。
为此,crate定义了一些有用的特性
MoveRef
和MoveMut
用于容器检索相应的引用类型,Move
是上述特性的组合,Many
用于实现了peekable迭代器、切片等的集合。
但没有任何阻止您为其他类型实现这些特性的理由!
示例
use core::array;
use ref_kind::{Many, RefKind, MoveError};
// Create an array of square of integers from 0 to 9
let mut array: [_; 10] = array::from_fn(|i| i * i);
// Create collection of mutable references on all of the array elements
let mut many: [_; 10] = array
.iter_mut()
.map(|sq| Some(RefKind::from(sq)))
.collect::<Vec<_>>()
.try_into()
.unwrap();
// Move out mutable reference by index 1
// It is no longer in the `many`
let one = many.move_mut(1).unwrap();
assert_eq!(*one, 1);
// Move out immutable reference by index 4
// `many` now contains immutable reference, not mutable one
let four = many.move_ref(4).unwrap();
assert_eq!(*four, 16);
// Move it again: no panic here because immutable reference was copied
let four_again = many.move_ref(4).unwrap();
assert_eq!(four, four_again);
// This call will return an error because `many` contains no reference by index 1
let one_again = many.try_move_ref(1);
assert_eq!(one_again, Err(MoveError::BorrowedMutably));
#![no_std]
支持
此crate是一个 no_std
crate。它只依赖于 core
crate。
std
特性默认启用,要在 no_std
环境中使用它,应在 Cargo.toml 中禁用此crate的默认特性
[dependencies]
ref_kind = { version = "0.5.0", default-features = false }
#![禁止(不安全代码)]
此crate不包含任何 unsafe
代码。
标志
此crate具有以下Cargo特性
特性名称 | 描述 |
---|---|
alloc |
在 alloc crate 中为 VecDeque 和 BTreeMap 实现 Many 特性 |
std |
在标准库中为 HashMap 实现 Many 特性,依赖于 alloc 特性 |
hashbrown |
在 hashbrown crate 中为 HashMap 实现 Many 特性 |
默认启用特性 std
。您可以通过在 Cargo.toml 中使用 default-features = false
来禁用它。
这些特性被添加到这个 crate 中,以便它可以与常见的 Rust 集合一起使用,例如 Vec
和 HashMap
。
许可证
许可协议为以下之一:
- Apache License,版本 2.0,(LICENSE-APACHE 或 http://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
依赖项
~155KB