Skip to main content

MetaSet

Struct MetaSet 

Source
pub struct MetaSet { /* private fields */ }
Expand description

A set that is lazily evaluated to another set on access, with an optional fast path for “contains”.

This can be useful for various cases. Especially when “contains” and “iter” have separate fast paths. For example, merge() (merge commits) obviously has a cheap “contains” fast path by checking if a given commit has multiple parents. However, if we want to iterating through the set, segmented changelog has a fast path by iterating flat segments, instead of testing commits one by one using the “contains” check.

MetaSet is different from LazySet: MetaSet’s evaluate function can return static or lazy or meta sets. LazySet does not support a “contains” fast path (yet).

MetaSet is different from a pure filtering set (ex. only has “contains” fast path), as MetaSet supports fast path for iteration, if the underlying set supports it.

Implementations§

Source§

impl MetaSet

Source

pub fn from_evaluate_hints( evaluate: Box<dyn Fn() -> BoxFuture<'static, Result<Set>> + Send + Sync + 'static>, hints: Hints, ) -> Self

Constructs MetaSet from an evaluate function that returns a Set. The evaluate function is not called immediately.

Source

pub fn with_contains( self, contains: Box<dyn for<'a> Fn(&'a MetaSet, &'a Vertex) -> BoxFuture<'a, Result<bool>> + Send + Sync>, ) -> Self

Provides a fast path for contains. Be careful to make sure “contains” matches “evaluate”.

Source

pub async fn evaluate(&self) -> Result<Set>

Evaluate the set. Returns a new set.

Source

pub fn evaluated(&self) -> Option<Set>

Returns the evaluated set if it was evaluated. Returns None if the set was not evaluated.

Trait Implementations§

Source§

impl AsyncSetQuery for MetaSet

Source§

fn iter<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<BoxVertexStream>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Iterate through the set in defined order.
Source§

fn iter_rev<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<BoxVertexStream>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Iterate through the set in the reversed order.
Source§

fn count_slow<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

“Slow” count implementation. Intended to be overridden. Read more
Source§

fn size_hint<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = (u64, Option<u64>)> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Returns the bounds on the length of the set as a hint. The first item is the lower bound. The second item is the upper bound. This method should not block on long operations like waiting for network.
Source§

fn last<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<Option<Vertex>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

The last name in the set.
Source§

fn contains<'life0, 'life1, 'async_trait>( &'life0 self, name: &'life1 Vertex, ) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Test if this set contains a given name.
Source§

fn contains_fast<'life0, 'life1, 'async_trait>( &'life0 self, name: &'life1 Vertex, ) -> Pin<Box<dyn Future<Output = Result<Option<bool>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Test contains in less than O(N) time. Returns None if cannot achieve in less than O(N) time.
Source§

fn as_any(&self) -> &dyn Any

For downcasting.
Source§

fn hints(&self) -> &Hints

Get or set optimization hints.
Source§

fn count<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Number of names in this set. Do not override. Read more
Source§

fn first<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<Option<Vertex>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

The first name in the set.
Source§

fn is_empty<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Test if this set is empty.
Source§

fn id_convert(&self) -> Option<&dyn IdConvert>

Get an optional IdConvert interface to check hints.
Source§

fn specialized_reverse(&self) -> Option<Set>

Specialized “reverse” implementation. Returns None to use the general purpose reverse implementation.
Source§

fn specialized_take(&self, n: u64) -> Option<Set>

Specialized “take” implementation. Returns None to use the general purpose implementation.
Source§

fn specialized_skip(&self, n: u64) -> Option<Set>

Specialized “take” implementation. Returns None to use the general purpose implementation.
Source§

fn specialized_flatten_id(&self) -> Option<Cow<'_, IdStaticSet>>

Specialized “flatten_id” implementation.
Source§

impl Debug for MetaSet

Source§

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

Formats the value using the given formatter. Read more

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

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

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

impl<T> SyncSetQuery for T
where T: AsyncSetQuery,

Source§

fn iter( &self, ) -> Result<Box<dyn NameIter<Item = Result<Vertex, DagError>>>, DagError>

Iterate through the set in defined order.
Source§

fn iter_rev( &self, ) -> Result<Box<dyn NameIter<Item = Result<Vertex, DagError>>>, DagError>

Iterate through the set in the reversed order.
Source§

fn count(&self) -> Result<u64, DagError>

Number of names in this set.
Source§

fn first(&self) -> Result<Option<Vertex>, DagError>

The first name in the set.
Source§

fn last(&self) -> Result<Option<Vertex>, DagError>

The last name in the set.
Source§

fn is_empty(&self) -> Result<bool, DagError>

Test if this set is empty.
Source§

fn contains(&self, name: &Vertex) -> Result<bool, DagError>

Test if this set contains a given name.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

For downcasting.
Source§

fn hints(&self) -> &Hints

Get or set optimization hints.
Source§

fn id_convert(&self) -> Option<&dyn IdConvert>

Get an optional IdConvert interface to check hints.
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.
Source§

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

Source§

fn vzip(self) -> V

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