From 912c32f762ee7585e20fde57c7c5dca1f9b0478d Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Sat, 2 Nov 2024 16:58:01 +0200 Subject: Refactor in preparation to larger changes --- log_db/src/memtable_primary.rs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 log_db/src/memtable_primary.rs (limited to 'log_db/src/memtable_primary.rs') diff --git a/log_db/src/memtable_primary.rs b/log_db/src/memtable_primary.rs new file mode 100644 index 0000000..9d7e1e8 --- /dev/null +++ b/log_db/src/memtable_primary.rs @@ -0,0 +1,33 @@ +use super::common::*; +use std::collections::BTreeMap; + +pub struct PrimaryMemtable { + /// Map of records indexed by key. Used as a shared heap of records + /// for all secondary memtables also. Secondary memtables store an + /// IndexableValue as their record value, which is used to get + /// the actual record from the primary memtable `records` map. + /// + /// Note: it must be invariant that all memtables (primary and secondary) + /// contain the same keys. + records: BTreeMap, +} + +impl PrimaryMemtable { + pub fn new() -> PrimaryMemtable { + PrimaryMemtable { + records: BTreeMap::new(), + } + } + + pub fn set(&mut self, key: &IndexableValue, value: &Record) { + self.records.insert(key.clone(), value.clone()); + } + + pub fn get(&mut self, key: &IndexableValue) -> Option<&Record> { + self.records.get(key) + } + + pub fn get_without_update(&self, key: &IndexableValue) -> Option<&Record> { + self.records.get(key) + } +} -- cgit v1.3