#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct CharacterRange {
pub start: u32,
pub end: u32,
}
impl CharacterRange {
#[must_use]
pub const fn new(start: u32, end: u32) -> Self {
Self { start, end }
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum Instruction {
Char {
value: u32,
ignore_case: bool,
},
Dot,
Any,
Space {
inverted: bool,
},
Range {
ranges: Box<[CharacterRange]>,
inverted: bool,
ignore_case: bool,
},
LineStart {
multiline: bool,
},
LineEnd {
multiline: bool,
},
WordBoundary {
inverted: bool,
ignore_case: bool,
},
Prev,
BackReference {
captures: Box<[u8]>,
ignore_case: bool,
},
BackwardBackReference {
captures: Box<[u8]>,
ignore_case: bool,
},
LookAhead {
negative: bool,
target: usize,
},
LookAheadEnd {
negative: bool,
},
Jump {
target: usize,
},
Split {
first: usize,
second: usize,
},
Match,
SaveStart {
capture: u8,
},
SaveEnd {
capture: u8,
},
ResetCaptures {
from: u8,
to: u8,
},
SetRegister {
register: u8,
value: u32,
},
Loop {
register: u8,
target: usize,
},
SavePosition {
register: u8,
},
CheckAdvance {
register: u8,
},
}