pijul nest
guest [sign in]

Split trait Representable into its mandatory part and an optional part

[?]
Feb 14, 2021, 12:07 PM
QYDGYIZRNFRIQD7RUCY5YAN3F2THZA74E5UOHPIFWSULEJFAFVJQC

Dependencies

  • [2] LSQ6V7M6 Cleanup + docs
  • [3] T73WR2BX Cleaner RC increments for keys and values containing references + more comments in `del`
  • [4] OTWDDJE7 Trait/type cleanup
  • [5] H3FVSQIQ Unsized pages
  • [6] APPY2E7M Unsized deletions + custom sizes back
  • [7] UUUVNC4D Debugging/cleanup around cursors
  • [8] OFINGD26 implementing prev() on cursors (+ some cleanup)
  • [9] KMT3MF5N Drop a database
  • [10] DV4A2LR7 Double-inserts (rebalancing near an internal deletion)
  • [11] 73Z2UB3J Cleanup + comments
  • [12] X3QVVQIS More debugging (del seems to work now)
  • [13] SO25TWFL A few features for integrating it into Pijul
  • [14] YWFYZNLZ Cleanup + inter-process concurrency
  • [15] W26CFMAQ Improving safety of cursors
  • [16] XEU2QVLC Debugging after plugging this into Pijul
  • [17] 6UVFCERM Formatting, debugging, etc.
  • [18] EAAYH6BQ Debugging put
  • [19] G4JEQLLX Debugging synchronisation
  • [20] Q7DRIBBR Debugging replace (which cannot be del+put)
  • [21] 6DCQHIFP Minor changes after benchmarking
  • [22] EYNN7RLS Tests++ (including UUID)
  • [23] 6DMPXOAT More debugging
  • [24] NXMFNPZ7 Comments + debugging drop
  • [25] ESUI5EUZ Making as_page() unsafe
  • [26] AOX2XQIS Actually, with the correct functions, Unsized pages are always slower than Sized pages (especially for writing)
  • [27] HN6Z5DU4 Cleanup
  • [28] ONES3V46 reference counting works for put
  • [29] QEUTVAZ4 Splitting btree::page
  • [30] T7QB6QEP Adding debug.rs
  • [31] KX3WVNZW Testing/debugging "rebalance causes split of the root"
  • [32] LROAI3NB Two iterators (convenience functions), along with tests to move cursors (put and del still destroy cursors though)
  • [33] YXKP4AIW New file locks, with multiple sets of free pages
  • [34] UAQX27N4 Tests
  • [35] MSRWB47Y Deletions at immutable leaves weren't really deleting anything
  • [36] RV2L6CZW A few comments
  • [37] OP6SVMOD Resetting history
  • [38] WS4ZQM4R Debugging, tests, etc.

