deferred_map/handle.rs
1/// Handle is a one-time token for inserting values into DeferredMap
2///
3/// Handle does not implement the Clone trait, ensuring it can only be used once
4/// through Rust's move semantics.
5///
6/// Handle 是一次性令牌,用于向 DeferredMap 插入值
7///
8/// Handle 不实现 Clone trait,通过 Rust 的 move semantics 确保只能使用一次
9///
10/// # Examples (示例)
11///
12/// ```
13/// use deferred_map::DeferredMap;
14///
15/// let mut map = DeferredMap::new();
16/// let handle = map.allocate_handle();
17/// let key = handle.key();
18/// map.insert(handle, 42);
19/// assert_eq!(map.get(key), Some(&42));
20/// ```
21#[derive(Debug, PartialEq, Eq)]
22#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
23pub struct Handle {
24 key: u64, // The key of the handle
25}
26
27impl Handle {
28 /// Create a new Handle (internal use)
29 ///
30 /// 创建一个新的 Handle(内部使用)
31 #[inline(always)]
32 pub(crate) fn new(key: u64) -> Self {
33 Self { key }
34 }
35
36 /// Get the key that will be used for this handle
37 ///
38 /// This is the same as raw_value(), but with a more semantic name.
39 ///
40 /// 获取此 handle 对应的 key
41 ///
42 /// 这与 raw_value() 相同,但名称更具语义性
43 #[inline(always)]
44 pub fn key(&self) -> u64 {
45 self.key
46 }
47
48 /// Extract index (lower 32 bits)
49 ///
50 /// 提取 index(低 32 位)
51 #[inline(always)]
52 pub fn index(&self) -> u32 {
53 self.key as u32
54 }
55 /// Extract generation (upper 32 bits)
56 ///
57 /// 提取 generation(高 32 位)
58 #[inline(always)]
59 pub fn generation(&self) -> u32 {
60 (self.key >> 32) as u32
61 }
62}