shared versions of slices

main
Ziyang Hu 2 years ago
parent 8639b60aad
commit bcf95acf48

@ -41,6 +41,17 @@ typedef Status::Code StatusCode;
typedef Status::SubCode StatusSubCode;
typedef Status::Severity StatusSeverity;
inline shared_ptr<Slice> make_shared_slice(unique_ptr<Slice> s) {
shared_ptr<Slice> ret = std::move(s);
return ret;
}
inline shared_ptr<PinnableSlice> make_shared_pinnable_slice(unique_ptr<PinnableSlice> s) {
shared_ptr<PinnableSlice> ret = std::move(s);
return ret;
}
inline Slice convert_slice(rust::Slice<const uint8_t> d) {
return Slice(reinterpret_cast<const char *>(d.data()), d.size());
}

@ -75,7 +75,9 @@ mod ffi {
type StatusSeverity;
type Slice;
fn make_shared_slice(o: UniquePtr<Slice>) -> SharedPtr<Slice>;
type PinnableSlice;
fn make_shared_pinnable_slice(o: UniquePtr<PinnableSlice>) -> SharedPtr<PinnableSlice>;
fn reset_pinnable_slice(o: Pin<&mut PinnableSlice>);
fn new_pinnable_slice() -> UniquePtr<PinnableSlice>;
fn convert_slice_back(s: &Slice) -> &[u8];

@ -45,6 +45,22 @@ impl Deref for PinnableSlicePtr {
}
}
pub struct PinnableSlicePtrShared(SharedPtr<PinnableSlice>);
impl AsRef<[u8]> for PinnableSlicePtrShared {
fn as_ref(&self) -> &[u8] {
convert_pinnable_slice_back(&self.0)
}
}
impl Deref for PinnableSlicePtrShared {
type Target = PinnableSlice;
fn deref(&self) -> &Self::Target {
&self.0
}
}
pub struct SlicePtr(UniquePtr<Slice>);
impl AsRef<[u8]> for SlicePtr {
@ -54,6 +70,31 @@ impl AsRef<[u8]> for SlicePtr {
}
}
impl Deref for SlicePtr {
type Target = Slice;
fn deref(&self) -> &Self::Target {
&self.0
}
}
pub struct SlicePtrShared(SharedPtr<Slice>);
impl AsRef<[u8]> for SlicePtrShared {
#[inline]
fn as_ref(&self) -> &[u8] {
convert_slice_back(&self.0)
}
}
impl Deref for SlicePtrShared {
type Target = Slice;
fn deref(&self) -> &Self::Target {
&self.0
}
}
pub struct IteratorPtr(UniquePtr<IteratorBridge>);
impl<'a> Deref for IteratorPtr {

Loading…
Cancel
Save