inline size_t natSize()

in glean/rts/nat.h [68:121]


inline size_t natSize(unsigned char b0) {
  static constexpr unsigned char natSizes[] = {
      1, 1, 1, 1, 1, 1, 1, 1, //
      1, 1, 1, 1, 1, 1, 1, 1, //
      1, 1, 1, 1, 1, 1, 1, 1, //
      1, 1, 1, 1, 1, 1, 1, 1, //
      1, 1, 1, 1, 1, 1, 1, 1, //
      1, 1, 1, 1, 1, 1, 1, 1, //
      1, 1, 1, 1, 1, 1, 1, 1, //
      1, 1, 1, 1, 1, 1, 1, 1, //
      1, 1, 1, 1, 1, 1, 1, 1, //
      1, 1, 1, 1, 1, 1, 1, 1, //
      1, 1, 1, 1, 1, 1, 1, 1, //
      1, 1, 1, 1, 1, 1, 1, 1, //
      1, 1, 1, 1, 1, 1, 1, 1, //
      1, 1, 1, 1, 1, 1, 1, 1, //
      1, 1, 1, 1, 1, 1, 1, 1, //
      1, 1, 1, 1, 1, 1, 1, 1, //
      2, 2, 2, 2, 2, 2, 2, 2, //
      2, 2, 2, 2, 2, 2, 2, 2, //
      2, 2, 2, 2, 2, 2, 2, 2, //
      2, 2, 2, 2, 2, 2, 2, 2, //
      2, 2, 2, 2, 2, 2, 2, 2, //
      2, 2, 2, 2, 2, 2, 2, 2, //
      2, 2, 2, 2, 2, 2, 2, 2, //
      2, 2, 2, 2, 2, 2, 2, 2, //
      3, 3, 3, 3, 3, 3, 3, 3, //
      3, 3, 3, 3, 3, 3, 3, 3, //
      3, 3, 3, 3, 3, 3, 3, 3, //
      3, 3, 3, 3, 3, 3, 3, 3, //
      4, 4, 4, 4, 4, 4, 4, 4, //
      4, 4, 4, 4, 4, 4, 4, 4, //
      5, 5, 5, 5, 5, 5, 5, 5, //
      6, 6, 6, 6, 7, 7, 8, 9, //
  };

  // NOTE: For smaller numbers, this benchmarks as significantly faster than
  // just
  //   return natSizes[b0]
  // I'm actually not entirely sure why.
  if (b0 < 0x80) {
    return 1;
  } else if (b0 < 0xC0) {
    return 2;
  } else if (b0 < 0xE0) {
    return 3;
  } else if (b0 < 0xF0) {
    return 4;
  } else if (b0 < 0xF8) {
    return 5;
  } else {
    return natSizes[b0];
  }
}