File tree Expand file tree Collapse file tree 1 file changed +7
-4
lines changed Expand file tree Collapse file tree 1 file changed +7
-4
lines changed Original file line number Diff line number Diff line change @@ -38,7 +38,10 @@ extension _UnsafeBitset {
38
38
@inline ( __always)
39
39
internal static func word( for element: Int ) -> Int {
40
40
_sanityCheck ( element >= 0 )
41
- return element / Word. capacity
41
+ // Note: We perform on UInts to get faster unsigned math (shifts).
42
+ let element = UInt ( bitPattern: element)
43
+ let capacity = UInt ( bitPattern: Word . capacity)
44
+ return Int ( bitPattern: element / capacity)
42
45
}
43
46
44
47
@inlinable
@@ -61,22 +64,22 @@ extension _UnsafeBitset {
61
64
@inline ( __always)
62
65
internal static func join( word: Int , bit: Int ) -> Int {
63
66
_sanityCheck ( bit >= 0 && bit < Word . capacity)
64
- return word * Word. capacity + bit
67
+ return word & * Word . capacity + bit
65
68
}
66
69
}
67
70
68
71
extension _UnsafeBitset {
69
72
@inlinable
70
73
@inline ( __always)
71
74
internal static func wordCount( forCapacity capacity: Int ) -> Int {
72
- return ( capacity + Word. capacity - 1 ) / Word . capacity
75
+ return word ( for : capacity + Word. capacity - 1 )
73
76
}
74
77
75
78
@inlinable
76
79
internal var capacity : Int {
77
80
@inline ( __always)
78
81
get {
79
- return wordCount * Word. capacity
82
+ return wordCount & * Word . capacity
80
83
}
81
84
}
82
85
You can’t perform that action at this time.
0 commit comments