use crate::{
engine::{Batch, Engine},
error::{Error, Result},
};
pub struct DbBatch<E: Engine> {
pub(crate) data: E::Partition,
pub(crate) meta: E::Partition,
pub(crate) inner: E::Batch,
}
impl<E: Engine> DbBatch<E> {
#[inline(always)]
pub fn new(data: E::Partition, meta: E::Partition, inner: E::Batch) -> Self {
Self { data, meta, inner }
}
#[inline(always)]
pub fn insert_data(&mut self, key: &[u8], value: &[u8]) {
self.inner.insert(&self.data, key, value);
}
#[inline(always)]
pub fn insert_data_batch<I, K, V>(&mut self, entries: I)
where
I: IntoIterator<Item = (K, V)>,
K: AsRef<[u8]>,
V: AsRef<[u8]>,
{
self.inner.insert_batch(&self.data, entries);
}
#[inline(always)]
pub fn insert_meta(&mut self, key: &[u8], value: &[u8]) {
self.inner.insert(&self.meta, key, value);
}
#[inline(always)]
pub fn insert_meta_batch<I, K, V>(&mut self, entries: I)
where
I: IntoIterator<Item = (K, V)>,
K: AsRef<[u8]>,
V: AsRef<[u8]>,
{
self.inner.insert_batch(&self.meta, entries);
}
#[inline(always)]
pub fn rm_data(&mut self, key: &[u8]) {
self.inner.rm(&self.data, key);
}
#[inline(always)]
pub fn rm_data_batch<I, K>(&mut self, keys: I)
where
I: IntoIterator<Item = K>,
K: AsRef<[u8]>,
{
self.inner.rm_batch(&self.data, keys);
}
#[inline(always)]
pub fn rm_weak_data(&mut self, key: &[u8]) {
self.inner.rm_weak(&self.data, key);
}
#[inline(always)]
pub fn rm_meta(&mut self, key: &[u8]) {
self.inner.rm(&self.meta, key);
}
#[inline(always)]
pub fn rm_weak_meta(&mut self, key: &[u8]) {
self.inner.rm_weak(&self.meta, key);
}
#[inline(always)]
pub fn insert(&mut self, partition: &E::Partition, key: &[u8], value: &[u8]) {
self.inner.insert(partition, key, value);
}
#[inline(always)]
pub fn rm(&mut self, partition: &E::Partition, key: &[u8]) {
self.inner.rm(partition, key);
}
#[inline(always)]
pub fn rm_weak(&mut self, partition: &E::Partition, key: &[u8]) {
self.inner.rm_weak(partition, key);
}
#[inline(always)]
pub fn len(&self) -> usize {
self.inner.len()
}
#[inline(always)]
pub fn is_empty(&self) -> bool {
self.inner.is_empty()
}
#[inline(always)]
pub fn inner(&self) -> &E::Batch {
&self.inner
}
#[inline(always)]
pub fn inner_mut(&mut self) -> &mut E::Batch {
&mut self.inner
}
#[inline(always)]
pub fn into_inner(self) -> E::Batch {
self.inner
}
#[inline(always)]
pub fn commit(self) -> Result<()>
where
Error: From<E::Error>,
{
Ok(self.inner.commit()?)
}
}