Formatting, debugging, etc.
[?]
Feb 3, 2021, 6:42 PM
6UVFCERMGSGNRWCVC3GWO5HWV6MSWE433DXBJVC7KRPP6LLJLCSQCDependencies
- [2]
H3FVSQIQUnsized pages - [3]
S4V4QZ5CDebugging reference-counting for put - [4]
NQBEOCFOTests cleanup - [5]
OTWDDJE7Trait/type cleanup - [6]
WS4ZQM4RDebugging, tests, etc. - [7]
EHJFNMB2Debugging - [8]
EAAYH6BQDebugging put - [9]
X3QVVQISMore debugging (del seems to work now) - [10]
QEUTVAZ4Splitting btree::page - [11]
ONES3V46reference counting works for put - [12]
6DMPXOATMore debugging - [13]
UAQX27N4Tests - [14]
OP6SVMODResetting history - [15]
DV4A2LR7Double-inserts (rebalancing near an internal deletion) - [16]
PXF3R6SVImproving test coverage for btree::cursor - [17]
YWFYZNLZCleanup + inter-process concurrency - [18]
FMN7X4J2Micro-improvements, now noticeably faster than std::collections::BTreeMap
Change contents
- edit in sanakirja-core/src/lib.rs at line 92
- replacement in sanakirja-core/src/lib.rs at line 93
unsafe fn read<T, K: Representable + ?Sized, V: Representable + ?Sized>(txn: &T, k: *const u8) -> (*const u8, *const u8) {unsafe fn read<T, K: Representable + ?Sized, V: Representable + ?Sized>(txn: &T,k: *const u8,) -> (*const u8, *const u8) { - replacement in sanakirja-core/src/lib.rs at line 104
fn alloc_size<K: Representable+?Sized, V: Representable+?Sized>(k: &K, v: &V) -> usize {fn alloc_size<K: Representable + ?Sized, V: Representable + ?Sized>(k: &K, v: &V) -> usize { - replacement in sanakirja-core/src/lib.rs at line 110
unsafe fn entry_size<K: Representable+?Sized, V: Representable+?Sized>(k: *const u8) -> usize {unsafe fn entry_size<K: Representable + ?Sized, V: Representable + ?Sized>(k: *const u8) -> usize { - replacement in sanakirja-core/src/btree/put.rs at line 18
pub fn put<T: AllocPage, K: Representable+?Sized, V: Representable+?Sized, P: BTreeMutPage<K, V>>(pub fn put<T: AllocPage,K: Representable + ?Sized + core::fmt::Debug,V: Representable + ?Sized + core::fmt::Debug,P: BTreeMutPage<K, V>,>( - replacement in sanakirja-core/src/btree/put.rs at line 57
fn put_cascade<T: AllocPage, K: Representable+?Sized, V: Representable+?Sized, P: BTreeMutPage<K, V>>(fn put_cascade<T: AllocPage,K: Representable + ?Sized + core::fmt::Debug,V: Representable + ?Sized + core::fmt::Debug,P: BTreeMutPage<K, V>,>( - edit in sanakirja-core/src/btree/put.rs at line 96
debug!("split root {:?} {:?}", split_key, split_value);debug!("{:?} {:?}", left, right); - replacement in sanakirja-core/src/btree/put.rs at line 137
K: Representable+?Sized,V: Representable+?Sized,K: Representable + ?Sized,V: Representable + ?Sized, - replacement in sanakirja-core/src/btree/put.rs at line 147
debug!("incr_descendants {:?} {:?} {:?} {:?}", cursor.current().page, freed, cursor.pointer, cursor.first_rc_level);debug!("incr_descendants {:?} {:?} {:?} {:?}",cursor.current().page,freed,cursor.pointer,cursor.first_rc_level); - edit in sanakirja-core/src/btree/page_unsized.rs at line 5
mod put; - edit in sanakirja-core/src/btree/page_unsized.rs at line 6
mod put; - edit in sanakirja-core/src/btree/page_unsized.rs at line 8
mod header;use header::*; - edit in sanakirja-core/src/btree/page_unsized.rs at line 9
use super::page::header::{header, header_mut, HDR}; - replacement in sanakirja-core/src/btree/page_unsized.rs at line 21
K: Representable+?Sized + core::fmt::Debug,V: Representable+?Sized + core::fmt::Debug,K: Representable + ?Sized + core::fmt::Debug,V: Representable + ?Sized + core::fmt::Debug, - replacement in sanakirja-core/src/btree/page_unsized.rs at line 140
fn del<T: AllocPage>(txn: &mut T, page: crate::CowPage, c: &Cursor, l: u64) -> Result<MutPage, T::Error> {fn del<T: AllocPage>(txn: &mut T,page: crate::CowPage,c: &Cursor,l: u64,) -> Result<MutPage, T::Error> { - replacement in sanakirja-core/src/btree/page_unsized.rs at line 289
impl<K: Representable + ?Sized, V: Representable + ?Sized> super::BTreePage<K, V>for Page<K, V>{impl<K: Representable + ?Sized, V: Representable + ?Sized> super::BTreePage<K, V> for Page<K, V> { - replacement in sanakirja-core/src/btree/page_unsized.rs at line 321
let off = {u16::from_le(*(page.data.as_ptr().add(HDR + c.cur * 2) as *const u16)) as usize};let off ={ u16::from_le(*(page.data.as_ptr().add(HDR + c.cur * 2) as *const u16)) as usize }; - replacement in sanakirja-core/src/btree/page_unsized.rs at line 324
(K::from_raw_ptr(txn, k as *const u8), V::from_raw_ptr(txn, v as *const u8), 0)(K::from_raw_ptr(txn, k as *const u8),V::from_raw_ptr(txn, v as *const u8),0,) - replacement in sanakirja-core/src/btree/page_unsized.rs at line 332
(K::from_raw_ptr(txn, k as *const u8), V::from_raw_ptr(txn, v as *const u8), off & !0xfff)(K::from_raw_ptr(txn, k as *const u8),V::from_raw_ptr(txn, v as *const u8),off & !0xfff,) - replacement in sanakirja-core/src/btree/page_unsized.rs at line 352
)as usize))) as usize)) - replacement in sanakirja-core/src/btree/page_unsized.rs at line 416
Ok(Internal::kv(txn, page, (off & !0xfff, (off & 0xfff) as u16)))Ok(Internal::kv(txn,page,(off & !0xfff, (off & 0xfff) as u16),)) - replacement in sanakirja-core/src/btree/page_unsized.rs at line 469
},} - replacement in sanakirja-core/src/btree/page_unsized.rs at line 495
},} - replacement in sanakirja-core/src/btree/page_unsized.rs at line 522
>(>( - replacement in sanakirja-core/src/btree/page_unsized.rs at line 550
alloc::< _, _, L>(new, k, v, l, r, n);alloc::<_, _, L>(new, k, v, l, r, n); - replacement in sanakirja-core/src/btree/page_unsized.rs at line 560
>(>( - edit in sanakirja-core/src/btree/page_unsized.rs at line 586
- replacement in sanakirja-core/src/btree/page_unsized.rs at line 604
let off_new = L::alloc::<K, V>(hdr, size, K::ALIGN.max(V::ALIGN));let off_new = L::alloc(hdr, size, K::ALIGN.max(V::ALIGN)); - file deletion: header.rs
#[derive(Debug)]#[repr(C)]pub struct Header {n: u16,data: u16,crc: u32,left_page: u64,}impl Header {pub fn init(&mut self) {self.n = (1u16).to_le(); // dirty pageself.data = 4096_u16.to_le();self.crc = 0;self.left_page = 0;}pub fn n(&self) -> u16 {u16::from_le(self.n) >> 4}pub fn set_n(&mut self, n: u16) {let dirty = u16::from_le(self.n) & 1;self.n = ((n << 4) | dirty).to_le()}pub fn is_dirty(&self) -> bool {u16::from_le(self.n) & 1 != 0}pub fn left_page(&self) -> u64 {u64::from_le(self.left_page)}pub fn set_left_page(&mut self, l: u64) {self.left_page = l.to_le()}pub fn data(&self) -> u16 {u16::from_le(self.data)}pub fn set_data(&mut self, d: u16) {self.data = d.to_le()}pub fn decr(&mut self, s: usize) {self.left_page = (self.left_page() - s as u64).to_le();}pub fn set_occupied(&mut self, size: u64) {self.left_page = ((self.left_page() & !0xfff) | size).to_le()}pub fn incr(&mut self, s: usize) {self.left_page = (self.left_page() + s as u64).to_le();}pub fn is_leaf(&self) -> bool {u64::from_le(self.left_page) <= 0xfff}pub fn clean(&mut self) {self.n = (u16::from_le(self.n) & 0xfff).to_le()}}pub const HDR: usize = core::mem::size_of::<Header>();pub fn header<'a>(page: crate::Page<'a>) -> &'a Header {unsafe { &*(page.data.as_ptr() as *const Header) }}pub fn header_mut(page: &mut crate::MutPage) -> &mut Header {unsafe { &mut *(page.0.data as *mut Header) }} - edit in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 2
use crate::btree::page::header::header; - edit in sanakirja-core/src/btree/page_unsized/put.rs at line 1
use super::super::page::header::{header, header_mut, HDR}; - replacement in sanakirja-core/src/btree/page_unsized/put.rs at line 30
if mutable && is_dirty && L::can_alloc::<K, V>(header(page.as_page()), size) {if mutable && is_dirty && L::can_alloc(header(page.as_page()), size) { - replacement in sanakirja-core/src/btree/page_unsized/put.rs at line 41
} else if L::can_compact::<K, V>(hdr, size) {} else if L::can_compact(hdr, size) { - replacement in sanakirja-core/src/btree/page_unsized/put.rs at line 113
let size = entry_size::<K, V>(ptr) + L::extra_size::<K, V>();let size = entry_size::<K, V>(ptr) + L::extra_size(); - replacement in sanakirja-core/src/btree/page_unsized/put.rs at line 122
let off_new = L::alloc::<K, V>(header_mut(current_page), size, K::ALIGN.max(V::ALIGN));let off_new = L::alloc(header_mut(current_page), size, K::ALIGN.max(V::ALIGN)); - replacement in sanakirja-core/src/btree/page_unsized/put.rs at line 135
total += alloc_size(k0, v0) + L::extra_size::<K, V>();total += alloc_size(k0, v0) + L::extra_size(); - replacement in sanakirja-core/src/btree/page_unsized/put.rs at line 137
total += alloc_size(k1, v1) + L::extra_size::<K, V>();total += alloc_size(k1, v1) + L::extra_size(); - replacement in sanakirja-core/src/btree/page_unsized/put.rs at line 140
total += alloc_size(k0, v0) + L::extra_size::<K, V>();total += alloc_size(k0, v0) + L::extra_size(); - edit in sanakirja-core/src/btree/page_unsized/alloc.rs at line 1
use super::super::page::header::{header, header_mut, Header, HDR}; - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 5
fn extra_size<K: Representable + ?Sized, V: Representable + ?Sized>() -> usize;fn can_alloc<K: Representable + ?Sized, V: Representable + ?Sized>(hdr: &Header, size: usize) -> bool;fn can_compact<K: Representable + ?Sized, V: Representable + ?Sized>(hdr: &Header, size: usize) -> bool;fn alloc<K: Representable+?Sized, V: Representable+?Sized>(hdr: &mut Header, size: usize, align: usize) -> u16;fn extra_size() -> usize;fn can_alloc(hdr: &Header, size: usize) -> bool;fn can_compact(hdr: &Header, size: usize) -> bool;fn alloc(hdr: &mut Header, size: usize, align: usize) -> u16; - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 61
fn extra_size<K: Representable + ?Sized, V: Representable + ?Sized>() -> usize {fn extra_size() -> usize { - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 64
fn can_alloc<K: Representable + ?Sized, V: Representable + ?Sized>(hdr: &Header, size: usize) -> bool {debug!("can_alloc: {:?} {:?} {:?}", hdr.n(), size, hdr.data());HDR + (hdr.n() as usize) * 2 + 2 + size <= hdr.data() as usizefn can_alloc(hdr: &Header, size: usize) -> bool {(HDR as usize) + (hdr.n() as usize) * 2 + 2 + size < hdr.data() as usize - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 67
fn can_compact<K: Representable + ?Sized, V: Representable + ?Sized>(hdr: &Header, size: usize) -> bool {debug!("can_compact: {:?} {:?}", hdr.left_page(), size);HDR + ((hdr.left_page() & 0xfff) as usize) + 2 + size <= 4096fn can_compact(hdr: &Header, size: usize) -> bool {debug!("can_compact, internal: {:?} {:?} {:?}",HDR,hdr.left_page() & 0xfff,size);(HDR as usize) + (hdr.n() as usize) * 2 + ((hdr.left_page() & 0xfff) as usize) + 2 + size<= 4096 - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 91
let deleted_offsets = unsafe {core::slice::from_raw_parts(page.0.data.add(HDR) as *const u16, n as usize)};let deleted_offsets =unsafe { core::slice::from_raw_parts(page.0.data.add(HDR) as *const u16, n as usize) }; - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 95
.map(|&off| {2 + unsafe { entry_size::<K, V>(page.0.data.add(off as usize)) } as u64}).map(|&off| 2 + unsafe { entry_size::<K, V>(page.0.data.add(off as usize)) } as u64) - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 102
fn alloc<K: Representable+?Sized, V: Representable+?Sized>(hdr: &mut Header, size: usize, align: usize) -> u16 {debug!("alloc = {:?} {:?}", hdr.data(), size);let mut data = hdr.data() - size as u16;data &= !((align - 1) as u16);hdr.set_data(data);fn alloc(hdr: &mut Header, size: usize, align: usize) -> u16 {assert_eq!(size % align, 0);let data = hdr.data();hdr.set_data(data - size as u16); - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 107
hdr.incr(size + Self::extra_size::<K, V>());datahdr.incr(size);data - size as u16 - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 120
Self::alloc::<K, V>(&mut *hdr, size, K::ALIGN.max(V::ALIGN)),Self::alloc(&mut *hdr, size, K::ALIGN.max(V::ALIGN)), - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 167
fn extra_size<K: Representable + ?Sized, V: Representable + ?Sized>() -> usize {fn extra_size() -> usize { - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 170
fn can_alloc<K: Representable + ?Sized, V: Representable + ?Sized>(hdr: &Header, size: usize) -> bool {fn can_alloc(hdr: &Header, size: usize) -> bool { - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 173
fn can_compact<K: Representable + ?Sized, V: Representable + ?Sized>(hdr: &Header, size: usize) -> bool {debug!("can_compact: {:?} {:?}", hdr.left_page(), size);(HDR as usize) + ((hdr.left_page() & 0xfff) as usize) + 8 + size < 4096fn can_compact(hdr: &Header, size: usize) -> bool {debug!("can_compact, internal: {:?} {:?} {:?}",HDR,hdr.left_page() & 0xfff,size);(HDR as usize) + (hdr.n() as usize) * 8 + ((hdr.left_page() & 0xfff) as usize) + 8 + size<= 4096 - edit in sanakirja-core/src/btree/page_unsized/alloc.rs at line 183
- replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 208
.map(|&off| {8 + unsafe { entry_size::<K, V>(page.0.data.add(off as usize)) } as u64}).map(|&off| 8 + unsafe { entry_size::<K, V>(page.0.data.add(off as usize)) } as u64) - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 217
fn alloc<K: Representable+?Sized, V: Representable+?Sized>(hdr: &mut Header, size: usize, align: usize) -> u16 {let mut data = hdr.data() - size as u16;data -= data % (align as u16);hdr.set_data(data);fn alloc(hdr: &mut Header, size: usize, align: usize) -> u16 {assert_eq!(size % align, 0);let data = hdr.data();hdr.set_data(data - size as u16); - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 222
hdr.incr(size + Self::extra_size::<K, V>());datahdr.incr(size);data - size as u16 - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 235
Self::alloc::<K, V>(&mut *hdr, size, K::ALIGN.max(V::ALIGN)),Self::alloc(&mut *hdr, size, K::ALIGN.max(V::ALIGN)), - edit in sanakirja-core/src/btree/page.rs at line 5
mod put; - edit in sanakirja-core/src/btree/page.rs at line 6
mod put; - replacement in sanakirja-core/src/btree/page.rs at line 8
mod header;pub(in super::super) mod header; - replacement in sanakirja-core/src/btree/page.rs at line 27
impl<K: Representable + core::fmt::Debug,V: Representable + core::fmt::Debug,> super::BTreeMutPage<K, V> for Page<K, V>impl<K: Representable + core::fmt::Debug, V: Representable + core::fmt::Debug>super::BTreeMutPage<K, V> for Page<K, V> - replacement in sanakirja-core/src/btree/page.rs at line 146
fn del<T: AllocPage>(txn: &mut T, page: crate::CowPage, c: &Cursor, l: u64) -> Result<MutPage, T::Error> {fn del<T: AllocPage>(txn: &mut T,page: crate::CowPage,c: &Cursor,l: u64,) -> Result<MutPage, T::Error> { - edit in sanakirja-core/src/btree/page.rs at line 159
let f = core::mem::size_of::<Tuple<K, V>>(); - edit in sanakirja-core/src/btree/page.rs at line 162
let f = core::mem::size_of::<Tuple<K, V>>(); - edit in sanakirja-core/src/btree/page.rs at line 170
let off = (u64::from_le(*ptr) & 0xfff) as usize;let kv_ptr = p.add(off);let size = entry_size::<K, V>(kv_ptr); - replacement in sanakirja-core/src/btree/page.rs at line 171
(&mut *hdr).decr(size);(&mut *hdr).decr(f); - replacement in sanakirja-core/src/btree/page.rs at line 297
impl<K: Representable, V: Representable> super::BTreePage<K, V>for Page<K, V>{impl<K: Representable, V: Representable> super::BTreePage<K, V> for Page<K, V> { - replacement in sanakirja-core/src/btree/page.rs at line 336
(K::from_raw_ptr(txn, k as *const u8), V::from_raw_ptr(txn, v as *const u8), 0)(K::from_raw_ptr(txn, k as *const u8),V::from_raw_ptr(txn, v as *const u8),0,) - replacement in sanakirja-core/src/btree/page.rs at line 344
(K::from_raw_ptr(txn, k as *const u8), V::from_raw_ptr(txn, v as *const u8), off & !0xfff)(K::from_raw_ptr(txn, k as *const u8),V::from_raw_ptr(txn, v as *const u8),off & !0xfff,) - replacement in sanakirja-core/src/btree/page.rs at line 430
Ok(Internal::kv(txn, page, (off & !0xfff, (off & 0xfff) as u16)))Ok(Internal::kv(txn,page,(off & !0xfff, (off & 0xfff) as u16),)) - replacement in sanakirja-core/src/btree/page.rs at line 498
},} - replacement in sanakirja-core/src/btree/page.rs at line 525
>(>( - replacement in sanakirja-core/src/btree/page.rs at line 553
alloc::< _, _, L>(new, k, v, l, r, n);alloc::<_, _, L>(new, k, v, l, r, n); - replacement in sanakirja-core/src/btree/page.rs at line 563
>(>( - edit in sanakirja-core/src/btree/page.rs at line 589
- edit in sanakirja-core/src/btree/page.rs at line 643
debug!("off_new = {:?}", off_new); - replacement in sanakirja-core/src/btree/page/put.rs at line 29
if mutable && is_dirty && L::can_alloc::<T, K, V>(header(page.as_page()), size) {if mutable && is_dirty && L::can_alloc::<K, V>(header(page.as_page()), size) { - replacement in sanakirja-core/src/btree/page/put.rs at line 40
} else if L::can_compact::<T, K, V>(hdr, size) {} else if L::can_compact::<K, V>(hdr, size) { - replacement in sanakirja-core/src/btree/page/alloc.rs at line 4
fn extra_size<T, K: Representable, V: Representable>() -> usize;fn can_alloc<T, K: Representable, V: Representable>(hdr: &Header, size: usize) -> bool;fn can_compact<T, K: Representable, V: Representable>(hdr: &Header, size: usize) -> bool;fn can_alloc<K: Representable, V: Representable>(hdr: &Header, size: usize) -> bool;fn can_compact<K: Representable, V: Representable>(hdr: &Header, size: usize) -> bool; - replacement in sanakirja-core/src/btree/page/alloc.rs at line 75[3.19755]→[3.10982:11052](∅→∅),[3.11052]→[2.47655:47665](∅→∅),[2.47665]→[3.19933:19939](∅→∅),[3.19933]→[3.19933:19939](∅→∅),[3.19939]→[3.11097:11190](∅→∅)
fn extra_size<T, K: Representable, V: Representable>() -> usize {0}fn can_alloc<T, K: Representable, V: Representable>(hdr: &Header, size: usize) -> bool {fn can_alloc<K: Representable, V: Representable>(hdr: &Header, size: usize) -> bool { - edit in sanakirja-core/src/btree/page/alloc.rs at line 78
assert_eq!(size % al, 0); - replacement in sanakirja-core/src/btree/page/alloc.rs at line 80
header_size + (hdr.n() as usize) * f + size < hdr.data() as usizeheader_size + (hdr.n() as usize) * f + size <= PAGE_SIZE - replacement in sanakirja-core/src/btree/page/alloc.rs at line 82
fn can_compact<T, K: Representable, V: Representable>(hdr: &Header, size: usize) -> bool {fn can_compact<K: Representable, V: Representable>(hdr: &Header, size: usize) -> bool { - edit in sanakirja-core/src/btree/page/alloc.rs at line 84
assert_eq!(size % al, 0); - replacement in sanakirja-core/src/btree/page/alloc.rs at line 86
header_size + ((hdr.left_page() & 0xfff) as usize) + size< hdr.data() as usizedebug!("can_compact, leaf: {:?} {:?} {:?}",header_size,hdr.left_page() & 0xfff,size);header_size + ((hdr.left_page() & 0xfff) as usize) + size <= PAGE_SIZE - replacement in sanakirja-core/src/btree/page/alloc.rs at line 107
let mut swap: core::mem::MaybeUninit<Tuple<K, V>> =core::mem::MaybeUninit::uninit();let mut swap: core::mem::MaybeUninit<Tuple<K, V>> = core::mem::MaybeUninit::uninit(); - replacement in sanakirja-core/src/btree/page/alloc.rs at line 129
let (k, v) = read::<T, K, V>(txn,page.0.data.add(hdr_size + (hdr_n as usize - n) * f),);let (k, v) = read::<T, K, V>(txn, page.0.data.add(hdr_size + (hdr_n as usize - n) * f)); - replacement in sanakirja-core/src/btree/page/alloc.rs at line 134
let mut data = hdr.data() - size as u16;data &= !((align - 1) as u16);hdr.set_data(data);assert_eq!(size % align, 0); - replacement in sanakirja-core/src/btree/page/alloc.rs at line 137
data0 - replacement in sanakirja-core/src/btree/page/alloc.rs at line 142
_size: usize,size: usize, - edit in sanakirja-core/src/btree/page/alloc.rs at line 146
assert_eq!(f, size); - replacement in sanakirja-core/src/btree/page/alloc.rs at line 191[3.26068]→[3.12206:12276](∅→∅),[3.12276]→[3.26144:26160](∅→∅),[3.26144]→[3.26144:26160](∅→∅),[3.26160]→[3.12277:12370](∅→∅)
fn extra_size<T, K: Representable, V: Representable>() -> usize {8}fn can_alloc<T, K: Representable, V: Representable>(hdr: &Header, size: usize) -> bool {fn can_alloc<K: Representable, V: Representable>(hdr: &Header, size: usize) -> bool { - replacement in sanakirja-core/src/btree/page/alloc.rs at line 194
fn can_compact<T, K: Representable, V: Representable>(hdr: &Header, size: usize) -> bool {(HDR as usize) + ((hdr.left_page() & 0xfff) as usize) + 8 + size < 4096fn can_compact<K: Representable, V: Representable>(hdr: &Header, size: usize) -> bool {debug!("can_compact, internal: {:?} {:?} {:?}",HDR,hdr.left_page() & 0xfff,size);(HDR as usize) + (hdr.n() as usize) * 8 + ((hdr.left_page() & 0xfff) as usize) + 8 + size<= 4096 - replacement in sanakirja-core/src/btree/page/alloc.rs at line 220[2.50098]→[2.50098:50119](∅→∅),[2.50119]→[3.27110:27162](∅→∅),[3.12606]→[3.27110:27162](∅→∅),[3.27110]→[3.27110:27162](∅→∅),[3.27616]→[3.27616:27627](∅→∅)
let size = {((8 + f) * (hdr_n as usize - n)) as u64};let size = { ((8 + f) * (hdr_n as usize - n)) as u64 }; - replacement in sanakirja-core/src/btree/page/alloc.rs at line 228
let mut data = hdr.data() - size as u16;data -= data % (align as u16);hdr.set_data(data);assert_eq!(size % align, 0);let data = hdr.data();hdr.set_data(data - size as u16); - replacement in sanakirja-core/src/btree/page/alloc.rs at line 233
datadata - size as u16 - replacement in sanakirja-core/src/btree/mod.rs at line 28
pub trait BTreePage<K: Representable+?Sized, V: Representable+?Sized>: Sized {pub trait BTreePage<K: Representable + ?Sized, V: Representable + ?Sized>: Sized { - replacement in sanakirja-core/src/btree/mod.rs at line 33
fn next<'b, T: LoadPage>(txn: &T, p: Page<'b>, c: &mut Self::Cursor) -> Option<(&'b K, &'b V, u64)> {fn next<'b, T: LoadPage>(txn: &T,p: Page<'b>,c: &mut Self::Cursor,) -> Option<(&'b K, &'b V, u64)> { - replacement in sanakirja-core/src/btree/mod.rs at line 45
fn prev<'b, T: LoadPage>(txn: &T, p: Page<'b>, c: &mut Self::Cursor) -> Option<(&'b K, &'b V, u64)> {fn prev<'b, T: LoadPage>(txn: &T,p: Page<'b>,c: &mut Self::Cursor,) -> Option<(&'b K, &'b V, u64)> { - replacement in sanakirja-core/src/btree/mod.rs at line 58
unsafe fn unchecked_current<'a, T: LoadPage>(txn: &T, p: Page<'a>, c: &Self::Cursor) -> (&'a K, &'a V, u64);fn current<'a, T: LoadPage>(txn: &T, p: Page<'a>, c: &Self::Cursor) -> Option<(&'a K, &'a V, u64)> {unsafe fn unchecked_current<'a, T: LoadPage>(txn: &T,p: Page<'a>,c: &Self::Cursor,) -> (&'a K, &'a V, u64);fn current<'a, T: LoadPage>(txn: &T,p: Page<'a>,c: &Self::Cursor,) -> Option<(&'a K, &'a V, u64)> { - replacement in sanakirja-core/src/btree/mod.rs at line 71[3.46977]→[3.29133:29154](∅→∅),[3.29154]→[3.13745:13802](∅→∅),[3.13802]→[3.29206:29220](∅→∅),[3.29206]→[3.29206:29220](∅→∅)
unsafe {Some(Self::unchecked_current(txn, p, c))}unsafe { Some(Self::unchecked_current(txn, p, c)) } - replacement in sanakirja-core/src/btree/mod.rs at line 84
) -> Result<(&'a K, &'a V, u64), usize>;) -> Result<(&'a K, &'a V, u64), usize>; - replacement in sanakirja-core/src/btree/mod.rs at line 92
K: Representable+?Sized,V: Representable+?Sized,K: Representable + ?Sized,V: Representable + ?Sized, - replacement in sanakirja-core/src/btree/mod.rs at line 104
K: Representable+?Sized + 'a,V: Representable+?Sized + 'a,K: Representable + ?Sized + 'a,V: Representable + ?Sized + 'a, - replacement in sanakirja-core/src/btree/mod.rs at line 115
pub trait BTreeMutPage<K: Representable+?Sized, V: Representable+?Sized>:pub trait BTreeMutPage<K: Representable + ?Sized, V: Representable + ?Sized>: - replacement in sanakirja-core/src/btree/mod.rs at line 140
fn del<T: AllocPage>(txn: &mut T, page: CowPage, c: &Self::Cursor, l: u64) -> Result<MutPage, T::Error>;fn del<T: AllocPage>(txn: &mut T,page: CowPage,c: &Self::Cursor,l: u64,) -> Result<MutPage, T::Error>; - replacement in sanakirja-core/src/btree/mod.rs at line 186
Ok(Put::Ok(Self::update_left_child(txn, m.page, m.mutable, &m.c1, m.l)?))Ok(Put::Ok(Self::update_left_child(txn, m.page, m.mutable, &m.c1, m.l,)?)) - replacement in sanakirja-core/src/btree/mod.rs at line 192
Ok(Put::Ok(Self::update_left_child(txn, m.page, m.mutable, &c1, m.r)?))Ok(Put::Ok(Self::update_left_child(txn, m.page, m.mutable, &c1, m.r,)?)) - replacement in sanakirja-core/src/btree/mod.rs at line 203
pub enum Op<'a, T, K: Representable+?Sized, V: Representable+?Sized> {pub enum Op<'a, T, K: Representable + ?Sized, V: Representable + ?Sized> { - replacement in sanakirja-core/src/btree/mod.rs at line 221
'a,K: Representable+?Sized,V: Representable+?Sized,'a,K: Representable + ?Sized,V: Representable + ?Sized, - replacement in sanakirja-core/src/btree/mod.rs at line 244
impl<'a, K: Representable+?Sized, V: Representable+?Sized, P: BTreePage<K, V>>impl<'a, K: Representable + ?Sized, V: Representable + ?Sized, P: BTreePage<K, V>> - replacement in sanakirja-core/src/btree/mod.rs at line 252
if P::is_empty(self.page.as_page(), &self.c0) && self.ins.is_none() && P::is_empty(self.page.as_page(), &c1) {if P::is_empty(self.page.as_page(), &self.c0)&& self.ins.is_none()&& P::is_empty(self.page.as_page(), &c1){ - replacement in sanakirja-core/src/btree/mod.rs at line 264[3.51677]→[2.50707:50799](∅→∅),[2.50799]→[3.51777:51779](∅→∅),[3.14908]→[3.51777:51779](∅→∅),[3.51777]→[3.51777:51779](∅→∅)
pub struct Concat<'a, K: Representable+?Sized, V: Representable+?Sized, P: BTreePage<K, V>>{pub struct Concat<'a, K: Representable + ?Sized, V: Representable + ?Sized, P: BTreePage<K, V>> { - replacement in sanakirja-core/src/btree/mod.rs at line 274
pub struct Db_<K: Representable+?Sized, V: Representable+?Sized, P: BTreePage<K, V>> {pub struct Db_<K: Representable + ?Sized, V: Representable + ?Sized, P: BTreePage<K, V>> { - replacement in sanakirja-core/src/btree/mod.rs at line 285
K: Representable+?Sized,V: Representable+?Sized,K: Representable + ?Sized,V: Representable + ?Sized, - replacement in sanakirja-core/src/btree/mod.rs at line 313
K: Representable+?Sized,V: Representable+?Sized,K: Representable + ?Sized,V: Representable + ?Sized, - replacement in sanakirja-core/src/btree/mod.rs at line 340
pub fn get<'a, T: LoadPage, K: Representable+?Sized, V: Representable+?Sized, P: BTreePage<K, V>>(pub fn get<'a,T: LoadPage,K: Representable + ?Sized,V: Representable + ?Sized,P: BTreePage<K, V>,>( - replacement in sanakirja-core/src/btree/mod.rs at line 364
unsafe { last_match = Some((core::mem::transmute(k),core::mem::transmute(v),)) }unsafe { last_match = Some((core::mem::transmute(k), core::mem::transmute(v))) } - edit in sanakirja-core/src/btree/del.rs at line 80
- replacement in sanakirja-core/src/btree/del.rs at line 105
update_root(txn, db, last_op, k0v0, cursor.first_rc_level <= 1, &mut free)?;update_root(txn,db,last_op,k0v0,cursor.first_rc_level <= 1,&mut free,)?; - replacement in sanakirja-core/src/btree/del.rs at line 379
if cursor.pointer + 1 >= cursor.first_rc_level && !split_key_is_k0{if cursor.pointer + 1 >= cursor.first_rc_level && !split_key_is_k0 { - replacement in sanakirja-core/src/btree/del.rs at line 398[3.20849]→[3.62834:62877](∅→∅),[3.62834]→[3.62834:62877](∅→∅),[3.62877]→[3.20850:20918](∅→∅),[3.20918]→[3.62954:62957](∅→∅),[3.62954]→[3.62954:62957](∅→∅)
fn modify_rc<T: AllocPage + LoadPage,K: Representable,V: Representable,P: BTreePage<K, V>,>(fn modify_rc<T: AllocPage + LoadPage, K: Representable, V: Representable, P: BTreePage<K, V>>( - edit in sanakirja-core/src/btree/del.rs at line 493
- replacement in sanakirja-core/src/btree/del.rs at line 503
return Ok(())return Ok(()); - replacement in sanakirja-core/src/btree/cursor.rs at line 2
use crate::{LoadPage, CowPage};use crate::{CowPage, LoadPage}; - replacement in sanakirja-core/src/btree/cursor.rs at line 7[3.63799]→[2.51460:51552](∅→∅),[2.51552]→[3.63899:63901](∅→∅),[3.24400]→[3.63899:63901](∅→∅),[3.63899]→[3.63899:63901](∅→∅)
pub struct PageCursor<K: Representable+?Sized, V: Representable+?Sized, P: BTreePage<K, V>>{pub struct PageCursor<K: Representable + ?Sized, V: Representable + ?Sized, P: BTreePage<K, V>> { - replacement in sanakirja-core/src/btree/cursor.rs at line 12
impl<K: Representable+?Sized, V: Representable+?Sized, P: BTreePage<K, V>> Cloneimpl<K: Representable + ?Sized, V: Representable + ?Sized, P: BTreePage<K, V>> Clone - replacement in sanakirja-core/src/btree/cursor.rs at line 22
impl<K: Representable+?Sized, V: Representable+?Sized, P: BTreePage<K, V>> Copyimpl<K: Representable + ?Sized, V: Representable + ?Sized, P: BTreePage<K, V>> Copy - replacement in sanakirja-core/src/btree/cursor.rs at line 40
pub struct Cursor<K: Representable+?Sized, V: Representable+?Sized, P: BTreePage<K, V>> {pub struct Cursor<K: Representable + ?Sized, V: Representable + ?Sized, P: BTreePage<K, V>> { - replacement in sanakirja-core/src/btree/cursor.rs at line 46[3.65195]→[2.51807:51886](∅→∅),[2.51886]→[3.24807:24827](∅→∅),[3.24807]→[3.24807:24827](∅→∅),[3.24827]→[3.65305:65307](∅→∅),[3.65305]→[3.65305:65307](∅→∅)
impl<'a, K: Representable+?Sized, V: Representable+?Sized, P: BTreePage<K, V>>Cursor<K, V, P>{impl<'a, K: Representable + ?Sized, V: Representable + ?Sized, P: BTreePage<K, V>> Cursor<K, V, P> { - replacement in sanakirja-core/src/btree/cursor.rs at line 61[3.65654]→[2.51887:51962](∅→∅),[2.51962]→[3.24934:24954](∅→∅),[3.24934]→[3.24934:24954](∅→∅),[3.24954]→[3.65764:65766](∅→∅),[3.65764]→[3.65764:65766](∅→∅)
impl<K: Representable+?Sized, V: Representable+?Sized, P: BTreePage<K, V>>Cursor<K, V, P>{impl<K: Representable + ?Sized, V: Representable + ?Sized, P: BTreePage<K, V>> Cursor<K, V, P> { - replacement in sanakirja-core/src/btree/cursor.rs at line 117
pub fn set_last<'a, T: LoadPage>(&mut self, txn: &'a T) -> Result<Option<(&'a K, &'a V)>, T::Error> {pub fn set_last<'a, T: LoadPage>(&mut self,txn: &'a T,) -> Result<Option<(&'a K, &'a V)>, T::Error> { - replacement in sanakirja-core/src/btree/cursor.rs at line 148[3.68806]→[3.25313:25347](∅→∅),[3.35253]→[3.68836:68855](∅→∅),[3.25347]→[3.68836:68855](∅→∅),[3.68836]→[3.68836:68855](∅→∅),[3.68855]→[3.25348:25418](∅→∅)
pub fn next<'a, T: LoadPage>(&mut self,txn: &'a mut T,) -> Result<Option<(&K, &V)>, T::Error> {pub fn next<'a, T: LoadPage>(&mut self, txn: &'a mut T) -> Result<Option<(&K, &V)>, T::Error> { - replacement in sanakirja-core/src/btree/cursor.rs at line 163
return Ok(Some((& *k, & *v)));return Ok(Some((&*k, &*v))); - replacement in sanakirja/src/tests.rs at line 55
put(&mut txn, &mut db, &(m/2), &a).unwrap();put(&mut txn, &mut db, &(m / 2), &a).unwrap(); - edit in sanakirja/src/tests.rs at line 124
- edit in sanakirja/src/tests.rs at line 125
- edit in sanakirja/src/tests.rs at line 169
- replacement in sanakirja/src/tests.rs at line 273
#[cfg(target_family="unix")]#[cfg(target_family = "unix")] - edit in sanakirja/src/tests.rs at line 299
- edit in sanakirja/src/tests.rs at line 300
type P<K, V> = sanakirja_core::btree::page::Page<K, V>; - edit in sanakirja/src/tests.rs at line 321[2.52818]
#[test]fn sized_vs_unsized() {env_logger::try_init().unwrap_or(());let env = Env::new_anon(409_600_000, 1).unwrap();let mut txn = Env::mut_txn_begin(&env).unwrap();let now = std::time::SystemTime::now();let mut db = create_db_::<MutTxn<&Env, ()>, u64, u64, P<u64, u64>>(&mut txn).unwrap();let n = 22_014u64;for i in 0..n {debug!("=================== {:?}", i);put(&mut txn, &mut db, &i, &i).unwrap();}debug!("===========================");crate::debug::debug(&txn, &[&db], "debug0", true);put(&mut txn, &mut db, &n, &n).unwrap();crate::debug::debug(&txn, &[&db], "debug", true);println!("sized: {:?}", now.elapsed());let mut refs = BTreeMap::new();add_refs(&txn, &db, &mut refs).unwrap();let mut n = 0;for (p, r) in refs.iter() {if *r >= 2 {error!("{:?} referenced twice", p);n += 1}}assert_eq!(n, 0);/*let mut db = create_db_::<MutTxn<&Env, ()>, u64, u64, UP<u64, u64>>(&mut txn).unwrap();let now = std::time::SystemTime::now();let n = 100_000u64;for i in 0..n {put(&mut txn, &mut db, &i, &i).unwrap();}println!("unsized: {:?}", now.elapsed());*/} - replacement in sanakirja/src/environment/muttxn.rs at line 394[3.4442]→[3.4442:4458](∅→∅),[3.4458]→[3.27591:27643](∅→∅),[3.27643]→[3.4522:4529](∅→∅),[3.4522]→[3.4522:4529](∅→∅)
fn root_db<K: Representable,V: Representable,>(fn root_db<K: Representable, V: Representable>( - replacement in sanakirja/src/environment/muttxn.rs at line 412
*(maps[0].ptr.add(*root * PAGE_SIZE + GLOBAL_HEADER_SIZE + 8 * n) as *mut u64)*(maps[0].ptr.add(*root * PAGE_SIZE + GLOBAL_HEADER_SIZE + 8 * n)as *mut u64) - replacement in sanakirja/src/environment/mod.rs at line 423[3.6170]→[3.6170:6186](∅→∅),[3.6186]→[3.27711:27763](∅→∅),[3.27763]→[3.6250:6257](∅→∅),[3.6250]→[3.6250:6257](∅→∅)
fn root_db<K: Representable,V: Representable,>(fn root_db<K: Representable, V: Representable>(