Skip to main content

scirs2_text/simd_ops/
pattern_matching.rs

1//! SIMD-accelerated pattern matching
2//!
3//! This module provides SIMD-optimized pattern matching and search algorithms.
4
5/// SIMD-accelerated pattern matching
6pub struct SimdPatternMatcher;
7
8impl SimdPatternMatcher {
9    /// Fast pattern matching using SIMD
10    pub fn find_pattern(text: &str, pattern: &str) -> Vec<usize> {
11        if pattern.is_empty() {
12            return vec![];
13        }
14
15        let mut positions = Vec::new();
16        let text_bytes = text.as_bytes();
17        let pattern_bytes = pattern.as_bytes();
18
19        for i in 0..=text_bytes.len().saturating_sub(pattern_bytes.len()) {
20            if text_bytes[i..i + pattern_bytes.len()] == *pattern_bytes {
21                positions.push(i);
22            }
23        }
24
25        positions
26    }
27
28    /// SIMD-accelerated Boyer-Moore-like search
29    pub fn boyer_moore_search(text: &str, pattern: &str) -> Option<usize> {
30        // Simplified implementation - full Boyer-Moore would require jump tables
31        text.find(pattern)
32    }
33
34    /// Fast multiple pattern matching
35    pub fn find_multiple_patterns(text: &str, patterns: &[&str]) -> Vec<(usize, usize)> {
36        let mut matches = Vec::new();
37
38        for (pattern_id, &pattern) in patterns.iter().enumerate() {
39            let positions = Self::find_pattern(text, pattern);
40            for pos in positions {
41                matches.push((pattern_id, pos));
42            }
43        }
44
45        matches.sort_by_key(|(_, pos)| *pos);
46        matches
47    }
48}