// Generated JDK 22.0.1 radix-10 digit blocks. Java integer parsing uses UTF-16 chars.
// Regenerate with node tools/generate-numeric-characters.mjs [--live].

///|
let numeric_digit_starts : Array[Int] = [
  48, 1632, 1776, 1984, 2406, 2534, 2662, 2790, 2918, 3046, 3174, 3302, 3430, 3558,
  3664, 3792, 3872, 4160, 4240, 6112, 6160, 6470, 6608, 6784, 6800, 6992, 7088, 7232,
  7248, 42528, 43216, 43264, 43472, 43504, 43600, 44016, 65296,
]

///|
fn numeric_digit(cp : Int) -> Int {
  if cp >= 48 && cp <= 57 {
    return cp - 48
  }
  if cp < 128 || cp > 65535 {
    return -1
  }
  let mut low = 0
  let mut high = numeric_digit_starts.length()
  while low < high {
    let middle = low + (high - low) / 2
    let start = numeric_digit_starts[middle]
    if cp < start {
      high = middle
    } else if cp > start + 9 {
      low = middle + 1
    } else {
      return cp - start
    }
  }
  -1
}