some refactoring

This commit is contained in:
Simon Gardling 2022-05-16 16:46:23 -04:00
parent 490e4bffbd
commit 62944783ca
3 changed files with 25 additions and 21 deletions

View File

@ -160,13 +160,10 @@ impl MathApp {
assume(!cached_data.is_empty()); assume(!cached_data.is_empty());
} }
if commit == build::SHORT_COMMIT { if commit == build::SHORT_COMMIT.chars().map(|c| c as u8).collect::<Vec<u8>>().as_slice() {
tracing::info!("Reading decompression cache. Bytes: {}", cached_data.len()); tracing::info!("Reading decompression cache. Bytes: {}", cached_data.len());
return Some(cached_data.to_vec()); return Some(cached_data.to_vec());
} else { } else {
tracing::info!("Decompression cache are invalid (build: {}, previous: {})", build::SHORT_COMMIT, commit);
// is invalid
None None
} }
} }
@ -179,7 +176,8 @@ impl MathApp {
} }
tracing::info!("Setting decompression cache"); tracing::info!("Setting decompression cache");
let saved_data = &crate::misc::hashed_storage_create(&build::SHORT_COMMIT.as_bytes(), data); let commit: [u8; crate::misc::HASH_LENGTH] = unsafe { build::SHORT_COMMIT.as_bytes().try_into().unwrap_unchecked() };
let saved_data = &crate::misc::hashed_storage_create(commit, data);
tracing::info!("Bytes: {}", saved_data.len()); tracing::info!("Bytes: {}", saved_data.len());
get_localstorage().set_item(DATA_NAME, saved_data).expect("failed to set local storage cache"); get_localstorage().set_item(DATA_NAME, saved_data).expect("failed to set local storage cache");
} }
@ -200,13 +198,11 @@ impl MathApp {
assume(!func_data.is_empty()); assume(!func_data.is_empty());
} }
if commit == build::SHORT_COMMIT { if commit == build::SHORT_COMMIT.chars().map(|c| c as u8).collect::<Vec<u8>>().as_slice() {
tracing::info!("Reading previous function data"); tracing::info!("Reading previous function data");
let function_manager: FunctionManager = bincode::deserialize(&func_data).ok()?; let function_manager: FunctionManager = bincode::deserialize(&func_data).ok()?;
return Some(function_manager); return Some(function_manager);
} else { } else {
tracing::info!("Previous functions are invalid due to differing commits (build: {}, previous: {})", build::SHORT_COMMIT, commit);
// is invalid
None None
} }
} }
@ -619,10 +615,15 @@ impl App for MathApp {
{ {
tracing::info!("Setting current functions"); tracing::info!("Setting current functions");
let saved_data = &crate::misc::hashed_storage_create( let saved_data = &crate::misc::hashed_storage_create(
&build::SHORT_COMMIT unsafe {
.chars() build::SHORT_COMMIT
.map(|c| c as u8) .chars()
.collect::<Vec<u8>>(), .map(|c| c as u8)
.collect::<Vec<u8>>()
.as_slice()
.try_into()
.unwrap_unchecked()
},
bincode::serialize(&self.functions).unwrap().as_slice(), bincode::serialize(&self.functions).unwrap().as_slice(),
); );
// tracing::info!("Bytes: {}", saved_data.len()); // tracing::info!("Bytes: {}", saved_data.len());

View File

@ -311,18 +311,15 @@ pub fn almost_variable(x: f64) -> Option<char> {
pub const HASH_LENGTH: usize = 8; pub const HASH_LENGTH: usize = 8;
#[allow(dead_code)] #[allow(dead_code)]
pub fn hashed_storage_create(hash: &[u8], data: &[u8]) -> String { pub fn hashed_storage_create(hash: [u8; HASH_LENGTH], data: &[u8]) -> String {
debug_assert_eq!(hash.len(), HASH_LENGTH);
debug_assert!(!data.is_empty()); debug_assert!(!data.is_empty());
unsafe { unsafe {
assume(!data.is_empty()); assume(!data.is_empty());
assume(hash.len() == HASH_LENGTH);
assume(!hash.is_empty());
} }
// cannot use `from_utf8` seems to break on wasm. no clue why // cannot use `from_utf8` seems to break on wasm. no clue why
[hash, data] [&hash, data]
.concat() .concat()
.iter() .iter()
.map(|b| *b as char) .map(|b| *b as char)
@ -330,7 +327,7 @@ pub fn hashed_storage_create(hash: &[u8], data: &[u8]) -> String {
} }
#[allow(dead_code)] #[allow(dead_code)]
pub fn hashed_storage_read(data: String) -> (String, Vec<u8>) { pub fn hashed_storage_read(data: String) -> ([u8; HASH_LENGTH], Vec<u8>) {
debug_assert!(data.len() > HASH_LENGTH); debug_assert!(data.len() > HASH_LENGTH);
unsafe { unsafe {
assume(!data.is_empty()); assume(!data.is_empty());
@ -351,7 +348,7 @@ pub fn hashed_storage_read(data: String) -> (String, Vec<u8>) {
} }
( (
hash.iter().map(|c| *c as char).collect::<String>(), unsafe { hash.try_into().unwrap_unchecked() },
cached_data.to_vec(), cached_data.to_vec(),
) )
} }

View File

@ -97,9 +97,15 @@ fn hashed_storage() {
.chars() .chars()
.map(|c| c as u8) .map(|c| c as u8)
.collect::<Vec<u8>>(); .collect::<Vec<u8>>();
let storage = hashed_storage_create(commit.as_slice(), data.as_slice()); let storage = hashed_storage_create(
commit
.as_slice()
.try_into()
.expect("cannot turn into [u8; 8]"),
data.as_slice(),
);
let read = hashed_storage_read(storage); let read = hashed_storage_read(storage);
assert_eq!(read.0.chars().map(|c| c as u8).collect::<Vec<u8>>(), commit); assert_eq!(read.0.to_vec(), commit);
assert_eq!(read.1, data); assert_eq!(read.1, data);
} }