@@ -31,28 +31,6 @@ static POWER10_HASH_U64: [u64;32] = [1, 100000000000, 10000000000000000, 0, 1000
31
31
1000000000000000000 , 100 , 100000000 , 100000000000000000 , 0 , 10000000000000000000 ,
32
32
10000 , 100000 , 0 , 1000000000 , 0 , 10000000000 , 0 ] ;
33
33
34
- #[ cfg( has_i128) ]
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
- }
55
-
56
34
// implementation note: reverse search is a bit faster than hash lookup for u8
57
35
#[ inline]
58
36
fn is_pow10_u8 ( v : u8 ) -> bool {
@@ -83,12 +61,6 @@ fn is_pow10_u64(v: u64) -> bool {
83
61
v == POWER10_HASH_U64 [ ( hash & 31 ) as usize ]
84
62
}
85
63
86
- #[ cfg( has_i128) ]
87
- #[ inline]
88
- fn is_pow10_u128 ( v : u128 ) -> bool {
89
- pow10_u128:: is_pow10_u128 ( v)
90
- }
91
-
92
64
#[ cfg( target_pointer_width = "64" ) ]
93
65
#[ inline]
94
66
fn is_pow10_usize ( v : usize ) -> bool {
@@ -101,6 +73,33 @@ fn is_pow10_usize(v: usize) -> bool {
101
73
is_pow10_u32 ( v as u32 )
102
74
}
103
75
76
+ macro_rules! hide_u128 {
77
+ ( $T: ty) => {
78
+ static POWER10_HASH_U128 : [ $T; 64 ] = [ 100000000000000000000000000000000000 , 0 , 100000000000000000000000000000000 ,
79
+ 0 , 1000 , 0 , 0 , 0 , 0 ,
80
+ 1000000000000000000000000000000000000 , 1000000000 , 0 , 100000000000000 , 100 , 0 , 0 , 0 , 100000 , 0 , 0 ,
81
+ 10000000000000 , 100000000000 , 10000000000000000000 , 0 , 0 , 10000000000000000000000000000000000 ,
82
+ 100000000 , 0 , 1000000000000000000000000000000000 , 1000000000000 , 0 , 100000000000000000000000000000000000000 ,
83
+ 10000000000000000 , 100000000000000000000000000 , 0 , 10000000000000000000000000000000000000 ,
84
+ 1000000000000000000 , 1 , 10000000000000000000000000 , 1000000000000000000000000 , 100000000000000000000000000000 ,
85
+ 10000000 , 10000000000000000000000000000 , 0 , 1000000000000000000000000000 , 100000000000000000 , 10000 ,
86
+ 0 , 1000000 , 1000000000000000000000000000000 , 0 , 100000000000000000000 , 10 , 0 , 10000000000 ,
87
+ 10000000000000000000000 , 0 , 0 , 10000000000000000000000000000000 , 1000000000000000000000 , 0 ,
88
+ 100000000000000000000000 , 1000000000000000 , 0 ] ;
89
+
90
+ #[ inline]
91
+ pub fn is_pow10_u128( v: $T) -> bool {
92
+ let mut hash: u32 = v as u32 | ( ( ( v as u64 ) >> 32 ) as u32 ) ;
93
+ hash = hash. wrapping_mul( 1249991743 ) . rotate_right( 25 ) ;
94
+ v == POWER10_HASH_U128 [ ( hash & 63 ) as usize ]
95
+ }
96
+
97
+ }
98
+ }
99
+
100
+ #[ cfg( has_i128) ]
101
+ hide_u128 ! ( u128 ) ;
102
+
104
103
macro_rules! unsigned_power10 {
105
104
( $T: ty, $pow_fn: ident) => {
106
105
impl Power10 for $T {
0 commit comments