Skip to main content

ValueMesh

Struct ValueMesh 

Source
pub struct ValueMesh<T> { /* private fields */ }
Expand description

A mesh of values, one per rank in region.

The internal representation (rep) may be dense or compressed, but externally the mesh always behaves as a complete mapping from rank index → value.

See VM-1 in module doc.

Implementations§

Source§

impl<T> ValueMesh<T>

Source

pub fn empty() -> ValueMesh<T>

Returns an empty mesh: a 1-dimensional region of length 0.

This differs from a dimensionless (0-D) region, which represents a single scalar element. A zero-length 1-D region has no elements at all, making it the natural Default placeholder for accumulator state initialization.

Source

pub fn new( region: Region, ranks: Vec<T>, ) -> Result<ValueMesh<T>, ValueMeshError>

Creates a new ValueMesh for region with exactly one value per rank.

§Invariants

This constructor validates that the number of provided values (ranks.len()) matches the region’s cardinality (region.num_ranks()). A value mesh must be complete: every rank in region has a corresponding T.

§Errors

Returns ValueMeshError::InvalidRankCardinality if ranks.len() != region.num_ranks().

Source§

impl<T> ValueMesh<T>
where T: Clone,

Source

pub fn from_single(region: Region, s: T) -> ValueMesh<T>

Builds a ValueMesh that assigns the single value s to every rank in region, without materializing a dense Vec<T>. The result is stored in compressed (RLE) form as a single run [0..N).

If region.num_ranks() == 0, the mesh contains no runs (and an empty table), regardless of s.

Source§

impl<T> ValueMesh<T>
where T: Clone + Default,

Source

pub fn from_default(region: Region) -> ValueMesh<T>

Builds a ValueMesh covering the region, filled with T::default().

Equivalent to [ValueMesh::from_single(region, T::default())].

Source§

impl<T> ValueMesh<T>
where T: Eq + Hash,

Source

pub fn from_ranges_with_default( region: Region, default: T, ranges: Vec<(Range<usize>, T)>, ) -> Result<ValueMesh<T>, ValueMeshError>

Builds a compressed mesh from a default value and a set of disjoint ranges that override the default.

  • ranges may be in any order; they must be non-empty, in-bounds, and non-overlapping.
  • Unspecified ranks are filled with default.
  • Result is stored in RLE form; no dense Vec<T> is materialized.
Source

pub fn from_dense( region: Region, values: Vec<T>, ) -> Result<ValueMesh<T>, ValueMeshError>

Builds a ValueMesh from a fully materialized dense vector of per-rank values, then compresses it into run-length–encoded form if possible.

This constructor is intended for callers that already have one value per rank (e.g. computed or received data) but wish to store it efficiently.

§Parameters
  • region: The logical region describing the mesh’s shape and rank order.
  • values: A dense vector of values, one per rank in region.
§Returns

A ValueMesh whose internal representation is Compressed if any adjacent elements are equal, or Dense if no compression was possible.

§Errors

Returns an error if the number of provided values does not match the number of ranks in region.

§Examples
let region: Region = extent!(n = 5).into();
let mesh = ValueMesh::from_dense(region, vec![1, 1, 2, 2, 3]).unwrap();
// Internally compressed to three runs: [1, 1], [2, 2], [3]
Source§

impl<F> ValueMesh<F>
where F: Future,

Source

pub async fn join(self) -> ValueMesh<<F as Future>::Output>

Await all futures in the mesh, yielding a ValueMesh of their outputs.

Source§

impl<T, E> ValueMesh<Result<T, E>>

Source

pub fn transpose(self) -> Result<ValueMesh<T>, E>

Transposes a ValueMesh<Result<T, E>> into a Result<ValueMesh<T>, E>.

Source§

impl<T> ValueMesh<T>
where T: 'static,

Source

pub fn get_by_base_rank(&self, base_rank: usize) -> Option<&T>

Look up the value at base_rank — the rank in the base space of this mesh’s region, not the linearized ordinal that view::Ranked::get takes.

For a full region the two coincide; for a sliced sub-region they differ — e.g. a row slice over base ranks {2, 3, 4, 5} has ordinals {0, 1, 2, 3}. This resolves base_rank through the region’s geometry (point_of_base_rank → ordinal) and then indexes, so callers address by the stable base-space rank and never touch the ordinal.

Returns None if base_rank is not contained in this region.

Source§

impl<T> ValueMesh<T>
where T: PartialEq,

Source

