Files
SWCompression/Sources/XZ/ByteReader+XZ.swift
2021-01-11 11:20:57 +02:00

34 lines
721 B
Swift

// Copyright (c) 2021 Timofey Solomko
// Licensed under MIT License
//
// See LICENSE for license information
import Foundation
import BitByteData
extension LittleEndianByteReader {
func multiByteDecode() throws -> Int {
var i = 1
var result = self.byte().toInt()
if result <= 127 {
return result
}
result &= 0x7F
while true {
let byte = self.byte()
if i >= 9 || byte == 0x00 {
throw XZError.multiByteIntegerError
}
result += (byte.toInt() & 0x7F) << (7 * i)
i += 1
if byte & 0x80 == 0 {
break
}
}
return result
}
}