use crate::int_stream::IntStream;
use crate::token_factory::TokenFactory;
pub trait TokenSource<'input> {
type TF: TokenFactory<'input> + 'input;
fn next_token(&mut self) -> <Self::TF as TokenFactory<'input>>::Tok;
fn get_line(&self) -> isize {
0
}
fn get_char_position_in_line(&self) -> isize {
-1
}
fn get_input_stream(&mut self) -> Option<&mut dyn IntStream>;
fn get_source_name(&self) -> String;
fn get_token_factory(&self) -> &'input Self::TF;
}
impl<'input, T> TokenSource<'input> for &mut T
where
T: TokenSource<'input>,
{
type TF = T::TF;
#[inline(always)]
fn next_token(&mut self) -> <Self::TF as TokenFactory<'input>>::Tok {
(**self).next_token()
}
#[inline(always)]
fn get_line(&self) -> isize {
(**self).get_line()
}
#[inline(always)]
fn get_char_position_in_line(&self) -> isize {
(**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) -> &'input Self::TF {
(**self).get_token_factory()
}
}