Hashlink
An updated version of linked-hash-map and friends
Install / Use
/learn @djc/HashlinkREADME
hashlink -- HashMap-like containers that hold their key-value pairs in a user controllable order
This crate is a fork of
linked-hash-map that builds on
top of hashbrown to implement more up
to date versions of LinkedHashMap LinkedHashSet, and LruCache.
One important API change is that when a LinkedHashMap is used as a LRU cache,
it allows you to easily retrieve an entry and move it to the back OR produce a
new entry at the back without needlessly repeating key hashing and lookups:
let mut lru_cache = LinkedHashMap::new();
let key = "key".to_owned();
// Try to find my expensive to construct and hash key
let _cached_val = match lru_cache.raw_entry_mut().from_key(&key) {
RawEntryMut::Occupied(mut occupied) => {
// Cache hit, move entry to the back.
occupied.to_back();
occupied.into_mut()
}
RawEntryMut::Vacant(vacant) => {
// Insert expensive to construct key and expensive to compute value,
// automatically inserted at the back.
vacant.insert(key.clone(), 42).1
}
};
Or, a simpler way to do the same thing:
let mut lru_cache = LinkedHashMap::new();
let key = "key".to_owned();
let _cached_val = lru_cache
.raw_entry_mut()
.from_key(&key)
.or_insert_with(|| (key.clone(), 42));
This crate contains a decent amount of unsafe code from handling its internal
linked list, and the unsafe code has diverged quite a lot from the original
linked-hash-map implementation. It currently passes tests under miri and
sanitizers, but it should probably still receive more review and testing, and
check for test code coverage.
Credit
There is a huge amount of code in this crate that is copied verbatim from
linked-hash-map and hashbrown, especially tests, associated types like
iterators, and things like Debug impls.
License
This library is licensed the same as linked-hash-map and hashbrown, it is licensed under either of:
- MIT license LICENSE-MIT or http://opensource.org/licenses/MIT
- Apache License 2.0 LICENSE-APACHE or https://opensource.org/licenses/Apache-2.0
at your option.
Related Skills
node-connect
344.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
96.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
344.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
344.1kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
