#不可变 #集合 #索引 #一次 #次数 #多个 #索引

qindex_multi

提供了一次性对集合进行可变和不可变多次索引的方法

6个版本 (3个破坏性更新)

使用旧的Rust 2015

0.4.0 2015年8月18日
0.3.0 2015年8月16日
0.2.0 2015年8月13日
0.1.2 2015年8月8日

#68 in #一次

每月23次下载
用于 2 crates

CC0 许可证

8KB
137

qindex_multi

API 文档

此crate通过提供 MultiIndexable,其实现者允许我们在索引它们时违反基本的借用规则(使用 Index[Mut]) ,只要我们遵守每个单独元素。

换句话说:只要没有读写冲突,我们就可以一次性对集合进行可变和不可变多次索引。

注意:由于缺少 IndexMut-实现,当前 MultiIndexable 没有在libstd的 HashMapBTreeMap 中实现。当 IndexAssign-功能实现时,这将会改变。

此crate需要最新的rust nightly才能编译。

待办事项

  • 文档、测试、示例

示例用法

#![feature(slice_patterns)]

extern crate qcollect;
extern crate qindex_multi;
extern crate vec_map;

use vec_map::VecMap;
use qindex_multi::{MultiIndexable, MultiIndex};

#[test]
fn test1(){
    let mut data = VecMap::new();
    data.insert(0, 100u16); 
    data.insert(2, 200);
    data.insert(20, 300);
    data.insert(200, 400);

    let read_indicies = vec![0, 2, 20];
    let write_indicies = vec![200];

    let multi_idx = MultiIndex::new(read_indicies, write_indicies);

    {
        let mut output = data.index_multi(&multi_idx);
        
        let [a, b, c]: [_; 3] = qcollect::iter_into_fixed(output.read);
        let d = output.write.next().unwrap();
        *d += *a + *b + c; 
        
    }
    assert_eq!(data[200], 1000);
}

依赖关系

~91KB