aboutsummaryrefslogtreecommitdiff
path: root/Hotline/Utility
diff options
context:
space:
mode:
Diffstat (limited to 'Hotline/Utility')
-rw-r--r--Hotline/Utility/FoundationExtensions.swift71
1 files changed, 52 insertions, 19 deletions
diff --git a/Hotline/Utility/FoundationExtensions.swift b/Hotline/Utility/FoundationExtensions.swift
index edb8bee..a1df815 100644
--- a/Hotline/Utility/FoundationExtensions.swift
+++ b/Hotline/Utility/FoundationExtensions.swift
@@ -62,8 +62,26 @@ extension Array where Element == UInt8 {
return val
}
+ mutating func consume(_ length: Int) -> Bool {
+ guard length <= self.count else {
+ return false
+ }
+
+ self.removeFirst(length)
+ return true
+ }
+
mutating func consumeBytes(_ length: Int) -> Data? {
- guard let val = self.readData(at: 0, length: length) else {
+ guard let val: Data = self.readData(at: 0, length: length) else {
+ return nil
+ }
+
+ self.removeFirst(length)
+ return val
+ }
+
+ mutating func consumeBytes(_ length: Int) -> [UInt8]? {
+ guard let val: [UInt8] = self.readData(at: 0, length: length) else {
return nil
}
@@ -130,17 +148,17 @@ extension Array where Element == UInt8 {
return nil
}
- let leftSide: UInt64 = (UInt64(self[offset]) << 56) +
+ let a: UInt64 = (UInt64(self[offset]) << 56) +
(UInt64(self[offset + 1]) << 48) +
(UInt64(self[offset + 2]) << 40) +
(UInt64(self[offset + 3]) << 32)
- let rightSide: UInt64 = (UInt64(self[offset + 4]) << 24) +
+ let b: UInt64 = (UInt64(self[offset + 4]) << 24) +
(UInt64(self[offset + 5]) << 16) +
(UInt64(self[offset + 6]) << 8) +
UInt64(self[offset + 7])
- return leftSide + rightSide
+ return a + b
}
func readDate(at offset: Int) -> Date? {
@@ -165,8 +183,15 @@ extension Array where Element == UInt8 {
return Data(self[offset..<(offset + length)])
}
+ func readData(at offset: Int, length: Int) -> [UInt8]? {
+ guard offset >= 0, offset + length <= self.count else {
+ return nil
+ }
+ return Array(self[offset..<(offset + length)])
+ }
+
func readString(at offset: Int, length: Int) -> String? {
- guard let subdata = self.readData(at: offset, length: length) else {
+ guard let subdata: Data = self.readData(at: offset, length: length) else {
return nil
}
@@ -233,8 +258,8 @@ extension Array where Element == UInt8 {
mutating func appendUInt16(_ value: UInt16, endianness: Endianness = .big) {
let val = endianness == .big ? value.bigEndian : value.littleEndian
let bytes: [UInt8] = [
- UInt8((val >> 8) & 0xFF),
- UInt8(val & 0xFF)
+ UInt8(val & 0x00FF),
+ UInt8((val >> 8) & 0x00FF),
]
self.append(contentsOf: bytes)
}
@@ -242,10 +267,10 @@ extension Array where Element == UInt8 {
mutating func appendUInt32(_ value: UInt32, endianness: Endianness = .big) {
let val = endianness == .big ? value.bigEndian : value.littleEndian
let bytes: [UInt8] = [
- UInt8((val >> 24) & 0xFF),
- UInt8((val >> 16) & 0xFF),
- UInt8((val >> 8) & 0xFF),
- UInt8(val & 0xFF)
+ UInt8(val & 0x000000FF),
+ UInt8((val >> 8) & 0x000000FF),
+ UInt8((val >> 16) & 0x000000FF),
+ UInt8((val >> 24) & 0x000000FF),
]
self.append(contentsOf: bytes)
}
@@ -253,17 +278,25 @@ extension Array where Element == UInt8 {
mutating func appendUInt64(_ value: UInt64, endianness: Endianness = .big) {
let val: UInt64 = endianness == .big ? value.bigEndian : value.littleEndian
let bytes: [UInt8] = [
- UInt8((val >> 56) & 0xFF),
- UInt8((val >> 48) & 0xFF),
- UInt8((val >> 40) & 0xFF),
- UInt8((val >> 32) & 0xFF),
- UInt8((val >> 24) & 0xFF),
- UInt8((val >> 16) & 0xFF),
- UInt8((val >> 8) & 0xFF),
- UInt8(val & 0xFF)
+ UInt8(val & 0x00000000000000FF),
+ UInt8((val >> 8) & 0x00000000000000FF),
+ UInt8((val >> 16) & 0x00000000000000FF),
+ UInt8((val >> 24) & 0x00000000000000FF),
+ UInt8((val >> 32) & 0x00000000000000FF),
+ UInt8((val >> 40) & 0x00000000000000FF),
+ UInt8((val >> 48) & 0x00000000000000FF),
+ UInt8((val >> 56) & 0x00000000000000FF),
]
self.append(contentsOf: bytes)
}
+
+ mutating func appendData(_ data: Data) {
+ self.append(contentsOf: data)
+ }
+
+ mutating func appendData(_ data: [UInt8]) {
+ self.append(contentsOf: data)
+ }
}
extension Data {