pub fn compress_adjacent_in_place(&mut self)

Compresses the mesh in place using run-length encoding (RLE).

This method scans the mesh’s dense values, coalescing adjacent runs of identical elements into a compact [Rep::Compressed] representation. It replaces the internal storage (rep) with the compressed form.

§Behavior
  • If the mesh is already compressed, this is a no-op.
  • If the mesh is dense, it consumes the current Vec<T> and rebuilds the representation as a run table plus value table.
  • Only adjacent equal values are merged; non-contiguous duplicates remain distinct.
§Requirements
  • T must implement PartialEq (to detect equal values).

This operation is lossless: expanding the compressed mesh back into a dense vector yields the same sequence of values.

Source§

impl<T> ValueMesh<T>
where T: Clone + Eq,

Source

pub fn merge_from_overlay( &mut self, overlay: ValueOverlay<T>, ) -> Result<(), BuildError>

Merge a sparse overlay into this mesh.

Overlay segments are applied with last-writer-wins precedence on overlap (identical to RankedValues::merge_from behavior). The result is stored compressed.

Source§

impl<T> ValueMesh<T>

Source

pub fn compress_adjacent_in_place_by<F>(&mut self, same: F)
where F: FnMut(&T, &T) -> bool,

Compresses the mesh in place using a custom equivalence predicate.

This is a generalized form of [compress_adjacent_in_place] that merges adjacent values according to an arbitrary predicate same(a, b), rather than relying on PartialEq.

§Behavior
  • If the mesh is already compressed, this is a no-op.
  • Otherwise, consumes the dense Vec<T> and replaces it with a run-length encoded (Rep::Compressed) representation, where consecutive elements satisfying same(a, b) are coalesced into a single run.
§Requirements
  • The predicate must be reflexive and symmetric for correctness.

This operation is lossless: expanding the compressed mesh reproduces the original sequence exactly under the same equivalence.

Trait Implementations§

Source§

impl<T> Accumulator for ValueMesh<T>
where T: Eq + Clone + Named,

Accumulates sparse overlay updates into an authoritative mesh.

Lifecycle:

  • Mailbox initializes State via Default (empty mesh).
  • On the first update, the accumulator clones self (the template passed to open_accum_port_opts) into state. Callers pass a template such as StatusMesh::from_single(region, NotExist).
  • Each overlay update is merged with right-wins semantics via merge_from_overlay, and the accumulator emits a full ValueMesh.

The accumulator’s state is a ValueMesh<T> and its updates are ValueOverlay<T> instances. On each update, the overlay’s normalized runs are merged into the mesh using ValueMesh::merge_from_overlay with right-wins semantics.

This enables incremental reduction of sparse updates across distributed reducers without materializing dense data.

Source§

type State = ValueMesh<T>

The type of the accumulated state.
Source§

type Update = ValueOverlay<T>

The type of the updates sent to the accumulator. Updates will be accumulated into type Self::State.
Source§

fn accumulate( &self, state: &mut <ValueMesh<T> as Accumulator>::State, update: <ValueMesh<T> as Accumulator>::Update, ) -> Result<(), Error>

Accumulate an update into the current state.
Source§

fn reducer_spec(&self) -> Option<ReducerSpec>

The specification used to build the reducer.
Source§

impl<T> BuildFromRegion<T> for ValueMesh<T>

Source§

type Error = ValueMeshError

Source§

fn build_dense( region: Region, values: Vec<T>, ) -> Result<ValueMesh<T>, <ValueMesh<T> as BuildFromRegion<T>>::Error>

Validates cardinality/shape and constructs a mesh.
Source§

fn build_dense_unchecked(region: Region, values: Vec<T>) -> ValueMesh<T>

Caller guarantees correct cardinality/order; no validation.
Source§

impl<T> BuildFromRegionIndexed<T> for ValueMesh<T>

Source§

type Error = ValueMeshError

Source§

fn build_indexed( region: Region, pairs: impl IntoIterator<Item = (usize, T)>, ) -> Result<ValueMesh<T>, <ValueMesh<T> as BuildFromRegionIndexed<T>>::Error>

Validates coverage and bounds, and constructs a mesh from (rank, value) pairs.
Source§

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

Source§

fn clone(&self) -> ValueMesh<T>

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<T> Debug for ValueMesh<T>
where T: Debug,

Source§

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

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

impl<T> Default for ValueMesh<T>

Source§

fn default() -> ValueMesh<T>

Returns the “default value” for a type. Read more
Source§

