reference counting works for put
[?]
Jan 31, 2021, 8:41 PM
ONES3V466GLO5CXKRF5ENK7VFOQPWM3YXLVRGWB56V5SH3W7XNBQCDependencies
- [2]
EAAYH6BQDebugging put - [3]
OP6SVMODResetting history - [4]
FMN7X4J2Micro-improvements, now noticeably faster than std::collections::BTreeMap - [5]
WS4ZQM4RDebugging, tests, etc.
Change contents
- replacement in sanakirja-core/src/btree/put.rs at line 27
debug!("{:?}", cursor.pointer);debug!("put: {:?} {:?}", cursor.pointer, cursor.first_rc_level); - replacement in sanakirja-core/src/btree/put.rs at line 33
cursor.pointer <= cursor.first_rc_level,cursor.pointer < cursor.first_rc_level, - replacement in sanakirja-core/src/btree/put.rs at line 137
if cursor.pointer == cursor.first_rc_level {if cursor.pointer == cursor.first_rc_level + 1 { - replacement in sanakirja-core/src/btree/put.rs at line 142
txn.decr_rc(freed ^ 1)?;txn.decr_rc(freed)?; - edit in sanakirja-core/src/btree/page.rs at line 137
debug!("new = {:?}", new); - edit in sanakirja-core/src/btree/page.rs at line 139
let l = header(page.as_page()).left_page() & !0xfff;let hdr = header_mut(&mut new);hdr.left_page = l.to_le(); - edit in sanakirja-core/src/btree/mod.rs at line 279
}pub fn get<'a, T: LoadPage, K: Representable<T>, V: Representable<T>, P: BTreePage<T, K, V>>(txn: &'a T,db: &Db<T, K, V, P>,k: &K,v: Option<&V>,) -> Result<Option<(&'a K, &'a V)>, T::Error> {// Set the "cursor stack" by setting a skip list cursor in// each page from the root to the appropriate leaf.let mut last_match = None;let mut page = db.db;for _ in 0..cursor::N_CURSORS {let mut cursor = P::first_cursor(page.as_page());if let Ok((kk, vv, _)) = P::set_cursor(txn, page.as_page(), &mut cursor, k, v) {if v.is_some() {return Ok(Some((kk, vv)));}last_match = Some((kk, vv));} else if let Some((k, v, _)) = P::current(page.as_page(), &cursor) {unsafe { last_match = Some((core::mem::transmute(k),core::mem::transmute(v),)) }}let next_page = P::left_child(page.as_page(), &cursor);if next_page > 0 {page = txn.load_page(next_page)?;} else {break;}}Ok(last_match) - replacement in sanakirja-core/src/btree/cursor.rs at line 86
debug!("p: {:?}", self.pointer);debug!("self.pointer = {:?}", self.pointer); - edit in sanakirja-core/src/btree/cursor.rs at line 89
debug!("page = {:?}, rc = {:?}", current.page, txn.rc(page.offset)?); - edit in sanakirja-core/src/btree/cursor.rs at line 91
debug!("first_rc_level = {:?}", self.pointer); - replacement in sanakirja/src/lib.rs at line 7
mod debug;pub mod debug; - replacement in sanakirja/src/environment/muttxn.rs at line 249
if rc & 0xfff >= 2 {if rc > 1 { - replacement in sanakirja/src/environment/muttxn.rs at line 251
if rc > 2 {btree::put(self, &mut rc_, &(rc - 1), &())?;}}if rc & 0xfff > 2 {btree::put(self, &mut rc_, &(rc - 1), &())?;self.rc = Some(rc_); - edit in sanakirja/src/environment/muttxn.rs at line 256
} else {self.rc = Some(rc_) - edit in sanakirja/src/environment/muttxn.rs at line 265
debug!("decr_rc_owned {:?}", off); - replacement in sanakirja/src/environment/muttxn.rs at line 278
if rc & 0xfff >= 2 {debug!("rc = {:?}", rc);if rc > 1 { - replacement in sanakirja/src/environment/muttxn.rs at line 281
if rc > 2 {btree::put(self, &mut rc_, &(rc - 1), &())?;}}if rc & 0xfff > 2 {btree::put(self, &mut rc_, &(rc - 1), &())?;self.rc = Some(rc_); - edit in sanakirja/src/environment/muttxn.rs at line 286
} else {self.rc = Some(rc_); - edit in sanakirja/src/environment/muttxn.rs at line 295
debug!("incr_rc {:?}", off); - edit in sanakirja/src/environment/muttxn.rs at line 313
} else {let mut rc = btree::create_db(self)?;debug!("put in RC: {:?} {:?}", rc, off|2);btree::put(self, &mut rc, &(off | 2), &())?;debug!("done");self.rc = Some(rc); - replacement in sanakirja/src/environment/muttxn.rs at line 335
let mut curs: btree::cursor::Cursor<Self, u64, (), btree::page::Page<u64, ()>> =btree::cursor::Cursor::new(rc);if let Some((rc, _)) = curs.set(self, Some((&page, None)))? {if let Some((rc, _)) = btree::get(self, rc, &page, None)? {