// celt_quant_all_bands.mbt
//
// quant_all_bands 主循环(RFC 6716 §4.3.4 Shape Decoding),单声道解码。
//
// 对应参考实现 celt_bands.c 的 quant_all_bands 解码侧:逐带做位数
// 记账(balance/curr_balance/budget 三重夹逼),维护折叠源缓冲 norm
// (各带经 lowband_out 写入 ×√N0 的预缩放谱),按保守 cm 估计决定
// 本带 fill 与折叠源,再调 celt_quant_band 完成带内解码,最后聚合
// 每带 collapse mask 并跨带线程 lcg seed。
//
// 立体声(dual_stereo/intensity/quant_band_stereo)与 qext 分支不在此
// 范围:CELT-only 单声道路径里 Y 恒空、intensity 不参与;effEBands
// 恒等于 nbEBands,故 `i>=effEBands` 的 norm 重定向是死分支(注释
// 对应处保留判定说明)。lowband_scratch 的等价性:本实现的折叠源与
// 频谱都走带内数组(天然无别名),参考实现的 scratch 复制只是在别名
// 时达到同一效果。

///|
/// 单声道主循环。`x` 是帧频谱(长度 m*120,带区就地读写),`pulses`
/// 是分配结果(1/8 bit),`tf_res` 是每带 TF 决策(-3..3),`total_bits`
/// 是帧预算(1/8 bit),`masks` 写入每带 collapse mask(长度 ≥ end)。
/// 返回推进后的 seed。
pub fn celt_quant_all_bands(
  dec : RangeDecoder,
  x : Array[Double],
  start : Int,
  end : Int,
  lm : Int,
  short_blocks : Bool,
  pulses : Array[Int],
  tf_res : Array[Int],
  coded_bands : Int,
  total_bits : Int,
  balance : Int,
  spread : Int,
  seed : Int64,
  masks : Array[Int],
) -> Int64 {
  let m = 1 << lm
  let blocks = if short_blocks { m } else { 1 }
  let norm_offset = celt_eband(start, m)
  // 折叠源缓冲:与参考实现同尺寸(末带的 lowband_out 为 NULL 不越界)
  let norm : Array[Double] = Array::make(
    celt_eband(CEL_NB_EBANDS - 1, m) - norm_offset,
    0.0,
  )
  let mut lowband_offset = 0
  let mut update_lowband = true
  let mut bal = balance
  let mut rng = seed
  for i in start.. 16383 { 16383 } else { t2 }
    } else {
      b = 0
    }
    // 草案更新的折叠位置推进(解码恒 resynth=1;CELT-only 起始对
    // 等宽时 special_hybrid_folding 的拷贝长度为 0)
    let cond1 = celt_eband(i, m) - n >= celt_eband(start, m) || i == start + 1
    if cond1 && (update_lowband || lowband_offset == 0) {
      lowband_offset = i
    }
    if i == start + 1 {
      let n1 = celt_band_bins(start, m)
      let n2 = celt_band_bins(start + 1, m)
      let ln = n2 - n1
      if ln > 0 {
        for j in 0.. 1 || tf_change < 0) {
      effective = celt_eband(lowband_offset, m) - norm_offset - n
      if effective < 0 {
        effective = 0
      }
      let t_lo = effective + norm_offset
      let mut fold_start = lowband_offset - 1
      while celt_eband(fold_start, m) > t_lo {
        fold_start -= 1
      }
      let mut fold_end = lowband_offset - 1
      while fold_end + 1 < i && celt_eband(fold_end + 1, m) < t_lo + n {
        fold_end += 1
      }
      let mut f = fold_start
      while f < fold_end {
        x_cm = x_cm | masks[f]
        f += 1
      }
    } else {
      x_cm = (1 << blocks) - 1
    }
    // 带内数组:频谱、折叠源切片、折叠预缩放输出
    let x_off = celt_eband(i, m)
    let x_band : Array[Double] = Array::make(n, 0.0)
    for j in 0..= 0 {
      let a : Array[Double] = Array::make(n, 0.0)
      for j in 0..= 0 {
      // 镜像参考实现对 norm 的就地前向变换副作用(后续带可能再折叠到)
      for j in 0.. 0 {
      let pos = celt_eband(i, m) - norm_offset
      for j in 0.. n << CEL_BITRES
  }
  rng
}