Push the byte of LAST_CHUNK_MAP into the array
This optimizes slightly better. Alphabetic : 2536 bytes Case_Ignorable : 1771 bytes Cased : 788 bytes Cc : 24 bytes Grapheme_Extend: 1488 bytes Lowercase : 863 bytes N : 1038 bytes Uppercase : 776 bytes White_Space : 83 bytes Total table sizes: 9367 bytes (-18 bytes; 2 bytes per set)
This commit is contained in:
@@ -8,7 +8,7 @@ fn range_search<
|
||||
>(
|
||||
needle: u32,
|
||||
chunk_idx_map: &[u8; N],
|
||||
(last_chunk_idx, last_chunk_mapping): (u16, u8),
|
||||
last_chunk_idx: u16,
|
||||
bitset_chunk_idx: &[[u8; CHUNK_SIZE]; N1],
|
||||
bitset_canonical: &[u64; CANONICAL],
|
||||
bitset_canonicalized: &[(u8, u8); CANONICALIZED],
|
||||
@@ -16,14 +16,14 @@ fn range_search<
|
||||
let bucket_idx = (needle / 64) as usize;
|
||||
let chunk_map_idx = bucket_idx / CHUNK_SIZE;
|
||||
let chunk_piece = bucket_idx % CHUNK_SIZE;
|
||||
let chunk_idx = if chunk_map_idx >= N {
|
||||
if chunk_map_idx == last_chunk_idx as usize {
|
||||
last_chunk_mapping
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
// The last entry of `chunk_idx_map` actually should be at `last_chunk_idx`,
|
||||
// so we need to remap it
|
||||
let chunk_idx = if chunk_map_idx < (chunk_idx_map.len() - 1) {
|
||||
chunk_idx_map[chunk_map_idx]
|
||||
} else if chunk_map_idx == last_chunk_idx as usize {
|
||||
chunk_idx_map[chunk_idx_map.len() - 1]
|
||||
} else {
|
||||
return false;
|
||||
};
|
||||
let idx = bitset_chunk_idx[(chunk_idx as usize)][chunk_piece] as usize;
|
||||
let word = if idx < CANONICAL {
|
||||
|
||||
@@ -150,19 +150,22 @@ impl RawEmitter {
|
||||
while zero_chunk_idx.is_some() && chunk_indices.last().cloned() == zero_chunk_idx {
|
||||
chunk_indices.pop();
|
||||
}
|
||||
// We do not count the LAST_CHUNK_MAP as adding bytes because it's a
|
||||
// small constant whose values are inlined directly into the instruction
|
||||
// stream.
|
||||
writeln!(
|
||||
&mut self.file,
|
||||
"static BITSET_LAST_CHUNK_MAP: (u16, u8) = ({}, {});",
|
||||
"const BITSET_LAST_CHUNK_MAP: u16 = {};",
|
||||
chunk_indices.len() - 1,
|
||||
chunk_indices.pop().unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
self.bytes_used += 3;
|
||||
let nonzero = chunk_indices.pop().unwrap();
|
||||
// Try to pop again, now that we've recorded a non-zero pointing index
|
||||
// into the LAST_CHUNK_MAP.
|
||||
while zero_chunk_idx.is_some() && chunk_indices.last().cloned() == zero_chunk_idx {
|
||||
chunk_indices.pop();
|
||||
}
|
||||
chunk_indices.push(nonzero);
|
||||
writeln!(
|
||||
&mut self.file,
|
||||
"static BITSET_CHUNKS_MAP: [u8; {}] = [{}];",
|
||||
|
||||
Reference in New Issue
Block a user