From c1df6e632222eae6992ff4c1d42b0cf2c580a8b1 Mon Sep 17 00:00:00 2001 From: silt Date: Fri, 31 Oct 2025 06:28:11 +0000 Subject: [PATCH] libdelimit: refactored find_subslice() --- src/libdelimit.rs | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/src/libdelimit.rs b/src/libdelimit.rs index 9957eb6..0717c49 100644 --- a/src/libdelimit.rs +++ b/src/libdelimit.rs @@ -1,5 +1,6 @@ /* * Copyright (c) 2025 Emma Tebibyte + * Copyright (c) 2025 silty silt * SPDX-License-Identifier: AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify it @@ -18,7 +19,7 @@ use std::{ io::{ Read, Result }, - mem::self, + mem, }; const BUFFER_SIZE: usize = 4096; @@ -72,21 +73,11 @@ impl Iterator for Delimited where T: Read { } fn find_subslice(stack: &[u8], key: &[u8]) -> Option { - if key.len() == 1 { - return stack.iter().position(|&b| b == key[0]); + match key.len() { + /* TODO: is this optimization necessary? */ + 1 => stack.iter().position(|&b| b == key[0]), + _ => stack.windows(key.len()).position(|w| w == key), } - - if key.len() > stack.len() { - return None; - } - - for i in 0..=stack.len() - key.len() { - if &stack[i..i + key.len()] == key { - return Some(i); - } - } - - None } #[cfg(test)]