SGData

Struct SGData 

Source
pub struct SGData(/* private fields */);
Expand description

Scattered, gathered, immutable, arc-ed data

Allows zero-copy processing of streamed data, read into fixed-size buffers. Especially useful for high-performance, parallel data processing.

A piece of data potentially scattered between multiple parts, which themselves might be slices of shared-ownership underlying data.

SGData is essentially semantic wrapper over Vec<ArcRef<Vec<u8>, [u8]>>

For illustration:

frames:      [    Buf    ][    Buf    ][    Buf    ][    Buf    ]
edges:       |                |    |                      |     |
             |                |    |                      |     |
              \          /\  / \  / \ /\           /\    / \   /
               \        /  ||   ||  | | \         /  \  /   \ /
sgdata parts:      C1[0] C1[1] C2[0] C3[0]   C3[1]   C3[2]  C4[0]

Arbitrary-sized data is being read into frames and edges between logical parts are being found. Then sgdata objects are created, aggregating parts of frames while holding reference-counted shared ownership over frames.

Implementations§

Source§

impl SGData

Source

pub fn empty() -> Self

Source

pub fn from_single(v: Vec<u8>) -> Self

Source

pub fn from_vec(v: Vec<ArcRef<Vec<u8>, [u8]>>) -> Self

Source

pub fn from_many(v: Vec<Vec<u8>>) -> Self

Source

pub fn len(&self) -> usize

Total len of all parts

Source

pub fn is_empty(&self) -> bool

Source

pub fn as_parts(&self) -> &[ArcRef<Vec<u8>, [u8]>]

Source

pub fn as_vec(&self) -> &Vec<ArcRef<Vec<u8>, [u8]>>

Source

pub fn as_vec_mut(&mut self) -> &mut Vec<ArcRef<Vec<u8>, [u8]>>

Source

pub fn push_vec(&mut self, v: Vec<u8>)

Source

pub fn push_arcref(&mut self, arcref: ArcRef<Vec<u8>, [u8]>)

Source

pub fn to_linear(&self) -> ArcRef<Vec<u8>, [u8]>

Convert to linear (single vector) form

If self is empty or already contains only one piece, this is cheap.

If self is scattered between many pices, this requires copying all the data into a new, big chunk.

Source

pub fn into_linear_vec(self) -> Vec<u8>

Trait Implementations§

Source§

impl Clone for SGData

Source§

fn clone(&self) -> SGData

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SGData

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for SGData

Source§

fn eq(&self, other: &SGData) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for SGData

Source§

impl StructuralPartialEq for SGData

Auto Trait Implementations§

§

impl Freeze for SGData

§

impl RefUnwindSafe for SGData

§

impl Send for SGData

§

impl Sync for SGData

§

impl Unpin for SGData

§

impl UnwindSafe for SGData

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Erased for T