Use tuples in inits of huffman trees

This commit is contained in:
Timofey Solomko
2017-09-02 20:03:21 +03:00
parent 5b3e4e72d3
commit cb54a5fa02
2 changed files with 14 additions and 14 deletions
+7 -7
View File
@@ -12,16 +12,16 @@ class DecodingHuffmanTree {
private var tree: [Int]
private let leafCount: Int
init(bootstrap: [[Int]], _ bitReader: BitReader) {
init(bootstrap: [(symbol: Int, codeLength: Int)], _ bitReader: BitReader) {
self.bitReader = bitReader
// Fills the 'lengths' array with numerous HuffmanLengths from a 'bootstrap'.
// Fills the 'lengths' array with pairs of (symbol, codeLength) from a 'bootstrap'.
var lengths: [[Int]] = []
var start = bootstrap[0][0]
var bits = bootstrap[0][1]
var start = bootstrap[0].symbol
var bits = bootstrap[0].codeLength
for pair in bootstrap[1..<bootstrap.count] {
let finish = pair[0]
let endbits = pair[1]
let finish = pair.symbol
let endbits = pair.codeLength
if bits > 0 {
for i in start..<finish {
lengths.append([i, bits])
@@ -87,7 +87,7 @@ class DecodingHuffmanTree {
addedLengths.append(-1)
let lengthsCount = addedLengths.count
let range = Array(0...lengthsCount)
self.init(bootstrap: (zip(range, addedLengths)).map { [$0, $1] }, bitReader)
self.init(bootstrap: Array(zip(range, addedLengths)), bitReader)
}
func findNextSymbol() -> Int {
+7 -7
View File
@@ -12,16 +12,16 @@ class EncodingHuffmanTree {
private var codingIndices: [[Int]]
init(bootstrap: [[Int]], throw symbolNotFoundError: Error, _ bitWriter: BitWriter) {
init(bootstrap: [(symbol: Int, codeLength: Int)], throw symbolNotFoundError: Error, _ bitWriter: BitWriter) {
self.bitWriter = bitWriter
self.symbolNotFoundError = symbolNotFoundError
// Fills the 'lengths' array with numerous HuffmanLengths from a 'bootstrap'.
// Fills the 'lengths' array with pairs of (symbol, codeLength) from a 'bootstrap'.
var lengths: [[Int]] = []
var start = bootstrap[0][0]
var bits = bootstrap[0][1]
var start = bootstrap[0].symbol
var bits = bootstrap[0].codeLength
for pair in bootstrap[1..<bootstrap.count] {
let finish = pair[0]
let endbits = pair[1]
let finish = pair.symbol
let endbits = pair.codeLength
if bits > 0 {
for i in start..<finish {
lengths.append([i, bits])
@@ -77,7 +77,7 @@ class EncodingHuffmanTree {
addedLengths.append(-1)
let lengthsCount = addedLengths.count
let range = Array(0...lengthsCount)
self.init(bootstrap: (zip(range, addedLengths)).map { [$0, $1] }, throw: symbolNotFoundError, bitWriter)
self.init(bootstrap: Array(zip(range, addedLengths)), throw: symbolNotFoundError, bitWriter)
}
func code(symbol: Int) throws {