WIP: libdelimiter #172
@ -1,5 +1,6 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright (c) 2025 Emma Tebibyte <emma@tebibyte.media>
 | 
					 * Copyright (c) 2025 Emma Tebibyte <emma@tebibyte.media>
 | 
				
			||||||
 | 
					 * Copyright (c) 2025 silty silt <silt@tebibyte.media>
 | 
				
			||||||
 * SPDX-License-Identifier: AGPL-3.0-or-later
 | 
					 * SPDX-License-Identifier: AGPL-3.0-or-later
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * This program is free software: you can redistribute it and/or modify it
 | 
					 * This program is free software: you can redistribute it and/or modify it
 | 
				
			||||||
@ -18,7 +19,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use std::{
 | 
					use std::{
 | 
				
			||||||
    io::{ Read, Result },
 | 
					    io::{ Read, Result },
 | 
				
			||||||
    mem::self,
 | 
					    mem,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const BUFFER_SIZE: usize = 4096;
 | 
					const BUFFER_SIZE: usize = 4096;
 | 
				
			||||||
@ -72,21 +73,11 @@ impl<T> Iterator for Delimited<T> where T: Read {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn find_subslice(stack: &[u8], key: &[u8]) -> Option<usize> {
 | 
					fn find_subslice(stack: &[u8], key: &[u8]) -> Option<usize> {
 | 
				
			||||||
    if key.len() == 1 {
 | 
					    match key.len() {
 | 
				
			||||||
        return stack.iter().position(|&b| b == key[0]);
 | 
					    	/* 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)]
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user