// Copyright (c) 2024 Timofey Solomko// Licensed under MIT License//// See LICENSE for license informationimport Foundationimport BitByteDatafinal class DecodingTree {private let bitReader: BitReaderprivate let tree: [Int]private let leafCount: Intinit(codes: [Code], maxBits: Int, _ bitReader: BitReader) {self.bitReader = bitReader// Calculate maximum amount of leaves in a tree.self.leafCount = 1 << (maxBits + 1)var tree = Array(repeating: -1, count: leafCount)for code in codes {// Put code in its place in the tree.var treeCode = code.codevar index = 0for _ in 0..<code.bits {let bit = treeCode & 1index = bit == 0 ? 2 * index + 1 : 2 * index + 2treeCode >>= 1}tree[index] = code.symbol}self.tree = tree}func findNextSymbol() -> Int {var bitsLeft = bitReader.bitsLeftvar index = 0while bitsLeft > 0 {let bit = bitReader.bit()index = bit == 0 ? 2 * index + 1 : 2 * index + 2bitsLeft -= 1guard index < self.leafCountelse { return -1 }if self.tree[index] > -1 {return self.tree[index]}}return -1}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。