pijul nest
guest [sign in]

add simple parametric rc impl

[?]
9FZSPF6U3oQmpTwxvCnadrHKQEqTkEpnrDg1UWw9Zo9E
Oct 25, 2021, 11:20 PM
FREPDP7BFOY6H7NJORRJAMJMZQAC4ZSBMOLNBXQTDFFF4PZQIDYQC

Dependencies

  • [2] FFERM7K5 add type alias with default rc impl
  • [3] WS4ZQM4R Debugging, tests, etc.
  • [4] E4MD6T3L Proofreading and commenting of this crate (massive bug fixes included)
  • [5] EDTFMMZW add dummy RcEntry trait for rc tree key
  • [6] DASFQGOR Debugging
  • [7] YXKP4AIW New file locks, with multiple sets of free pages
  • [8] NW4S4ZCC rename MutTxn to GenericMutTxn
  • [9] S4V4QZ5C Debugging reference-counting for put
  • [10] UUUVNC4D Debugging/cleanup around cursors
  • [11] YWFYZNLZ Cleanup + inter-process concurrency
  • [12] OP6SVMOD Resetting history
  • [13] KMT3MF5N Drop a database
  • [14] TSMS6W4D Fully commented implementation of Sized nodes + massive cleanup
  • [15] OFINGD26 implementing prev() on cursors (+ some cleanup)
  • [16] YATBB4O7 run cargo fmt
  • [17] SYURNHHL Adding the `put_mut` and `set_left_child` methods
  • [18] ONES3V46 reference counting works for put

Change contents

  • replacement in "sanakirja/src/environment/muttxn.rs" at line 11
    [3.76][3.76:119]()
    pub trait RcEntry: PartialEq + Storable {}
    [3.76]
    [3.82]
    pub trait RcEntry: PartialEq + Storable {
    fn from_page_count(page: u64, count: u64) -> Self;
    fn page(&self) -> u64;
    fn count(&self) -> u64;
    }
  • replacement in "sanakirja/src/environment/muttxn.rs" at line 17
    [3.83][3.83:107]()
    impl RcEntry for u64 {}
    [3.83]
    [2.83]
    impl RcEntry for u64 {
    fn from_page_count(page: u64, count: u64) -> Self {
    assert!(count <= 0xfff);
    page | count
    }
  • replacement in "sanakirja/src/environment/muttxn.rs" at line 23
    [2.84][2.84:147]()
    pub type MutTxn<E: Borrow<Env>, T> = GenericMutTxn<E, T, u64>;
    [2.84]
    [3.37287]
    fn page(&self) -> u64 {
    *self & !0xfff
    }
    fn count(&self) -> u64 {
    *self & 0xfff
    }
    }
    /// A mutable transaction using 12 bits for the reference counting.
    pub type MutTxn<E, T> = GenericMutTxn<E, T, u64>;
  • replacement in "sanakirja/src/environment/muttxn.rs" at line 106
    [3.8146][3.300:405]()
    impl<'a, E: Borrow<Env>, T, R: RcEntry> Commit for GenericMutTxn<E, &'a mut GenericMutTxn<E, T, R>, R> {
    [3.8146]
    [3.37309]
    impl<'a, E: Borrow<Env>, T, R: RcEntry> Commit
    for GenericMutTxn<E, &'a mut GenericMutTxn<E, T, R>, R>
    {
  • replacement in "sanakirja/src/environment/muttxn.rs" at line 173
    [3.82078][3.406:512]()
    pub fn mut_txn_begin<E: Borrow<Self>, R: RcEntry>(env: E) -> Result<GenericMutTxn<E, (), R>, Error> {
    [3.82078]
    [3.82162]
    pub fn mut_txn_begin<E: Borrow<Self>, R: RcEntry>(
    env: E,
    ) -> Result<GenericMutTxn<E, (), R>, Error> {
  • replacement in "sanakirja/src/environment/muttxn.rs" at line 515
    [3.16374][3.19922:19963]()
    curs.set(self, &off, None)?;
    [3.16374]
    [3.19963]
    curs.set(self, &R::from_page_count(off, 0), None)?;
  • replacement in "sanakirja/src/environment/muttxn.rs" at line 517
    [3.19070][3.38483:38524](),[3.20029][3.38483:38524](),[3.38483][3.38483:38524](),[3.38524][3.19071:19103]()
    if *rc & !0xfff == off {
    *rc & 0xfff
    [3.20029]
    [3.38548]
    if rc.page() == off {
    rc.count()
  • replacement in "sanakirja/src/environment/muttxn.rs" at line 529
    [3.2478][3.19176:19279](),[3.2540][3.19176:19279](),[3.20082][3.19176:19279](),[3.89127][3.19176:19279]()
    assert!(rc + 1 <= 0xfff);
    btree::put(self, &mut rc_, &(off | (rc + 1)), &())?;
    [3.2540]
    [3.19279]
    btree::put(self, &mut rc_, &R::from_page_count(off, rc + 1), &())?;
  • replacement in "sanakirja/src/environment/muttxn.rs" at line 534
    [3.19411][3.19411:19468]()
    btree::put(self, &mut rc, &(off | 2), &())?;
    [3.19411]
    [3.19468]
    btree::put(self, &mut rc, &R::from_page_count(off, 2), &())?;
  • replacement in "sanakirja/src/environment/muttxn.rs" at line 568
    [3.16443][3.42107:42148]()
    curs.set(self, &off, None)?;
    [3.16443]
    [3.20319]
    curs.set(self, &R::from_page_count(off, 0), None)?;
  • replacement in "sanakirja/src/environment/muttxn.rs" at line 573
    [3.38994][3.38994:39059]()
    if *rc & !0xfff == off {
    *rc
    [3.38994]
    [3.39059]
    if rc.page() == off {
    rc.count()
  • replacement in "sanakirja/src/environment/muttxn.rs" at line 586
    [3.1705][3.39211:39267](),[3.2098][3.39211:39267](),[3.20682][3.39211:39267](),[3.39211][3.39211:39267](),[3.1738][3.935:971](),[3.39267][3.935:971](),[3.971][3.971:1036]()
    btree::del(self, &mut rc_, &rc, None)?;
    if rc & 0xfff > 2 {
    btree::put(self, &mut rc_, &(rc - 1), &())?;
    [3.20682]
    [3.1036]
    btree::del(self, &mut rc_, &R::from_page_count(off, rc), None)?;
    if rc.count() > 2 {
    btree::put(self, &mut rc_, &R::from_page_count(off, rc - 1), &())?;
  • replacement in "sanakirja/src/environment/muttxn.rs" at line 596
    [3.1198][3.1739:1793]()
    return Ok((rc & 0xfff) as usize - 1);
    [3.1198]
    [3.2244]
    return Ok(rc as usize - 1);
  • replacement in "sanakirja/src/environment/muttxn.rs" at line 633
    [3.91142][3.2581:2653](),[3.2653][3.91357:91440](),[3.91357][3.91357:91440]()
    if let Some((rc, _)) = btree::get(self, rc, &page, None)? {
    if *rc & !0xfff == page {
    let r = *rc & 0xfff;
    [3.91142]
    [3.91440]
    if let Some((rc, _)) = btree::get(self, rc, &R::from_page_count(page, 0), None)? {
    if rc.page() == page {
    let r = rc.count();