#hash-map #key-value #cow

hashcow

一个具有写时复制的键和值的Rust HashMap实现

2个不稳定版本

0.2.0 2019年7月9日
0.1.0 2019年7月8日

#52 in #cow

MIT 许可证

19KB
161

HashCow

Build Status Discord Badge Latest Version Documentation

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