pub fn slice_find<T: PartialEq>(haystack: &[T], needle: &[T]) -> Option<usize> {
let haystack_len = haystack.len();
let needle_len = needle.len();
if needle_len == 0 {
return Some(0); }
if needle_len > haystack_len {
return None; }
if needle_len == 1 {
return haystack.iter().position(|c| { c == &needle[0] });
}
if needle_len == haystack_len {
if haystack == needle {
return Some(0);
} else {
return None;
}
}
let mut pos = 0;
while pos+needle_len <= haystack_len {
if haystack[pos] == needle[0] {
if &haystack[pos .. pos+needle_len] == needle {
return Some(pos);
}
}
pos += 1;
}
None
}
pub fn slice_contains<T: PartialEq>(haystack: &[T], needle: &[T]) -> bool {
slice_find(haystack, needle).is_some()
}