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