blob: e52bdab62cfd8e8caa0dd263175cf051c53ad70a [file] [log] [blame]
Austin Schuh272c6132020-11-14 16:37:52 -08001import Foundation
2
3extension Int {
4
5 /// Moves the current int into the nearest power of two
6 ///
7 /// This is used since the UnsafeMutableRawPointer will face issues when writing/reading
8 /// if the buffer alignment exceeds that actual size of the buffer
9 var convertToPowerofTwo: Int {
10 guard self > 0 else { return 1 }
11 var n = UOffset(self)
12
13 #if arch(arm) || arch(i386)
14 let max = UInt32(Int.max)
15 #else
16 let max = UInt32.max
17 #endif
18
19 n -= 1
20 n |= n >> 1
21 n |= n >> 2
22 n |= n >> 4
23 n |= n >> 8
24 n |= n >> 16
25 if n != max {
26 n += 1
27 }
28
29 return Int(n)
30 }
31}