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]
49    fn new(raw: u64) -> Self {
50        Self { raw }
51    }
52
53    /// Get the internal u64 value
54    /// 
55    /// 获取内部的 u64 值
56    #[inline]
57    pub fn raw_value(&self) -> u64 {
58        self.raw
59    }
60
61    /// Extract index (lower 32 bits)
62    /// 
63    /// 提取 index(低 32 位)
64    #[inline]
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]
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]
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]
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]
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]
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]
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]
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        let handle_version = handle.version();
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        let slot = &mut self.slots[index as usize];
520
521        // Validate version match (handle should have reserved version)
522        // 验证 version 匹配(handle 应该有 reserved version)
523        if unlikely(slot.version != handle_version) {
524            return Err(DeferredMapError::GenerationMismatch);
525        }
526
527        // Validate slot is in Reserved state
528        // 验证 slot 处于 Reserved 状态
529        if unlikely(!slot.is_reserved()) {
530            if slot.is_occupied() {
531                return Err(DeferredMapError::HandleAlreadyUsed);
532            } else {
533                return Err(DeferredMapError::GenerationMismatch);
534            }
535        }
536
537        // Insert value and transition: reserved(0bXX01) -> occupied(0bXX11)
538        // 插入值并状态转换:reserved(0bXX01) -> occupied(0bXX11)
539        slot.u.value = ManuallyDrop::new(value);
540        slot.version += 2; // 0bXX01 -> 0bXX11
541        
542        self.num_elems += 1;
543        
544        // Return key with the new occupied version
545        // 返回带有新的 occupied version 的 key
546        Ok(Self::encode_key(index, slot.version))
547    }
548
549    /// Get immutable reference to value by u64 key
550    /// 
551    /// 通过 u64 key 获取值的不可变引用
552    /// 
553    /// # Parameters
554    /// - `key`: The key returned from `insert`
555    /// 
556    /// # Returns
557    /// - `Some(&T)`: Reference to the value if key is valid
558    /// - `None`: If key is invalid or value has been removed
559    /// 
560    /// # 参数
561    /// - `key`: 从 `insert` 返回的 key
562    /// 
563    /// # 返回值
564    /// - `Some(&T)`: 如果 key 有效则返回值的引用
565    /// - `None`: 如果 key 无效或值已被删除
566    /// 
567    /// # Examples (示例)
568    /// 
569    /// ```
570    /// use deferred_map::DeferredMap;
571    /// 
572    /// let mut map = DeferredMap::new();
573    /// let handle = map.allocate_handle();
574    /// let key = map.insert(handle, 42).unwrap();
575    /// assert_eq!(map.get(key), Some(&42));
576    /// ```
577    #[inline]
578    pub fn get(&self, key: u64) -> Option<&T> {
579        let (index, generation) = Self::decode_key(key);
580        
581        // Bounds check
582        // 边界检查
583        if unlikely(index as usize >= self.slots.len()) {
584            return None;
585        }
586        
587        // SAFETY: We've checked that index < slots.len()
588        let slot = unsafe { self.slots.get_unchecked(index as usize) };
589        
590        // Fast path: check version match and return value
591        // 快速路径:检查 version 匹配并返回值
592        if likely(slot.version == generation && slot.is_occupied()) {
593            // SAFETY: We've checked that slot is occupied
594            Some(unsafe { &*slot.u.value })
595        } else {
596            None
597        }
598    }
599
600    /// Get mutable reference to value by u64 key
601    /// 
602    /// 通过 u64 key 获取值的可变引用
603    /// 
604    /// # Parameters
605    /// - `key`: The key returned from `insert`
606    /// 
607    /// # Returns
608    /// - `Some(&mut T)`: Mutable reference to the value if key is valid
609    /// - `None`: If key is invalid or value has been removed
610    /// 
611    /// # 参数
612    /// - `key`: 从 `insert` 返回的 key
613    /// 
614    /// # 返回值
615    /// - `Some(&mut T)`: 如果 key 有效则返回值的可变引用
616    /// - `None`: 如果 key 无效或值已被删除
617    /// 
618    /// # Examples (示例)
619    /// 
620    /// ```
621    /// use deferred_map::DeferredMap;
622    /// 
623    /// let mut map = DeferredMap::new();
624    /// let handle = map.allocate_handle();
625    /// let key = map.insert(handle, 42).unwrap();
626    /// 
627    /// if let Some(value) = map.get_mut(key) {
628    ///     *value = 100;
629    /// }
630    /// assert_eq!(map.get(key), Some(&100));
631    /// ```
632    #[inline]
633    pub fn get_mut(&mut self, key: u64) -> Option<&mut T> {
634        let (index, generation) = Self::decode_key(key);
635        
636        // Bounds check
637        // 边界检查
638        if unlikely(index as usize >= self.slots.len()) {
639            return None;
640        }
641        
642        // SAFETY: We've checked that index < slots.len()
643        let slot = unsafe { self.slots.get_unchecked_mut(index as usize) };
644        
645        // Fast path: check version match and return mutable reference
646        // 快速路径:检查 version 匹配并返回可变引用
647        if likely(slot.version == generation && slot.is_occupied()) {
648            // SAFETY: We've checked that slot is occupied
649            Some(unsafe { &mut *slot.u.value })
650        } else {
651            None
652        }
653    }
654
655    /// Remove value by u64 key
656    /// 
657    /// If successful, returns the removed value and adds the slot to the free list.
658    /// 
659    /// 通过 u64 key 移除值
660    /// 
661    /// 如果成功移除,返回被移除的值,并将该 slot 加入空闲列表
662    /// 
663    /// # Parameters
664    /// - `key`: The key returned from `insert`
665    /// 
666    /// # Returns
667    /// - `Some(T)`: The removed value if key is valid
668    /// - `None`: If key is invalid or value has already been removed
669    /// 
670    /// # 参数
671    /// - `key`: 从 `insert` 返回的 key
672    /// 
673    /// # 返回值
674    /// - `Some(T)`: 如果 key 有效则返回被移除的值
675    /// - `None`: 如果 key 无效或值已被删除
676    /// 
677    /// # Examples (示例)
678    /// 
679    /// ```
680    /// use deferred_map::DeferredMap;
681    /// 
682    /// let mut map = DeferredMap::new();
683    /// let handle = map.allocate_handle();
684    /// let key = map.insert(handle, 42).unwrap();
685    /// 
686    /// assert_eq!(map.remove(key), Some(42));
687    /// assert_eq!(map.get(key), None);
688    /// ```
689    #[inline]
690    pub fn remove(&mut self, key: u64) -> Option<T> {
691        let (index, generation) = Self::decode_key(key);
692        
693        // Bounds check
694        // 边界检查
695        if unlikely(index as usize >= self.slots.len()) {
696            return None;
697        }
698
699        // SAFETY: We've checked that index < slots.len()
700        let slot = unsafe { self.slots.get_unchecked_mut(index as usize) };
701        
702        // Fast path: check version and occupied state
703        // 快速路径:检查 version 和占用状态
704        if likely(slot.version == generation && slot.is_occupied()) {
705            // Take value from slot
706            // 从 slot 中取出值
707            let value = unsafe { ManuallyDrop::take(&mut slot.u.value) };
708            
709            // Add this slot to free list head
710            // 将此 slot 加入空闲列表头部
711            slot.u.next_free = self.free_head;
712            self.free_head = index;
713            
714            // Transition: occupied(0bXX11) -> vacant(0bYY00, next generation)
715            // 状态转换:occupied(0bXX11) -> vacant(0bYY00,下一代)
716            slot.version = slot.version.wrapping_add(1); // 0bXX11 -> 0bYY00
717            
718            self.num_elems -= 1;
719            Some(value)
720        } else {
721            None
722        }
723    }
724
725    /// Release an unused Handle
726    /// 
727    /// Returns the reserved slot back to the free list.
728    /// This is useful when you allocated a handle but decided not to use it.
729    /// 
730    /// 释放未使用的 Handle
731    /// 
732    /// 将预留的 slot 返回到空闲列表
733    /// 当你分配了 handle 但决定不使用时很有用
734    /// 
735    /// # Parameters
736    /// - `handle`: The Handle to release
737    /// 
738    /// # Returns
739    /// - `Ok(())`: Handle successfully released
740    /// - `Err(DeferredMapError)`: Error if handle is invalid or already used
741    /// 
742    /// # 参数
743    /// - `handle`: 要释放的 Handle
744    /// 
745    /// # 返回值
746    /// - `Ok(())`: Handle 成功释放
747    /// - `Err(DeferredMapError)`: 如果 handle 无效或已被使用则返回错误
748    /// 
749    /// # Examples (示例)
750    /// 
751    /// ```
752    /// use deferred_map::DeferredMap;
753    /// 
754    /// let mut map = DeferredMap::<i32>::new();
755    /// let handle = map.allocate_handle();
756    /// 
757    /// // Decided not to use it
758    /// // 决定不使用它
759    /// map.release_handle(handle).unwrap();
760    /// ```
761    pub fn release_handle(&mut self, handle: Handle) -> Result<(), DeferredMapError> {
762        let index = handle.index();
763        let handle_version = handle.version();
764
765        // Validate index (skip sentinel)
766        // 验证 index 有效(跳过 sentinel)
767        if unlikely(index == 0) {
768            return Err(DeferredMapError::InvalidHandle);
769        }
770
771        // Slot must exist
772        // slot 必须存在
773        if unlikely(index as usize >= self.slots.len()) {
774            return Err(DeferredMapError::InvalidHandle);
775        }
776
777        let slot = &mut self.slots[index as usize];
778
779        // Validate version match (handle should have reserved version)
780        // 验证 version 匹配(handle 应该有 reserved version)
781        if unlikely(slot.version != handle_version) {
782            return Err(DeferredMapError::GenerationMismatch);
783        }
784
785        // Validate slot is in Reserved state
786        // 验证 slot 处于 Reserved 状态
787        if unlikely(!slot.is_reserved()) {
788            if slot.is_occupied() {
789                return Err(DeferredMapError::HandleAlreadyUsed);
790            } else {
791                return Err(DeferredMapError::GenerationMismatch);
792            }
793        }
794
795        // Add this slot to free list head
796        // 将此 slot 加入空闲列表头部
797        slot.u.next_free = self.free_head;
798        self.free_head = index;
799
800        // Transition: reserved(0bXX01) -> vacant(0bYY00, next generation)
801        // 状态转换:reserved(0bXX01) -> vacant(0bYY00,下一代)
802        slot.version = slot.version.wrapping_add(3); // 0bXX01 + 3 = 0bYY00
803
804        Ok(())
805    }
806
807    /// Check if key exists
808    /// 
809    /// 检查 key 是否存在
810    /// 
811    /// # Parameters
812    /// - `key`: The key to check
813    /// 
814    /// # Returns
815    /// `true` if the key exists, `false` otherwise
816    /// 
817    /// # 参数
818    /// - `key`: 要检查的 key
819    /// 
820    /// # 返回值
821    /// 如果 key 存在则返回 `true`,否则返回 `false`
822    /// 
823    /// # Examples (示例)
824    /// 
825    /// ```
826    /// use deferred_map::DeferredMap;
827    /// 
828    /// let mut map = DeferredMap::new();
829    /// let handle = map.allocate_handle();
830    /// let key = map.insert(handle, 42).unwrap();
831    /// 
832    /// assert!(map.contains_key(key));
833    /// map.remove(key);
834    /// assert!(!map.contains_key(key));
835    /// ```
836    #[inline]
837    pub fn contains_key(&self, key: u64) -> bool {
838        self.get(key).is_some()
839    }
840
841    /// Return the number of valid elements
842    /// 
843    /// 返回有效元素的数量
844    /// 
845    /// # Examples (示例)
846    /// 
847    /// ```
848    /// use deferred_map::DeferredMap;
849    /// 
850    /// let mut map = DeferredMap::new();
851    /// assert_eq!(map.len(), 0);
852    /// 
853    /// let handle = map.allocate_handle();
854    /// map.insert(handle, 42).unwrap();
855    /// assert_eq!(map.len(), 1);
856    /// ```
857    #[inline]
858    pub fn len(&self) -> usize {
859        self.num_elems as usize
860    }
861
862    /// Check if the map is empty
863    /// 
864    /// 检查是否为空
865    /// 
866    /// # Examples (示例)
867    /// 
868    /// ```
869    /// use deferred_map::DeferredMap;
870    /// 
871    /// let map: DeferredMap<i32> = DeferredMap::new();
872    /// assert!(map.is_empty());
873    /// ```
874    #[inline]
875    pub fn is_empty(&self) -> bool {
876        self.num_elems == 0
877    }
878
879    /// Return capacity (number of allocated slots, excluding sentinel)
880    /// 
881    /// 返回容量(已分配的 slot 数量,不包括 sentinel)
882    /// 
883    /// # Examples (示例)
884    /// 
885    /// ```
886    /// use deferred_map::DeferredMap;
887    /// 
888    /// let map: DeferredMap<i32> = DeferredMap::with_capacity(10);
889    /// assert_eq!(map.capacity(), 0);
890    /// ```
891    #[inline]
892    pub fn capacity(&self) -> usize {
893        // Subtract sentinel slot
894        // 减去 sentinel slot
895        self.slots.len().saturating_sub(1)
896    }
897
898    /// Clear all elements
899    /// 
900    /// 清空所有元素
901    /// 
902    /// # Examples (示例)
903    /// 
904    /// ```
905    /// use deferred_map::DeferredMap;
906    /// 
907    /// let mut map = DeferredMap::new();
908    /// let handle = map.allocate_handle();
909    /// map.insert(handle, 42).unwrap();
910    /// 
911    /// map.clear();
912    /// assert!(map.is_empty());
913    /// ```
914    #[inline]
915    pub fn clear(&mut self) {
916        self.slots.clear();
917        // Re-add sentinel
918        // 重新添加 sentinel
919        self.slots.push(Slot {
920            u: SlotUnion { next_free: 0 },
921            version: 0,
922        });
923        self.free_head = 1;
924        self.num_elems = 0;
925    }
926
927    /// Return an iterator over all (key, value) pairs
928    /// 
929    /// 返回一个迭代器,遍历所有 (key, value) 对
930    /// 
931    /// # Examples (示例)
932    /// 
933    /// ```
934    /// use deferred_map::DeferredMap;
935    /// 
936    /// let mut map = DeferredMap::new();
937    /// 
938    /// let h1 = map.allocate_handle();
939    /// map.insert(h1, 1).unwrap();
940    /// 
941    /// let h2 = map.allocate_handle();
942    /// map.insert(h2, 2).unwrap();
943    /// 
944    /// let sum: i32 = map.iter().map(|(_, v)| v).sum();
945    /// assert_eq!(sum, 3);
946    /// ```
947    #[inline]
948    pub fn iter(&self) -> impl Iterator<Item = (u64, &T)> {
949        self.slots.iter().enumerate().skip(1).filter_map(|(index, slot)| {
950            if let Occupied(value) = slot.get() {
951                let key = Self::encode_key(index as u32, slot.version);
952                Some((key, value))
953            } else {
954                None
955            }
956        })
957    }
958
959    /// Return a mutable iterator over all (key, value) pairs
960    /// 
961    /// 返回一个可变迭代器,遍历所有 (key, value) 对
962    /// 
963    /// # Examples (示例)
964    /// 
965    /// ```
966    /// use deferred_map::DeferredMap;
967    /// 
968    /// let mut map = DeferredMap::new();
969    /// 
970    /// let h1 = map.allocate_handle();
971    /// map.insert(h1, 1).unwrap();
972    /// 
973    /// let h2 = map.allocate_handle();
974    /// map.insert(h2, 2).unwrap();
975    /// 
976    /// for (_, value) in map.iter_mut() {
977    ///     *value *= 2;
978    /// }
979    /// 
980    /// let sum: i32 = map.iter().map(|(_, v)| v).sum();
981    /// assert_eq!(sum, 6);
982    /// ```
983    #[inline]
984    pub fn iter_mut(&mut self) -> impl Iterator<Item = (u64, &mut T)> {
985        self.slots.iter_mut().enumerate().skip(1).filter_map(|(index, slot)| {
986            let version = slot.version;
987            if let OccupiedMut(value) = slot.get_mut() {
988                let key = Self::encode_key(index as u32, version);
989                Some((key, value))
990            } else {
991                None
992            }
993        })
994    }
995}
996
997impl<T: Clone> Clone for DeferredMap<T> {
998    #[inline]
999    fn clone(&self) -> Self {
1000        Self {
1001            slots: self.slots.clone(),
1002            free_head: self.free_head,
1003            num_elems: self.num_elems,
1004        }
1005    }
1006
1007    #[inline]
1008    fn clone_from(&mut self, source: &Self) {
1009        self.slots.clone_from(&source.slots);
1010        self.free_head = source.free_head;
1011        self.num_elems = source.num_elems;
1012    }
1013}
1014
1015impl<T> Default for DeferredMap<T> {
1016    #[inline]
1017    fn default() -> Self {
1018        Self::new()
1019    }
1020}
1021
1022#[cfg(test)]
1023mod basic_tests {
1024    use super::*;
1025
1026    #[test]
1027    fn test_basic_insert_and_get() {
1028        let mut map = DeferredMap::new();
1029        
1030        let handle = map.allocate_handle();
1031        let key = map.insert(handle, 42).unwrap();
1032        
1033        assert_eq!(map.get(key), Some(&42));
1034    }
1035
1036    #[test]
1037    fn test_handle_cannot_be_used_twice() {
1038        let mut map = DeferredMap::new();
1039        
1040        let handle = map.allocate_handle();
1041        let key = map.insert(handle, 42).unwrap();
1042        
1043        // Attempting to insert again with the same key should fail
1044        // 尝试使用相同的 key 再次插入应该失败
1045        let handle2 = Handle::new(key);
1046        let result = map.insert(handle2, 100);
1047        
1048        assert_eq!(result, Err(DeferredMapError::HandleAlreadyUsed));
1049        assert_eq!(map.get(key), Some(&42)); // Original value unchanged | 原值不变
1050    }
1051
1052    #[test]
1053    fn test_remove_and_reuse() {
1054        let mut map = DeferredMap::new();
1055        
1056        let handle1 = map.allocate_handle();
1057        let key1 = map.insert(handle1, 42).unwrap();
1058        
1059        assert_eq!(map.len(), 1);
1060        assert_eq!(map.remove(key1), Some(42));
1061        assert_eq!(map.len(), 0);
1062        assert_eq!(map.get(key1), None);
1063        
1064        // Allocating new handle should reuse previous slot
1065        // 分配新的 handle 应该复用之前的 slot
1066        let handle2 = map.allocate_handle();
1067        let key2 = map.insert(handle2, 100).unwrap();
1068        
1069        // key2 should have different generation
1070        // key2 应该有不同的 generation
1071        assert_ne!(key1, key2);
1072        assert_eq!(map.get(key2), Some(&100));
1073        assert_eq!(map.get(key1), None); // Old key should be invalid | 旧 key 应该无效
1074    }
1075
1076    #[test]
1077    fn test_generation_mismatch() {
1078        let mut map = DeferredMap::new();
1079        
1080        let handle = map.allocate_handle();
1081        let old_key = handle.raw_value();
1082        map.insert(handle, 42).unwrap();
1083        
1084        map.remove(old_key);
1085        
1086        // Attempting to use old key should fail
1087        // 尝试使用旧的 key 对应的 handle 应该失败
1088        let old_handle = Handle::new(old_key);
1089        let result = map.insert(old_handle, 100);
1090        
1091        assert_eq!(result, Err(DeferredMapError::GenerationMismatch));
1092    }
1093
1094    #[test]
1095    fn test_multiple_inserts() {
1096        let mut map = DeferredMap::new();
1097        
1098        let mut keys = Vec::new();
1099        for i in 0..10 {
1100            let handle = map.allocate_handle();
1101            let key = map.insert(handle, i * 10).unwrap();
1102            keys.push(key);
1103        }
1104        
1105        assert_eq!(map.len(), 10);
1106        
1107        for (i, &key) in keys.iter().enumerate() {
1108            assert_eq!(map.get(key), Some(&(i * 10)));
1109        }
1110    }
1111
1112    #[test]
1113    fn test_get_mut() {
1114        let mut map = DeferredMap::new();
1115        
1116        let handle = map.allocate_handle();
1117        let key = map.insert(handle, 42).unwrap();
1118        
1119        if let Some(value) = map.get_mut(key) {
1120            *value = 100;
1121        }
1122        
1123        assert_eq!(map.get(key), Some(&100));
1124    }
1125
1126    #[test]
1127    fn test_contains_key() {
1128        let mut map = DeferredMap::new();
1129        
1130        let handle = map.allocate_handle();
1131        let key = map.insert(handle, 42).unwrap();
1132        
1133        assert!(map.contains_key(key));
1134        
1135        map.remove(key);
1136        assert!(!map.contains_key(key));
1137    }
1138
1139    #[test]
1140    fn test_is_empty() {
1141        let mut map: DeferredMap<i32> = DeferredMap::new();
1142        
1143        assert!(map.is_empty());
1144        
1145        let handle = map.allocate_handle();
1146        let key = map.insert(handle, 42).unwrap();
1147        
1148        assert!(!map.is_empty());
1149        
1150        map.remove(key);
1151        assert!(map.is_empty());
1152    }
1153
1154    #[test]
1155    fn test_capacity() {
1156        let mut map: DeferredMap<i32> = DeferredMap::with_capacity(10);
1157        
1158        for _ in 0..5 {
1159            let handle = map.allocate_handle();
1160            map.insert(handle, 42).unwrap();
1161        }
1162        
1163        assert_eq!(map.len(), 5);
1164        assert_eq!(map.capacity(), 5);
1165    }
1166
1167    #[test]
1168    fn test_clear() {
1169        let mut map = DeferredMap::new();
1170        
1171        for i in 0..5 {
1172            let handle = map.allocate_handle();
1173            map.insert(handle, i).unwrap();
1174        }
1175        
1176        assert_eq!(map.len(), 5);
1177        
1178        map.clear();
1179        
1180        assert_eq!(map.len(), 0);
1181        assert_eq!(map.capacity(), 0);
1182        assert!(map.is_empty());
1183    }
1184
1185    #[test]
1186    fn test_iter() {
1187        let mut map = DeferredMap::new();
1188        
1189        let mut keys = Vec::new();
1190        for i in 0..5 {
1191            let handle = map.allocate_handle();
1192            let key = map.insert(handle, i * 10).unwrap();
1193            keys.push(key);
1194        }
1195        
1196        let collected: Vec<_> = map.iter().collect();
1197        assert_eq!(collected.len(), 5);
1198        
1199        for (key, &value) in map.iter() {
1200            assert!(keys.contains(&key));
1201            let index = keys.iter().position(|&k| k == key).unwrap();
1202            assert_eq!(value, index * 10);
1203        }
1204    }
1205
1206    #[test]
1207    fn test_iter_mut() {
1208        let mut map = DeferredMap::new();
1209        
1210        for i in 0..5 {
1211            let handle = map.allocate_handle();
1212            map.insert(handle, i).unwrap();
1213        }
1214        
1215        for (_, value) in map.iter_mut() {
1216            *value *= 2;
1217        }
1218        
1219        for (_, &value) in map.iter() {
1220            assert_eq!(value % 2, 0);
1221        }
1222    }
1223
1224    #[test]
1225    fn test_handle_encoding_decoding() {
1226        let mut map: DeferredMap<i32> = DeferredMap::new();
1227        let handle = map.allocate_handle();
1228        
1229        let raw = handle.raw_value();
1230        let index = handle.index();
1231        let version = (raw >> 32) as u32; // Full version including state bits
1232        
1233        // encode_key uses version (32 bits), not generation (30 bits)
1234        // encode_key 使用 version(32 位),而不是 generation(30 位)
1235        assert_eq!(DeferredMap::<i32>::encode_key(index, version), raw);
1236        assert_eq!(DeferredMap::<i32>::decode_key(raw), (index, version));
1237    }
1238
1239    #[test]
1240    fn test_stress_test() {
1241        let mut map = DeferredMap::new();
1242        let mut keys = Vec::new();
1243        
1244        // Insert 100 elements | 插入 100 个元素
1245        for i in 0..100 {
1246            let handle = map.allocate_handle();
1247            let key = map.insert(handle, i).unwrap();
1248            keys.push(key);
1249        }
1250        
1251        assert_eq!(map.len(), 100);
1252        
1253        // Remove elements at even indices | 删除偶数索引的元素
1254        for i in (0..100).step_by(2) {
1255            map.remove(keys[i]);
1256        }
1257        
1258        assert_eq!(map.len(), 50);
1259        
1260        // Re-insert 50 elements (should reuse previously deleted slots)
1261        // 重新插入 50 个元素(应该复用之前删除的 slot)
1262        for i in 0..50 {
1263            let handle = map.allocate_handle();
1264            let key = map.insert(handle, i + 1000).unwrap();
1265            keys[i * 2] = key; // Update key | 更新 key
1266        }
1267        
1268        assert_eq!(map.len(), 100);
1269        
1270        // Verify all elements | 验证所有元素
1271        let mut count = 0;
1272        for (_, _) in map.iter() {
1273            count += 1;
1274        }
1275        assert_eq!(count, 100);
1276    }
1277
1278    #[test]
1279    fn test_generation_wrapping() {
1280        let mut map = DeferredMap::new();
1281        
1282        // Test generation wrapping
1283        // Through many insertions and deletions to increment version
1284        // 测试 generation wrapping
1285        // 通过大量的插入和删除来增加 version
1286        let mut keys = Vec::new();
1287        for i in 0..10 {
1288            let handle = map.allocate_handle();
1289            let key = map.insert(handle, i).unwrap();
1290            keys.push(key);
1291        }
1292        
1293        // Remove all, test version increment
1294        // 删除所有,测试 version 递增
1295        for key in &keys {
1296            map.remove(*key);
1297        }
1298        
1299        // Re-insert, version should increment
1300        // 重新插入,version 应该递增
1301        let handle = map.allocate_handle();
1302        let new_key = map.insert(handle, 100).unwrap();
1303        
1304        // Old key should be invalid | 旧 key 应该无效
1305        assert_eq!(map.get(keys[0]), None);
1306        // New key is valid | 新 key 有效
1307        assert_eq!(map.get(new_key), Some(&100));
1308    }
1309}