///|
/// BCH(15,5) format information, masked with 0x5412 as required by ISO 7.9.
///
/// BCH(15,5) 格式信息,按 ISO 7.9 要求与 0x5412 异或掩码。
pub fn format_info(ec : EcLevel, mask : Mask) -> Int32 {
  let ec_bits = match ec {
    L => 1
    M => 0
    Q => 3
    H => 2
  }
  let mask_bits = match mask {
    M0 => 0
    M1 => 1
    M2 => 2
    M3 => 3
    M4 => 4
    M5 => 5
    M6 => 6
    M7 => 7
  }
  let data = (ec_bits << 3) | mask_bits
  let mut rem = data << 10
  for i = 14; i >= 10; i = i - 1 {
    if ((rem >> i) & 1) == 1 {
      rem = rem ^ (0x537 << (i - 10))
    }
  }
  ((data << 10) | rem) ^ 0x5412
}

///|
/// BCH(18,6) version information for versions 7..40; `None` below 7.
///
/// BCH(18,6) 版本信息,适用于版本 7..40;低于 7 时返回 `None`。
pub fn version_info(version : Int32) -> Int32? {
  if version < 7 || version > 40 {
    None
  } else {
    let mut rem = version << 12
    for i = 17; i >= 12; i = i - 1 {
      if ((rem >> i) & 1) == 1 {
        rem = rem ^ (0x1F25 << (i - 12))
      }
    }
    Some((version << 12) | rem)
  }
}