use core::cell::Cell;
use super::callout::CalloutFn;
pub const DEFAULT_RETRY_LIMIT_IN_MATCH: u64 = 10_000_000;
pub const DEFAULT_RETRY_LIMIT_IN_SEARCH: u64 = 10_000_000;
pub const DEFAULT_MATCH_STACK_LIMIT: u32 = 10_000_000;
pub const DEFAULT_SUBEXP_CALL_LIMIT: u32 = 10_000;
#[derive(Clone, Debug)]
pub struct MatchParam {
pub stack_limit: u32,
pub retry_limit_in_match: u64,
pub retry_limit_in_search: u64,
pub subexp_call_limit: u32,
pub progress_callout: Option<CalloutFn>,
pub retraction_callout: Option<CalloutFn>,
pub named_callout: Option<CalloutFn>,
pub count: Cell<u32>,
}
impl Default for MatchParam {
fn default() -> Self {
Self {
stack_limit: DEFAULT_MATCH_STACK_LIMIT,
retry_limit_in_match: DEFAULT_RETRY_LIMIT_IN_MATCH,
retry_limit_in_search: DEFAULT_RETRY_LIMIT_IN_SEARCH,
subexp_call_limit: DEFAULT_SUBEXP_CALL_LIMIT,
progress_callout: None,
retraction_callout: None,
named_callout: None,
count: Cell::new(0),
}
}
}
impl MatchParam {
pub fn unlimited() -> Self {
Self {
stack_limit: 0,
retry_limit_in_match: 0,
retry_limit_in_search: 0,
subexp_call_limit: 0,
progress_callout: None,
retraction_callout: None,
named_callout: None,
count: Cell::new(0),
}
}
}