more versions

main
Ziyang Hu 2 years ago
parent bcf95acf48
commit b9ebfcce06

@ -16,22 +16,33 @@ use cxx::let_cxx_string;
pub use cxx::{SharedPtr, UniquePtr};
use status::Result;
use std::ops::Deref;
use std::pin::Pin;
pub struct PinnableSlicePtr(UniquePtr<PinnableSlice>);
impl PinnableSlicePtr {
#[inline]
pub fn pinned_slice(&mut self) -> Pin<&mut PinnableSlice> {
self.0.pin_mut()
}
}
impl Default for PinnableSlicePtr {
#[inline]
fn default() -> Self {
PinnableSlicePtr(new_pinnable_slice())
}
}
impl PinnableSlicePtr {
#[inline]
pub fn reset(&mut self) {
reset_pinnable_slice(self.0.pin_mut());
reset_pinnable_slice(self.pinned_slice());
}
}
impl AsRef<[u8]> for PinnableSlicePtr {
#[inline]
fn as_ref(&self) -> &[u8] {
convert_pinnable_slice_back(&self.0)
}
@ -40,6 +51,7 @@ impl AsRef<[u8]> for PinnableSlicePtr {
impl Deref for PinnableSlicePtr {
type Target = PinnableSlice;
#[inline]
fn deref(&self) -> &Self::Target {
&self.0
}
@ -48,6 +60,7 @@ impl Deref for PinnableSlicePtr {
pub struct PinnableSlicePtrShared(SharedPtr<PinnableSlice>);
impl AsRef<[u8]> for PinnableSlicePtrShared {
#[inline]
fn as_ref(&self) -> &[u8] {
convert_pinnable_slice_back(&self.0)
}
@ -56,6 +69,7 @@ impl AsRef<[u8]> for PinnableSlicePtrShared {
impl Deref for PinnableSlicePtrShared {
type Target = PinnableSlice;
#[inline]
fn deref(&self) -> &Self::Target {
&self.0
}
@ -63,6 +77,13 @@ impl Deref for PinnableSlicePtrShared {
pub struct SlicePtr(UniquePtr<Slice>);
impl SlicePtr {
#[inline]
pub fn pinned_slice(&mut self) -> Pin<&mut Slice> {
self.0.pin_mut()
}
}
impl AsRef<[u8]> for SlicePtr {
#[inline]
fn as_ref(&self) -> &[u8] {
@ -73,6 +94,7 @@ impl AsRef<[u8]> for SlicePtr {
impl Deref for SlicePtr {
type Target = Slice;
#[inline]
fn deref(&self) -> &Self::Target {
&self.0
}
@ -90,6 +112,7 @@ impl AsRef<[u8]> for SlicePtrShared {
impl Deref for SlicePtrShared {
type Target = Slice;
#[inline]
fn deref(&self) -> &Self::Target {
&self.0
}
@ -228,10 +251,10 @@ impl TransactionPtr {
) -> Result<bool> {
let mut status = BridgeStatus::default();
let res = if transact {
self.get_txn(options, key.as_ref(), slice.0.pin_mut(), &mut status);
self.get_txn(options, key.as_ref(), slice.pinned_slice(), &mut status);
status.check_err(())
} else {
self.get_raw(options, key.as_ref(), slice.0.pin_mut(), &mut status);
self.get_raw(options, key.as_ref(), slice.pinned_slice(), &mut status);
status.check_err(())
};
match res {
@ -248,7 +271,7 @@ impl TransactionPtr {
slice: &mut PinnableSlicePtr,
) -> Result<bool> {
let mut status = BridgeStatus::default();
self.get_for_update_txn(options, key.as_ref(), slice.0.pin_mut(), &mut status);
self.get_for_update_txn(options, key.as_ref(), slice.pinned_slice(), &mut status);
match status.check_err(()) {
Ok(_) => Ok(true),
Err(e) if e.status.code == StatusCode::kNotFound => Ok(false),

Loading…
Cancel
Save