cluproccmdline/iter/
mod.rs

1
2use std::slice::Iter;
3
4pub mod one;
5pub mod two;
6
7	
8#[derive(Debug, Clone)]
9pub struct CmdlineIter<'i> {
10	array: &'i [u8],
11	iter: Iter<'i, u8>,
12	
13	s_n: usize,
14	s_e: usize,
15}
16
17impl<'i> CmdlineIter<'i> {
18	#[inline]
19	pub fn new(array: &'i [u8]) -> Self {
20		Self {
21			array: array,
22			iter: array.iter(),
23			
24			s_n: 0,
25			s_e: 0,
26		}
27	}
28	#[inline]
29	pub fn clear(&mut self) {
30		self.iter = self.array.iter();
31		self.s_n = 0;
32		self.s_e = 0;
33	}
34}
35
36impl<'i> Iterator for CmdlineIter<'i> {
37	type Item = (Option<&'i [u8]>, &'i [u8]);
38	
39	#[inline]
40	fn next(&mut self) -> Option<Self::Item> {
41		'begin: while let Some(a) = self.iter.next() {
42			match *a {
43				b'=' => {
44										
45					//let array_0 = &self.array[self.s_n .. self.s_e];
46					let array_0 = unsafe { self.array.get_unchecked(self.s_n .. self.s_e) };
47					
48					self.s_e += 1;
49					self.s_n = self.s_e;
50					
51					
52					while let Some(a) = self.iter.next() {
53						match *a {
54							10u8 | b' ' => {
55								break;
56							},
57							_ => {
58								self.s_e += 1;
59							},
60						}
61					}
62					
63					if self.s_n != self.s_e {
64						//let array_1 = &self.array[self.s_n .. self.s_e];
65						let array_1 = unsafe { self.array.get_unchecked(self.s_n .. self.s_e) };
66
67						
68						self.s_e += 1;
69						self.s_n = self.s_e;
70						
71						
72						return Some((Some(array_0), array_1));
73					}
74					
75					self.s_e += 1;
76					self.s_n = self.s_e;
77					
78					
79					return Some((None, array_0));
80				},
81				
82				10u8 | b' ' => {
83					break;
84				},
85				_ => {
86					self.s_e += 1;
87				},
88			}
89		}
90		
91		if self.s_n != self.s_e {
92			let array_0 = unsafe { self.array.get_unchecked(self.s_n .. self.s_e) };
93					
94			self.s_e += 1;
95			self.s_n = self.s_e;
96					
97					
98			return Some((None, array_0));
99					
100		}
101		return None;
102	}
103}