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}