Skip to main content

slk_tokenstream/
bookmark.rs

1use core::marker::PhantomData;
2
3/// A mark struct used to mark positions in a `TokenStream` for backtracking    
4/// 
5/// # Examples
6/// ``` rust
7/// use slk_tokenstream::TokenStream;
8/// use slk_tokenstream::Mark;
9/// 
10/// let tokens = &[1, 2, 3];
11/// let mut token_stream = TokenStream::new(tokens);
12/// let mark: Mark = token_stream.mark();
13/// 
14/// token_stream.advance(5);
15/// assert_eq!(token_stream.peek(), None);
16/// token_stream.reset(&mark);
17/// assert_eq!(token_stream.peek(), Some(&1));
18/// ```
19#[derive(Debug, Copy, Clone)]
20pub struct Mark {
21    position: usize,
22}
23
24impl Mark {
25    /// Creates a new mark with the position
26    pub(crate) fn new(position: usize) -> Self {
27        Self { position }
28    }
29    /// Returns the position
30    /// 
31    /// # Example
32    /// 
33    /// ```
34    /// use slk_tokenstream::Mark;
35    /// use slk_tokenstream::TokenStream;
36    /// 
37    /// let mut token_stream = TokenStream::new(&[0; 12]);
38    /// token_stream.advance(12);
39    /// 
40    ///
41    /// assert_eq!(token_stream.mark().position(), 12);
42    /// ```
43    pub fn position(&self) -> usize {
44        self.position
45    }
46}