Skip to main content

RowCells

Enum RowCells 

Source
pub enum RowCells<'a> {
    Refs(&'a [&'a Value<'static>]),
    Values(&'a [Value<'static>]),
}
Expand description

One row’s cells, in whichever shape the producer already holds them.

The channel used to be &[&Value] only, which cost a Vec<&Value> per row at the two producers that build their cells into a contiguous buffer: they had a &[Value] in hand and collected a second vector of pointers into it purely to satisfy the type. That is one heap allocation and one free per row — measured at 400k rows (round 957) as 9 ns/row, which on a narrow scan was 54-56% of the whole walk and on a wide one 8-19%.

The reason it could not simply reuse one buffer is that the values buffer is refilled each row, so any pointers into it die at the top of the next iteration; only an owner of the storage (the materialising path, whose rows outlive the loop) can hoist the pointer vector out. Handing the contiguous slice over directly removes the question instead of answering it.

Refs stays for producers whose cells really are scattered (a join projecting out of several rows).

Variants§

§

Refs(&'a [&'a Value<'static>])

§

Values(&'a [Value<'static>])

Implementations§

Source§

impl<'a> RowCells<'a>

Source

pub fn len(&self) -> usize

Source

pub fn is_empty(&self) -> bool

Source

pub fn get(&self, i: usize) -> Option<&'a Value<'static>>

Trait Implementations§

Source§

impl<'a> Clone for RowCells<'a>

Source§

fn clone(&self) -> RowCells<'a>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<'a> Copy for RowCells<'a>

Source§

impl<'a> Debug for RowCells<'a>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for RowCells<'a>

§

impl<'a> RefUnwindSafe for RowCells<'a>

§

impl<'a> Send for RowCells<'a>

§

impl<'a> Sync for RowCells<'a>

§

impl<'a> Unpin for RowCells<'a>

§

impl<'a> UnsafeUnpin for RowCells<'a>

§

impl<'a> UnwindSafe for RowCells<'a>

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> ErasedDestructor for T
where T: 'static,

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> Same for T

Source§

type Output = T

Should always be Self
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.