Change contents

  • replacement in sanakirja-core/src/lib.rs at line 36
    [2.303][3.0:44](),[3.119][3.0:44](),[3.506][3.506:701](),[3.701][2.304:593](),[2.593][3.701:732](),[3.701][3.701:732](),[3.732][2.594:724](),[2.724][3.0:64](),[3.732][3.0:64](),[3.64][2.725:894](),[2.894][3.116:196](),[3.64][3.116:196](),[3.196][2.895:1004](),[2.1004][3.65:150](),[3.196][3.65:150](),[3.166][3.65:150](),[3.150][2.1005:1129](),[2.1129][3.50:98](),[3.150][3.50:98](),[3.50][3.50:98](),[3.98][2.1130:1131]()
    pub trait Representable: core::fmt::Debug {
    /// If this value is an offset to another page at offset `offset`,
    /// return `Some(offset)`. Return `None` else.
    fn page_offsets(&self) -> Self::PageOffsets;
    const ALIGN: usize;
    /// Some datastructures expect this to be at least the memory size
    /// of `Self` (as returned by `core::mem::size_of::<Self>()`). For
    /// example, the sized implementation of B trees sometimes
    /// allocates an instance of `Self` on the stack, and copy it from
    /// the
    const SIZE: Option<usize>;
    /// If `Self::SIZE.is_some()`, this must return the same
    /// value. The default implementation is `Self;:SIZE.unwrap()`.
    fn size(&self) -> usize {
    Self::SIZE.unwrap()
    }
    /// Form a pointer to `Self` from a raw pointer. The purpose of
    /// this function is that the output can be a slim or a fat
    /// pointer (like for `&[u8]`).
    unsafe fn from_raw_ptr<'a, T: LoadPage>(txn: &T, p: *const u8) -> &'a Self;
    /// Read the size from an on-page entry. If `Self::SIZE.is_some()`
    /// this must be the same value.
    unsafe fn onpage_size(_: *const u8) -> usize {
    Self::SIZE.unwrap()
    }
    /// Write to a page. Must not overwrite the allocated size, but
    /// this isn't checkde (which is why it's unsafe).
    unsafe fn write_to_page(&self, p: *mut u8);
    [2.303]
    [2.1131]
    pub trait Storable: core::fmt::Debug {
  • edit in sanakirja-core/src/lib.rs at line 43
    [2.1363]
    [2.1363]
    /// If this value is an offset to another page at offset `offset`,
    /// return `Some(offset)`. Return `None` else.
    fn page_offsets(&self) -> Self::PageOffsets;
  • replacement in sanakirja-core/src/lib.rs at line 60
    [3.809][3.167:203]()
    impl Representable for $t {
    [3.809]
    [3.851]
    impl Storable for $t {
  • edit in sanakirja-core/src/lib.rs at line 65
    [3.1014][3.1014:1154]()
    const ALIGN: usize = core::mem::align_of::<Self>();
    const SIZE: Option<usize> = Some(core::mem::size_of::<Self>());
  • replacement in sanakirja-core/src/lib.rs at line 68
    [3.1364][3.280:357](),[3.357][3.357:394]()
    unsafe fn from_raw_ptr<'a, T>(_: &T, p: *const u8) -> &'a Self {
    &*(p as *const Self)
    [3.1267]
    [3.99]
    }
    impl UnsizedStorable for $t {
    const ALIGN: usize = core::mem::align_of::<$t>();
    /// If `Self::SIZE.is_some()`, this must return the same
    /// value. The default implementation is `Self;:SIZE.unwrap()`.
    fn size(&self) -> usize {
    core::mem::size_of::<Self>()
  • edit in sanakirja-core/src/lib.rs at line 77
    [3.113]
    [3.231]
    /// Read the size from an on-page entry.
    unsafe fn onpage_size(_: *const u8) -> usize {
    core::mem::size_of::<Self>()
    }
    /// Write to a page. Must not overwrite the allocated size, but
    /// this isn't checked (which is why it's unsafe).
  • edit in sanakirja-core/src/lib.rs at line 88
    [3.408]
    [3.1364]
    unsafe fn from_raw_ptr<'a, T>(_: &T, p: *const u8) -> &'a Self {
    &*(p as *const Self)
    }
  • replacement in sanakirja-core/src/lib.rs at line 107
    [3.362][3.362:392]()
    impl Representable for [u8] {
    [3.362]
    [3.392]
    /// Types that can be stored on disk.
    pub trait UnsizedStorable: Storable {
    const ALIGN: usize;
    /// If `Self::SIZE.is_some()`, this must return the same
    /// value. The default implementation is `Self;:SIZE.unwrap()`.
    fn size(&self) -> usize;
    /// Read the size from an on-page entry. If `Self::SIZE.is_some()`
    /// this must be the same value.
    unsafe fn onpage_size(_: *const u8) -> usize;
    /// Write to a page. Must not overwrite the allocated size, but
    /// this isn't checked (which is why it's unsafe).
    unsafe fn write_to_page(&self, p: *mut u8);
    unsafe fn from_raw_ptr<'a, T>(_: &T, p: *const u8) -> &'a Self;
    }
    impl Storable for [u8] {
  • edit in sanakirja-core/src/lib.rs at line 131
    [3.523][3.523:589]()
    const ALIGN: usize = 2;
    const SIZE: Option<usize> = None;
  • edit in sanakirja-core/src/lib.rs at line 134
    [3.682]
    [3.682]
    }
    impl UnsizedStorable for [u8] {
    const ALIGN: usize = 2;
  • replacement in sanakirja-core/src/lib.rs at line 158
    [3.469][3.197:280]()
    unsafe fn read<T: LoadPage, K: Representable + ?Sized, V: Representable + ?Sized>(
    [3.469]
    [2.1659]
    unsafe fn read<T: LoadPage, K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized>(
  • replacement in sanakirja-core/src/lib.rs at line 169
    [3.1749][3.135:228]()
    fn alloc_size<K: Representable + ?Sized, V: Representable + ?Sized>(k: &K, v: &V) -> usize {
    [3.1749]
    [3.1833]
    fn alloc_size<K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized>(k: &K, v: &V) -> usize {
  • replacement in sanakirja-core/src/lib.rs at line 175
    [3.1972][3.229:329]()
    unsafe fn entry_size<K: Representable + ?Sized, V: Representable + ?Sized>(k: *const u8) -> usize {
    [3.1972]
    [3.1663]
    unsafe fn entry_size<K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized>(
    k: *const u8,
    ) -> usize {
  • replacement in sanakirja-core/src/btree/put.rs at line 9
    [3.360][3.360:460]()
    K: Representable + ?Sized + core::fmt::Debug,
    V: Representable + ?Sized + core::fmt::Debug,
    [3.360]
    [3.460]
    K: Storable + ?Sized + core::fmt::Debug,
    V: Storable + ?Sized + core::fmt::Debug,
  • replacement in sanakirja-core/src/btree/put.rs at line 78
    [3.525][3.525:625]()
    K: Representable + ?Sized + core::fmt::Debug,
    V: Representable + ?Sized + core::fmt::Debug,
    [3.525]
    [3.625]
    K: Storable + ?Sized + core::fmt::Debug,
    V: Storable + ?Sized + core::fmt::Debug,
  • replacement in sanakirja-core/src/btree/put.rs at line 181
    [3.7489][3.787:849]()
    K: Representable + ?Sized,
    V: Representable + ?Sized,
    [3.7489]
    [3.1076]
    K: Storable + ?Sized,
    V: Storable + ?Sized,
  • replacement in sanakirja-core/src/btree/page_unsized.rs at line 20
    [3.2334][3.1081:1189]()
    K: Representable + ?Sized + core::fmt::Debug,
    V: Representable + ?Sized + core::fmt::Debug,
    [3.2334]
    [3.2438]
    K: UnsizedStorable + ?Sized + core::fmt::Debug,
    V: UnsizedStorable + ?Sized + core::fmt::Debug,
  • replacement in sanakirja-core/src/btree/page_unsized.rs at line 270
    [3.11586][3.584:647]()
    fn size<K: Representable + ?Sized, V: Representable + ?Sized>(
    [3.11586]
    [3.647]
    fn size<K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized>(
  • replacement in sanakirja-core/src/btree/page_unsized.rs at line 291
    [3.1234][3.1341:1440](),[3.11586][3.1341:1440]()
    impl<K: Representable + ?Sized, V: Representable + ?Sized> super::BTreePage<K, V> for Page<K, V> {
    [3.1234]
    [3.2467]
    impl<K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized> super::BTreePage<K, V>
    for Page<K, V>
    {
  • replacement in sanakirja-core/src/btree/page_unsized.rs at line 438
    [3.16540][3.1474:1559]()
    unsafe fn lookup<T: LoadPage, K: Representable + ?Sized, V: Representable + ?Sized>(
    [3.16540]
    [3.16615]
    unsafe fn lookup<T: LoadPage, K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized>(
  • replacement in sanakirja-core/src/btree/page_unsized.rs at line 542
    [3.19008][3.19008:19108]()
    K: Representable + ?Sized + core::fmt::Debug,
    V: Representable + ?Sized + core::fmt::Debug,
    [3.19008]
    [3.19108]
    K: UnsizedStorable + ?Sized + core::fmt::Debug,
    V: UnsizedStorable + ?Sized + core::fmt::Debug,
  • replacement in sanakirja-core/src/btree/page_unsized.rs at line 580
    [3.20093][3.20093:20193]()
    K: Representable + ?Sized + core::fmt::Debug,
    V: Representable + ?Sized + core::fmt::Debug,
    [3.20093]
    [3.20193]
    K: UnsizedStorable + ?Sized + core::fmt::Debug,
    V: UnsizedStorable + ?Sized + core::fmt::Debug,
  • replacement in sanakirja-core/src/btree/page_unsized.rs at line 609
    [3.21214][3.21214:21288]()
    fn clone<K: Representable + ?Sized, V: Representable + ?Sized, L: Alloc>(
    [3.21213]
    [3.21288]
    fn clone<K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized, L: Alloc>(
  • replacement in sanakirja-core/src/btree/page_unsized.rs at line 637
    [3.22308][3.22308:22382]()
    fn alloc<K: Representable + ?Sized, V: Representable + ?Sized, L: Alloc>(
    [3.22308]
    [3.22382]
    fn alloc<K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized, L: Alloc>(
  • replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 7
    [3.22998][3.22998:23098]()
    K: Representable + ?Sized + core::fmt::Debug,
    V: Representable + ?Sized + core::fmt::Debug,
    [3.22998]
    [3.23098]
    K: UnsizedStorable + ?Sized + core::fmt::Debug,
    V: UnsizedStorable + ?Sized + core::fmt::Debug,
  • replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 98
    [3.25027][3.25027:25127]()
    K: Representable + ?Sized + core::fmt::Debug,
    V: Representable + ?Sized + core::fmt::Debug,
    [3.25027]
    [3.25127]
    K: UnsizedStorable + ?Sized + core::fmt::Debug,
    V: UnsizedStorable + ?Sized + core::fmt::Debug,
  • replacement in sanakirja-core/src/btree/page_unsized/put.rs at line 7
    [3.27084][3.27084:27184]()
    K: Representable + ?Sized + core::fmt::Debug,
    V: Representable + ?Sized + core::fmt::Debug,
    [3.27084]
    [3.27184]
    K: UnsizedStorable + ?Sized + core::fmt::Debug,
    V: UnsizedStorable + ?Sized + core::fmt::Debug,
  • replacement in sanakirja-core/src/btree/page_unsized/put.rs at line 95
    [3.29277][3.29277:29377]()
    K: Representable + ?Sized + core::fmt::Debug,
    V: Representable + ?Sized + core::fmt::Debug,
    [3.29277]
    [3.29377]
    K: UnsizedStorable + ?Sized + core::fmt::Debug,
    V: UnsizedStorable + ?Sized + core::fmt::Debug,
  • replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 6
    [3.2975][3.4328:4403]()
    fn current_size<K: Representable + ?Sized, V: Representable + ?Sized>(
    [3.2975]
    [3.4403]
    fn current_size<K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized>(
  • replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 15
    [3.34317][3.34317:34396]()
    fn truncate_left<T, K: Representable + ?Sized, V: Representable + ?Sized>(
    [3.34317]
    [3.34396]
    fn truncate_left<T, K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized>(
  • replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 21
    [3.34499][3.34499:34574]()
    fn alloc_insert<K: Representable + ?Sized, V: Representable + ?Sized>(
    [3.34499]
    [3.34574]
    fn alloc_insert<K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized>(
  • replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 30
    [3.34865][3.34865:34944]()
    fn offset_slice<'a, K: Representable + ?Sized, V: Representable + ?Sized>(
    [3.34865]
    [3.34944]
    fn offset_slice<'a, K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized>(
  • replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 33
    [3.35011][3.2933:3015]()
    fn kv<'a, T: LoadPage, K: Representable + ?Sized, V: Representable + ?Sized>(
    [3.35011]
    [3.35083]
    fn kv<'a, T: LoadPage, K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized>(
  • replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 68
    [3.35961][3.4523:4598]()
    fn current_size<K: Representable + ?Sized, V: Representable + ?Sized>(
    [3.35961]
    [3.4598]
    fn current_size<K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized>(
  • replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 99
    [3.36469][3.36469:36548]()
    fn truncate_left<T, K: Representable + ?Sized, V: Representable + ?Sized>(
    [3.36469]
    [3.36548]
    fn truncate_left<T, K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized>(
  • replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 133
    [3.37823][3.37823:37898]()
    fn alloc_insert<K: Representable + ?Sized, V: Representable + ?Sized>(
    [3.37823]
    [3.37898]
    fn alloc_insert<K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized>(
  • replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 166
    [3.38879][3.38879:38958]()
    fn offset_slice<'a, K: Representable + ?Sized, V: Representable + ?Sized>(
    [3.38879]
    [3.38958]
    fn offset_slice<'a, K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized>(
  • replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 177
    [3.39262][3.3042:3124]()
    fn kv<'a, T: LoadPage, K: Representable + ?Sized, V: Representable + ?Sized>(
    [3.39262]
    [3.39334]
    fn kv<'a, T: LoadPage, K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized>(
  • replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 193
    [3.5064][3.5064:5139]()
    fn current_size<K: Representable + ?Sized, V: Representable + ?Sized>(
    [3.5064]
    [3.5139]
    fn current_size<K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized>(
  • replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 226
    [3.4588][3.40209:40288](),[3.40209][3.40209:40288]()
    fn truncate_left<T, K: Representable + ?Sized, V: Representable + ?Sized>(
    [3.4588]
    [3.40288]
    fn truncate_left<T, K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized>(
  • replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 268
    [3.41747][3.41747:41822]()
    fn alloc_insert<K: Representable + ?Sized, V: Representable + ?Sized>(
    [3.41747]
    [3.41822]
    fn alloc_insert<K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized>(
  • replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 306
    [3.42983][3.42983:43062]()
    fn offset_slice<'a, K: Representable + ?Sized, V: Representable + ?Sized>(
    [3.42983]
    [3.43062]
    fn offset_slice<'a, K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized>(
  • replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 318
    [3.43370][3.3151:3233]()
    fn kv<'a, T: LoadPage, K: Representable + ?Sized, V: Representable + ?Sized>(
    [3.43370]
    [3.43442]
    fn kv<'a, T: LoadPage, K: UnsizedStorable + ?Sized, V: UnsizedStorable + ?Sized>(
  • replacement in sanakirja-core/src/btree/page.rs at line 29
    [3.2146][3.2146:2227]()
    impl<K: Representable, V: Representable> super::BTreePage<K, V> for Page<K, V> {
    [3.2146]
    [3.2311]
    impl<K: Storable, V: Storable> super::BTreePage<K, V> for Page<K, V> {
  • replacement in sanakirja-core/src/btree/page.rs at line 48
    [3.2742][3.2742:2759]()
    txn: &T,
    [3.2742]
    [3.2759]
    _txn: &T,
  • replacement in sanakirja-core/src/btree/page.rs at line 57
    [3.3020][3.3020:3069]()
    let al = K::ALIGN.max(V::ALIGN);
    [3.3020]
    [3.3069]
    let al = core::mem::align_of::<Tuple<K, V>>();
  • replacement in sanakirja-core/src/btree/page.rs at line 62
    [3.3200][3.3200:3289](),[3.3289][3.3289:3312](),[3.3312][3.3312:3428](),[3.3428][3.3428:3470]()
    let (k, v) = read::<T, K, V>(txn, page.data.as_ptr().add(off as usize));
    Some((
    K::from_raw_ptr(txn, k as *const u8),
    V::from_raw_ptr(txn, v as *const u8),
    0,
    ))
    [3.3200]
    [3.3470]
    let kv = &*(page.data.as_ptr().add(off as usize) as *const Tuple<K, V>);
    Some((&kv.k, &kv.v, 0))
  • replacement in sanakirja-core/src/btree/page.rs at line 69
    [3.3648][3.3648:3747](),[3.3747][3.3747:3770](),[3.3770][3.3770:3886](),[3.3886][3.3886:3939]()
    let (k, v) = read::<T, K, V>(txn, page.data.as_ptr().add((off & 0xfff) as usize));
    Some((
    K::from_raw_ptr(txn, k as *const u8),
    V::from_raw_ptr(txn, v as *const u8),
    off & !0xfff,
    ))
    [3.3648]
    [3.3939]
    let kv = &*(page.data.as_ptr().add((off as usize) & 0xfff) as *const Tuple<K, V>);
    Some((&kv.k, &kv.v, off & !0xfff))
  • replacement in sanakirja-core/src/btree/page.rs at line 75
    [3.3970][3.3970:4038]()
    fn current_size(page: crate::Page, c: &Self::Cursor) -> usize {
    [3.3970]
    [3.4038]
    fn current_size(_page: crate::Page, c: &Self::Cursor) -> usize {
  • replacement in sanakirja-core/src/btree/page.rs at line 77
    [3.4095][3.4095:4139](),[3.4139][2.7161:7213](),[2.7213][3.4176:4436](),[3.4176][3.4176:4436]()
    unsafe {
    if c.is_leaf {
    core::mem::size_of::<Tuple<K, V>>()
    } else {
    8 + entry_size::<K, V>(page.data.as_ptr().add(
    (u64::from_le(*(page.data.as_ptr().add(HDR) as *const u64).add(c.cur as usize))
    & 0xfff) as usize,
    ))
    }
    [3.4095]
    [3.4436]
    if c.is_leaf {
    core::mem::size_of::<Tuple<K, V>>()
    } else {
    8 + core::mem::size_of::<Tuple<K, V>>()
  • replacement in sanakirja-core/src/btree/page.rs at line 135
    [3.5965][3.5965:6026]()
    let al = K::ALIGN.max(V::ALIGN);
    [3.5965]
    [3.6026]
    let al = core::mem::align_of::<Tuple<K, V>>();
  • replacement in sanakirja-core/src/btree/page.rs at line 172
    [3.7092][3.5036:5160](),[3.8770][3.5036:5160]()
    impl<K: Representable + core::fmt::Debug, V: Representable + core::fmt::Debug>
    super::BTreeMutPage<K, V> for Page<K, V>
    [3.7092]
    [3.9832]
    impl<K: Storable + core::fmt::Debug, V: Storable + core::fmt::Debug> super::BTreeMutPage<K, V>
    for Page<K, V>
  • replacement in sanakirja-core/src/btree/page.rs at line 176
    [3.1301][3.555:609]()
    <super::page_unsized::Page<K, V>>::init(page)
    [3.1301]
    [3.9926]
    let h = header_mut(page);
    h.init();
  • replacement in sanakirja-core/src/btree/page.rs at line 285
    [3.44673][3.44673:44726]()
    let al = K::ALIGN.max(V::ALIGN);
    [3.1770]
    [3.44726]
    let al = core::mem::align_of::<Tuple<K, V>>();
  • replacement in sanakirja-core/src/btree/page.rs at line 352
    [2.7652][3.45058:45103](),[3.1528][3.45058:45103](),[3.45058][3.45058:45103]()
    let al = K::ALIGN.max(V::ALIGN);
    [2.7652]
    [3.45103]
    let al = core::mem::align_of::<Tuple<K, V>>();
  • replacement in sanakirja-core/src/btree/page.rs at line 356
    [3.16210][3.2743:2796]()
    8 + alloc_size::<K, V>(m.mid.0, m.mid.1)
    [3.16210]
    [3.16281]
    8 + core::mem::size_of::<Tuple<K, V>>()
  • replacement in sanakirja-core/src/btree/page.rs at line 428
    [3.18476][3.7608:7699]()
    fn size<K: Representable, V: Representable>(m: &ModifiedPage<K, V, Page<K, V>>) -> usize {
    [3.18476]
    [3.7699]
    fn size<K: Storable, V: Storable>(m: &ModifiedPage<K, V, Page<K, V>>) -> usize {
  • replacement in sanakirja-core/src/btree/page.rs at line 434
    [3.7837][3.7837:7878]()
    let al = K::ALIGN.max(V::ALIGN);
    [3.7837]
    [3.7878]
    let al = core::mem::align_of::<Tuple<K, V>>();
  • replacement in sanakirja-core/src/btree/page.rs at line 439
    [3.7964][3.7964:7998]()
    if let Some((k, v)) = m.ins {
    [3.7964]
    [3.7998]
    if m.ins.is_some() {
  • replacement in sanakirja-core/src/btree/page.rs at line 441
    [3.8052][3.8052:8213]()
    total += extra + crate::alloc_size(k, v) as usize;
    if let Some((k, v)) = m.ins2 {
    total += extra + crate::alloc_size(k, v) as usize;
    [3.8052]
    [3.20159]
    total += extra + core::mem::size_of::<Tuple<K, V>>();
    if m.ins2.is_some() {
    total += extra + core::mem::size_of::<Tuple<K, V>>()
  • replacement in sanakirja-core/src/btree/page.rs at line 452
    [3.9543][3.4379:4451]()
    fn leaf_linear_search<T: LoadPage, K: Representable, V: Representable>(
    [3.9543]
    [3.111]
    fn leaf_linear_search<T: LoadPage, K: Storable, V: Storable>(
  • replacement in sanakirja-core/src/btree/page.rs at line 479
    [3.4487][3.4487:4551]()
    unsafe fn cmp<T: LoadPage, K: Representable, V: Representable>(
    [3.4487]
    [3.4551]
    unsafe fn cmp<T: LoadPage, K: Storable, V: Storable>(
  • replacement in sanakirja-core/src/btree/page.rs at line 487
    [3.4687][3.4687:4804](),[3.4804][3.4804:4835]()
    let (k, v) = read::<T, K, V>(txn, p.as_ptr().offset(off as isize & 0xfff));
    let k = K::from_raw_ptr(txn, k);
    match k.compare(txn, k0) {
    [3.4687]
    [3.4835]
    let tup = &*(p.as_ptr().offset(off as isize & 0xfff) as *const Tuple<K, V>);
    match tup.k.compare(txn, k0) {
  • replacement in sanakirja-core/src/btree/page.rs at line 491
    [3.4899][3.4899:4948](),[3.4948][3.4948:4983]()
    let v = V::from_raw_ptr(txn, v);
    v.compare(txn, v0)
    [3.4899]
    [3.4983]
    tup.v.compare(txn, v0)
  • replacement in sanakirja-core/src/btree/page.rs at line 500
    [3.5085][3.5085:5161]()
    unsafe fn internal_search<T: LoadPage, K: Representable, V: Representable>(
    [3.5085]
    [3.5161]
    unsafe fn internal_search<T: LoadPage, K: Storable, V: Storable>(
  • replacement in sanakirja-core/src/btree/page.rs at line 528
    [3.429][3.4452:4519]()
    unsafe fn lookup<T: LoadPage, K: Representable, V: Representable>(
    [3.429]
    [3.9608]
    unsafe fn lookup<T: LoadPage, K: Storable, V: Storable>(
  • replacement in sanakirja-core/src/btree/page.rs at line 539
    [3.9834][3.45591:45632]()
    let al = K::ALIGN.max(V::ALIGN);
    [3.9834]
    [3.45632]
    let al = core::mem::align_of::<Tuple<K, V>>();
  • replacement in sanakirja-core/src/btree/page.rs at line 555
    [3.12021][3.8346:8357](),[3.8357][3.5384:5483](),[3.8349][3.5384:5483](),[3.5483][3.8473:8487](),[3.8473][3.8473:8487](),[3.8487][3.6046:6049]()
    fn modify<
    T: LoadPage,
    K: Representable + core::fmt::Debug,
    V: Representable + core::fmt::Debug,
    L: Alloc,
    >(
    [3.12021]
    [3.5491]
    fn modify<T: LoadPage, K: Storable + core::fmt::Debug, V: Storable + core::fmt::Debug, L: Alloc>(
  • replacement in sanakirja-core/src/btree/page.rs at line 587
    [3.35449][3.8358:8368](),[3.8368][3.5982:6081](),[3.8746][3.5982:6081](),[3.6081][3.8870:8884](),[3.8870][3.8870:8884](),[3.8884][3.6097:6100]()
    fn merge<
    T: LoadPage,
    K: Representable + core::fmt::Debug,
    V: Representable + core::fmt::Debug,
    L: Alloc,
    >(
    [3.35449]
    [3.6089]
    fn merge<T: LoadPage, K: Storable + core::fmt::Debug, V: Storable + core::fmt::Debug, L: Alloc>(
  • replacement in sanakirja-core/src/btree/page.rs at line 613
    [3.36872][3.6692:6748]()
    fn clone<K: Representable, V: Representable, L: Alloc>(
    [3.36508]
    [3.38741]
    fn clone<K: Storable, V: Storable, L: Alloc>(
  • replacement in sanakirja-core/src/btree/page.rs at line 625
    [3.22697][3.6749:6805]()
    let size = entry_size::<K, V>(ptr);
    [3.22697]
    [3.22804]
    let size = core::mem::size_of::<Tuple<K, V>>();
  • replacement in sanakirja-core/src/btree/page.rs at line 627
    [3.22851][3.10071:10150]()
    let off_new = L::alloc(hdr, size, K::ALIGN.max(V::ALIGN));
    [3.22851]
    [3.22970]
    let off_new = L::alloc(hdr, size, core::mem::align_of::<Tuple<K, V>>());
  • replacement in sanakirja-core/src/btree/page.rs at line 636
    [3.46159][3.39476:39520](),[2.8856][3.39476:39520](),[3.1753][3.39476:39520](),[3.6860][3.39476:39520](),[3.39476][3.39476:39520]()
    let a = K::ALIGN.max(V::ALIGN);
    [2.8856]
    [3.39520]
    let a = core::mem::size_of::<Tuple<K, V>>();
  • replacement in sanakirja-core/src/btree/page.rs at line 654
    [3.39991][3.6861:6917]()
    fn alloc<K: Representable, V: Representable, L: Alloc>(
    [3.39991]
    [3.23686]
    fn alloc<K: Storable, V: Storable, L: Alloc>(
  • replacement in sanakirja-core/src/btree/page.rs at line 662
    [3.40174][3.40174:40209](),[3.40209][3.6918:6978]()
    let size = alloc_size(k0, v0);
    let off_new = L::alloc_insert::<K, V>(new, n, size, r);
    [3.40174]
    [3.23773]
    let off_new = L::alloc_insert::<K, V>(new, n, r);
  • replacement in sanakirja-core/src/btree/page.rs at line 664
    [3.23786][3.23786:24072]()
    let new_ptr = new.0.data.add(off_new as usize);
    core::ptr::copy_nonoverlapping(k0, new_ptr as *mut K, 1);
    let ks = k0.size();
    let v_ptr = new_ptr.add((ks + V::ALIGN - 1) & !(V::ALIGN - 1));
    core::ptr::copy_nonoverlapping(v0, v_ptr as *mut V, 1);
    [3.23786]
    [3.24072]
    let new_ptr = &mut *(new.0.data.add(off_new as usize) as *mut Tuple<K, V>);
    core::ptr::copy_nonoverlapping(k0, &mut new_ptr.k, 1);
    core::ptr::copy_nonoverlapping(v0, &mut new_ptr.v, 1);
    debug!("allocated {:?} {:?} {:?}", new_ptr, l, r);
  • replacement in sanakirja-core/src/btree/page/rebalance.rs at line 7
    [3.6997][3.6997:7079]()
    K: Representable + core::fmt::Debug,
    V: Representable + core::fmt::Debug,
    [3.6997]
    [3.594]
    K: Storable + core::fmt::Debug,
    V: Storable + core::fmt::Debug,
  • replacement in sanakirja-core/src/btree/page/rebalance.rs at line 78
    [3.46506][3.46506:46547]()
    let al = K::ALIGN.max(V::ALIGN);
    [3.46506]
    [3.46547]
    let al = core::mem::align_of::<Tuple<K, V>>();
  • replacement in sanakirja-core/src/btree/page/rebalance.rs at line 123
    [3.7364][3.7364:7446]()
    K: Representable + core::fmt::Debug,
    V: Representable + core::fmt::Debug,
    [3.7364]
    [3.4035]
    K: Storable + core::fmt::Debug,
    V: Storable + core::fmt::Debug,
  • replacement in sanakirja-core/src/btree/page/put.rs at line 6
    [3.7605][3.7605:7687]()
    K: Representable + core::fmt::Debug,
    V: Representable + core::fmt::Debug,
    [3.7605]
    [3.6097]
    K: Storable + core::fmt::Debug,
    V: Storable + core::fmt::Debug,
  • replacement in sanakirja-core/src/btree/page/put.rs at line 21
    [3.6310][3.6310:6416]()
    let size = alloc_size(k0, v0)
    + if let Some((k1, v1)) = k1v1 {
    alloc_size(k1, v1)
    [3.6310]
    [3.6416]
    let size = core::mem::size_of::<Tuple<K, V>>()
    + if k1v1.is_some() {
    core::mem::size_of::<Tuple<K, V>>()
  • edit in sanakirja-core/src/btree/page/put.rs at line 27
    [3.6458]
    [2.10589]
    debug!("put {:?} {:?} {:?}", k0, v0, k1v1);
  • replacement in sanakirja-core/src/btree/page/put.rs at line 39
    [3.9326][3.9326:9487]()
    let off = (u64::from_le(*ptr) & 0xfff) as usize;
    let kv_ptr = p.add(off);
    let size = entry_size::<K, V>(kv_ptr);
    [3.9326]
    [3.9487]
    let size = core::mem::size_of::<Tuple<K, V>>();
  • replacement in sanakirja-core/src/btree/page/put.rs at line 49
    [3.6984][3.8367:8414]()
    debug!("{:?} {:?} {:?}", l, r, n);
    [3.6984]
    [3.7815]
    debug!("lrn = {:?} {:?} {:?}", l, r, n);
  • replacement in sanakirja-core/src/btree/page/put.rs at line 90
    [3.8325][3.8325:8407]()
    K: Representable + core::fmt::Debug,
    V: Representable + core::fmt::Debug,
    [3.8325]
    [3.8524]
    K: Storable + core::fmt::Debug,
    V: Storable + core::fmt::Debug,
  • edit in sanakirja-core/src/btree/page/put.rs at line 123
    [3.9502]
    [3.9502]
    debug!("u = {:?} k = {:?}", u, k);
  • replacement in sanakirja-core/src/btree/page/put.rs at line 186
    [3.12114][3.9150:9247]()
    if let Some((k, v)) = L::truncate_left::<T, K, V>(txn, &mut right, k as usize + 1) {
    [3.12114]
    [3.12206]
    if let Some((k, v)) = L::truncate_left::<K, V>(&mut right, k as usize + 1) {
  • replacement in sanakirja-core/src/btree/page/put.rs at line 188
    [3.12231][3.9248:9390]()
    split_key = K::from_raw_ptr(txn, k as *const u8);
    split_value = V::from_raw_ptr(txn, v as *const u8);
    [3.12231]
    [3.12307]
    split_key = &*k;
    split_value = &*v;
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 4
    [3.17273][3.6276:6456]()
    fn can_alloc<K: Representable, V: Representable>(hdr: &Header, size: usize) -> bool;
    fn can_compact<K: Representable, V: Representable>(hdr: &Header, size: usize) -> bool;
    [3.17273]
    [3.17546]
    fn can_alloc<K: Storable, V: Storable>(hdr: &Header, size: usize) -> bool;
    fn can_compact<K: Storable, V: Storable>(hdr: &Header, size: usize) -> bool;
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 9
    [3.17650][3.5023:5094](),[3.5094][3.10630:10647](),[3.10630][3.10630:10647]()
    fn truncate_left<T: LoadPage, K: Representable, V: Representable>(
    txn: &T,
    [3.17650]
    [3.17717]
    fn truncate_left<K: Storable, V: Storable>(
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 14
    [3.17803][3.10648:10705](),[3.10705][3.17869:17972](),[3.17869][3.17869:17972]()
    fn alloc_insert<K: Representable, V: Representable>(
    new: &mut MutPage,
    n: &mut isize,
    size: usize,
    r: u64,
    ) -> usize;
    [3.17803]
    [3.17972]
    fn alloc_insert<K: Storable, V: Storable>(new: &mut MutPage, n: &mut isize, r: u64) -> usize;
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 18
    [3.18160][3.5095:5169]()
    fn offset_slice<'a, T: LoadPage, K: Representable, V: Representable>(
    [3.18160]
    [3.18230]
    fn offset_slice<'a, T: LoadPage, K: Storable, V: Storable>(
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 21
    [3.18297][3.5170:5234]()
    fn kv<'a, T: LoadPage, K: Representable, V: Representable>(
    [3.18297]
    [3.10825]
    fn kv<'a, T: LoadPage, K: Storable, V: Storable>(
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 52
    [3.19245][3.10843:10922]()
    pub fn first<T, K: Representable, V: Representable>(&self) -> (u64, u16) {
    [3.19245]
    [3.19330]
    pub fn first<T, K: Storable, V: Storable>(&self) -> (u64, u16) {
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 57
    [3.47654][3.19493:19542](),[2.12454][3.19493:19542](),[3.1877][3.19493:19542](),[3.10981][3.19493:19542](),[3.19493][3.19493:19542]()
    let al = K::ALIGN.max(V::ALIGN);
    [2.12454]
    [3.19542]
    let al = core::mem::align_of::<Tuple<K, V>>();
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 69
    [3.19755][3.6457:6547]()
    fn can_alloc<K: Representable, V: Representable>(hdr: &Header, size: usize) -> bool {
    [3.19755]
    [2.12455]
    fn can_alloc<K: Storable, V: Storable>(hdr: &Header, size: usize) -> bool {
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 71
    [2.12508][3.47719:47760](),[3.1916][3.47719:47760](),[3.47719][3.47719:47760]()
    let al = K::ALIGN.max(V::ALIGN);
    [2.12508]
    [3.6548]
    let al = core::mem::align_of::<Tuple<K, V>>();
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 76
    [3.20377][3.6649:6741](),[3.6741][3.47889:47930](),[3.11334][3.47889:47930]()
    fn can_compact<K: Representable, V: Representable>(hdr: &Header, size: usize) -> bool {
    let al = K::ALIGN.max(V::ALIGN);
    [3.20377]
    [3.6742]
    fn can_compact<K: Storable, V: Storable>(hdr: &Header, size: usize) -> bool {
    let al = core::mem::align_of::<Tuple<K, V>>();
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 88
    [3.20842][3.5235:5306](),[3.5306][3.11440:11457](),[3.11440][3.11440:11457]()
    fn truncate_left<T: LoadPage, K: Representable, V: Representable>(
    txn: &T,
    [3.20842]
    [3.20909]
    fn truncate_left<K: Storable, V: Storable>(
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 94
    [2.12562][3.48138:48179](),[3.1955][3.48138:48179](),[3.48138][3.48138:48179]()
    let al = K::ALIGN.max(V::ALIGN);
    [2.12562]
    [3.48179]
    let al = core::mem::align_of::<Tuple<K, V>>();
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 124
    [3.49146][3.7111:7212](),[3.7212][3.49294:49363](),[3.49294][3.49294:49363]()
    let (k, v) = read::<T, K, V>(txn, page.0.data.add(hdr_size + (hdr_n as usize - n) * f));
    Some((K::from_raw_ptr(txn, k), V::from_raw_ptr(txn, v)))
    [3.49146]
    [3.23188]
    let tup =
    &*(page.0.data.add(hdr_size + (hdr_n as usize - n) * f) as *const Tuple<K, V>);
    Some((&tup.k, &tup.v))
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 135
    [3.23462][3.11765:11822](),[3.11822][3.23528:23578](),[3.23528][3.23528:23578](),[3.23578][3.7262:7283](),[3.49386][3.23599:23632](),[3.7283][3.23599:23632](),[3.23599][3.23599:23632]()
    fn alloc_insert<K: Representable, V: Representable>(
    new: &mut MutPage,
    n: &mut isize,
    size: usize,
    _: u64,
    ) -> usize {
    [3.23462]
    [2.12678]
    fn alloc_insert<K: Storable, V: Storable>(new: &mut MutPage, n: &mut isize, _: u64) -> usize {
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 137
    [2.12731][3.7284:7313](),[3.1994][3.7284:7313](),[3.49440][3.7284:7313](),[3.7313][3.49440:49481](),[3.49440][3.49440:49481]()
    assert_eq!(f, size);
    let al = K::ALIGN.max(V::ALIGN);
    [2.12731]
    [3.49481]
    let al = core::mem::align_of::<Tuple<K, V>>();
  • edit in sanakirja-core/src/btree/page/alloc.rs at line 139
    [3.49532][3.49532:49587]()
    // debug!("{:?} {:?} {:?}", new, hdr.n(), *n);
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 161
    [3.25230][3.5307:5381]()
    fn offset_slice<'a, T: LoadPage, K: Representable, V: Representable>(
    [3.25230]
    [3.25300]
    fn offset_slice<'a, T: LoadPage, K: Storable, V: Storable>(
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 167
    [3.25752][3.5382:5446](),[3.5446][3.12036:12053](),[3.12036][3.12036:12053]()
    fn kv<'a, T: LoadPage, K: Representable, V: Representable>(
    txn: &T,
    [3.25752]
    [3.25812]
    fn kv<'a, T: LoadPage, K: Storable, V: Storable>(
    _txn: &T,
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 173
    [3.25917][3.12054:12205]()
    let (k, v) = read::<T, K, V>(txn, page.data.as_ptr().add(off as usize));
    (K::from_raw_ptr(txn, k), V::from_raw_ptr(txn, v), 0)
    [3.25917]
    [3.26023]
    let tup = &*(page.data.as_ptr().add(off as usize) as *const Tuple<K, V>);
    debug!(">>>>>>>> kv {:?} {:?}", off, tup);
    (&tup.k, &tup.v, 0)
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 181
    [3.26068][3.7314:7404]()
    fn can_alloc<K: Representable, V: Representable>(hdr: &Header, size: usize) -> bool {
    [3.26068]
    [3.10176]
    fn can_alloc<K: Storable, V: Storable>(hdr: &Header, size: usize) -> bool {
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 185
    [3.26346][3.7405:7497]()
    fn can_compact<K: Representable, V: Representable>(hdr: &Header, size: usize) -> bool {
    [3.26346]
    [3.7497]
    fn can_compact<K: Storable, V: Storable>(hdr: &Header, size: usize) -> bool {
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 195
    [3.26533][3.12467:12546]()
    fn truncate_left<T, K: Representable, V: Representable>(
    _txn: &T,
    [3.26533]
    [3.26600]
    fn truncate_left<K: Storable, V: Storable>(
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 225
    [3.28075][3.12700:12757](),[3.12757][3.28141:28245](),[3.28141][3.28141:28245]()
    fn alloc_insert<K: Representable, V: Representable>(
    new: &mut MutPage,
    n: &mut isize,
    size: usize,
    r: u64,
    ) -> usize {
    [3.28075]
    [3.28245]
    fn alloc_insert<K: Storable, V: Storable>(new: &mut MutPage, n: &mut isize, r: u64) -> usize {
    let size = core::mem::size_of::<Tuple<K, V>>();
    debug!("alloc internal {:?} {:?}", n, size);
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 232
    [3.28356][3.28356:28426]()
    Self::alloc(&mut *hdr, size, K::ALIGN.max(V::ALIGN)),
    [3.28356]
    [3.28426]
    Self::alloc(&mut *hdr, size, core::mem::align_of::<Tuple<K, V>>()),
  • edit in sanakirja-core/src/btree/page/alloc.rs at line 235
    [3.28451]
    [3.28451]
    debug!("off_new = {:?}", off_new);
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 261
    [3.29294][3.12758:12822]()
    fn offset_slice<'a, T, K: Representable, V: Representable>(
    [3.29294]
    [3.29364]
    fn offset_slice<'a, T, K: Storable, V: Storable>(
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 272
    [3.29672][3.5473:5537](),[3.5537][3.12877:12894](),[3.12877][3.12877:12894]()
    fn kv<'a, T: LoadPage, K: Representable, V: Representable>(
    txn: &T,
    [3.29672]
    [3.29732]
    fn kv<'a, T: LoadPage, K: Storable, V: Storable>(
    _txn: &T,
  • replacement in sanakirja-core/src/btree/page/alloc.rs at line 278
    [3.29837][3.12895:13046]()
    let (k, v) = read::<T, K, V>(txn, page.data.as_ptr().add(off as usize));
    (K::from_raw_ptr(txn, k), V::from_raw_ptr(txn, v), r)
    [3.29837]
    [3.29943]
    let tup = &*(page.data.as_ptr().add(off as usize) as *const Tuple<K, V>);
    (&tup.k, &tup.v, r)
  • replacement in sanakirja-core/src/btree/mod.rs at line 31
    [3.46099][3.7971:8054]()
    pub trait BTreePage<K: Representable + ?Sized, V: Representable + ?Sized>: Sized {
    [3.46099]
    [3.8900]
    pub trait BTreePage<K: ?Sized, V: ?Sized>: Sized {
  • replacement in sanakirja-core/src/btree/mod.rs at line 135
    [3.47601][3.47601:47634](),[3.47634][3.47634:47651](),[3.47651][3.8723:8785](),[3.50323][3.13884:13908](),[3.8785][3.13884:13908](),[3.13884][3.13884:13908](),[3.13908][3.47728:47732](),[3.47728][3.47728:47732]()
    pub struct PageIterator<
    'a,
    T: LoadPage,
    K: Representable + ?Sized,
    V: Representable + ?Sized,
    P: BTreePage<K, V>,
    > {
    [3.47601]
    [3.47732]
    pub struct PageIterator<'a, T: LoadPage, K: ?Sized, V: ?Sized, P: BTreePage<K, V>> {
  • replacement in sanakirja-core/src/btree/mod.rs at line 141
    [3.47778][3.47778:47817](),[3.47817][3.8786:8866](),[3.50400][3.13988:14016](),[3.8866][3.13988:14016](),[3.13988][3.13988:14016](),[3.14016][3.47916:47964](),[3.47916][3.47916:47964]()
    impl<
    'a,
    T: LoadPage,
    K: Representable + ?Sized + 'a,
    V: Representable + ?Sized + 'a,
    P: BTreePage<K, V>,
    > Iterator for PageIterator<'a, T, K, V, P>
    [3.47778]
    [3.47964]
    impl<'a, T: LoadPage, K: ?Sized + 'a, V: ?Sized + 'a, P: BTreePage<K, V>> Iterator
    for PageIterator<'a, T, K, V, P>
  • replacement in sanakirja-core/src/btree/mod.rs at line 150
    [3.48112][3.8867:8945](),[3.8945][3.10223:10262](),[3.50495][3.48223:48225](),[3.10262][3.48223:48225](),[3.14161][3.48223:48225](),[3.48223][3.48223:48225]()
    pub trait BTreeMutPage<K: Representable + ?Sized, V: Representable + ?Sized>:
    BTreePage<K, V> + core::fmt::Debug
    {
    [3.48112]
    [3.10873]
    pub trait BTreeMutPage<K: ?Sized, V: ?Sized>: BTreePage<K, V> + core::fmt::Debug {
  • replacement in sanakirja-core/src/btree/mod.rs at line 210
    [3.3885][3.9353:9428]()
    pub enum Op<'a, T, K: Representable + ?Sized, V: Representable + ?Sized> {
    [3.3885]
    [3.50267]
    pub enum Op<'a, T, K: ?Sized, V: ?Sized> {
  • replacement in sanakirja-core/src/btree/mod.rs at line 237
    [3.6378][3.50557:50582](),[3.50557][3.50557:50582](),[3.50582][3.9429:9499](),[3.50626][3.14709:14733](),[3.9499][3.14709:14733](),[3.14709][3.14709:14733](),[3.14733][3.50676:50680](),[3.50676][3.50676:50680]()
    pub struct ModifiedPage<
    'a,
    K: Representable + ?Sized,
    V: Representable + ?Sized,
    P: BTreePage<K, V>,
    > {
    [3.6378]
    [3.30668]
    pub struct ModifiedPage<'a, K: ?Sized, V: ?Sized, P: BTreePage<K, V>> {
  • replacement in sanakirja-core/src/btree/mod.rs at line 261
    [3.51677][3.9736:9834]()
    pub struct Concat<'a, K: Representable + ?Sized, V: Representable + ?Sized, P: BTreePage<K, V>> {
    [3.51677]
    [3.699]
    pub struct Concat<'a, K: ?Sized, V: ?Sized, P: BTreePage<K, V>> {
  • replacement in sanakirja-core/src/btree/mod.rs at line 279
    [3.52016][3.9835:9926]()
    pub struct Db_<K: Representable + ?Sized, V: Representable + ?Sized, P: BTreePage<K, V>> {
    [3.52016]
    [3.9162]
    pub struct Db_<K: ?Sized, V: ?Sized, P: BTreePage<K, V>> {
  • replacement in sanakirja-core/src/btree/mod.rs at line 292
    [3.1322][3.127:221](),[3.52188][3.127:221]()
    impl<K: Representable + ?Sized, V: Representable + ?Sized, P: BTreePage<K, V>> Db_<K, V, P> {
    [3.1322]
    [3.1323]
    impl<K: ?Sized, V: ?Sized, P: BTreePage<K, V>> Db_<K, V, P> {
  • replacement in sanakirja-core/src/btree/mod.rs at line 305
    [3.1429][3.183:202](),[3.183][3.183:202](),[3.202][3.52206:52224](),[3.52206][3.52206:52224](),[3.52224][3.9927:9989](),[3.51070][3.15178:15205](),[3.9989][3.15178:15205](),[3.15178][3.15178:15205](),[3.15205][3.52304:52307](),[3.52304][3.52304:52307]()
    pub fn create_db_<
    T: AllocPage,
    K: Representable + ?Sized,
    V: Representable + ?Sized,
    P: BTreeMutPage<K, V>,
    >(
    [3.1429]
    [3.52307]
    pub fn create_db_<T: AllocPage, K: ?Sized, V: ?Sized, P: BTreeMutPage<K, V>>(
  • replacement in sanakirja-core/src/btree/mod.rs at line 319
    [3.1479][3.259:314](),[3.3887][3.259:314](),[3.314][3.15245:15327](),[3.15327][3.402:405](),[3.402][3.402:405]()
    pub fn create_db<
    T: AllocPage + core::fmt::Debug,
    K: Representable + core::fmt::Debug,
    V: Representable + core::fmt::Debug,
    >(
    [3.1479]
    [3.405]
    pub fn create_db<T: AllocPage, K: Storable, V: Storable>(
  • replacement in sanakirja-core/src/btree/mod.rs at line 326
    [3.1501][3.1501:1517](),[3.1517][3.3903:3921](),[3.518][3.3903:3921](),[3.3903][3.3903:3921](),[3.3921][3.9990:10052](),[3.51244][3.15426:15453](),[3.10052][3.15426:15453](),[3.15426][3.15426:15453](),[3.15453][3.4001:4004](),[3.4001][3.4001:4004]()
    pub fn fork_db<
    T: AllocPage,
    K: Representable + ?Sized,
    V: Representable + ?Sized,
    P: BTreeMutPage<K, V>,
    >(
    [3.1501]
    [3.4004]
    pub fn fork_db<T: AllocPage, K: Storable + ?Sized, V: Storable + ?Sized, P: BTreeMutPage<K, V>>(
  • replacement in sanakirja-core/src/btree/mod.rs at line 341
    [3.1624][3.10053:10179](),[3.407][3.10053:10179]()
    pub fn get<
    'a,
    T: LoadPage,
    K: Representable + ?Sized,
    V: Representable + ?Sized,
    P: BTreePage<K, V>,
    >(
    [3.1624]
    [3.502]
    pub fn get<'a, T: LoadPage, K: Storable + ?Sized, V: Storable + ?Sized, P: BTreePage<K, V>>(
  • replacement in sanakirja-core/src/btree/mod.rs at line 381
    [3.1743][3.650:770](),[3.318][3.650:770]()
    pub fn drop<
    T: AllocPage,
    K: Representable + ?Sized,
    V: Representable + ?Sized,
    P: BTreePage<K, V>,
    >(
    [3.1743]
    [3.770]
    pub fn drop<T: AllocPage, K: Storable + ?Sized, V: Storable + ?Sized, P: BTreePage<K, V>>(
  • replacement in sanakirja-core/src/btree/del.rs at line 10
    [3.31281][3.2179:2279]()
    K: Representable + ?Sized + core::fmt::Debug,
    V: Representable + ?Sized + core::fmt::Debug,
    [3.31281]
    [3.15929]
    K: Storable + ?Sized + core::fmt::Debug,
    V: Storable + ?Sized + core::fmt::Debug,
  • replacement in sanakirja-core/src/btree/del.rs at line 35
    [3.31418][3.2280:2380]()
    K: Representable + ?Sized + core::fmt::Debug,
    V: Representable + ?Sized + core::fmt::Debug,
    [3.31418]
    [3.16086]
    K: Storable + ?Sized + core::fmt::Debug,
    V: Storable + ?Sized + core::fmt::Debug,
  • replacement in sanakirja-core/src/btree/del.rs at line 153
    [3.31607][3.2655:2755]()
    K: Representable + ?Sized + core::fmt::Debug,
    V: Representable + ?Sized + core::fmt::Debug,
    [3.31607]
    [3.18370]
    K: Storable + ?Sized + core::fmt::Debug,
    V: Storable + ?Sized + core::fmt::Debug,
  • replacement in sanakirja-core/src/btree/del.rs at line 201
    [3.61838][3.2890:2952]()
    K: Representable + ?Sized,
    V: Representable + ?Sized,
    [3.61838]
    [3.19335]
    K: Storable + ?Sized,
    V: Storable + ?Sized,
  • replacement in sanakirja-core/src/btree/del.rs at line 286
    [3.34015][3.3072:3134]()
    K: Representable + ?Sized,
    V: Representable + ?Sized,
    [3.34015]
    [3.20078]
    K: Storable + ?Sized,
    V: Storable + ?Sized,
  • replacement in sanakirja-core/src/btree/del.rs at line 443
    [3.3600][3.3600:3662]()
    K: Representable + ?Sized,
    V: Representable + ?Sized,
    [3.3600]
    [3.3662]
    K: Storable + ?Sized,
    V: Storable + ?Sized,
  • replacement in sanakirja-core/src/btree/del.rs at line 500
    [3.38259][3.3690:3790]()
    K: Representable + ?Sized + core::fmt::Debug,
    V: Representable + ?Sized + core::fmt::Debug,
    [3.38259]
    [3.23454]
    K: Storable + ?Sized + core::fmt::Debug,
    V: Storable + ?Sized + core::fmt::Debug,
  • replacement in sanakirja-core/src/btree/del.rs at line 589
    [3.12290][3.12649:12743]()
    fn single_child<K: Representable + ?Sized, V: Representable + ?Sized, P: BTreeMutPage<K, V>>(
    [3.12290]
    [3.12743]
    fn single_child<K: Storable + ?Sized, V: Storable + ?Sized, P: BTreeMutPage<K, V>>(
  • replacement in sanakirja-core/src/btree/del.rs at line 606
    [3.13028][3.12329:12458](),[3.12329][3.12329:12458]()
    fn modify<
    'a,
    T: AllocPage,
    K: Representable + ?Sized,
    V: Representable + ?Sized,
    P: BTreeMutPage<K, V>,
    >(
    [3.13028]
    [3.12458]
    fn modify<'a, T: AllocPage, K: Storable + ?Sized, V: Storable + ?Sized, P: BTreeMutPage<K, V>>(
  • replacement in sanakirja-core/src/btree/cursor.rs at line 7
    [3.63799][3.7238:7358]()
    pub(super) struct PageCursor<
    K: Representable + ?Sized,
    V: Representable + ?Sized,
    P: BTreePage<K, V>,
    > {
    [3.63799]
    [3.33799]
    pub(super) struct PageCursor<K: ?Sized, V: ?Sized, P: BTreePage<K, V>> {
  • replacement in sanakirja-core/src/btree/cursor.rs at line 24
    [3.64963][3.10916:11010]()
    pub struct Cursor<K: Representable + ?Sized, V: Representable + ?Sized, P: BTreePage<K, V>> {
    [3.64963]
    [3.2475]
    pub struct Cursor<K: ?Sized, V: ?Sized, P: BTreePage<K, V>> {
  • replacement in sanakirja-core/src/btree/cursor.rs at line 32
    [3.65195][3.11011:11112]()
    impl<'a, K: Representable + ?Sized, V: Representable + ?Sized, P: BTreePage<K, V>> Cursor<K, V, P> {
    [3.65195]
    [3.10823]
    impl<'a, K: ?Sized, V: ?Sized, P: BTreePage<K, V>> Cursor<K, V, P> {
  • replacement in sanakirja-core/src/btree/cursor.rs at line 88
    [3.65654][3.11113:11210]()
    impl<K: Representable + ?Sized, V: Representable + ?Sized, P: BTreePage<K, V>> Cursor<K, V, P> {
    [3.65654]
    [3.7485]
    impl<K: ?Sized, V: ?Sized, P: BTreePage<K, V>> Cursor<K, V, P> {
  • replacement in sanakirja-core/src/btree/cursor.rs at line 198
    [3.11929][3.3459:3567](),[3.3459][3.3459:3567]()
    K: Representable + ?Sized + core::fmt::Debug,
    V: Representable + ?Sized + core::fmt::Debug,
    [3.11929]
    [3.11930]
    K: Storable + ?Sized + core::fmt::Debug,
    V: Storable + ?Sized + core::fmt::Debug,
  • replacement in sanakirja-core/src/btree/cursor.rs at line 288
    [3.14497][3.8580:8712]()
    pub struct Iter<
    'a,
    T: LoadPage,
    K: Representable + ?Sized,
    V: Representable + ?Sized,
    P: BTreePage<K, V>,
    > {
    [3.14497]
    [3.3256]
    pub struct Iter<'a, T: LoadPage, K: Storable + ?Sized, V: Storable + ?Sized, P: BTreePage<K, V>> {
  • replacement in sanakirja-core/src/btree/cursor.rs at line 300
    [3.8775][3.8775:8837]()
    K: Representable + ?Sized,
    V: Representable + ?Sized,
    [3.8775]
    [3.8837]
    K: Storable + ?Sized,
    V: Storable + ?Sized,
  • replacement in sanakirja-core/src/btree/cursor.rs at line 312
    [3.8933][3.8933:9013]()
    K: Representable + ?Sized + 'a,
    V: Representable + ?Sized + 'a,
    [3.8933]
    [3.9013]
    K: Storable + ?Sized + 'a,
    V: Storable + ?Sized + 'a,
  • replacement in sanakirja-core/src/btree/cursor.rs at line 323
    [3.3980][3.9089:9224]()
    pub struct RevIter<
    'a,
    T: LoadPage,
    K: Representable + ?Sized,
    V: Representable + ?Sized,
    P: BTreePage<K, V>,
    > {
    [3.3980]
    [3.4092]
    pub struct RevIter<'a, T: LoadPage, K: Storable + ?Sized, V: Storable + ?Sized, P: BTreePage<K, V>>
    {
  • replacement in sanakirja-core/src/btree/cursor.rs at line 336
    [3.9287][3.9287:9349]()
    K: Representable + ?Sized,
    V: Representable + ?Sized,
    [3.9287]
    [3.9349]
    K: Storable + ?Sized,
    V: Storable + ?Sized,
  • replacement in sanakirja-core/src/btree/cursor.rs at line 348
    [3.9448][3.9448:9528]()
    K: Representable + ?Sized + 'a,
    V: Representable + ?Sized + 'a,
    [3.9448]
    [3.9528]
    K: Storable + ?Sized + 'a,
    V: Storable + ?Sized + 'a,
  • replacement in sanakirja/src/tests.rs at line 189
    [3.11504][3.11504:11528]()
    let n = 300 as u64;
    [3.11504]
    [3.11528]
    let n = 256 as u64;
  • edit in sanakirja/src/tests.rs at line 198
    [3.677][3.677:724](),[3.724][2.20895:20955]()
    let db2 = fork_db(&mut txn, &db).unwrap();
    crate::debug::debug(&txn, &[&db, &db2], "debug", true);
  • edit in sanakirja/src/tests.rs at line 199
    [3.11639]
    [3.724]
    crate::debug::debug(&txn, &[&db], "debug", true);
    let db2 = fork_db(&mut txn, &db).unwrap();
  • replacement in sanakirja/src/tests.rs at line 336
    [3.7872][3.26969:27051]()
    fn add_refs<T: LoadPage, K: Representable, V: Representable, P: BTreePage<K, V>>(
    [3.7872]
    [3.7963]
    fn add_refs<T: LoadPage, K: Storable, V: Storable, P: BTreePage<K, V>>(
  • replacement in sanakirja/src/tests.rs at line 689
    [3.388][3.388:486]()
    K: Representable + ?Sized + std::fmt::Debug,
    V: Representable + ?Sized + std::fmt::Debug,
    [3.388]
    [3.486]
    K: Storable + ?Sized + std::fmt::Debug,
    V: Storable + ?Sized + std::fmt::Debug,
  • replacement in sanakirja/src/lib.rs at line 5
    [3.217][3.217:312]()
    pub use sanakirja_core::{btree, direct_repr, CowPage, LoadPage, MutPage, Page, Representable};
    [3.217]
    [3.312]
    pub use sanakirja_core::{btree, direct_repr, CowPage, LoadPage, MutPage, Page, Storable};
  • replacement in sanakirja/src/environment/muttxn.rs at line 395
    [3.4442][3.16513:16648]()
    fn root_db<
    K: Representable + ?Sized,
    V: Representable + ?Sized,
    P: crate::btree::BTreePage<K, V>,
    >(
    [3.4442]
    [3.4529]
    fn root_db<K: Storable + ?Sized, V: Storable + ?Sized, P: crate::btree::BTreePage<K, V>>(
  • replacement in sanakirja/src/environment/mod.rs at line 7
    [3.91734][3.5575:5621]()
    use sanakirja_core::{CowPage, Representable};
    [3.91734]
    [3.1300]
    use sanakirja_core::{CowPage, Storable};
  • replacement in sanakirja/src/environment/mod.rs at line 430
    [3.16945][3.16945:17080]()
    fn root_db<
    K: Representable + ?Sized,
    V: Representable + ?Sized,
    P: crate::btree::BTreePage<K, V>,
    >(
    [3.16945]
    [3.17080]
    fn root_db<K: Storable + ?Sized, V: Storable + ?Sized, P: crate::btree::BTreePage<K, V>>(
  • replacement in sanakirja/src/environment/mod.rs at line 437
    [3.17211][3.17211:17346]()
    fn root_db<
    K: Representable + ?Sized,
    V: Representable + ?Sized,
    P: crate::btree::BTreePage<K, V>,
    >(
    [3.17211]
    [3.6257]
    fn root_db<K: Storable + ?Sized, V: Storable + ?Sized, P: crate::btree::BTreePage<K, V>>(
  • replacement in sanakirja/src/debug.rs at line 12
    [3.248][3.248:346]()
    K: Representable + ?Sized + std::fmt::Debug,
    V: Representable + ?Sized + std::fmt::Debug,
    [3.248]
    [3.346]
    K: Storable + ?Sized + std::fmt::Debug,
    V: Storable + ?Sized + std::fmt::Debug,
  • replacement in sanakirja/src/debug.rs at line 35
    [3.826][3.826:924]()
    K: Representable + ?Sized + std::fmt::Debug,
    V: Representable + ?Sized + std::fmt::Debug,
    [3.826]
    [3.924]
    K: Storable + ?Sized + std::fmt::Debug,
    V: Storable + ?Sized + std::fmt::Debug,
  • replacement in sanakirja/src/debug.rs at line 77
    [3.1898][3.1898:1996]()
    K: Representable + ?Sized + std::fmt::Debug,
    V: Representable + ?Sized + std::fmt::Debug,
    [3.1898]
    [3.1996]
    K: Storable + ?Sized + std::fmt::Debug,
    V: Storable + ?Sized + std::fmt::Debug,