use ass_core::parser::{ast::EventType, Event};
#[cfg(feature = "nostd")]
use alloc::vec::Vec;
#[derive(Debug, Clone)]
pub(super) struct TimeIndex {
pub(super) key: (usize, usize, bool),
pub(super) by_start: Vec<(u32, u32, usize)>,
}
impl TimeIndex {
pub(super) fn build(events: &[Event], render_comments: bool) -> Self {
let key = (events.as_ptr() as usize, events.len(), render_comments);
let mut by_start = Vec::new();
for (idx, event) in events.iter().enumerate() {
let should_include = match event.event_type {
EventType::Dialogue => true,
EventType::Comment => render_comments,
_ => false,
};
if should_include {
let start = event.start_time_cs().unwrap_or(0);
let end = event.end_time_cs().unwrap_or(0);
by_start.push((start, end, idx));
}
}
by_start.sort_unstable_by_key(|&(start, _, _)| start);
Self { key, by_start }
}
}