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.

§Invariants

  • Complete: every rank in region has exactly one value.
  • Order: iteration and indexing follow the region’s linearization.

Implementations§

Source§

impl<T> ValueMesh<T>

Source

pub fn empty() -> Self

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§

impl<T: Clone> ValueMesh<T>

Source

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

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: Clone + Default> ValueMesh<T>

Source

pub fn from_default(region: Region) -> Self

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

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

Source§

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

Source

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

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<Self>

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: Future> ValueMesh<F>

Source

pub async fn join(self) -> ValueMesh<F::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: PartialEq> ValueMesh<T>

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: Clone + Eq> ValueMesh<T>

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 Self::State, update: Self::Update, ) -> Result<()>

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 = Error

Source§

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

Validates cardinality/shape and constructs a mesh.
Source§

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

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

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

Source§

type Error = Error

Source§

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

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

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

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

Source§

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

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

impl<T> Default for ValueMesh<T>

Source§

fn default() -> Self

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<Self, __D::Error>
where __D: Deserializer<'de>,

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

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

Source§

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

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> PartialEq for ValueMesh<T>

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: 'static> Ranked for ValueMesh<T>

Source§

fn region(&self) -> &Region

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

Source§

fn get(&self, rank: usize) -> Option<&Self::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: Clone + 'static> RankedSliceable for ValueMesh<T>

Source§

fn sliced(&self, region: Region) -> Self

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::Ok, __S::Error>
where __S: Serializer,

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

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

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

§

fn into_any(self: Box<T>) -> Box<dyn Any>

§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

§

fn type_name(&self) -> &'static str

§

impl<T> AnySync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

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
§

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

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

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

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

impl<A, M> Handler<IndexedErasedUnbound<M>> for A
where A: Handler<M>, M: Castable,

Source§

fn handle<'life0, 'life1, 'async_trait>( &'life0 mut self, cx: &'life1 Context<'_, A>, msg: IndexedErasedUnbound<M>, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, A: 'async_trait,

Handle the next M-typed message.
§

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

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

Source§

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