35 lines
1.0 KiB
Swift
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
|
|
}
|
|
}
|