sudachi/dic/lexicon/
word_params.rs1use crate::util::cow_array::CowArray;
18
19pub struct WordParams<'a> {
20 data: CowArray<'a, i16>,
21 size: u32,
22}
23
24impl<'a> WordParams<'a> {
25 const PARAM_SIZE: usize = 3;
26 const ELEMENT_SIZE: usize = 2 * Self::PARAM_SIZE;
27
28 pub fn new(bytes: &'a [u8], size: u32, offset: usize) -> WordParams {
29 let n_entries = size as usize * Self::PARAM_SIZE;
30 Self {
31 data: CowArray::from_bytes(bytes, offset, n_entries),
32 size,
33 }
34 }
35
36 pub fn storage_size(&self) -> usize {
37 4 + WordParams::ELEMENT_SIZE * self.size as usize
38 }
39
40 pub fn size(&self) -> u32 {
41 self.size
42 }
43
44 #[inline]
45 pub fn get_params(&self, word_id: u32) -> (i16, i16, i16) {
46 let begin = word_id as usize * Self::PARAM_SIZE;
47 let end = begin + Self::PARAM_SIZE;
48 let slice = &self.data[begin..end];
49 (slice[0], slice[1], slice[2])
50 }
51
52 pub fn get_cost(&self, word_id: u32) -> i16 {
53 let cost_offset = word_id as usize * Self::PARAM_SIZE + 2;
54 self.data[cost_offset]
55 }
56
57 pub fn set_cost(&mut self, word_id: u32, cost: i16) {
58 let cost_offset = word_id as usize * Self::PARAM_SIZE + 2;
59 self.data.set(cost_offset, cost)
60 }
61}