33 lines
828 B
Swift
33 lines
828 B
Swift
import Foundation
|
|
|
|
extension Data {
|
|
var bytes: [UInt8] { withUnsafeBytes([UInt8].init) }
|
|
}
|
|
|
|
extension Data {
|
|
func split(separator: [UInt8]) -> [Data] {
|
|
let bytes = self.bytes
|
|
var result = [Data]()
|
|
var position = 0
|
|
for i in 0..<count - 1 {
|
|
let current = Array(bytes[i..<(i + separator.count)])
|
|
if current == separator {
|
|
if i > 0 {
|
|
result.append(self[position..<i])
|
|
}
|
|
position = i + separator.count
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
func split(separator: Data) -> [Data] {
|
|
split(separator: separator.bytes)
|
|
}
|
|
|
|
func split(separator: String) -> [Data] {
|
|
separator.data(using: .utf8)
|
|
.flatMap { split(separator: $0.bytes) } ?? [self]
|
|
}
|
|
}
|