Data+fromUInt8Array.swift (1272B)
1 /* 2 * This file is part of GNU Taler, ©2022-24 Taler Systems S.A. 3 * See LICENSE.md 4 */ 5 /** 6 * @author Marc Stibane 7 */ 8 import Foundation 9 10 extension Data { 11 init(fromUInt8Array inValues: [UInt8]) { 12 let values = inValues 13 self.init(bytes: values, count: values.count) 14 } 15 16 struct HexEncodingOptions: OptionSet { 17 let rawValue: Int 18 static let upperCase = HexEncodingOptions(rawValue: 1 << 0) 19 } 20 21 func hexEncodedString(options: HexEncodingOptions = []) -> String { 22 let format = options.contains(.upperCase) ? "%02hhX" : "%02hhx" 23 return self.map { String(format: format, $0) }.joined() 24 } 25 26 static func clampedData(_ data: Data, offset: UInt, size: UInt) -> Data { 27 let endIndex = UInt(data.endIndex) 28 let start = UInt(data.startIndex) + offset 29 let start2 = Swift.min(start, endIndex-1) 30 let end = start2 + size 31 let end2 = Swift.min(end, endIndex) 32 return data[start2..<end2] 33 } 34 35 mutating func append(data: Data, offset: UInt, size: UInt) { 36 self.append(Data.clampedData(data, offset: offset, size: size)) 37 } 38 39 init(fromData data: Data, offset: UInt, size: UInt) { 40 self.init(Data.clampedData(data, offset: offset, size: size)) 41 } 42 }