org.codehaus.stax2.ri.typed
Class DefaultValueDecoder

java.lang.Object
  extended by org.codehaus.stax2.typed.ValueDecoder
      extended by org.codehaus.stax2.ri.typed.DefaultValueDecoder

public class DefaultValueDecoder
extends ValueDecoder

Default implementation that strives for correctness and reasonable efficiency (at least for simple types). To simplify implementation, decoders are stateful.

Author:
Tatu Saloranta

Field Summary
protected  int mEnd
          Pointer to the pointer in lexical value after last included character.
protected  int mPtr
          Pointer to the next character to check, within lexical value
protected  java.lang.String mType
           
protected  char[] mValueBuffer
           
 
Constructor Summary
DefaultValueDecoder()
           
 
Method Summary
protected  boolean allWhitespace(char[] lexical, int start, int end)
           
protected  boolean allWhitespace(java.lang.String lexical, int start, int end)
           
 boolean decodeBoolean(char[] lexical, int start, int end)
           
 boolean decodeBoolean(java.lang.String lexical, int start, int end)
           
 java.math.BigDecimal decodeDecimal(char[] lexical, int start, int end)
           
 java.math.BigDecimal decodeDecimal(java.lang.String lexical, int start, int end)
           
 double decodeDouble(char[] lexical, int start, int end)
           
 double decodeDouble(java.lang.String lexical, int start, int end)
           
 float decodeFloat(char[] lexical, int start, int end)
           
 float decodeFloat(java.lang.String lexical, int start, int end)
           
 int decodeInt(char[] lexical, int start, int end)
           
 int decodeInt(java.lang.String lexical, int start, int end)
           
 long decodeLong(char[] lexical, int start, int end)
           
 long decodeLong(java.lang.String lexical, int start, int end)
           
protected  java.lang.String lexicalDesc(char[] lexical, int startOffset)
           
protected  java.lang.String lexicalDesc(java.lang.String lexical, int startOffset)
           
protected static int parseInt(char[] digitChars, int start, int end)
          Fast method for parsing integers that are known to fit into regular 32-bit signed int type.
protected static int parseInt(int num, char[] digitChars, int start, int end)
           
protected static int parseInt(int num, java.lang.String digitChars, int start, int end)
           
protected static int parseInt(java.lang.String digitChars, int start, int end)
           
static long parseLong(char[] digitChars, int start, int end)
           
static long parseLong(java.lang.String digitChars, int start, int end)
           
protected  void reportInvalidValue(char[] lexical, int startOffset)
           
protected  void reportInvalidValue(java.lang.String lexical)
           
protected  void reportInvalidValue(java.lang.String lexical, int startOffset)
           
protected  void reportMissingValue()
           
protected  char resetAndTrimLeading(char[] lexical, java.lang.String type, int start, int end)
           
protected  char resetAndTrimLeading(java.lang.String lexical, java.lang.String type, int start, int end)
           
protected  int skipSignAndZeroes(char[] lexical, char ch, boolean hasSign)
           
protected  int skipSignAndZeroes(java.lang.String lexical, char ch, boolean hasSign)
           
protected  int trimTrailingAndCheckDigits(char[] lexical)
           
protected  int trimTrailingAndCheckDigits(java.lang.String lexical)
          Method called to check that remaining String consists of zero or more digits, followed by zero or more white space, and nothing else; and to trim trailing white space, if any.
 
Methods inherited from class org.codehaus.stax2.typed.ValueDecoder
decodeBoolean, decodeInt, decodeLong
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

mType

protected java.lang.String mType

mValueBuffer

protected char[] mValueBuffer

mPtr

protected int mPtr
Pointer to the next character to check, within lexical value


mEnd

protected int mEnd
Pointer to the pointer in lexical value after last included character.

Constructor Detail

DefaultValueDecoder

public DefaultValueDecoder()
Method Detail

decodeInt

public int decodeInt(java.lang.String lexical,
                     int start,
                     int end)
              throws java.lang.IllegalArgumentException
Specified by:
decodeInt in class ValueDecoder
Throws:
java.lang.IllegalArgumentException

decodeInt

public int decodeInt(char[] lexical,
                     int start,
                     int end)
              throws java.lang.IllegalArgumentException
Specified by:
decodeInt in class ValueDecoder
Throws:
java.lang.IllegalArgumentException

decodeLong

public long decodeLong(java.lang.String lexical,
                       int start,
                       int end)
                throws java.lang.IllegalArgumentException
Specified by:
decodeLong in class ValueDecoder
Throws:
java.lang.IllegalArgumentException

decodeLong

