Small improvement to EncHuffTree.code function

This commit is contained in:
Timofey Solomko
2017-11-19 12:47:46 +03:00
parent 00977462b0
commit 9da406fc53
2 changed files with 5 additions and 11 deletions
+4 -3
View File
@@ -75,11 +75,12 @@ class BitWriter {
}
}
func write(number: Int, bitsCount: Int) {
var mask = bitOrder == .straight ? 1 << (bitsCount - 1) : 1
func write(number: Int, bitsCount: Int, bitOrder: BitReader.BitOrder? = nil) {
let bitOrderToUse = (bitOrder ?? self.bitOrder)
var mask = bitOrderToUse == .straight ? 1 << (bitsCount - 1) : 1
for _ in 0..<bitsCount {
self.write(bit: number & mask > 0 ? 1 : 0)
switch bitOrder {
switch bitOrderToUse {
case .straight:
mask >>= 1
case .reversed:
+1 -8
View File
@@ -61,14 +61,7 @@ class EncodingHuffmanTree {
guard codingIndex[0] > -1
else { fatalError("Symbol is not found.") }
var treeCode = codingIndex[0]
let bits = codingIndex[1]
for _ in 0..<bits {
let bit = treeCode & 1
self.bitWriter.write(bit: bit == 0 ? 0 : 1)
treeCode >>= 1
}
self.bitWriter.write(number: codingIndex[0], bitsCount: codingIndex[1], bitOrder: .reversed)
}
func bitSize(for stats: [Int]) -> Int {