Files
OAuthSwift/Sources/Collection+OAuthSwift.swift
2021-04-29 08:41:07 +02:00

35 lines
1.0 KiB
Swift

//
// Collection+OAuthSwift.swift
// OAuthSwift
//
// Created by phimage on 02/10/16.
// Copyright © 2016 Dongri Jin. All rights reserved.
//
import Foundation
extension Collection where Self.Iterator.Element == UInt8, Self.Index == Int {
var toUInt32: UInt32 {
assert(self.count > 3)
// XXX optimize do the job only for the first one...
return toUInt32Array()[0]
}
func toUInt32Array() -> [UInt32] {
var result = [UInt32]()
result.reserveCapacity(16)
for idx in stride(from: self.startIndex, to: self.endIndex, by: MemoryLayout<UInt32>.size) {
var val: UInt32 = 0
val |= self.count > 3 ? UInt32(self[idx.advanced(by: 3)]) << 24 : 0
val |= self.count > 2 ? UInt32(self[idx.advanced(by: 2)]) << 16 : 0
val |= self.count > 1 ? UInt32(self[idx.advanced(by: 1)]) << 8 : 0
// swiftlint:disable:next empty_count
val |= self.count > 0 ? UInt32(self[idx]) : 0
result.append(val)
}
return result
}
}