use crate::sign::ResidualSign;
use crate::grammar::GrammarState;
#[derive(Debug, Clone)]
pub struct ProvenanceTag {
pub sign_sequence: Vec<ResidualSign>,
pub grammar_path: Vec<GrammarState>,
pub add_descriptor: String,
pub step_range: (usize, usize),
}
impl ProvenanceTag {
pub fn new(
sign_sequence: Vec<ResidualSign>,
grammar_path: Vec<GrammarState>,
add_descriptor: impl Into<String>,
step_range: (usize, usize),
) -> Self {
Self {
sign_sequence,
grammar_path,
add_descriptor: add_descriptor.into(),
step_range,
}
}
pub fn window_len(&self) -> usize {
self.step_range.1.saturating_sub(self.step_range.0) + 1
}
pub fn contains_violation(&self) -> bool {
self.grammar_path.iter().any(|g| g.is_violation())
}
}