From 276d1f3f2012efeb24ed0f021b274b79474a5410 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Fri, 20 May 2022 12:37:48 -0400 Subject: [PATCH] improve hashed_storage_read --- src/math_app.rs | 6 +++--- src/misc.rs | 9 +++------ tests/misc.rs | 9 ++++++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/math_app.rs b/src/math_app.rs index 113387d..483c5b0 100644 --- a/src/math_app.rs +++ b/src/math_app.rs @@ -145,7 +145,7 @@ impl MathApp { fn get_storage_decompressed() -> Option> { let data = get_localstorage().get_item(DATA_NAME).ok()??; - let (commit, cached_data) = crate::misc::hashed_storage_read(data)?; + let (commit, cached_data) = crate::misc::hashed_storage_read(&data)?; debug_assert!(!commit.is_empty()); debug_assert!(!cached_data.is_empty()); @@ -183,7 +183,7 @@ impl MathApp { return None; } - let (commit, func_data) = crate::misc::hashed_storage_read(data)?; + let (commit, func_data) = crate::misc::hashed_storage_read(&data)?; debug_assert!(!commit.is_empty()); debug_assert!(!func_data.is_empty()); @@ -193,7 +193,7 @@ impl MathApp { assume(!func_data.is_empty()); } - if commit == build::SHORT_COMMIT.chars().map(|c| c as u8).collect::>().as_slice() { + if commit == unsafe { std::mem::transmute::<&str, &[u8]>(build::SHORT_COMMIT) } { tracing::info!("Reading previous function data"); let function_manager: FunctionManager = bincode::deserialize(&func_data).ok()?; return Some(function_manager); diff --git a/src/misc.rs b/src/misc.rs index f58dbcf..765ce3b 100644 --- a/src/misc.rs +++ b/src/misc.rs @@ -337,7 +337,7 @@ pub fn hashed_storage_create(hash: HashBytes, data: &[u8]) -> String { } #[allow(dead_code)] -pub fn hashed_storage_read(data: String) -> Option<(HashBytes, Vec)> { +pub const fn hashed_storage_read(data: &str) -> Option<(HashBytes, &[u8])> { if HASH_LENGTH >= data.len() { return None; } @@ -347,12 +347,9 @@ pub fn hashed_storage_read(data: String) -> Option<(HashBytes, Vec)> { assume(data.len() > HASH_LENGTH); } - let decoded_1: Vec = unsafe { std::mem::transmute::>(data) }; + let decoded_1: &[u8] = unsafe { std::mem::transmute::<&str, &[u8]>(data) }; let hash: HashBytes = unsafe { *(decoded_1[..HASH_LENGTH].as_ptr() as *const HashBytes) }; - let cached_data = decoded_1[HASH_LENGTH..].to_vec(); - debug_assert!(!cached_data.is_empty()); - - Some((hash, cached_data)) + Some((hash, &decoded_1[HASH_LENGTH..])) } diff --git a/tests/misc.rs b/tests/misc.rs index 250c87e..8e8a169 100644 --- a/tests/misc.rs +++ b/tests/misc.rs @@ -105,14 +105,17 @@ fn hashed_storage() { data.as_slice(), ); - let read = hashed_storage_read(storage); - assert_eq!(read.map(|(a, b)| (a.to_vec(), b)), Some((commit, data))); + let read = hashed_storage_read(&storage); + assert_eq!( + read.map(|(a, b)| (a.to_vec(), b.to_vec())), + Some((commit.to_vec(), data.to_vec())) + ); } #[test] fn invalid_hashed_storage() { use ytbn_graphing_software::hashed_storage_read; - assert_eq!(hashed_storage_read("aaaa".to_owned()), None); + assert_eq!(hashed_storage_read("aaaa"), None); } #[test]