#index #slice #unchecked #no-std

no-std unchecked-index

使用常规索引语法的未检查索引包装器

5个版本

使用旧的Rust 2015

0.2.2 2017年11月18日
0.2.1 2017年11月12日
0.2.0 2017年10月29日
0.1.1 2017年10月22日
0.1.0 2017年10月8日

#2382 in Rust模式

Download history 11141/week @ 2024-03-14 11208/week @ 2024-03-21 10223/week @ 2024-03-28 10928/week @ 2024-04-04 12754/week @ 2024-04-11 12339/week @ 2024-04-18 12339/week @ 2024-04-25 12063/week @ 2024-05-02 11773/week @ 2024-05-09 11958/week @ 2024-05-16 9980/week @ 2024-05-23 12406/week @ 2024-05-30 12544/week @ 2024-06-06 10300/week @ 2024-06-13 10963/week @ 2024-06-20 8889/week @ 2024-06-27

45,092 每月下载量
139 个crate中使用 (7个直接使用)

MIT/Apache

15KB
259

unchecked-index

通过常规索引语法进行未检查索引。

使用需要 unsafe 块创建的包装器类型。

注意: 当启用时,此处所有未检查的索引实际上都通过 调试断言 进行“检查”(它们在发布构建中默认关闭)。这是一个特性!调试检查 不会 使你的代码安全,但它有助于在 unsafe 代码中找到错误。负责任地测试你的代码。

示例


use unchecked_index::unchecked_index;

/// unsafe because: trusts the permutation to be correct
unsafe fn apply_permutation<T>(perm: &mut [usize], v: &mut [T]) {
    debug_assert_eq!(perm.len(), v.len());
    
    // use unchecked (in reality, debug-checked) indexing throughout
    let mut perm = unchecked_index(perm);
    
    for i in 0..perm.len() {
        let mut current = i;
        while i != perm[current] {
            let next = perm[current];
            // move element from next to current
            v.swap(next, current);
            perm[current] = current;
            current = next;
        }
        perm[current] = current;
    }
}

如何贡献

  • 修复错误或实现新功能
  • 为你的新功能包含测试
  • 发起pull请求

最近更改

  • 0.2.2

    • crate现在始终是 no_std
  • 0.2.1

    • 改进(调试)断言消息;修复一个错别字并始终包含相关的数量(起始,结束,长度)
  • 0.2.0

    • 添加对范围(“切片”)的未检查索引支持
    • 添加两个免费函数,get_uncheckedget_unchecked_mut
  • 0.1.1

    • 添加 Copy 实现以供共享切片使用
  • 0.1.0

    • 首次发布

无运行时依赖