pem_iterator/lib.rs
1#![cfg_attr(feature = "generators", feature(generators, generator_trait, conservative_impl_trait))]
2
3#![cfg_attr(not(feature = "std"), no_std)]
4
5#[cfg(feature = "std")]
6extern crate core;
7
8pub mod body;
9pub mod boundary;
10
11#[cfg(feature = "generators")]
12pub mod generator;
13
14/// Will be replaced with never_type `!` (rust/rust-lang#35121)
15#[derive(Clone, Copy, Debug, PartialEq, Eq)]
16pub enum Void {}
17
18fn map_chars<Loc>(c: (Loc, char)) -> Result<(Loc, char), Void> {
19 Ok(c)
20}
21
22#[cfg(feature = "std")]
23fn is_whitespace<Loc>(&(_, ref c): &(Loc, char)) -> bool {
24 c.is_whitespace()
25}
26
27#[cfg(not(feature = "std"))]
28fn is_whitespace<Loc>(&(_, ref c): &(Loc, char)) -> bool {
29 fn trie_range_leaf(c: u32, bitmap_chunk: u64) -> bool {
30 ((bitmap_chunk >> (c & 63)) & 1) != 0
31 }
32
33 pub struct SmallBoolTrie {
34 r1: [u8; 193], // first level
35 r2: [u64; 6], // leaves
36 }
37
38 impl SmallBoolTrie {
39 fn lookup(&self, c: char) -> bool {
40 let c = c as u32;
41 match self.r1.get((c >> 6) as usize) {
42 Some(&child) => trie_range_leaf(c, self.r2[child as usize]),
43 None => false,
44 }
45 }
46 }
47
48 const WHITE_SPACE_TABLE: &'static SmallBoolTrie = &SmallBoolTrie {
49 r1: [
50 0,
51 1,
52 2,
53 1,
54 1,
55 1,
56 1,
57 1,
58 1,
59 1,
60 1,
61 1,
62 1,
63 1,
64 1,
65 1,
66 1,
67 1,
68 1,
69 1,
70 1,
71 1,
72 1,
73 1,
74 1,
75 1,
76 1,
77 1,
78 1,
79 1,
80 1,
81 1,
82 1,
83 1,
84 1,
85 1,
86 1,
87 1,
88 1,
89 1,
90 1,
91 1,
92 1,
93 1,
94 1,
95 1,
96 1,
97 1,
98 1,
99 1,
100 1,
101 1,
102 1,
103 1,
104 1,
105 1,
106 1,
107 1,
108 1,
109 1,
110 1,
111 1,
112 1,
113 1,
114 1,
115 1,
116 1,
117 1,
118 1,
119 1,
120 1,
121 1,
122 1,
123 1,
124 1,
125 1,
126 1,
127 1,
128 1,
129 1,
130 1,
131 1,
132 1,
133 1,
134 1,
135 1,
136 1,
137 1,
138 1,
139 1,
140 3,
141 1,
142 1,
143 1,
144 1,
145 1,
146 1,
147 1,
148 1,
149 1,
150 1,
151 1,
152 1,
153 1,
154 1,
155 1,
156 1,
157 1,
158 1,
159 1,
160 1,
161 1,
162 1,
163 1,
164 1,
165 1,
166 1,
167 1,
168 1,
169 1,
170 1,
171 1,
172 1,
173 1,
174 1,
175 1,
176 1,
177 1,
178 4,
179 5,
180 1,
181 1,
182 1,
183 1,
184 1,
185 1,
186 1,
187 1,
188 1,
189 1,
190 1,
191 1,
192 1,
193 1,
194 1,
195 1,
196 1,
197 1,
198 1,
199 1,
200 1,
201 1,
202 1,
203 1,
204 1,
205 1,
206 1,
207 1,
208 1,
209 1,
210 1,
211 1,
212 1,
213 1,
214 1,
215 1,
216 1,
217 1,
218 1,
219 1,
220 1,
221 1,
222 1,
223 1,
224 1,
225 1,
226 1,
227 1,
228 1,
229 1,
230 1,
231 1,
232 1,
233 1,
234 1,
235 1,
236 1,
237 1,
238 1,
239 1,
240 1,
241 1,
242 3,
243 ],
244 r2: [
245 0x0000000100003e00,
246 0x0000000000000000,
247 0x0000000100000020,
248 0x0000000000000001,
249 0x00008300000007ff,
250 0x0000000080000000,
251 ],
252 };
253
254 WHITE_SPACE_TABLE.lookup(*c)
255}