Files
SWCompression/Sources/7zCoderInfo.swift
T
Timofey Solomko 0ff3e2f5e3 Significantly reduce number of error cases in 7zError
Also some of them were renamed.
2017-08-19 15:46:43 +03:00

61 lines
1.4 KiB
Swift

// Copyright (c) 2017 Timofey Solomko
// Licensed under MIT License
//
// See LICENSE for license information
import Foundation
class SevenZipCoderInfo {
let numFolders: Int
let external: UInt8
private(set) var folders = [SevenZipFolder]()
init() {
numFolders = 0
external = 0
}
init(_ bitReader: BitReader) throws {
var type = bitReader.byte()
guard type == 0x0B else { throw SevenZipError.internalStructureError }
numFolders = bitReader.szMbd()
external = bitReader.byte()
guard external == 0
else { throw SevenZipError.externalNotSupported }
for _ in 0..<numFolders {
folders.append(try SevenZipFolder(bitReader))
}
type = bitReader.byte()
guard type == 0x0C else { throw SevenZipError.internalStructureError }
for folder in folders {
for _ in 0..<folder.totalOutputStreams {
folder.unpackSizes.append(bitReader.szMbd())
}
}
type = bitReader.byte()
if type == 0x0A {
let definedBits = bitReader.defBits(count: numFolders)
bitReader.align()
for i in 0..<numFolders where definedBits[i] == 1 {
folders[i].crc = bitReader.uint32()
}
type = bitReader.byte()
}
if type != 0x00 {
throw SevenZipError.internalStructureError
}
}
}