public long decodeLong(char[] lexical,
                       int start,
                       int end)
                throws java.lang.IllegalArgumentException
Specified by:
decodeLong in class ValueDecoder
Throws:
java.lang.IllegalArgumentException

decodeFloat

public float decodeFloat(java.lang.String lexical,
                         int start,
                         int end)
                  throws java.lang.IllegalArgumentException
Throws:
java.lang.IllegalArgumentException

decodeFloat

public float decodeFloat(char[] lexical,
                         int start,
                         int end)
                  throws java.lang.IllegalArgumentException
Throws:
java.lang.IllegalArgumentException

decodeDouble

public double decodeDouble(java.lang.String lexical,
                           int start,
                           int end)
                    throws java.lang.IllegalArgumentException
Throws:
java.lang.IllegalArgumentException

decodeDouble

public double decodeDouble(char[] lexical,
                           int start,
                           int end)
                    throws java.lang.IllegalArgumentException
Throws:
java.lang.IllegalArgumentException

decodeDecimal

public java.math.BigDecimal decodeDecimal(java.lang.String lexical,
                                          int start,
                                          int end)
                                   throws java.lang.IllegalArgumentException
Throws:
java.lang.IllegalArgumentException

decodeDecimal

public java.math.BigDecimal decodeDecimal(char[] lexical,
                                          int start,
                                          int end)
                                   throws java.lang.IllegalArgumentException
Throws:
java.lang.IllegalArgumentException

decodeBoolean

public boolean decodeBoolean(java.lang.String lexical,
                             int start,
                             int end)
                      throws java.lang.IllegalArgumentException
Specified by:
decodeBoolean in class ValueDecoder
Throws:
java.lang.IllegalArgumentException

decodeBoolean

public boolean decodeBoolean(char[] lexical,
                             int start,
                             int end)
                      throws java.lang.IllegalArgumentException
Specified by:
decodeBoolean in class ValueDecoder
Throws:
java.lang.IllegalArgumentException

resetAndTrimLeading

protected char resetAndTrimLeading(java.lang.String lexical,
                                   java.lang.String type,
                                   int start,
                                   int end)
Parameters:
start - First character of the lexical value to process
end - Pointer character after last valid character of the lexical value
Returns:
First non-white space character from the String

resetAndTrimLeading

protected char resetAndTrimLeading(char[] lexical,
                                   java.lang.String type,
                                   int start,
                                   int end)

trimTrailingAndCheckDigits

protected int trimTrailingAndCheckDigits(java.lang.String lexical)
Method called to check that remaining String consists of zero or more digits, followed by zero or more white space, and nothing else; and to trim trailing white space, if any.

Returns:
Number of valid digits found; or -1 to indicate invalid input

trimTrailingAndCheckDigits

protected int trimTrailingAndCheckDigits(char[] lexical)

skipSignAndZeroes

protected int skipSignAndZeroes(java.lang.String lexical,
                                char ch,
                                boolean hasSign)
Returns:
Numeric value of the first non-zero character (or, in case of a zero value, zero)

skipSignAndZeroes

protected int skipSignAndZeroes(char[] lexical,
                                char ch,
                                boolean hasSign)

allWhitespace

protected final boolean allWhitespace(java.lang.String lexical,
                                      int start,
                                      int end)

allWhitespace

protected final boolean allWhitespace(char[] lexical,
                                      int start,
                                      int end)

reportMissingValue

protected void reportMissingValue()

reportInvalidValue

protected void reportInvalidValue(java.lang.String lexical)

reportInvalidValue

protected void reportInvalidValue(java.lang.String lexical,
                                  int startOffset)

reportInvalidValue

protected void reportInvalidValue(char[] lexical,
                                  int startOffset)

lexicalDesc

protected java.lang.String lexicalDesc(char[] lexical,
                                       int startOffset)

lexicalDesc

protected java.lang.String lexicalDesc(java.lang.String lexical,
                                       int startOffset)

parseInt

protected static final int parseInt(char[] digitChars,
                                    int start,
                                    int end)
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)

Returns:
Parsed integer value

parseInt

protected static final int parseInt(int num,
                                    char[] digitChars,
                                    int start,
                                    int end)

parseInt

protected static final int parseInt(java.lang.String digitChars,
                                    int start,
                                    int end)

parseInt

protected static final int parseInt(int num,
                                    java.lang.String digitChars,
                                    int start,
                                    int end)

parseLong

public static final long parseLong(char[] digitChars,
                                   int start,
                                   int end)

parseLong

public static final long parseLong(java.lang.String digitChars,
                                   int start,
                                   int end)