cluproccmdline/iter/
mod.rs1
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 = 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 = 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}