@@ -30,18 +30,28 @@ static POWER10_HASH_U64: [u64;32] = [1, 100000000000, 10000000000000000, 0, 1000
30
30
0 , 1000 , 0 , 0 , 0 , 1000000000000 , 0 , 1000000000000000 , 0 , 100000000000000 ,
31
31
1000000000000000000 , 100 , 100000000 , 100000000000000000 , 0 , 10000000000000000000 ,
32
32
10000 , 100000 , 0 , 1000000000 , 0 , 10000000000 , 0 ] ;
33
+
33
34
#[ cfg( has_i128) ]
34
- static POWER10_HASH_U128 : [ u128 ; 64 ] = [ 100000000000000000000000000000000000 , 0 , 100000000000000000000000000000000 ,
35
- 0 , 1000 , 0 , 0 , 0 , 0 ,
36
- 1000000000000000000000000000000000000 , 1000000000 , 0 , 100000000000000 , 100 , 0 , 0 , 0 , 100000 , 0 , 0 ,
37
- 10000000000000 , 100000000000 , 10000000000000000000 , 0 , 0 , 10000000000000000000000000000000000 ,
38
- 100000000 , 0 , 1000000000000000000000000000000000 , 1000000000000 , 0 , 100000000000000000000000000000000000000 ,
39
- 10000000000000000 , 100000000000000000000000000 , 0 , 10000000000000000000000000000000000000 ,
40
- 1000000000000000000 , 1 , 10000000000000000000000000 , 1000000000000000000000000 , 100000000000000000000000000000 ,
41
- 10000000 , 10000000000000000000000000000 , 0 , 1000000000000000000000000000 , 100000000000000000 , 10000 ,
42
- 0 , 1000000 , 1000000000000000000000000000000 , 0 , 100000000000000000000 , 10 , 0 , 10000000000 ,
43
- 10000000000000000000000 , 0 , 0 , 10000000000000000000000000000000 , 1000000000000000000000 , 0 ,
44
- 100000000000000000000000 , 1000000000000000 , 0 ] ;
35
+ mod pow10_u128 {
36
+ static POWER10_HASH_U128 : [ u128 ; 64 ] = [ 100000000000000000000000000000000000 , 0 , 100000000000000000000000000000000 ,
37
+ 0 , 1000 , 0 , 0 , 0 , 0 ,
38
+ 1000000000000000000000000000000000000 , 1000000000 , 0 , 100000000000000 , 100 , 0 , 0 , 0 , 100000 , 0 , 0 ,
39
+ 10000000000000 , 100000000000 , 10000000000000000000 , 0 , 0 , 10000000000000000000000000000000000 ,
40
+ 100000000 , 0 , 1000000000000000000000000000000000 , 1000000000000 , 0 , 100000000000000000000000000000000000000 ,
41
+ 10000000000000000 , 100000000000000000000000000 , 0 , 10000000000000000000000000000000000000 ,
42
+ 1000000000000000000 , 1 , 10000000000000000000000000 , 1000000000000000000000000 , 100000000000000000000000000000 ,
43
+ 10000000 , 10000000000000000000000000000 , 0 , 1000000000000000000000000000 , 100000000000000000 , 10000 ,
44
+ 0 , 1000000 , 1000000000000000000000000000000 , 0 , 100000000000000000000 , 10 , 0 , 10000000000 ,
45
+ 10000000000000000000000 , 0 , 0 , 10000000000000000000000000000000 , 1000000000000000000000 , 0 ,
46
+ 100000000000000000000000 , 1000000000000000 , 0 ] ;
47
+
48
+ #[ inline]
49
+ pub fn is_pow10_u128 ( v : u128 ) -> bool {
50
+ let mut hash: u32 = v as u32 | ( ( ( v as u64 ) >> 32 ) as u32 ) ;
51
+ hash = hash. wrapping_mul ( 1249991743 ) . rotate_right ( 25 ) ;
52
+ v == POWER10_HASH_U128 [ ( hash & 63 ) as usize ]
53
+ }
54
+ }
45
55
46
56
// implementation note: reverse search is a bit faster than hash lookup for u8
47
57
#[ inline]
@@ -76,9 +86,7 @@ fn is_pow10_u64(v: u64) -> bool {
76
86
#[ cfg( has_i128) ]
77
87
#[ inline]
78
88
fn is_pow10_u128 ( v : u128 ) -> bool {
79
- let mut hash: u32 = v as u32 | ( ( ( v as u64 ) >> 32 ) as u32 ) ;
80
- hash = hash. wrapping_mul ( 1249991743 ) . rotate_right ( 25 ) ;
81
- v == POWER10_HASH_U128 [ ( hash & 63 ) as usize ]
89
+ pow10_u128:: is_pow10_u128 ( v)
82
90
}
83
91
84
92
#[ cfg( target_pointer_width = "64" ) ]
0 commit comments