// 
// Decompiled by Procyon v0.6.0
// 

package ch.randelshofer.fastdoubleparser;

public final class JavaDoubleParser
{
    private static final JavaDoubleBitsFromByteArray BYTE_ARRAY_PARSER;
    private static final JavaDoubleBitsFromCharArray CHAR_ARRAY_PARSER;
    private static final JavaDoubleBitsFromCharSequence CHAR_SEQUENCE_PARSER;
    
    private JavaDoubleParser() {
    }
    
    public static double parseDouble(final CharSequence str) throws NumberFormatException {
        return parseDouble(str, 0, str.length());
    }
    
    public static double parseDouble(final CharSequence str, final int offset, final int length) throws NumberFormatException {
        final long bitPattern = JavaDoubleParser.CHAR_SEQUENCE_PARSER.parseFloatingPointLiteral(str, offset, length);
        if (bitPattern == 9221120237041090561L) {
            throw new NumberFormatException("illegal syntax");
        }
        return Double.longBitsToDouble(bitPattern);
    }
    
    public static double parseDouble(final byte[] str) throws NumberFormatException {
        return parseDouble(str, 0, str.length);
    }
    
    public static double parseDouble(final byte[] str, final int offset, final int length) throws NumberFormatException {
        final long bitPattern = JavaDoubleParser.BYTE_ARRAY_PARSER.parseFloatingPointLiteral(str, offset, length);
        if (bitPattern == 9221120237041090561L) {
            throw new NumberFormatException("illegal syntax");
        }
        return Double.longBitsToDouble(bitPattern);
    }
    
    public static double parseDouble(final char[] str) throws NumberFormatException {
        return parseDouble(str, 0, str.length);
    }
    
    public static double parseDouble(final char[] str, final int offset, final int length) throws NumberFormatException {
        final long bitPattern = JavaDoubleParser.CHAR_ARRAY_PARSER.parseFloatingPointLiteral(str, offset, length);
        if (bitPattern == 9221120237041090561L) {
            throw new NumberFormatException("illegal syntax");
        }
        return Double.longBitsToDouble(bitPattern);
    }
    
    static {
        BYTE_ARRAY_PARSER = new JavaDoubleBitsFromByteArray();
        CHAR_ARRAY_PARSER = new JavaDoubleBitsFromCharArray();
        CHAR_SEQUENCE_PARSER = new JavaDoubleBitsFromCharSequence();
    }
}
