taler-ios

iOS apps for GNU Taler (wallet)
Log | Files | Refs | README | LICENSE

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 }