// Copyright (c) 2026 Timofey Solomko // Licensed under MIT License // // See LICENSE for license information /// Used to decode symbols that need several bits for storing. struct LZMABitTreeDecoder { var probs: [Int] let numBits: Int init(numBits: Int) { self.probs = Array(repeating: LZMAConstants.probInitValue, count: 1 << numBits) self.numBits = numBits } mutating func decode(with rangeDecoder: inout LZMARangeDecoder) -> Int { var m = 1 for _ in 0.. Int { return LZMABitTreeDecoder.bitTreeReverseDecode(probs: &self.probs, startIndex: 0, bits: self.numBits, &rangeDecoder) } static func bitTreeReverseDecode(probs: inout [Int], startIndex: Int, bits: Int, _ rangeDecoder: inout LZMARangeDecoder) -> Int { var m = 1 var symbol = 0 for i in 0..