pub struct ImplicitClose<LABEL> { /* private fields */ }
Expand description
Critical-edge based Completeness
implementation.
Unlike [ExplicitClose
], this implementation will implicitly close edges once traversed.
This does not require special attention from the type checker writer.
Returns EdgeClosedError
when an edge is added to a scope in which the label is already
closed (because get_edges(s, l, ...)
was called earlier.
When edges are retrieved (e.g. during query resolution) the (src, label)
edge is closed.
Trait Implementations§
Source§impl<LABEL: Hash + Eq + Label, DATA> Completeness<LABEL, DATA> for ImplicitClose<LABEL>
impl<LABEL: Hash + Eq + Label, DATA> Completeness<LABEL, DATA> for ImplicitClose<LABEL>
type NewEdgeResult = Result<(), EdgeClosedError<LABEL>>
type GetEdgesResult<'rslv> = Vec<Scope> where Self: 'rslv, LABEL: 'rslv, DATA: 'rslv
fn cmpl_new_scope(&self, _: &InnerScopeGraph<'_, LABEL, DATA>, _: Scope)
Source§fn cmpl_new_complete_scope(
&self,
_: &InnerScopeGraph<'_, LABEL, DATA>,
_: Scope,
)
fn cmpl_new_complete_scope( &self, _: &InnerScopeGraph<'_, LABEL, DATA>, _: Scope, )
Should initialize a scope without possibility to extend it with edges
fn cmpl_new_edge( &self, inner_scope_graph: &InnerScopeGraph<'_, LABEL, DATA>, src: Scope, lbl: LABEL, dst: Scope, ) -> Self::NewEdgeResult
fn cmpl_get_edges<'rslv>(
&self,
inner_scope_graph: &InnerScopeGraph<'_, LABEL, DATA>,
src: Scope,
lbl: LABEL,
) -> Self::GetEdgesResult<'rslv>where
LABEL: 'rslv,
DATA: 'rslv,
Source§impl<LABEL: Hash + Eq + Label, DATA> CriticalEdgeBasedCompleteness<LABEL, DATA> for ImplicitClose<LABEL>
impl<LABEL: Hash + Eq + Label, DATA> CriticalEdgeBasedCompleteness<LABEL, DATA> for ImplicitClose<LABEL>
fn init_scope_with(&self, open_labels: HashSet<LABEL>)
Auto Trait Implementations§
impl<LABEL> !Freeze for ImplicitClose<LABEL>
impl<LABEL> !RefUnwindSafe for ImplicitClose<LABEL>
impl<LABEL> Send for ImplicitClose<LABEL>where
LABEL: Send,
impl<LABEL> !Sync for ImplicitClose<LABEL>
impl<LABEL> Unpin for ImplicitClose<LABEL>where
LABEL: Unpin,
impl<LABEL> UnwindSafe for ImplicitClose<LABEL>where
LABEL: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more