use crate::map::{DELETED, GROUP_WIDTH, KevyMap};
impl<K: Clone, V: Clone> Clone for KevyMap<K, V> {
fn clone(&self) -> Self {
if self.cap == 0 {
return Self::new();
}
let mut new = Self::alloc_table(self.cap);
debug_assert_eq!(new.cap, self.cap);
let _ = GROUP_WIDTH; for i in 0..self.cap {
let meta = unsafe { *self.metadata_ptr.as_ptr().add(i) };
if meta & 0x80 == 0 {
let (k, v) = unsafe { &*(self.slots_ptr.as_ptr().add(i) as *const (K, V)) };
let pair = (k.clone(), v.clone());
unsafe {
(*new.slots_ptr.as_ptr().add(i)).write(pair);
}
new.set_meta(i, meta); } else if meta == DELETED {
new.set_meta(i, DELETED);
}
}
new.occupied = self.occupied;
new.deleted = self.deleted;
new
}
}