pub enum SyncClass {
Bounded(u32),
UnboundedCycle,
BudgetExceeded,
}Expand description
Outcome of the dfa_sync_class synchronization-distance analysis. The three
arms are operationally distinct for the caller’s diagnostics: only
SyncClass::Bounded is GPU-segmentable, but a SyncClass::UnboundedCycle
(the DFA genuinely never re-synchronizes, e.g. a .* body that must remember
unbounded context) can NEVER move to GPU, whereas a SyncClass::BudgetExceeded
(the analysis hit [PRODUCT_PAIR_BUDGET] before proving bounded/unbounded)
MIGHT segment with a larger budget, the catalog builder logs the split so the
over-rejection from budget vs. true unbounded memory is never conflated.
Variants§
Bounded(u32)
The DFA synchronizes within this many bytes; a warm-up overlap >= d
reconstructs the exact full-scan state at emit_start. GPU-segmentable
iff d <= overlap.
UnboundedCycle
A cycle of off-diagonal product pairs is reachable: two scans starting at different states never provably converge ⇒ infinite memory ⇒ whole-file.
BudgetExceeded
The reachable product automaton exceeded [PRODUCT_PAIR_BUDGET] before the
analysis terminated. Conservatively treated as not-segmentable, but
DISTINCT from UnboundedCycle: a larger budget could still prove it
bounded. Surfaced separately so the budget can be tuned to the real
distribution instead of silently capping recall onto the host path.
Implementations§
Trait Implementations§
impl Copy for SyncClass
impl Eq for SyncClass
impl StructuralPartialEq for SyncClass
Auto Trait Implementations§
impl Freeze for SyncClass
impl RefUnwindSafe for SyncClass
impl Send for SyncClass
impl Sync for SyncClass
impl Unpin for SyncClass
impl UnsafeUnpin for SyncClass
impl UnwindSafe for SyncClass
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.