src.java.org.codehaus.jackson.io.NumberInput Maven / Gradle / Ivy
package org.codehaus.jackson.io;
public final class NumberInput
{
/**
* Constants needed for parsing longs from basic int parsing methods
*/
final static long L_BILLION = 1000000000;
/**
* Fast method for parsing integers that are known to fit into
* regular 32-bit signed int type. This means that length is
* between 1 and 9 digits (inclusive)
*
* Note: public to let unit tests call it
*/
public final static int parseInt(char[] digitChars, int offset, int len)
{
int num = digitChars[offset] - '0';
len += offset;
// This looks ugly, but appears the fastest way:
if (++offset < len) {
num = (num * 10) + (digitChars[offset] - '0');
if (++offset < len) {
num = (num * 10) + (digitChars[offset] - '0');
if (++offset < len) {
num = (num * 10) + (digitChars[offset] - '0');
if (++offset < len) {
num = (num * 10) + (digitChars[offset] - '0');
if (++offset < len) {
num = (num * 10) + (digitChars[offset] - '0');
if (++offset < len) {
num = (num * 10) + (digitChars[offset] - '0');
if (++offset < len) {
num = (num * 10) + (digitChars[offset] - '0');
if (++offset < len) {
num = (num * 10) + (digitChars[offset] - '0');
}
}
}
}
}
}
}
}
return num;
}
public final static long parseLong(char[] digitChars, int offset, int len)
{
// Note: caller must ensure length is [10, 18]
int len1 = len-9;
long val = parseInt(digitChars, offset, len1) * L_BILLION;
return val + (long) parseInt(digitChars, offset+len1, 9);
}
}