pub(super) struct SearchGraph<K, V>
where K: Hash + Eq + Debug + Clone, V: Debug + Clone,
{ indices: FxHashMap<K, DepthFirstNumber>, nodes: Vec<Node<K, V>>, }
Expand description

The “search graph” stores in-progress goals that are still being solved.

Fields§

§indices: FxHashMap<K, DepthFirstNumber>§nodes: Vec<Node<K, V>>

Implementations§

source§

impl<K, V> SearchGraph<K, V>
where K: Hash + Eq + Debug + Clone, V: Debug + Clone,

source

pub(crate) fn new() -> Self

source

pub(crate) fn lookup(&self, goal: &K) -> Option<DepthFirstNumber>

source

pub(crate) fn insert( &mut self, goal: &K, stack_depth: StackDepth, solution: V, ) -> DepthFirstNumber

Insert a new search node in the tree. The node will be in the initial state for a search node:

  • stack depth as given
  • links set to its own DFN
  • solution is initially an identity substitution for coinductive goals or NoSolution for other goals
source

pub(crate) fn rollback_to(&mut self, dfn: DepthFirstNumber)

Clears all nodes with a depth-first number greater than or equal dfn.

source

pub(crate) fn move_to_cache( &mut self, dfn: DepthFirstNumber, cache: &Cache<K, V>, )

Removes all nodes with a depth-first-number greater than or equal to dfn, adding their final solutions into the cache.

Trait Implementations§

source§

impl<K, V> Index<DepthFirstNumber> for SearchGraph<K, V>
where K: Hash + Eq + Debug + Clone, V: Debug + Clone,

§

type Output = Node<K, V>

The returned type after indexing.
source§

fn index(&self, table_index: DepthFirstNumber) -> &Node<K, V>

Performs the indexing (container[index]) operation. Read more
source§

impl<K, V> IndexMut<DepthFirstNumber> for SearchGraph<K, V>
where K: Hash + Eq + Debug + Clone, V: Debug + Clone,

source§

fn index_mut(&mut self, table_index: DepthFirstNumber) -> &mut Node<K, V>

Performs the mutable indexing (container[index]) operation. Read more

Auto Trait Implementations§

§

impl<K, V> Freeze for SearchGraph<K, V>

§

impl<K, V> RefUnwindSafe for SearchGraph<K, V>

§

impl<K, V> Send for SearchGraph<K, V>
where K: Send, V: Send,

§

impl<K, V> Sync for SearchGraph<K, V>
where K: Sync, V: Sync,

§

impl<K, V> Unpin for SearchGraph<K, V>
where K: Unpin, V: Unpin,

§

impl<K, V> UnwindSafe for SearchGraph<K, V>
where K: UnwindSafe, V: 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
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
§

impl<T> Cast for T

§

fn cast<U>(self, interner: <U as HasInterner>::Interner) -> U
where Self: CastTo<U>, U: HasInterner,

Cast a value to type U using CastTo.
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, 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, 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<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