diff --git a/build.sh b/build.sh index 40166f4..95fe2a2 100755 --- a/build.sh +++ b/build.sh @@ -32,9 +32,9 @@ fi mkdir tmp cp -r pkg/ytbn_graphing_software_bg.wasm tmp/ -# sed -i 's/fatal: true/fatal: false/g' pkg/ytbn_graphing_software.js +sed -i 's/fatal: true/fatal: false/g' pkg/ytbn_graphing_software.js -# sed -i "s/TextEncoder('utf-8')/TextEncoder('utf-8', { ignoreBOM: true, fatal: false })/g" pkg/ytbn_graphing_software.js +sed -i "s/TextEncoder('utf-8')/TextEncoder('utf-8', { ignoreBOM: true, fatal: false })/g" pkg/ytbn_graphing_software.js minify pkg/ytbn_graphing_software.js > tmp/ytbn_graphing_software.js diff --git a/src/lib.rs b/src/lib.rs index bf5c700..2ec9039 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,7 +9,7 @@ #![feature(const_assume)] #![feature(const_option_ext)] #![feature(const_slice_index)] -#![feature(split_array)] +#![feature(slice_split_at_unchecked)] #[macro_use] extern crate static_assertions; diff --git a/src/main.rs b/src/main.rs index 9e13e88..d8da563 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,7 +9,7 @@ #![feature(const_assume)] #![feature(const_option_ext)] #![feature(const_slice_index)] -#![feature(split_array)] +#![feature(slice_split_at_unchecked)] #[macro_use] extern crate static_assertions; diff --git a/src/misc.rs b/src/misc.rs index 3d2695a..a4216d5 100644 --- a/src/misc.rs +++ b/src/misc.rs @@ -309,9 +309,10 @@ pub fn almost_variable(x: f64) -> Option { } pub const HASH_LENGTH: usize = 8; +type CommitBits = [u8; HASH_LENGTH]; #[allow(dead_code)] -pub fn hashed_storage_create(hash: [u8; HASH_LENGTH], data: &[u8]) -> String { +pub fn hashed_storage_create(hash: CommitBits, data: &[u8]) -> String { // cannot use `from_utf8` seems to break on wasm. no clue why [&hash, data] .concat() @@ -321,15 +322,24 @@ pub fn hashed_storage_create(hash: [u8; HASH_LENGTH], data: &[u8]) -> String { } #[allow(dead_code)] -pub fn hashed_storage_read(data: String) -> Option<([u8; HASH_LENGTH], Vec)> { +pub fn hashed_storage_read(data: String) -> Option<(CommitBits, Vec)> { if HASH_LENGTH >= data.len() { return None; } + unsafe { + assume(!data.is_empty()); + assume(data.len() > HASH_LENGTH); + } + // can't use data.as_bytes() here for some reason, seems to break on wasm? let decoded_1 = data.chars().map(|c| c as u8).collect::>(); - let (hash, cached_data) = decoded_1.split_array_ref::(); + let (hash, cached_data) = { + let (a, b) = unsafe { decoded_1.split_at_unchecked(HASH_LENGTH) }; + unsafe { (&*(a.as_ptr() as *const CommitBits), b) } + }; + debug_assert!(!cached_data.is_empty()); Some((*hash, cached_data.to_vec()))