use crate::int_stream::IntStream;
use crate::token_factory::TokenFactory;
pub trait TokenSource<'input, 'arena, TF>
where
'input: 'arena,
TF: TokenFactory<'input, 'arena> + 'arena,
{
fn next_token(&mut self) -> &'arena mut TF::Tok;
fn get_line(&self) -> u32 {
0
}
fn get_char_position_in_line(&self) -> i32 {
-1
}
fn get_input_stream(&mut self) -> Option<&mut dyn IntStream>;
fn get_source_name(&self) -> String;
fn get_token_factory(&self) -> &TF;
fn get_dfa_string(&self) -> String;
}
impl<'input, 'arena, T, TF> TokenSource<'input, 'arena, TF> for &mut T
where
'input: 'arena,
T: TokenSource<'input, 'arena, TF>,
TF: TokenFactory<'input, 'arena> + 'arena,
{
#[inline(always)]
fn next_token(&mut self) -> &'arena mut TF::Tok {
(**self).next_token()
}
#[inline(always)]
fn get_line(&self) -> u32 {
(**self).get_line()
}
#[inline(always)]
fn get_char_position_in_line(&self) -> i32 {
(**self).get_char_position_in_line()
}
#[inline(always)]
fn get_input_stream(&mut self) -> Option<&mut dyn IntStream> {
(**self).get_input_stream()
}
#[inline(always)]
fn get_source_name(&self) -> String {
(**self).get_source_name()
}
#[inline(always)]
fn get_token_factory(&self) -> &TF {
(**self).get_token_factory()
}
#[inline(always)]
fn get_dfa_string(&self) -> String {
(**self).get_dfa_string()
}
}