1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//! Tracking tokenizer state.

use range::Range;

use {
    MetaData,
};

/// Reads meta data.
pub fn read_data(
    tokens: &mut Vec<Range<MetaData>>,
    range_data: Range<MetaData>,
    state: &TokenizerState
) -> TokenizerState {
    if state.0 < tokens.len() {
        tokens.truncate(state.0);
    }
    tokens.push(range_data);
    TokenizerState(tokens.len())
}

/// Stores the number of tokens received.
#[derive(Copy, Clone, Debug, PartialOrd, Ord, PartialEq, Eq)]
pub struct TokenizerState(pub usize);

impl TokenizerState {
    /// Creates a new tokenizer state.
    pub fn new() -> TokenizerState { TokenizerState(0) }
}