deferred_map/
lib.rs

1use std::fmt;
2use std::mem::ManuallyDrop;
3
4mod error;
5mod utils;
6#[cfg(test)]
7mod tests {
8    // Test modules for DeferredMap
9    // DeferredMap 的测试模块
10    mod handle;
11    mod insertion;
12    mod removal;
13    mod edge_cases;
14
15}
16
17pub use error::DeferredMapError;
18use utils::{likely, unlikely};
19
20/// Handle is a one-time token for inserting values into DeferredMap
21/// 
22/// Handle does not implement the Clone trait, ensuring it can only be used once
23/// through Rust's move semantics.
24/// 
25/// Handle 是一次性令牌,用于向 DeferredMap 插入值
26/// 
27/// Handle 不实现 Clone trait,通过 Rust 的 move semantics 确保只能使用一次
28/// 
29/// # Examples (示例)
30/// 
31/// ```
32/// use deferred_map::DeferredMap;
33/// 
34/// let mut map = DeferredMap::new();
35/// let handle = map.allocate_handle();
36/// let key = handle.key();
37/// map.insert(handle, 42).unwrap();
38/// assert_eq!(map.get(key), Some(&42));
39/// ```
40#[derive(Debug, PartialEq, Eq)]
41pub struct Handle {
42    key: u64, // The key of the handle
43}
44
45impl Handle {
46    /// Create a new Handle (internal use)
47    /// 
48    /// 创建一个新的 Handle(内部使用)
49    #[inline(always)]
50    fn new(key: u64) -> Self {
51        Self { key }
52    }
53
54    /// Get the key that will be used for this handle
55    /// 
56    /// This is the same as raw_value(), but with a more semantic name.
57    /// 
58    /// 获取此 handle 对应的 key
59    /// 
60    /// 这与 raw_value() 相同,但名称更具语义性
61    #[inline(always)]
62    pub fn key(&self) -> u64 {
63        self.key
64    }
65
66    /// Extract index (lower 32 bits)
67    /// 
68    /// 提取 index(低 32 位)
69    #[inline(always)]
70    pub fn index(&self) -> u32 {
71        self.key as u32
72    }
73    /// Extract generation (upper 32 bits)
74    /// 
75    /// 提取 generation(高 32 位)
76    #[inline(always)]
77    pub fn generation(&self) -> u32 {
78        (self.key >> 32) as u32
79    }
80}
81
82/// Internal slot storage using union for memory optimization
83/// 
84/// When occupied, stores the value; when vacant, stores the next free slot index.
85/// 
86/// Slot 内部存储,使用 union 优化内存
87/// 
88/// 占用时存储值,空闲时存储下一个空闲 slot 的索引
89union SlotUnion<T> {
90    value: ManuallyDrop<T>,
91    next_free: u32,
92}
93
94/// Slot stores the actual value and version information
95/// 
96/// Version uses lowest 2 bits for state (0b00=vacant, 0b01=reserved, 0b11=occupied)
97/// and upper 30 bits for generation counter.
98/// 
99/// Slot 存储实际的值和 version 信息
100/// 
101/// version 的最低 2 位表示状态(0b00=空闲, 0b01=预留, 0b11=占用)
102/// 高 30 位为代数计数器
103struct Slot<T> {
104    u: SlotUnion<T>,
105    version: u32, // Low 2 bits: state, High 30 bits: generation | 低2位:状态,高30位:代数
106}
107
108/// Safe API to read slot content
109/// 
110/// 安全的 API 来读取 slot
111enum SlotContent<'a, T: 'a> {
112    /// Occupied slot with value
113    /// 
114    /// 占用 slot 的值
115    Occupied(&'a T),
116    
117    /// Vacant slot with next free index
118    /// 
119    /// 空闲 slot 的索引
120    Vacant(&'a u32),
121}
122
123/// Safe API to read mutable slot content
124/// 
125/// 安全的 API 来读取可变 slot
126enum SlotContentMut<'a, T: 'a> {
127    /// Occupied slot with mutable reference
128    /// 
129    /// 占用 slot 的可变引用
130    OccupiedMut(&'a mut T),
131    
132    /// Vacant slot with mutable reference to next free index
133    /// 
134    /// 空闲 slot 的索引可变引用
135    VacantMut(&'a mut u32),
136}
137
138use self::SlotContent::{Occupied, Vacant};
139use self::SlotContentMut::{OccupiedMut, VacantMut};
140
141impl<T> Slot<T> {
142    /// Get the state bits (lowest 2 bits of version)
143    /// 
144    /// 获取状态位(version 的最低 2 位)
145    #[inline(always)]
146    fn state_bits(&self) -> u32 {
147        self.version & 0b11
148    }
149
150    /// Check if slot is vacant (state bits == 0b00)
151    /// 
152    /// 检查 slot 是否空闲(状态位 == 0b00)
153    #[inline(always)]
154    #[allow(unused)]
155    fn is_vacant(&self) -> bool {
156        self.state_bits() == 0b00
157    }
158
159    /// Check if slot is reserved (state bits == 0b01)
160    /// 
161    /// 检查 slot 是否已预留(状态位 == 0b01)
162    #[inline(always)]
163    fn is_reserved(&self) -> bool {
164        self.state_bits() == 0b01
165    }
166
167    /// Check if slot is occupied (state bits == 0b11)
168    /// 
169    /// 检查 slot 是否被占用(状态位 == 0b11)
170    #[inline(always)]
171    fn is_occupied(&self) -> bool {
172        self.state_bits() == 0b11
173    }
174
175    /// Get the generation from version (excludes state bits)
176    /// 
177    /// 从 version 中获取 generation(不包含状态位)
178    #[inline(always)]
179    fn generation(&self) -> u32 {
180        self.version >> 2
181    }
182
183    /// Safely get slot content
184    /// 
185    /// Only returns content for Vacant (next_free) or Occupied (value) states.
186    /// Reserved state is treated as vacant for safety.
187    /// 
188    /// 安全地获取 slot 内容
189    /// 
190    /// 只返回 Vacant (next_free) 或 Occupied (value) 状态的内容
191    /// Reserved 状态出于安全考虑视为 vacant
192    #[inline(always)]
193    fn get<'a>(&'a self) -> SlotContent<'a, T> {
194        unsafe {
195            if self.is_occupied() {
196                Occupied(&*self.u.value)
197            } else {
198                // For vacant or reserved, return next_free (for reserved it's undefined but safe to read)
199                // 对于 vacant 或 reserved,返回 next_free(对于 reserved 它是未定义的但安全读取)
200                Vacant(&self.u.next_free)
201            }
202        }
203    }
204
205    /// Safely get mutable slot content
206    /// 
207    /// Only returns content for Vacant (next_free) or Occupied (value) states.
208    /// Reserved state is treated as vacant for safety.
209    /// 
210    /// 安全地获取 slot 可变内容
211    /// 
212    /// 只返回 Vacant (next_free) 或 Occupied (value) 状态的内容
213    /// Reserved 状态出于安全考虑视为 vacant
214    #[inline(always)]
215    fn get_mut<'a>(&'a mut self) -> SlotContentMut<'a, T> {
216        unsafe {
217            if self.is_occupied() {
218                OccupiedMut(&mut *self.u.value)
219            } else {
220                // For vacant or reserved, return next_free (for reserved it's undefined but safe to read)
221                // 对于 vacant 或 reserved,返回 next_free(对于 reserved 它是未定义的但安全读取)
222                VacantMut(&mut self.u.next_free)
223            }
224        }
225    }
226}
227
228impl<T> Drop for Slot<T> {
229    #[inline]
230    fn drop(&mut self) {
231        if std::mem::needs_drop::<T>() && self.is_occupied() {
232            // Only drop value when occupied
233            // 只有在占用状态时才 drop 值
234            unsafe {
235                ManuallyDrop::drop(&mut self.u.value);
236            }
237        }
238    }
239}
240
241impl<T: Clone> Clone for Slot<T> {
242    #[inline]
243    fn clone(&self) -> Self {
244        Self {
245            u: match self.get() {
246                Occupied(value) => SlotUnion {
247                    value: ManuallyDrop::new(value.clone()),
248                },
249                Vacant(&next_free) => SlotUnion { next_free },
250            },
251            version: self.version,
252        }
253    }
254
255    #[inline]
256    fn clone_from(&mut self, source: &Self) {
257        match (self.get_mut(), source.get()) {
258            (OccupiedMut(self_val), Occupied(source_val)) => self_val.clone_from(source_val),
259            (VacantMut(self_next_free), Vacant(&source_next_free)) => {
260                *self_next_free = source_next_free
261            },
262            (_, Occupied(value)) => {
263                self.u = SlotUnion {
264                    value: ManuallyDrop::new(value.clone()),
265                }
266            },
267            (_, Vacant(&next_free)) => self.u = SlotUnion { next_free },
268        }
269        self.version = source.version;
270    }
271}
272
273impl<T: fmt::Debug> fmt::Debug for Slot<T> {
274    fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
275        let mut builder = fmt.debug_struct("Slot");
276        builder.field("version", &self.version);
277        match self.get() {
278            Occupied(value) => builder.field("value", value).finish(),
279            Vacant(next_free) => builder.field("next_free", next_free).finish(),
280        }
281    }
282}
283
284/// DeferredMap is a high-performance map based on slotmap
285/// 
286/// Usage requires first obtaining a Handle via `allocate_handle`, 
287/// then using the Handle to insert.
288/// 
289/// DeferredMap 是一个基于 slotmap 的高性能映射表
290/// 
291/// 使用前需要先通过 `allocate_handle` 获取 Handle,然后使用 Handle 进行插入
292/// 
293/// # Features (特性)
294/// 
295/// - O(1) insertion, lookup, and removal | O(1) 插入、查找和删除
296/// - Generational indices prevent use-after-free | 代数索引防止释放后使用
297/// - Handle-based deferred insertion | 基于 Handle 的延迟插入
298/// - Memory efficient with union-based slots | 使用 union 的内存高效 slot
299/// 
300/// # Examples (示例)
301/// 
302/// ```
303/// use deferred_map::DeferredMap;
304/// 
305/// let mut map = DeferredMap::new();
306/// 
307/// // Allocate handle first | 先分配 handle
308/// let handle = map.allocate_handle();
309/// let key = handle.key();
310/// 
311/// // Insert value later | 之后插入值
312/// map.insert(handle, 42).unwrap();
313/// 
314/// // Access value | 访问值
315/// assert_eq!(map.get(key), Some(&42));
316/// 
317/// // Remove value | 删除值
318/// assert_eq!(map.remove(key), Some(42));
319/// ```
320pub struct DeferredMap<T> {
321    slots: Vec<Slot<T>>,
322    free_head: u32,     // Head of free list | 空闲列表的头部索引
323    num_elems: u32,     // Current element count | 当前元素数量
324}
325
326impl<T> DeferredMap<T> {
327    /// Create a new empty DeferredMap
328    /// 
329    /// 创建一个新的空 DeferredMap
330    /// 
331    /// # Examples (示例)
332    /// 
333    /// ```
334    /// use deferred_map::DeferredMap;
335    /// 
336    /// let map: DeferredMap<i32> = DeferredMap::new();
337    /// assert!(map.is_empty());
338    /// ```
339    #[inline(always)]
340    pub fn new() -> Self {
341        Self::with_capacity(0)
342    }
343
344    /// Create a DeferredMap with specified capacity
345    /// 
346    /// 创建一个指定容量的 DeferredMap
347    /// 
348    /// # Parameters
349    /// - `capacity`: Initial capacity (number of slots to pre-allocate)
350    /// 
351    /// # 参数
352    /// - `capacity`: 初始容量(预分配的 slot 数量)
353    /// 
354    /// # Examples (示例)
355    /// 
356    /// ```
357    /// use deferred_map::DeferredMap;
358    /// 
359    /// let map: DeferredMap<i32> = DeferredMap::with_capacity(100);
360    /// assert_eq!(map.capacity(), 0);
361    /// ```
362    #[inline]
363    pub fn with_capacity(capacity: usize) -> Self {
364        // Create slots with sentinel at index 0
365        // Sentinel is not used but maintains index consistency
366        // 创建 slots,在索引 0 处添加 sentinel
367        // sentinel 不实际使用,但保持索引一致性
368        let mut slots = Vec::with_capacity(capacity + 1);
369        slots.push(Slot {
370            u: SlotUnion { next_free: 0 },
371            version: 0,
372        });
373
374        Self {
375            slots,
376            free_head: 1,  // Start allocation from index 1 | 从索引 1 开始分配
377            num_elems: 0,
378        }
379    }
380
381    /// Encode index and generation into u64
382    /// 
383    /// 从 index 和 generation 编码为 u64
384    #[inline(always)]
385    fn encode_key(index: u32, generation: u32) -> u64 {
386        ((generation as u64) << 32) | (index as u64)
387    }
388
389    /// Decode u64 into index and generation
390    /// 
391    /// 从 u64 解码为 index 和 generation
392    #[inline(always)]
393    fn decode_key(key: u64) -> (u32, u32) {
394        let index = key as u32;
395        let generation = (key >> 32) as u32;
396        (index, generation)
397    }
398
399    /// Pre-allocate a Handle
400    /// 
401    /// This Handle can be used later to insert a value.
402    /// The slot is immediately created in Reserved state.
403    /// 
404    /// 预分配一个 Handle
405    /// 
406    /// 这个 Handle 可以在之后用于插入值
407    /// slot 立即创建为 Reserved 状态
408    /// 
409    /// # Returns
410    /// A unique Handle for later insertion
411    /// 
412    /// # 返回值
413    /// 用于后续插入的唯一 Handle
414    /// 
415    /// # Examples (示例)
416    /// 
417    /// ```
418    /// use deferred_map::DeferredMap;
419    /// 
420    /// let mut map = DeferredMap::new();
421    /// let handle = map.allocate_handle();
422    /// let key = handle.key();
423    /// map.insert(handle, "value").unwrap();
424    /// assert_eq!(map.get(key), Some(&"value"));
425    /// ```
426    pub fn allocate_handle(&mut self) -> Handle {
427        if let Some(slot) = self.slots.get_mut(self.free_head as usize) {
428            // Reuse existing vacant slot from free list
429            // 从空闲列表中复用已有的空闲 slot
430            let index = self.free_head;
431            
432            // Update free_head to next free slot before changing state
433            // 在改变状态前更新 free_head 到下一个空闲 slot
434            unsafe {
435                self.free_head = slot.u.next_free;
436            }
437            
438            // Transition: vacant(0bXX00) -> reserved(0bXX01)
439            // 状态转换:vacant(0bXX00) -> reserved(0bXX01)
440            slot.version += 1;
441            
442            let raw = Self::encode_key(index, slot.generation());
443            Handle::new(raw)
444        } else {
445            // Need to extend Vec, allocate new slot
446            // 需要扩展 Vec,分配新 slot
447            let index = self.slots.len() as u32;
448            let version = 0b01; // New slot starts in reserved state | 新 slot 从 reserved 状态开始
449            
450            // Create reserved slot
451            // 创建 reserved slot
452            self.slots.push(Slot {
453                u: SlotUnion { next_free: 0 }, // Value doesn't matter for reserved | 对于 reserved 状态该值不重要
454                version,
455            });
456            
457            // Update free_head
458            // 更新 free_head
459            self.free_head = index + 1;
460            
461            // Extract generation from version (reserved state: 0b01)
462            // 从 version 提取 generation(reserved 状态:0b01)
463            let raw = Self::encode_key(index, version >> 2);
464            Handle::new(raw)
465        }
466    }
467
468    /// Insert value using Handle
469    /// 
470    /// The Handle is consumed (moved), ensuring it can only be used once.
471    /// The slot must be in Reserved state.
472    /// 
473    /// 使用 Handle 插入值
474    /// 
475    /// Handle 会被消耗(move),确保只能使用一次
476    /// slot 必须处于 Reserved 状态
477    /// 
478    /// # Parameters
479    /// - `handle`: The Handle obtained from `allocate_handle`
480    /// - `value`: The value to insert
481    /// 
482    /// # Returns
483    /// - `Ok(())`: Successfully inserted
484    /// - `Err(DeferredMapError)`: Error if the Handle is invalid or already used
485    /// 
486    /// # 参数
487    /// - `handle`: 从 `allocate_handle` 获取的 Handle
488    /// - `value`: 要插入的值
489    /// 
490    /// # 返回值
491    /// - `Ok(())`: 成功插入
492    /// - `Err(DeferredMapError)`: 如果 Handle 无效或已被使用则返回错误
493    /// 
494    /// # Examples (示例)
495    /// 
496    /// ```
497    /// use deferred_map::DeferredMap;
498    /// 
499    /// let mut map = DeferredMap::new();
500    /// let handle = map.allocate_handle();
501    /// let key = handle.key();
502    /// map.insert(handle, 42).unwrap();
503    /// assert_eq!(map.get(key), Some(&42));
504    /// ```
505    pub fn insert(&mut self, handle: Handle, value: T) -> Result<(), DeferredMapError> {
506        let index = handle.index();
507        #[cfg(debug_assertions)]
508        {
509            // Validate index (skip sentinel)
510            // 验证 index 有效(跳过 sentinel)
511            if unlikely(index == 0) {
512                return Err(DeferredMapError::InvalidHandle);
513            }
514
515            // Slot must exist (allocate_handle should have created it)
516            // slot 必须存在(allocate_handle 应该已经创建了它)
517            if unlikely(index as usize >= self.slots.len()) {
518                return Err(DeferredMapError::InvalidHandle);
519            }
520        }
521
522        let slot = unsafe { self.slots.get_unchecked_mut(index as usize) };
523
524        #[cfg(debug_assertions)]
525        {
526            let handle_generation = handle.generation();
527
528            // Validate generation match (handle stores generation, not version)
529            // 验证 generation 匹配(handle 存储 generation,不是 version)
530            if unlikely(slot.generation() != handle_generation) {
531                return Err(DeferredMapError::GenerationMismatch);
532            }
533
534            // Validate slot is in Reserved state
535            // 验证 slot 处于 Reserved 状态
536            if unlikely(!slot.is_reserved()) {
537                if slot.is_occupied() {
538                    return Err(DeferredMapError::HandleAlreadyUsed);
539                } else {
540                    return Err(DeferredMapError::GenerationMismatch);
541                }
542            }
543        }
544
545        // Insert value and transition: reserved(0bXX01) -> occupied(0bXX11)
546        // 插入值并状态转换:reserved(0bXX01) -> occupied(0bXX11)
547        slot.u.value = ManuallyDrop::new(value);
548        slot.version += 2; // 0bXX01 -> 0bXX11
549        
550        self.num_elems += 1;
551        
552        Ok(())
553    }
554
555    /// Get immutable reference to value by u64 key
556    /// 
557    /// 通过 u64 key 获取值的不可变引用
558    /// 
559    /// # Parameters
560    /// - `key`: The key returned from `insert`
561    /// 
562    /// # Returns
563    /// - `Some(&T)`: Reference to the value if key is valid
564    /// - `None`: If key is invalid or value has been removed
565    /// 
566    /// # 参数
567    /// - `key`: 从 `insert` 返回的 key
568    /// 
569    /// # 返回值
570    /// - `Some(&T)`: 如果 key 有效则返回值的引用
571    /// - `None`: 如果 key 无效或值已被删除
572    /// 
573    /// # Examples (示例)
574    /// 
575    /// ```
576    /// use deferred_map::DeferredMap;
577    /// 
578    /// let mut map = DeferredMap::new();
579    /// let handle = map.allocate_handle();
580    /// let key = handle.key();
581    /// map.insert(handle, 42).unwrap();
582    /// assert_eq!(map.get(key), Some(&42));
583    /// ```
584    #[inline]
585    pub fn get(&self, key: u64) -> Option<&T> {
586        let (index, generation) = Self::decode_key(key);
587        
588        // Bounds check
589        // 边界检查
590        if unlikely(index as usize >= self.slots.len()) {
591            return None;
592        }
593        
594        // SAFETY: We've checked that index < slots.len()
595        let slot = unsafe { self.slots.get_unchecked(index as usize) };
596        
597        // Fast path: check generation match and return value
598        // 快速路径:检查 generation 匹配并返回值
599        if likely(slot.generation() == generation && slot.is_occupied()) {
600            // SAFETY: We've checked that slot is occupied
601            Some(unsafe { &*slot.u.value })
602        } else {
603            None
604        }
605    }
606
607    /// Get mutable reference to value by u64 key
608    /// 
609    /// 通过 u64 key 获取值的可变引用
610    /// 
611    /// # Parameters
612    /// - `key`: The key returned from `insert`
613    /// 
614    /// # Returns
615    /// - `Some(&mut T)`: Mutable reference to the value if key is valid
616    /// - `None`: If key is invalid or value has been removed
617    /// 
618    /// # 参数
619    /// - `key`: 从 `insert` 返回的 key
620    /// 
621    /// # 返回值
622    /// - `Some(&mut T)`: 如果 key 有效则返回值的可变引用
623    /// - `None`: 如果 key 无效或值已被删除
624    /// 
625    /// # Examples (示例)
626    /// 
627    /// ```
628    /// use deferred_map::DeferredMap;
629    /// 
630    /// let mut map = DeferredMap::new();
631    /// let handle = map.allocate_handle();
632    /// let key = handle.key();
633    /// map.insert(handle, 42).unwrap();
634    /// 
635    /// if let Some(value) = map.get_mut(key) {
636    ///     *value = 100;
637    /// }
638    /// assert_eq!(map.get(key), Some(&100));
639    /// ```
640    #[inline]
641    pub fn get_mut(&mut self, key: u64) -> Option<&mut T> {
642        let (index, generation) = Self::decode_key(key);
643        
644        // Bounds check
645        // 边界检查
646        if unlikely(index as usize >= self.slots.len()) {
647            return None;
648        }
649        
650        // SAFETY: We've checked that index < slots.len()
651        let slot = unsafe { self.slots.get_unchecked_mut(index as usize) };
652        
653        // Fast path: check generation match and return mutable reference
654        // 快速路径:检查 generation 匹配并返回可变引用
655        if likely(slot.generation() == generation && slot.is_occupied()) {
656            // SAFETY: We've checked that slot is occupied
657            Some(unsafe { &mut *slot.u.value })
658        } else {
659            None
660        }
661    }
662
663    /// Remove value by u64 key
664    /// 
665    /// If successful, returns the removed value and adds the slot to the free list.
666    /// 
667    /// 通过 u64 key 移除值
668    /// 
669    /// 如果成功移除,返回被移除的值,并将该 slot 加入空闲列表
670    /// 
671    /// # Parameters
672    /// - `key`: The key returned from `insert`
673    /// 
674    /// # Returns
675    /// - `Some(T)`: The removed value if key is valid
676    /// - `None`: If key is invalid or value has already been removed
677    /// 
678    /// # 参数
679    /// - `key`: 从 `insert` 返回的 key
680    /// 
681    /// # 返回值
682    /// - `Some(T)`: 如果 key 有效则返回被移除的值
683    /// - `None`: 如果 key 无效或值已被删除
684    /// 
685    /// # Examples (示例)
686    /// 
687    /// ```
688    /// use deferred_map::DeferredMap;
689    /// 
690    /// let mut map = DeferredMap::new();
691    /// let handle = map.allocate_handle();
692    /// let key = handle.key();
693    /// map.insert(handle, 42).unwrap();
694    /// 
695    /// assert_eq!(map.remove(key), Some(42));
696    /// assert_eq!(map.get(key), None);
697    /// ```
698    #[inline]
699    pub fn remove(&mut self, key: u64) -> Option<T> {
700        let (index, generation) = Self::decode_key(key);
701        
702        // Bounds check
703        // 边界检查
704        if unlikely(index as usize >= self.slots.len()) {
705            return None;
706        }
707
708        // SAFETY: We've checked that index < slots.len()
709        let slot = unsafe { self.slots.get_unchecked_mut(index as usize) };
710        
711        // Fast path: check generation and occupied state
712        // 快速路径:检查 generation 和占用状态
713        if likely(slot.generation() == generation && slot.is_occupied()) {
714            // Take value from slot
715            // 从 slot 中取出值
716            let value = unsafe { ManuallyDrop::take(&mut slot.u.value) };
717            
718            // Add this slot to free list head
719            // 将此 slot 加入空闲列表头部
720            slot.u.next_free = self.free_head;
721            self.free_head = index;
722            
723            // Transition: occupied(0bXX11) -> vacant(0bYY00, next generation)
724            // 状态转换:occupied(0bXX11) -> vacant(0bYY00,下一代)
725            slot.version = slot.version.wrapping_add(1); // 0bXX11 -> 0bYY00
726            
727            self.num_elems -= 1;
728            Some(value)
729        } else {
730            None
731        }
732    }
733
734    /// Release an unused Handle
735    /// 
736    /// Returns the reserved slot back to the free list.
737    /// This is useful when you allocated a handle but decided not to use it.
738    /// 
739    /// 释放未使用的 Handle
740    /// 
741    /// 将预留的 slot 返回到空闲列表
742    /// 当你分配了 handle 但决定不使用时很有用
743    /// 
744    /// # Parameters
745    /// - `handle`: The Handle to release
746    /// 
747    /// # Returns
748    /// - `Ok(())`: Handle successfully released
749    /// - `Err(DeferredMapError)`: Error if handle is invalid or already used
750    /// 
751    /// # 参数
752    /// - `handle`: 要释放的 Handle
753    /// 
754    /// # 返回值
755    /// - `Ok(())`: Handle 成功释放
756    /// - `Err(DeferredMapError)`: 如果 handle 无效或已被使用则返回错误
757    /// 
758    /// # Examples (示例)
759    /// 
760    /// ```
761    /// use deferred_map::DeferredMap;
762    /// 
763    /// let mut map = DeferredMap::<i32>::new();
764    /// let handle = map.allocate_handle();
765    /// 
766    /// // Decided not to use it
767    /// // 决定不使用它
768    /// map.release_handle(handle).unwrap();
769    /// ```
770    pub fn release_handle(&mut self, handle: Handle) -> Result<(), DeferredMapError> {
771        let index = handle.index();
772        let handle_generation = handle.generation();
773
774        // Validate index (skip sentinel)
775        // 验证 index 有效(跳过 sentinel)
776        if unlikely(index == 0) {
777            return Err(DeferredMapError::InvalidHandle);
778        }
779
780        // Slot must exist
781        // slot 必须存在
782        if unlikely(index as usize >= self.slots.len()) {
783            return Err(DeferredMapError::InvalidHandle);
784        }
785
786        let slot = &mut self.slots[index as usize];
787
788        // Validate generation match (handle stores generation, not version)
789        // 验证 generation 匹配(handle 存储 generation,不是 version)
790        if unlikely(slot.generation() != handle_generation) {
791            return Err(DeferredMapError::GenerationMismatch);
792        }
793
794        // Validate slot is in Reserved state
795        // 验证 slot 处于 Reserved 状态
796        if unlikely(!slot.is_reserved()) {
797            if slot.is_occupied() {
798                return Err(DeferredMapError::HandleAlreadyUsed);
799            } else {
800                return Err(DeferredMapError::GenerationMismatch);
801            }
802        }
803
804        // Add this slot to free list head
805        // 将此 slot 加入空闲列表头部
806        slot.u.next_free = self.free_head;
807        self.free_head = index;
808
809        // Transition: reserved(0bXX01) -> vacant(0bYY00, next generation)
810        // 状态转换:reserved(0bXX01) -> vacant(0bYY00,下一代)
811        slot.version = slot.version.wrapping_add(3); // 0bXX01 + 3 = 0bYY00
812
813        Ok(())
814    }
815
816    /// Check if key exists
817    /// 
818    /// 检查 key 是否存在
819    /// 
820    /// # Parameters
821    /// - `key`: The key to check
822    /// 
823    /// # Returns
824    /// `true` if the key exists, `false` otherwise
825    /// 
826    /// # 参数
827    /// - `key`: 要检查的 key
828    /// 
829    /// # 返回值
830    /// 如果 key 存在则返回 `true`,否则返回 `false`
831    /// 
832    /// # Examples (示例)
833    /// 
834    /// ```
835    /// use deferred_map::DeferredMap;
836    /// 
837    /// let mut map = DeferredMap::new();
838    /// let handle = map.allocate_handle();
839    /// let key = handle.key();
840    /// map.insert(handle, 42).unwrap();
841    /// 
842    /// assert!(map.contains_key(key));
843    /// map.remove(key);
844    /// assert!(!map.contains_key(key));
845    /// ```
846    #[inline]
847    pub fn contains_key(&self, key: u64) -> bool {
848        self.get(key).is_some()
849    }
850
851    /// Return the number of valid elements
852    /// 
853    /// 返回有效元素的数量
854    /// 
855    /// # Examples (示例)
856    /// 
857    /// ```
858    /// use deferred_map::DeferredMap;
859    /// 
860    /// let mut map = DeferredMap::new();
861    /// assert_eq!(map.len(), 0);
862    /// 
863    /// let handle = map.allocate_handle();
864    /// map.insert(handle, 42).unwrap();
865    /// assert_eq!(map.len(), 1);
866    /// ```
867    #[inline]
868    pub fn len(&self) -> usize {
869        self.num_elems as usize
870    }
871
872    /// Check if the map is empty
873    /// 
874    /// 检查是否为空
875    /// 
876    /// # Examples (示例)
877    /// 
878    /// ```
879    /// use deferred_map::DeferredMap;
880    /// 
881    /// let map: DeferredMap<i32> = DeferredMap::new();
882    /// assert!(map.is_empty());
883    /// ```
884    #[inline]
885    pub fn is_empty(&self) -> bool {
886        self.num_elems == 0
887    }
888
889    /// Return capacity (number of allocated slots, excluding sentinel)
890    /// 
891    /// 返回容量(已分配的 slot 数量,不包括 sentinel)
892    /// 
893    /// # Examples (示例)
894    /// 
895    /// ```
896    /// use deferred_map::DeferredMap;
897    /// 
898    /// let map: DeferredMap<i32> = DeferredMap::with_capacity(10);
899    /// assert_eq!(map.capacity(), 0);
900    /// ```
901    #[inline]
902    pub fn capacity(&self) -> usize {
903        // Subtract sentinel slot
904        // 减去 sentinel slot
905        self.slots.len().saturating_sub(1)
906    }
907
908    /// Clear all elements
909    /// 
910    /// 清空所有元素
911    /// 
912    /// # Examples (示例)
913    /// 
914    /// ```
915    /// use deferred_map::DeferredMap;
916    /// 
917    /// let mut map = DeferredMap::new();
918    /// let handle = map.allocate_handle();
919    /// map.insert(handle, 42).unwrap();
920    /// 
921    /// map.clear();
922    /// assert!(map.is_empty());
923    /// ```
924    #[inline]
925    pub fn clear(&mut self) {
926        self.slots.clear();
927        // Re-add sentinel
928        // 重新添加 sentinel
929        self.slots.push(Slot {
930            u: SlotUnion { next_free: 0 },
931            version: 0,
932        });
933        self.free_head = 1;
934        self.num_elems = 0;
935    }
936
937    /// Return an iterator over all (key, value) pairs
938    /// 
939    /// 返回一个迭代器,遍历所有 (key, value) 对
940    /// 
941    /// # Examples (示例)
942    /// 
943    /// ```
944    /// use deferred_map::DeferredMap;
945    /// 
946    /// let mut map = DeferredMap::new();
947    /// 
948    /// let h1 = map.allocate_handle();
949    /// map.insert(h1, 1).unwrap();
950    /// 
951    /// let h2 = map.allocate_handle();
952    /// map.insert(h2, 2).unwrap();
953    /// 
954    /// let sum: i32 = map.iter().map(|(_, v)| v).sum();
955    /// assert_eq!(sum, 3);
956    /// ```
957    #[inline]
958    pub fn iter(&self) -> impl Iterator<Item = (u64, &T)> {
959        self.slots.iter().enumerate().skip(1).filter_map(|(index, slot)| {
960            if let Occupied(value) = slot.get() {
961                let key = Self::encode_key(index as u32, slot.generation());
962                Some((key, value))
963            } else {
964                None
965            }
966        })
967    }
968
969    /// Return a mutable iterator over all (key, value) pairs
970    /// 
971    /// 返回一个可变迭代器,遍历所有 (key, value) 对
972    /// 
973    /// # Examples (示例)
974    /// 
975    /// ```
976    /// use deferred_map::DeferredMap;
977    /// 
978    /// let mut map = DeferredMap::new();
979    /// 
980    /// let h1 = map.allocate_handle();
981    /// map.insert(h1, 1).unwrap();
982    /// 
983    /// let h2 = map.allocate_handle();
984    /// map.insert(h2, 2).unwrap();
985    /// 
986    /// for (_, value) in map.iter_mut() {
987    ///     *value *= 2;
988    /// }
989    /// 
990    /// let sum: i32 = map.iter().map(|(_, v)| v).sum();
991    /// assert_eq!(sum, 6);
992    /// ```
993    #[inline]
994    pub fn iter_mut(&mut self) -> impl Iterator<Item = (u64, &mut T)> {
995        self.slots.iter_mut().enumerate().skip(1).filter_map(|(index, slot)| {
996            let generation = slot.generation();
997            if let OccupiedMut(value) = slot.get_mut() {
998                let key = Self::encode_key(index as u32, generation);
999                Some((key, value))
1000            } else {
1001                None
1002            }
1003        })
1004    }
1005}
1006
1007impl<T: Clone> Clone for DeferredMap<T> {
1008    #[inline]
1009    fn clone(&self) -> Self {
1010        Self {
1011            slots: self.slots.clone(),
1012            free_head: self.free_head,
1013            num_elems: self.num_elems,
1014        }
1015    }
1016
1017    #[inline]
1018    fn clone_from(&mut self, source: &Self) {
1019        self.slots.clone_from(&source.slots);
1020        self.free_head = source.free_head;
1021        self.num_elems = source.num_elems;
1022    }
1023}
1024
1025impl<T> Default for DeferredMap<T> {
1026    #[inline]
1027    fn default() -> Self {
1028        Self::new()
1029    }
1030}
1031
1032#[cfg(test)]
1033mod basic_tests {
1034    use super::*;
1035
1036    #[test]
1037    fn test_basic_insert_and_get() {
1038        let mut map = DeferredMap::new();
1039        
1040        let handle = map.allocate_handle();
1041        let key = handle.key();
1042        map.insert(handle, 42).unwrap();
1043        
1044        assert_eq!(map.get(key), Some(&42));
1045    }
1046
1047    #[test]
1048    fn test_handle_cannot_be_used_twice() {
1049        let mut map = DeferredMap::new();
1050        
1051        let handle = map.allocate_handle();
1052        let key = handle.key();
1053        map.insert(handle, 42).unwrap();
1054        
1055        // Attempting to insert again with the same key should fail
1056        // 尝试使用相同的 key 再次插入应该失败
1057        let handle2 = Handle::new(key);
1058        let result = map.insert(handle2, 100);
1059        
1060        assert_eq!(result, Err(DeferredMapError::HandleAlreadyUsed));
1061        assert_eq!(map.get(key), Some(&42)); // Original value unchanged | 原值不变
1062    }
1063
1064    #[test]
1065    fn test_remove_and_reuse() {
1066        let mut map = DeferredMap::new();
1067        
1068        let handle1 = map.allocate_handle();
1069        let key1 = handle1.key();
1070        map.insert(handle1, 42).unwrap();
1071        
1072        assert_eq!(map.len(), 1);
1073        assert_eq!(map.remove(key1), Some(42));
1074        assert_eq!(map.len(), 0);
1075        assert_eq!(map.get(key1), None);
1076        
1077        // Allocating new handle should reuse previous slot
1078        // 分配新的 handle 应该复用之前的 slot
1079        let handle2 = map.allocate_handle();
1080        let key2 = handle2.key();
1081        map.insert(handle2, 100).unwrap();
1082        
1083        // key2 should have different generation
1084        // key2 应该有不同的 generation
1085        assert_ne!(key1, key2);
1086        assert_eq!(map.get(key2), Some(&100));
1087        assert_eq!(map.get(key1), None); // Old key should be invalid | 旧 key 应该无效
1088    }
1089
1090    #[test]
1091    fn test_generation_mismatch() {
1092        let mut map = DeferredMap::new();
1093        
1094        let handle = map.allocate_handle();
1095        let old_key = handle.key();
1096        map.insert(handle, 42).unwrap();
1097        
1098        map.remove(old_key);
1099        
1100        // Attempting to use old key should fail
1101        // 尝试使用旧的 key 对应的 handle 应该失败
1102        let old_handle = Handle::new(old_key);
1103        let result = map.insert(old_handle, 100);
1104        
1105        assert_eq!(result, Err(DeferredMapError::GenerationMismatch));
1106    }
1107
1108    #[test]
1109    fn test_multiple_inserts() {
1110        let mut map = DeferredMap::new();
1111        
1112        let mut keys = Vec::new();
1113        for i in 0..10 {
1114            let handle = map.allocate_handle();
1115            let key = handle.key();
1116            map.insert(handle, i * 10).unwrap();
1117            keys.push(key);
1118        }
1119        
1120        assert_eq!(map.len(), 10);
1121        
1122        for (i, &key) in keys.iter().enumerate() {
1123            assert_eq!(map.get(key), Some(&(i * 10)));
1124        }
1125    }
1126
1127    #[test]
1128    fn test_get_mut() {
1129        let mut map = DeferredMap::new();
1130        
1131        let handle = map.allocate_handle();
1132        let key = handle.key();
1133        map.insert(handle, 42).unwrap();
1134        
1135        if let Some(value) = map.get_mut(key) {
1136            *value = 100;
1137        }
1138        
1139        assert_eq!(map.get(key), Some(&100));
1140    }
1141
1142    #[test]
1143    fn test_contains_key() {
1144        let mut map = DeferredMap::new();
1145        
1146        let handle = map.allocate_handle();
1147        let key = handle.key();
1148        map.insert(handle, 42).unwrap();
1149        
1150        assert!(map.contains_key(key));
1151        
1152        map.remove(key);
1153        assert!(!map.contains_key(key));
1154    }
1155
1156    #[test]
1157    fn test_is_empty() {
1158        let mut map: DeferredMap<i32> = DeferredMap::new();
1159        
1160        assert!(map.is_empty());
1161        
1162        let handle = map.allocate_handle();
1163        let key = handle.key();
1164        map.insert(handle, 42).unwrap();
1165        
1166        assert!(!map.is_empty());
1167        
1168        map.remove(key);
1169        assert!(map.is_empty());
1170    }
1171
1172    #[test]
1173    fn test_capacity() {
1174        let mut map: DeferredMap<i32> = DeferredMap::with_capacity(10);
1175        
1176        for _ in 0..5 {
1177            let handle = map.allocate_handle();
1178            map.insert(handle, 42).unwrap();
1179        }
1180        
1181        assert_eq!(map.len(), 5);
1182        assert_eq!(map.capacity(), 5);
1183    }
1184
1185    #[test]
1186    fn test_clear() {
1187        let mut map = DeferredMap::new();
1188        
1189        for i in 0..5 {
1190            let handle = map.allocate_handle();
1191            map.insert(handle, i).unwrap();
1192        }
1193        
1194        assert_eq!(map.len(), 5);
1195        
1196        map.clear();
1197        
1198        assert_eq!(map.len(), 0);
1199        assert_eq!(map.capacity(), 0);
1200        assert!(map.is_empty());
1201    }
1202
1203    #[test]
1204    fn test_iter() {
1205        let mut map = DeferredMap::new();
1206        
1207        let mut keys = Vec::new();
1208        for i in 0..5 {
1209            let handle = map.allocate_handle();
1210            let key = handle.key();
1211            map.insert(handle, i * 10).unwrap();
1212            keys.push(key);
1213        }
1214        
1215        let collected: Vec<_> = map.iter().collect();
1216        assert_eq!(collected.len(), 5);
1217        
1218        for (key, &value) in map.iter() {
1219            assert!(keys.contains(&key));
1220            let index = keys.iter().position(|&k| k == key).unwrap();
1221            assert_eq!(value, index * 10);
1222        }
1223    }
1224
1225    #[test]
1226    fn test_iter_mut() {
1227        let mut map = DeferredMap::new();
1228        
1229        for i in 0..5 {
1230            let handle = map.allocate_handle();
1231            map.insert(handle, i).unwrap();
1232        }
1233        
1234        for (_, value) in map.iter_mut() {
1235            *value *= 2;
1236        }
1237        
1238        for (_, &value) in map.iter() {
1239            assert_eq!(value % 2, 0);
1240        }
1241    }
1242
1243    #[test]
1244    fn test_handle_encoding_decoding() {
1245        let mut map: DeferredMap<i32> = DeferredMap::new();
1246        let handle = map.allocate_handle();
1247        
1248        let key = handle.key();
1249        let index = handle.index();
1250        let generation = handle.generation();
1251        
1252        // encode_key uses generation (32 bits), not version (which includes state bits)
1253        // encode_key 使用 generation(32 位),而不是 version(包含状态位)
1254        assert_eq!(DeferredMap::<i32>::encode_key(index, generation), key);
1255        assert_eq!(DeferredMap::<i32>::decode_key(key), (index, generation));
1256    }
1257
1258    #[test]
1259    fn test_stress_test() {
1260        let mut map = DeferredMap::new();
1261        let mut keys = Vec::new();
1262        
1263        // Insert 100 elements | 插入 100 个元素
1264        for i in 0..100 {
1265            let handle = map.allocate_handle();
1266            let key = handle.key();
1267            map.insert(handle, i).unwrap();
1268            keys.push(key);
1269        }
1270        
1271        assert_eq!(map.len(), 100);
1272        
1273        // Remove elements at even indices | 删除偶数索引的元素
1274        for i in (0..100).step_by(2) {
1275            map.remove(keys[i]);
1276        }
1277        
1278        assert_eq!(map.len(), 50);
1279        
1280        // Re-insert 50 elements (should reuse previously deleted slots)
1281        // 重新插入 50 个元素(应该复用之前删除的 slot)
1282        for i in 0..50 {
1283            let handle = map.allocate_handle();
1284            let key = handle.key();
1285            map.insert(handle, i + 1000).unwrap();
1286            keys[i * 2] = key; // Update key | 更新 key
1287        }
1288        
1289        assert_eq!(map.len(), 100);
1290        
1291        // Verify all elements | 验证所有元素
1292        let mut count = 0;
1293        for (_, _) in map.iter() {
1294            count += 1;
1295        }
1296        assert_eq!(count, 100);
1297    }
1298
1299    #[test]
1300    fn test_generation_wrapping() {
1301        let mut map = DeferredMap::new();
1302        
1303        // Test generation wrapping
1304        // Through many insertions and deletions to increment version
1305        // 测试 generation wrapping
1306        // 通过大量的插入和删除来增加 version
1307        let mut keys = Vec::new();
1308        for i in 0..10 {
1309            let handle = map.allocate_handle();
1310            let key = handle.key();
1311            map.insert(handle, i).unwrap();
1312            keys.push(key);
1313        }
1314        
1315        // Remove all, test version increment
1316        // 删除所有,测试 version 递增
1317        for key in &keys {
1318            map.remove(*key);
1319        }
1320        
1321        // Re-insert, version should increment
1322        // 重新插入,version 应该递增
1323        let handle = map.allocate_handle();
1324        let new_key = handle.key();
1325        map.insert(handle, 100).unwrap();
1326        
1327        // Old key should be invalid | 旧 key 应该无效
1328        assert_eq!(map.get(keys[0]), None);
1329        // New key is valid | 新 key 有效
1330        assert_eq!(map.get(new_key), Some(&100));
1331    }
1332}