use rkyv::{Archive, Deserialize as RkyvDeserialize, Serialize as RkyvSerialize};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, Archive, RkyvSerialize, RkyvDeserialize)]
pub struct ContextIdMap {
pub left: Vec<u16>,
pub right: Vec<u16>,
}
impl ContextIdMap {
#[inline]
pub fn map_left(&self, id: u16) -> u16 {
self.left.get(id as usize).copied().unwrap_or(id)
}
#[inline]
pub fn map_right(&self, id: u16) -> u16 {
self.right.get(id as usize).copied().unwrap_or(id)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_map_left_and_right() {
let map = ContextIdMap {
left: vec![0, 2, 1],
right: vec![0, 5, 6, 7],
};
assert_eq!(map.map_left(0), 0); assert_eq!(map.map_left(1), 2);
assert_eq!(map.map_left(2), 1);
assert_eq!(map.map_right(3), 7);
assert_eq!(map.map_left(9), 9);
assert_eq!(map.map_right(9), 9);
}
}