impl<'de, T> Deserialize<'de> for ValueMesh<T>
where T: Deserialize<'de>,

Source§

fn deserialize<__D>( __deserializer: __D, ) -> Result<ValueMesh<T>, <__D as Deserializer<'de>>::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<T> Hash for ValueMesh<T>
where T: Hash,

Source§

fn hash<__H>(&self, state: &mut __H)
where __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<T> PartialEq for ValueMesh<T>
where T: PartialEq,

Source§

fn eq(&self, other: &ValueMesh<T>) -> 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<T> Ranked for ValueMesh<T>
where T: 'static,

Source§

fn region(&self) -> &Region

Returns the region that defines this mesh’s shape and rank order.

Source§

fn get(&self, rank: usize) -> Option<&<ValueMesh<T> as Ranked>::Item>

Looks up the value at the given linearized rank.

Works transparently for both dense and compressed representations:

  • In the dense case, it simply indexes into the values vector.
  • In the compressed case, it performs a binary search over run boundaries to find which run contains the given rank, then returns the corresponding entry from table.

Returns None if the rank is out of bounds.

Source§

type Item = T

The type of item in this view.
Source§

impl<T> RankedSliceable for ValueMesh<T>
where T: Clone + 'static,

Source§

fn sliced(&self, region: Region) -> ValueMesh<T>

Construct a new Ranked containing the ranks in this view that are part of region. The caller guarantees that region.is_subset(self.region()).
Source§

impl<T> Serialize for ValueMesh<T>
where T: Serialize,

Source§

fn serialize<__S>( &self, __serializer: __S, ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl<T> Eq for ValueMesh<T>
where T: Eq,

Source§

impl<T> StructuralPartialEq for ValueMesh<T>

Auto Trait Implementations§

§

impl<T> Freeze for ValueMesh<T>

§

impl<T> RefUnwindSafe for ValueMesh<T>
where T: RefUnwindSafe,

§

impl<T> Send for ValueMesh<T>
where T: Send,

§

impl<T> Sync for ValueMesh<T>
where T: Sync,

§

impl<T> Unpin for ValueMesh<T>
where T: Unpin,

§

impl<T> UnsafeUnpin for ValueMesh<T>

§

impl<T> UnwindSafe for ValueMesh<T>
where T: UnwindSafe,

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
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> DynEq for T
where T: Eq + Any,

§

fn dyn_eq(&self, other: &(dyn Any + 'static)) -> bool

§

impl<T> DynHash for T
where T: Hash + Any,

§

fn dyn_hash(&self, state: &mut dyn Hasher)

§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
Source§

impl<T> MapIntoExt for T
where T: Ranked,

Source§

fn map_into<M, U>(&self, f: impl Fn(&Self::Item) -> U) -> M
where Self: Sized, M: BuildFromRegion<U>,

Source§

fn try_map_into<M, U, E>( self, f: impl Fn(&Self::Item) -> Result<U, E>, ) -> Result<M, E>
where Self: Sized, M: BuildFromRegion<U>,

§

impl<T> NoneValue for T
where T: Default,

§

type NoneType = T

§

fn null_value() -> T

The none-equivalent value.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
§

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

§

fn push_quoted<'q, Q, S>(&mut self, _q: Q, s: S)
where Q: QuoteInto<T>, S: Into<Quotable<'q>>,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Serialize for T
where T: Serialize + ?Sized,

Source§

fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<(), Error>

Source§

fn do_erased_serialize( &self, serializer: &mut dyn Serializer, ) -> Result<(), ErrorImpl>

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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

Source§

impl<T> ViewExt for T
where T: View,

Source§

fn range<R>(&self, dim: &str, range: R) -> Result<<T as View>::View, ViewError>
where R: Into<Range>,

Construct a view comprising the range of points along the provided dimension. Read more
Source§

fn group_by( &self, dim: &str, ) -> Result<impl Iterator<Item = <T as View>::View>, ViewError>

Group by view on dim. The returned iterator enumerates all groups as views in the extent of dim to the last dimension of the view. Read more
Source§

fn extent(&self) -> Extent

The extent of this view. Every point in this space is defined.
Source§

fn iter(&self) -> impl Iterator<Item = (Point, <T as View>::Item)>

Iterate over all points in this region.
Source§

fn values(&self) -> impl Iterator<Item = <T as View>::Item>

Iterate over the values in the region.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<M> Message for M
where M: Send + Sync + 'static,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,