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}