@@ -8,6 +8,7 @@ use super::ScanFromStr;
8
8
use super :: misc:: Word ;
9
9
10
10
lazy_static ! {
11
+ static ref BININT_RE : Regex = Regex :: new( r"^[01]+" ) . unwrap( ) ;
11
12
static ref FLOAT_RE : Regex = Regex :: new( r#"(?x)
12
13
^(
13
14
inf
@@ -21,6 +22,8 @@ lazy_static! {
21
22
)
22
23
)
23
24
"# ) . unwrap( ) ;
25
+ static ref OCTINT_RE : Regex = Regex :: new( r"^[0-7]+" ) . unwrap( ) ;
26
+ static ref HEXINT_RE : Regex = Regex :: new( r"^[:xdigit:]+" ) . unwrap( ) ;
24
27
static ref SINTEGER_RE : Regex = Regex :: new( r"^[+-]?\d+" ) . unwrap( ) ;
25
28
static ref UINTEGER_RE : Regex = Regex :: new( r"^[+]?\d+" ) . unwrap( ) ;
26
29
}
@@ -133,6 +136,24 @@ parse_scanner! { impl<'a> for i32, regex SINTEGER_RE }
133
136
parse_scanner ! { impl <' a> for i64 , regex SINTEGER_RE }
134
137
parse_scanner ! { impl <' a> for isize , regex SINTEGER_RE }
135
138
139
+ parse_scanner ! { impl <' a> ScanFromBinary :: scan_from_binary for i8 , regex BININT_RE , map |s| i8 :: from_str_radix( s, 2 ) }
140
+ parse_scanner ! { impl <' a> ScanFromBinary :: scan_from_binary for i16 , regex BININT_RE , map |s| i16 :: from_str_radix( s, 2 ) }
141
+ parse_scanner ! { impl <' a> ScanFromBinary :: scan_from_binary for i32 , regex BININT_RE , map |s| i32 :: from_str_radix( s, 2 ) }
142
+ parse_scanner ! { impl <' a> ScanFromBinary :: scan_from_binary for i64 , regex BININT_RE , map |s| i64 :: from_str_radix( s, 2 ) }
143
+ parse_scanner ! { impl <' a> ScanFromBinary :: scan_from_binary for isize , regex BININT_RE , map |s| isize :: from_str_radix( s, 2 ) }
144
+
145
+ parse_scanner ! { impl <' a> ScanFromOctal :: scan_from_octal for i8 , regex OCTINT_RE , map |s| i8 :: from_str_radix( s, 8 ) }
146
+ parse_scanner ! { impl <' a> ScanFromOctal :: scan_from_octal for i16 , regex OCTINT_RE , map |s| i16 :: from_str_radix( s, 8 ) }
147
+ parse_scanner ! { impl <' a> ScanFromOctal :: scan_from_octal for i32 , regex OCTINT_RE , map |s| i32 :: from_str_radix( s, 8 ) }
148
+ parse_scanner ! { impl <' a> ScanFromOctal :: scan_from_octal for i64 , regex OCTINT_RE , map |s| i64 :: from_str_radix( s, 8 ) }
149
+ parse_scanner ! { impl <' a> ScanFromOctal :: scan_from_octal for isize , regex OCTINT_RE , map |s| isize :: from_str_radix( s, 8 ) }
150
+
151
+ parse_scanner ! { impl <' a> ScanFromHex :: scan_from_hex for i8 , regex HEXINT_RE , map |s| i8 :: from_str_radix( s, 16 ) }
152
+ parse_scanner ! { impl <' a> ScanFromHex :: scan_from_hex for i16 , regex HEXINT_RE , map |s| i16 :: from_str_radix( s, 16 ) }
153
+ parse_scanner ! { impl <' a> ScanFromHex :: scan_from_hex for i32 , regex HEXINT_RE , map |s| i32 :: from_str_radix( s, 16 ) }
154
+ parse_scanner ! { impl <' a> ScanFromHex :: scan_from_hex for i64 , regex HEXINT_RE , map |s| i64 :: from_str_radix( s, 16 ) }
155
+ parse_scanner ! { impl <' a> ScanFromHex :: scan_from_hex for isize , regex HEXINT_RE , map |s| isize :: from_str_radix( s, 16 ) }
156
+
136
157
#[ cfg( test) ]
137
158
#[ test]
138
159
fn test_scan_i32 ( ) {
@@ -156,6 +177,24 @@ parse_scanner! { impl<'a> for u32, regex UINTEGER_RE }
156
177
parse_scanner ! { impl <' a> for u64 , regex UINTEGER_RE }
157
178
parse_scanner ! { impl <' a> for usize , regex UINTEGER_RE }
158
179
180
+ parse_scanner ! { impl <' a> ScanFromBinary :: scan_from_binary for u8 , regex BININT_RE , map |s| u8 :: from_str_radix( s, 2 ) }
181
+ parse_scanner ! { impl <' a> ScanFromBinary :: scan_from_binary for u16 , regex BININT_RE , map |s| u16 :: from_str_radix( s, 2 ) }
182
+ parse_scanner ! { impl <' a> ScanFromBinary :: scan_from_binary for u32 , regex BININT_RE , map |s| u32 :: from_str_radix( s, 2 ) }
183
+ parse_scanner ! { impl <' a> ScanFromBinary :: scan_from_binary for u64 , regex BININT_RE , map |s| u64 :: from_str_radix( s, 2 ) }
184
+ parse_scanner ! { impl <' a> ScanFromBinary :: scan_from_binary for usize , regex BININT_RE , map |s| usize :: from_str_radix( s, 2 ) }
185
+
186
+ parse_scanner ! { impl <' a> ScanFromOctal :: scan_from_octal for u8 , regex OCTINT_RE , map |s| u8 :: from_str_radix( s, 8 ) }
187
+ parse_scanner ! { impl <' a> ScanFromOctal :: scan_from_octal for u16 , regex OCTINT_RE , map |s| u16 :: from_str_radix( s, 8 ) }
188
+ parse_scanner ! { impl <' a> ScanFromOctal :: scan_from_octal for u32 , regex OCTINT_RE , map |s| u32 :: from_str_radix( s, 8 ) }
189
+ parse_scanner ! { impl <' a> ScanFromOctal :: scan_from_octal for u64 , regex OCTINT_RE , map |s| u64 :: from_str_radix( s, 8 ) }
190
+ parse_scanner ! { impl <' a> ScanFromOctal :: scan_from_octal for usize , regex OCTINT_RE , map |s| usize :: from_str_radix( s, 8 ) }
191
+
192
+ parse_scanner ! { impl <' a> ScanFromHex :: scan_from_hex for u8 , regex HEXINT_RE , map |s| u8 :: from_str_radix( s, 16 ) }
193
+ parse_scanner ! { impl <' a> ScanFromHex :: scan_from_hex for u16 , regex HEXINT_RE , map |s| u16 :: from_str_radix( s, 16 ) }
194
+ parse_scanner ! { impl <' a> ScanFromHex :: scan_from_hex for u32 , regex HEXINT_RE , map |s| u32 :: from_str_radix( s, 16 ) }
195
+ parse_scanner ! { impl <' a> ScanFromHex :: scan_from_hex for u64 , regex HEXINT_RE , map |s| u64 :: from_str_radix( s, 16 ) }
196
+ parse_scanner ! { impl <' a> ScanFromHex :: scan_from_hex for usize , regex HEXINT_RE , map |s| usize :: from_str_radix( s, 16 ) }
197
+
159
198
#[ cfg( test) ]
160
199
#[ test]
161
200
fn test_scan_u32 ( ) {
0 commit comments