diff --git a/crates/squozen/docs/patprep/bench_patprep.c b/crates/squozen/docs/patprep/bench_patprep.c index ab36738..37b033d 100644 --- a/crates/squozen/docs/patprep/bench_patprep.c +++ b/crates/squozen/docs/patprep/bench_patprep.c @@ -1,6 +1,6 @@ #include "patprep.h" -const int count = 5 * 1000 * 1000 * 1000; +const int count = 5 * 1000 * 1000 * 100; void main() { for (int i = 0; i <= count; i++) { diff --git a/crates/squozen/src/prepare_pattern.rs b/crates/squozen/src/prepare_pattern.rs index 6966372..77d021d 100644 --- a/crates/squozen/src/prepare_pattern.rs +++ b/crates/squozen/src/prepare_pattern.rs @@ -28,6 +28,12 @@ where } pub fn prepare_pattern(name: &[u8]) -> Vec { + let mut dest = Vec::with_capacity(116); + prepare_pattern_raw(name, &mut dest); + dest +} + +pub fn prepare_pattern_raw(name: &[u8], dest: &mut Vec) { let mut eol = name.len(); if eol == 0 { panic!("Library error - This function should never be called with an empty string.") @@ -43,10 +49,12 @@ pub fn prepare_pattern(name: &[u8]) -> Vec { } if eol == 0 { - return if GLOBCHARS.contains(&name[0]) { - vec![b'/'] + if GLOBCHARS.contains(&name[0]) { + dest.push(b'/'); + return; } else { - vec![name[0]] + dest.push(name[0]); + return; }; } @@ -57,9 +65,9 @@ pub fn prepare_pattern(name: &[u8]) -> Vec { start }; if start > eol { - vec![b'/'] + dest.push(b'/'); } else { - name[start..eol + 1].to_vec() + dest.extend_from_slice(&name[start..eol + 1]); } }