pub struct ImmutableCsr { /* private fields */ }Expand description
Packed immutable adjacency of one group.
hot_entries/cold_entries hold every row back to back in row order,
each row sorted by (endpoint, rank, edge_id);
degrees[row] is the row length and offsets[row] its start inside the
halves. Empty rows contribute no slots. offsets is memory-only state
rebuilt by packing and by loading.
values/valid carry the bundled inline value column slot-parallel to
the packed halves when the group was packed from a valued bundled group;
otherwise both stay empty and every value reads as NULL.
Implementations§
Source§impl ImmutableCsr
impl ImmutableCsr
Sourcepub fn iter(&self, ts: u64) -> ImmutableCsrIterator<'_> ⓘ
pub fn iter(&self, ts: u64) -> ImmutableCsrIterator<'_> ⓘ
Iterate timestamp-visible entries across all rows.
Sourcepub fn iter_edges_of(&self, src_vid: u32, ts: u64) -> FrozenRowIter<'_> ⓘ
pub fn iter_edges_of(&self, src_vid: u32, ts: u64) -> FrozenRowIter<'_> ⓘ
Iterate timestamp-visible entries of one row without allocating.
Zero-copy counterpart of edges_of: walks the packed hot slice and
assembles each record with its cold half inline, so per-vertex scans
over frozen groups never touch the allocator. Out-of-range rows yield
an empty iterator.
Sourcepub fn iter_all(&self) -> ImmutableCsrIterator<'_> ⓘ
pub fn iter_all(&self) -> ImmutableCsrIterator<'_> ⓘ
Iterate every physically stored entry, including tombstoned ones.
Source§impl ImmutableCsr
impl ImmutableCsr
Sourcepub fn compact_with_cutoff(
&mut self,
cutoff: u64,
on_edge_removed: &mut dyn FnMut(EdgeId, u64),
) -> usize
pub fn compact_with_cutoff( &mut self, cutoff: u64, on_edge_removed: &mut dyn FnMut(EdgeId, u64), ) -> usize
Drop GC-eligible tombstones in place without unfreezing.
Rows stay sorted because filtering preserves order; degrees, offsets
and the packed halves are rebuilt tight with no reserved gaps. Live
entries are untouched, so the live edge count does not change. Each
dropped entry is reported through on_edge_removed for tombstone
accounting above this layer.
Sourcepub fn compact_rows_batched(
&mut self,
vids: &[u32],
cutoff: u64,
on_edge_removed: &mut dyn FnMut(EdgeId, u64),
) -> usize
pub fn compact_rows_batched( &mut self, vids: &[u32], cutoff: u64, on_edge_removed: &mut dyn FnMut(EdgeId, u64), ) -> usize
Reclaim a set of rows in one linear pass without unfreezing.
Production replacement for repeated compact_row calls: one filter
over the packed halves plus one offset rebuild reclaims any number
of rows for a single table-proportional cost instead of one trailing
memmove per row. Rows outside vids are carried verbatim; listed
rows drop only cutoff-eligible tombstones and keep sorted order.
An empty or maximum-cutoff request compacts nothing. Reported
removals arrive in row order.
Source§impl ImmutableCsr
impl ImmutableCsr
Sourcepub fn new() -> ImmutableCsr
pub fn new() -> ImmutableCsr
Empty table with no rows.
Sourcepub fn vertex_capacity(&self) -> usize
pub fn vertex_capacity(&self) -> usize
Row count of the packed table.
Sourcepub fn edge_count(&self) -> u64
pub fn edge_count(&self) -> u64
Live edge count of the packed table.
Sourcepub fn pack_from_mutable(csr: &MutableCsr) -> ImmutableCsr
pub fn pack_from_mutable(csr: &MutableCsr) -> ImmutableCsr
Pack every physical entry of a mutable CSR, primary rows and overflow chains merged per row, then sorted into frozen row order.
Content-preserving up to logical equivalence: tombstones travel
verbatim, reserved-slot gap sentinels are dropped, and rows are sorted
by (endpoint, rank, edge_id). Timestamp-filtered reads
observe the same logical entries as the source table.
Sourcepub fn pack_single_from(csr: &SingleMutableCsr) -> ImmutableCsr
pub fn pack_single_from(csr: &SingleMutableCsr) -> ImmutableCsr
Pack every physical entry of a single-edge CSR, sorted the same way.
Rows hold at most one entry; the packed form is uniform with the multi-edge pack so one frozen type serves both strategies.
Sourcepub fn pack_from_pure(csr: &PureTopologyCsr) -> ImmutableCsr
pub fn pack_from_pure(csr: &PureTopologyCsr) -> ImmutableCsr
Pack a pure-topology group directly into the frozen layout.
Same sorted content as routing through a temporary mutable table, without the full copy and without fabricating timestamp replicas. Pure rows carry no timestamps and no tombstones: every physically stored entry is live, so the pack walks the topology only.
Sourcepub fn pack_from_bundled(csr: &BundledCsr) -> ImmutableCsr
pub fn pack_from_bundled(csr: &BundledCsr) -> ImmutableCsr
Pack a bundled group together with its inline values.
Same sorted content as the topology-only pack, with the value column carried slot-parallel in row order: a NULL slot stores a zero word with a cleared validity bit, mirroring the bundled layout. Freezing a valued bundled group therefore preserves its properties; unfreezing replays them back through the regular valued insert entry.
Source§impl ImmutableCsr
impl ImmutableCsr
Sourcepub fn used_memory_size(&self) -> usize
pub fn used_memory_size(&self) -> usize
Approximate memory usage in bytes.
Sourcepub fn topology_encoding_report(
&self,
) -> Vec<(String, TopologyColumnEncoding, usize, usize)>
pub fn topology_encoding_report( &self, ) -> Vec<(String, TopologyColumnEncoding, usize, usize)>
Encoding report for the persisted neighbor columns.
Sourcepub fn dump(&self) -> Vec<u8> ⓘ
pub fn dump(&self) -> Vec<u8> ⓘ
Dump to bytes.
Format:
- rows (u64)
- edge_count (u64)
- entries_len (u64)
- encoded degrees column
- encoded endpoints column
- encoded ranks column
- encoded edge ids column
- encoded delete stamps column
- has_values flag (u64, 0 or 1)
- encoded value words column (present only when the flag is set)
- validity byte count (u64) plus raw validity bytes (flag set only)
Groups packed from non-bundled sources carry no value columns and store a zero flag. Row offsets are memory-only and never persisted; load rebuilds them.
Sourcepub fn dump_into(&self, out: &mut Vec<u8>)
pub fn dump_into(&self, out: &mut Vec<u8>)
Borrow-based dump into out without an intermediate owned buffer.
Sourcepub fn dump_into_with_scratch(
&self,
out: &mut Vec<u8>,
scratch: &mut CsrDumpScratch,
)
pub fn dump_into_with_scratch( &self, out: &mut Vec<u8>, scratch: &mut CsrDumpScratch, )
Dump reusing caller-owned column buffers.
Same bytes as Self::dump_into; a checkpoint over many groups pays
one allocation per column instead of one per group. The scratch holds
no state between calls.
Source§impl ImmutableCsr
impl ImmutableCsr
Sourcepub fn row_degree(&self, src_vid: u32) -> usize
pub fn row_degree(&self, src_vid: u32) -> usize
Row length of one vertex. Out-of-range rows report zero.
Sourcepub fn edges_of(&self, src_vid: u32, ts: u64) -> Vec<Nbr>
pub fn edges_of(&self, src_vid: u32, ts: u64) -> Vec<Nbr>
Timestamp-filtered read of one row.
UNFILTERED single-predicate read for tests and offline tools only: filters by row delete stamp without consulting the version authority. Production traversals must use the row iterator or caller-buffer fill paths with the authority gate.
Sourcepub fn get_edge(&self, src_vid: u32, dst: VertexId, ts: u64) -> Option<Nbr>
pub fn get_edge(&self, src_vid: u32, dst: VertexId, ts: u64) -> Option<Nbr>
First timestamp-visible entry matching an endpoint key.
Bisects the sorted row to the (endpoint, rank) key range, then
filters inside the range by timestamp. The row sort makes edge-id
order the total version order within each key.
Sourcepub fn get_edge_physical(&self, src_vid: u32, dst: VertexId) -> Option<Nbr>
pub fn get_edge_physical(&self, src_vid: u32, dst: VertexId) -> Option<Nbr>
First live entry matching an endpoint key without consulting snapshots.
Same key-range bisection as Self::get_edge; liveness is the raw
open-deletion-stamp check instead of a timestamp filter.
Sourcepub fn physical_edges_of(&self, src_vid: u32) -> Vec<Nbr>
pub fn physical_edges_of(&self, src_vid: u32) -> Vec<Nbr>
Every physically stored entry of one row without timestamp filtering.
Test and offline use; production scans use fill_physical_into or
the row iterator instead of this allocating accessor.
Sourcepub fn fill_physical_into(&self, src_vid: u32, out: &mut Vec<Nbr>)
pub fn fill_physical_into(&self, src_vid: u32, out: &mut Vec<Nbr>)
Fill a caller buffer with every physically stored entry of one row.
Sourcepub fn visit_physical<F>(&self, src_vid: u32, f: F)
pub fn visit_physical<F>(&self, src_vid: u32, f: F)
Visit every physically stored entry of one row without allocating.
Sourcepub fn visit_hot<F>(&self, src_vid: u32, f: F)
pub fn visit_hot<F>(&self, src_vid: u32, f: F)
Visit every physically stored hot half of one row without allocating and without touching the stamp lines.
Hot-only counterpart of Self::visit_physical for traversals that
resolve visibility through the version authority by edge_id.
Sourcepub fn is_row_sorted(&self, _src_vid: u32) -> bool
pub fn is_row_sorted(&self, _src_vid: u32) -> bool
Packed rows are always sorted by (endpoint, rank, edge_id).
Sourcepub fn visit_threshold<F>(
&self,
src_vid: u32,
lower: Option<(u32, i64)>,
upper: Option<(u32, i64)>,
f: F,
)
pub fn visit_threshold<F>( &self, src_vid: u32, lower: Option<(u32, i64)>, upper: Option<(u32, i64)>, f: F, )
Visit live entries whose (endpoint, rank) key falls in the inclusive
[lower, upper] range. The packed row is sorted, so the window is
bisected and only the window is scanned for liveness.
Sourcepub fn fill_threshold_into(
&self,
src_vid: u32,
lower: Option<(u32, i64)>,
upper: Option<(u32, i64)>,
out: &mut Vec<Nbr>,
)
pub fn fill_threshold_into( &self, src_vid: u32, lower: Option<(u32, i64)>, upper: Option<(u32, i64)>, out: &mut Vec<Nbr>, )
Fill a caller buffer with the same range content as visit_threshold.
Sourcepub fn nbr_at_offset(&self, src_vid: u32, offset: i32) -> Option<Nbr>
pub fn nbr_at_offset(&self, src_vid: u32, offset: i32) -> Option<Nbr>
Read-only view of one packed slot without mutating state.
Sourcepub fn has_physical_entries(&self, vid: u32) -> bool
pub fn has_physical_entries(&self, vid: u32) -> bool
Whether one row holds any physically stored entry.
Sourcepub fn primary_contains(&self, src_vid: u32, edge_id: EdgeId) -> bool
pub fn primary_contains(&self, src_vid: u32, edge_id: EdgeId) -> bool
Whether one row holds edge_id.
Sourcepub fn locate_edge(
&self,
src_vid: u32,
edge_id: EdgeId,
) -> Option<(EdgePosition, Nbr)>
pub fn locate_edge( &self, src_vid: u32, edge_id: EdgeId, ) -> Option<(EdgePosition, Nbr)>
Locate the first entry with edge_id, returning its packed slot.
Sourcepub fn has_valued_entries(&self) -> bool
pub fn has_valued_entries(&self) -> bool
Whether this frozen group carries a bundled inline value column.
Only groups packed from a valued bundled group do; every other pack leaves the value columns empty and reads every value as NULL.
Sourcepub fn value_by_edge_id(
&self,
src_vid: u32,
edge_id: EdgeId,
) -> Option<(u64, bool)>
pub fn value_by_edge_id( &self, src_vid: u32, edge_id: EdgeId, ) -> Option<(u64, bool)>
Read the inline value of one edge by id within its source row.
Paired value half of a frozen topology walk: resolve the edge from the topology walk first, then read its value here.
Sourcepub fn value_by_endpoint(
&self,
src_vid: u32,
endpoint: u32,
) -> Option<(u64, bool)>
pub fn value_by_endpoint( &self, src_vid: u32, endpoint: u32, ) -> Option<(u64, bool)>
Read the inline value of the first physical entry for one endpoint.
First-match walk like the bundled accessor: tombstones are physical entries and may match, mirroring the bundled layout where deletion clears validity but keeps the slot position.
Sourcepub fn visit_physical_with_values<F>(&self, src_vid: u32, f: F)
pub fn visit_physical_with_values<F>(&self, src_vid: u32, f: F)
Visit every physically stored entry of one row with its inline value
(None for NULL slots).
Frozen counterpart of the bundled paired traversal: topology and value stay slot-parallel after the pack reorder, so one index serves both halves.
Sourcepub fn any_valid_values(&self) -> bool
pub fn any_valid_values(&self) -> bool
Whether any slot holds a valid inline value.
Sourcepub fn vertex_census(&self, vid: u32) -> (usize, usize, usize)
pub fn vertex_census(&self, vid: u32) -> (usize, usize, usize)
Physical entry census of one row: (live, dead, capacity).
Same live/dead predicates as the mutable census; capacity equals the row length because frozen rows carry no reserved gaps.
Sourcepub fn reclaimable_count(&self, vid: u32, cutoff: u64) -> usize
pub fn reclaimable_count(&self, vid: u32, cutoff: u64) -> usize
Count entries of one row reclaimable at cutoff.
Trait Implementations§
Source§impl Clone for ImmutableCsr
impl Clone for ImmutableCsr
Source§fn clone(&self) -> ImmutableCsr
fn clone(&self) -> ImmutableCsr
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl CsrBase for ImmutableCsr
impl CsrBase for ImmutableCsr
Source§fn vertex_capacity(&self) -> usize
fn vertex_capacity(&self) -> usize
Send + Sync bounds express single-writer transfer across threads,
not lock-free concurrent writes. Multi-core scaling comes from
shard-level parallelism over NodeGroup shards above this trait;
the CSR lock model itself stays single-writer with no row locks.fn edge_count(&self) -> u64
fn dump(&self) -> Vec<u8> ⓘ
Source§fn dump_into(&self, out: &mut Vec<u8>)
fn dump_into(&self, out: &mut Vec<u8>)
dump into out without an intermediate
owned buffer, so checkpoint writes borrow the live topology instead
of cloning it for serialization.fn load(&mut self, data: &[u8]) -> Result<(), StorageError>
Source§impl Debug for ImmutableCsr
impl Debug for ImmutableCsr
Source§impl Default for ImmutableCsr
impl Default for ImmutableCsr
Source§fn default() -> ImmutableCsr
fn default() -> ImmutableCsr
Source§impl MutableCsrTrait for ImmutableCsr
impl MutableCsrTrait for ImmutableCsr
Source§fn insert_edge(
&mut self,
_src_vid: u32,
_dst: VertexId,
_edge_id: EdgeId,
_ts: u64,
) -> Result<(), StorageError>
fn insert_edge( &mut self, _src_vid: u32, _dst: VertexId, _edge_id: EdgeId, _ts: u64, ) -> Result<(), StorageError>
Source§fn delete_edge(
&mut self,
_src_vid: u32,
_edge_id: EdgeId,
_ts: u64,
) -> Result<bool, StorageError>
fn delete_edge( &mut self, _src_vid: u32, _edge_id: EdgeId, _ts: u64, ) -> Result<bool, StorageError>
Source§fn delete_edge_by_dst(
&mut self,
_src_vid: u32,
_dst: VertexId,
_ts: u64,
) -> usize
fn delete_edge_by_dst( &mut self, _src_vid: u32, _dst: VertexId, _ts: u64, ) -> usize
Source§fn locate_edge(
&self,
src_vid: u32,
edge_id: EdgeId,
) -> Option<(EdgePosition, Nbr)>
fn locate_edge( &self, src_vid: u32, edge_id: EdgeId, ) -> Option<(EdgePosition, Nbr)>
Source§fn delete_edge_at_position(
&mut self,
_src_vid: u32,
_position: EdgePosition,
_expected: EdgeId,
_ts: u64,
) -> Result<bool, StorageError>
fn delete_edge_at_position( &mut self, _src_vid: u32, _position: EdgePosition, _expected: EdgeId, _ts: u64, ) -> Result<bool, StorageError>
Source§fn revert_delete_at_position(
&mut self,
_src_vid: u32,
_position: EdgePosition,
_expected: EdgeId,
_ts: u64,
) -> bool
fn revert_delete_at_position( &mut self, _src_vid: u32, _position: EdgePosition, _expected: EdgeId, _ts: u64, ) -> bool
Source§fn delete_edge_by_offset(
&mut self,
_src_vid: u32,
_offset: i32,
_ts: u64,
) -> Result<bool, StorageError>
fn delete_edge_by_offset( &mut self, _src_vid: u32, _offset: i32, _ts: u64, ) -> Result<bool, StorageError>
Source§fn revert_delete_by_offset(
&mut self,
_src_vid: u32,
_offset: i32,
_ts: u64,
) -> bool
fn revert_delete_by_offset( &mut self, _src_vid: u32, _offset: i32, _ts: u64, ) -> bool
Source§fn nbr_at_offset(&self, src_vid: u32, offset: i32) -> Option<Nbr>
fn nbr_at_offset(&self, src_vid: u32, offset: i32) -> Option<Nbr>
Source§fn get_edge_physical(&self, src_vid: u32, dst: VertexId) -> Option<Nbr>
fn get_edge_physical(&self, src_vid: u32, dst: VertexId) -> Option<Nbr>
Source§fn physical_edges_of(&self, src_vid: u32) -> Vec<Nbr>
fn physical_edges_of(&self, src_vid: u32) -> Vec<Nbr>
Source§fn fill_physical_into(&self, src_vid: u32, out: &mut Vec<Nbr>)
fn fill_physical_into(&self, src_vid: u32, out: &mut Vec<Nbr>)
Source§fn has_physical_entries(&self, vid: u32) -> bool
fn has_physical_entries(&self, vid: u32) -> bool
Source§fn primary_contains(&self, src_vid: u32, edge_id: EdgeId) -> bool
fn primary_contains(&self, src_vid: u32, edge_id: EdgeId) -> bool
edge_id.Source§fn rollback_insert(&mut self, _src_vid: u32, _edge_id: EdgeId) -> bool
fn rollback_insert(&mut self, _src_vid: u32, _edge_id: EdgeId) -> bool
Source§fn revert_delete_by_edge_id(
&mut self,
_src_vid: u32,
_edge_id: EdgeId,
_ts: u64,
) -> bool
fn revert_delete_by_edge_id( &mut self, _src_vid: u32, _edge_id: EdgeId, _ts: u64, ) -> bool
ts. Read moreSource§fn get_edge(&self, src_vid: u32, dst: VertexId, ts: u64) -> Option<Nbr>
fn get_edge(&self, src_vid: u32, dst: VertexId, ts: u64) -> Option<Nbr>
Source§fn edges_of(&self, src_vid: u32, ts: u64) -> Vec<Nbr>
fn edges_of(&self, src_vid: u32, ts: u64) -> Vec<Nbr>
Source§fn compact_vertex_with_reporting(
&mut self,
_vid: u32,
_cutoff: u64,
_on_edge_removed: &mut dyn FnMut(EdgeId, u64),
) -> usize
fn compact_vertex_with_reporting( &mut self, _vid: u32, _cutoff: u64, _on_edge_removed: &mut dyn FnMut(EdgeId, u64), ) -> usize
cutoff and tightening live entries without touching other rows. Read moreSource§fn reclaimable_count(&self, vid: u32, cutoff: u64) -> usize
fn reclaimable_count(&self, vid: u32, cutoff: u64) -> usize
cutoff. Read moreSource§fn vertex_needs_compact(&self, vid: u32, cutoff: u64) -> bool
fn vertex_needs_compact(&self, vid: u32, cutoff: u64) -> bool
cutoff.Source§fn vertex_census(&self, vid: u32) -> (usize, usize, usize)
fn vertex_census(&self, vid: u32) -> (usize, usize, usize)
(live, dead, capacity). Read moreSource§fn vertex_reclaim_probe(&self, vid: u32, cutoff: u64) -> (usize, usize)
fn vertex_reclaim_probe(&self, vid: u32, cutoff: u64) -> (usize, usize)
(dead, reclaimable). Read moreSource§fn row_gap(&self, _vid: u32) -> usize
fn row_gap(&self, _vid: u32) -> usize
Source§fn row_density(&self, _vid: u32) -> f32
fn row_density(&self, _vid: u32) -> f32
Source§fn rebalance_row(&mut self, _vid: u32) -> bool
fn rebalance_row(&mut self, _vid: u32) -> bool
Source§fn used_memory_size(&self) -> usize
fn used_memory_size(&self) -> usize
Auto Trait Implementations§
impl Freeze for ImmutableCsr
impl RefUnwindSafe for ImmutableCsr
impl Send for ImmutableCsr
impl Sync for ImmutableCsr
impl Unpin for ImmutableCsr
impl UnsafeUnpin for ImmutableCsr
impl UnwindSafe for ImmutableCsr
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.