add simple parametric rc impl
[?]
9FZSPF6U3oQmpTwxvCnadrHKQEqTkEpnrDg1UWw9Zo9E
Oct 25, 2021, 11:20 PM
FREPDP7BFOY6H7NJORRJAMJMZQAC4ZSBMOLNBXQTDFFF4PZQIDYQCDependencies
- [2]
FFERM7K5add type alias with default rc impl - [3]
WS4ZQM4RDebugging, tests, etc. - [4]
E4MD6T3LProofreading and commenting of this crate (massive bug fixes included) - [5]
EDTFMMZWadd dummy RcEntry trait for rc tree key - [6]
DASFQGORDebugging - [7]
YXKP4AIWNew file locks, with multiple sets of free pages - [8]
NW4S4ZCCrename MutTxn to GenericMutTxn - [9]
S4V4QZ5CDebugging reference-counting for put - [10]
UUUVNC4DDebugging/cleanup around cursors - [11]
YWFYZNLZCleanup + inter-process concurrency - [12]
OP6SVMODResetting history - [13]
KMT3MF5NDrop a database - [14]
TSMS6W4DFully commented implementation of Sized nodes + massive cleanup - [15]
OFINGD26implementing prev() on cursors (+ some cleanup) - [16]
YATBB4O7run cargo fmt - [17]
SYURNHHLAdding the `put_mut` and `set_left_child` methods - [18]
ONES3V46reference counting works for put
Change contents
- replacement in "sanakirja/src/environment/muttxn.rs" at line 11
pub trait RcEntry: PartialEq + Storable {}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
impl RcEntry for u64 {}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
pub type MutTxn<E: Borrow<Env>, T> = GenericMutTxn<E, T, u64>;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
impl<'a, E: Borrow<Env>, T, R: RcEntry> Commit for GenericMutTxn<E, &'a mut GenericMutTxn<E, T, R>, R> {impl<'a, E: Borrow<Env>, T, R: RcEntry> Commitfor GenericMutTxn<E, &'a mut GenericMutTxn<E, T, R>, R>{ - replacement in "sanakirja/src/environment/muttxn.rs" at line 173
pub fn mut_txn_begin<E: Borrow<Self>, R: RcEntry>(env: E) -> Result<GenericMutTxn<E, (), R>, Error> {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
curs.set(self, &off, None)?;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 & 0xfffif 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)), &())?;btree::put(self, &mut rc_, &R::from_page_count(off, rc + 1), &())?; - replacement in "sanakirja/src/environment/muttxn.rs" at line 534
btree::put(self, &mut rc, &(off | 2), &())?;btree::put(self, &mut rc, &R::from_page_count(off, 2), &())?; - replacement in "sanakirja/src/environment/muttxn.rs" at line 568
curs.set(self, &off, None)?;curs.set(self, &R::from_page_count(off, 0), None)?; - replacement in "sanakirja/src/environment/muttxn.rs" at line 573
if *rc & !0xfff == off {*rcif 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), &())?;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
return Ok((rc & 0xfff) as usize - 1);return Ok(rc as usize - 1); - replacement in "sanakirja/src/environment/muttxn.rs" at line 633
if let Some((rc, _)) = btree::get(self, rc, &page, None)? {if *rc & !0xfff == page {let r = *rc & 0xfff;if let Some((rc, _)) = btree::get(self, rc, &R::from_page_count(page, 0), None)? {if rc.page() == page {let r = rc.count();