2个不稳定版本
0.2.0 | 2019年7月9日 |
---|---|
0.1.0 | 2019年7月8日 |
#52 in #cow
19KB
161 行
HashCow
HashCow是一个具有写时复制键和值的Rust HashMap实现。
最初为优化Purple协议而构建,这个库提供了一种在内存中链接具有重复条目的HashMap的方法。而不是重复数据,它将借用它,只有在需要修改时才会进行克隆。
使用HashCow
use hashcow::{Form, CowHashMap};
let mut hm: CowHashMap<str, [u8]> = CowHashMap::new();
// We insert an owned value in the map
hm.insert_owned("key".to_owned(), vec![1, 2, 3]);
assert_eq!(hm.entry_form(&"key").unwrap(), Form::Owned);
// We now create a clone with borrowed fields
let mut hm_clone = hm.borrow_fields();
assert_eq!(hm_clone.entry_form(&"key").unwrap(), Form::Borrowed);
// On mutation, the borrowed entry is cloned
let entry = hm_clone.get_mut(&"key").unwrap();
// We now mutate the cloned value
*entry = vec![4, 5, 6];
assert_eq!(hm_clone.entry_form(&"key").unwrap(), Form::Owned);
// The two maps now have different entries for the same key
assert_eq!(hm.get(&"key").unwrap(), &[1, 2, 3]);
assert_eq!(hm_clone.get(&"key").unwrap(), &[4, 5, 6]);
贡献
我们欢迎任何愿意为HashCow做出贡献的人!在开始之前,请查看仓库的问题部分。
许可证
HashCow遵循MIT许可证。
依赖
~2MB
~38K SLoC