Struct iroh_blobs::protocol::RangeSpecSeq

source ·
pub struct RangeSpecSeq(/* private fields */);
Expand description

A chunk range specification for a sequence of blobs.

To select chunks in a sequence of blobs this is encoded as a sequence of (blob_offset, range_spec) tuples. Offsets are interpreted in an accumulating fashion.

§Example:

Suppose two RangeSpecs range_a and range_b.

  • [(0, range_a), (2, empty), (3, range_b), (1, empty)] encodes:
    • Select range_a for children in the range [0, 2)
    • do no selection (empty) for children in the range [2, 2+3) = [2, 5) (3 children)
    • Select range_b for children in the range [5, 5+1) = [5, 6) (1 children)
    • do no selection (empty) for children in the open range [6, inf)

Another way to understand this is that offsets represent the number of times the previous range appears.

Other examples:

  • Select range_a from all blobs after the 5th one in the sequence: [(5, range_a)].

  • Select range_a from all blobs in the sequence: [(0, range_a)].

  • Select range_a from blob 1234: [(1234, range_a), (1, empty)].

  • Select nothing: [].

This is a smallvec so that we can avoid allocations in the common case of a single child range.

Implementations§

source§

impl RangeSpecSeq

source

pub const fn empty() -> Self

A RangeSpecSeq containing no chunks from any blobs in the sequence.

RangeSpecSeq::iter, will return an empty range forever.

source

pub fn as_single(&self) -> Option<(u64, &RangeSpec)>

If this range seq describes a range for a single item, returns the offset and range spec for that item

source

pub fn all() -> Self

A RangeSpecSeq containing all chunks from all blobs.

RangeSpecSeq::iter, will return a full range forever.

source

pub fn from_ranges( ranges: impl IntoIterator<Item = impl AsRef<ChunkRangesRef>> ) -> Self

Convenience function to create a RangeSpecSeq from a finite sequence of range sets.

source

pub fn from_ranges_infinite( ranges: impl IntoIterator<Item = impl AsRef<ChunkRangesRef>> ) -> Self

Convenience function to create a RangeSpecSeq from a sequence of range sets.

Compared to RangeSpecSeq::from_ranges, this will not add an empty range spec at the end, so the final range spec will repeat forever.

source

pub fn new(children: impl IntoIterator<Item = RangeSpec>) -> Self

Creates a new range spec sequence from a sequence of range specs.

This will merge adjacent range specs with the same value and thus make sure that the resulting sequence is as compact as possible.

source

pub fn iter(&self) -> RequestRangeSpecIter<'_>

An infinite iterator of range specs for blobs in the sequence.

Each item yielded by the iterator is the RangeSpec for a blob in the sequence. Thus the first call to .next() returns the range spec for the first blob, the next call returns the range spec of the second blob, etc.

source

pub fn iter_non_empty(&self) -> NonEmptyRequestRangeSpecIter<'_>

An iterator over blobs in the sequence with a non-empty range spec.

This iterator will only yield items for blobs which have at least one chunk selected.

This iterator is infinite if the RangeSpecSeq ends on a non-empty RangeSpec, that is all further blobs have selected chunks spans.

Trait Implementations§

source§

impl Clone for RangeSpecSeq

source§

fn clone(&self) -> RangeSpecSeq

Returns a copy 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 RangeSpecSeq

source§

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

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

impl<'de> Deserialize<'de> for RangeSpecSeq

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 Hash for RangeSpecSeq

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 PartialEq for RangeSpecSeq

source§

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

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Serialize for RangeSpecSeq

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 Eq for RangeSpecSeq

source§

impl StructuralPartialEq for RangeSpecSeq

Auto Trait Implementations§

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

source§

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

§

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

source§

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

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

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

§

type Output = T

Should always be Self
source§

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

§

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

§

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

§

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

§

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

source§

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

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

§

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> MaybeSendSync for T

§

impl<T> RpcMessage for T
where T: Debug + Serialize + DeserializeOwned + Send + Sync + Unpin + 'static,