deferred_map/
lib.rs

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