Package com.fasterxml.aalto.in
Class AttributeCollector
- java.lang.Object
-
- com.fasterxml.aalto.in.AttributeCollector
-
public final class AttributeCollector extends java.lang.Object
Object used by the tokenizer to collect and store information about attributes, specifically, names and values.
-
-
Field Summary
Fields Modifier and Type Field Description private java.lang.String
_allAttrValues
Concatenated String that contains all the attribute values for the element.private int
_attrCount
Number of attributes currently held by this collector.protected int[]
_attrMap
Int-based compact data structure that contains mapping from attribute names to attribute indexes in the main attribute name array.(package private) ReaderConfig
_config
private java.lang.String
_errorMsg
For some errors, we'll have to temporarily store error message, to be thrown at a later point.protected int
_hashAreaSize
Size of hash area in_attrMap
; generally at least 20% more than number of attributes (_attrCount
).private PName[]
_names
private boolean
_needToResetValues
Flag used to indicate that all attribute values for an element have been parsed, and that next call tostartNewValue
should reset the value structuresprotected int
_spillAreaEnd
Pointer to int slot right after last spill entry, in_attrMap
array.private char[]
_valueBuffer
Consequtive character array, in which attribute values are concatenated inprivate int[]
_valueOffsets
Array that contains ending offsets of the values in the shared buffer.private static int
DEFAULT_BUFFER_LENGTH
The default length of the value buffer is also chosen more to minimize overhead than to eliminate all need for resizing.private static int
DEFAULT_ENTRY_COUNT
Let's guess that most of the time there won't be more than 12 attributes.private static int
INT_SPACE
-
Constructor Summary
Constructors Modifier Constructor Description protected
AttributeCollector(ReaderConfig cfg)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private boolean
checkExpand(org.codehaus.stax2.typed.TypedArrayDecoder tad)
Internal method used to see if we can expand the buffer that the array decoder has.char[]
continueValue()
byte[]
decodeBinaryValue(int index, org.codehaus.stax2.typed.Base64Variant v, org.codehaus.stax2.ri.typed.CharArrayBase64Decoder dec, XmlScanner scanner)
void
decodeValue(int index, org.codehaus.stax2.typed.TypedValueDecoder dec)
int
decodeValues(int index, org.codehaus.stax2.typed.TypedArrayDecoder dec, XmlScanner scanner)
private int
decodeValues(org.codehaus.stax2.typed.TypedArrayDecoder dec, char[] buf, int ptr, int end, XmlScanner scanner)
int
findIndex(java.lang.String nsUri, java.lang.String localName)
int
finishLastValue(int endingOffset)
Method called after all attribute entries have been parsed, and thus the end of the last value in the buffer is known.int
finishLastValue2()
int
getCount()
java.lang.String
getErrorMsg()
PName
getName(int index)
javax.xml.namespace.QName
getQName(int index)
java.lang.String
getValue(int index)
java.lang.String
getValue(java.lang.String nsUri, java.lang.String localName)
private static boolean
isSpace(char c)
private void
noteDupAttr(int ix1, int ix2)
char[]
startNewValue(PName attrName, int currOffset)
Method called by the parser right after attribute name has been parsed, but before value has been parsed.char[]
valueBufferFull()
Method called by the owner, when the
-
-
-
Field Detail
-
INT_SPACE
private static final int INT_SPACE
- See Also:
- Constant Field Values
-
DEFAULT_ENTRY_COUNT
private static final int DEFAULT_ENTRY_COUNT
Let's guess that most of the time there won't be more than 12 attributes. Since the underlying buffer will be expanded as necessary, exact value is chosen to minimize overhead rather than eliminate any resizing.- See Also:
- Constant Field Values
-
DEFAULT_BUFFER_LENGTH
private static final int DEFAULT_BUFFER_LENGTH
The default length of the value buffer is also chosen more to minimize overhead than to eliminate all need for resizing.- See Also:
- Constant Field Values
-
_config
final ReaderConfig _config
-
_attrCount
private int _attrCount
Number of attributes currently held by this collector.
-
_names
private PName[] _names
-
_valueBuffer
private char[] _valueBuffer
Consequtive character array, in which attribute values are concatenated in
-
_attrMap
protected int[] _attrMap
Int-based compact data structure that contains mapping from attribute names to attribute indexes in the main attribute name array.Data structure contains two separate areas; main hash area (with size
_hashAreaSize
), and remaining spillover area that follows hash area up until (but not including)_spillAreaEnd
index. Main hash area only contains indexes (index+1; 0 signifying empty slot) to actual attributes; spillover area has both hash and index for any spilled entry. Spilled entries are simply stored in order added, and need to be searched using linear search. In case of both primary hash hits and spills, eventual comparison with the local name needs to be done with actual name array.
-
_hashAreaSize
protected int _hashAreaSize
Size of hash area in_attrMap
; generally at least 20% more than number of attributes (_attrCount
).
-
_spillAreaEnd
protected int _spillAreaEnd
Pointer to int slot right after last spill entry, in_attrMap
array.
-
_valueOffsets
private int[] _valueOffsets
Array that contains ending offsets of the values in the shared buffer. Entries contain character offset after the end of the matching offset; so entry 0 for example contains starting offset of the entry 1.
-
_needToResetValues
private boolean _needToResetValues
Flag used to indicate that all attribute values for an element have been parsed, and that next call tostartNewValue
should reset the value structures
-
_errorMsg
private java.lang.String _errorMsg
For some errors, we'll have to temporarily store error message, to be thrown at a later point.
-
_allAttrValues
private java.lang.String _allAttrValues
Concatenated String that contains all the attribute values for the element. Allows some buffer reuse, and should result in slight speed optimization, for elements with lots of attributes that are usually all (or none) accessed.
-
-
Constructor Detail
-
AttributeCollector
protected AttributeCollector(ReaderConfig cfg)
-
-
Method Detail
-
startNewValue
public char[] startNewValue(PName attrName, int currOffset)
Method called by the parser right after attribute name has been parsed, but before value has been parsed.- Returns:
- Underlying character buffer to use for storing attribute value characters
-
continueValue
public char[] continueValue()
-
finishLastValue
public final int finishLastValue(int endingOffset)
Method called after all attribute entries have been parsed, and thus the end of the last value in the buffer is known.- Returns:
- Number of attributes collected
-
finishLastValue2
public final int finishLastValue2()
-
valueBufferFull
public char[] valueBufferFull()
Method called by the owner, when the
-
getCount
public final int getCount()
-
getName
public final PName getName(int index)
-
getQName
public final javax.xml.namespace.QName getQName(int index)
-
getValue
public java.lang.String getValue(int index)
-
getValue
public java.lang.String getValue(java.lang.String nsUri, java.lang.String localName)
-
findIndex
public int findIndex(java.lang.String nsUri, java.lang.String localName)
-
getErrorMsg
public java.lang.String getErrorMsg()
-
decodeValue
public final void decodeValue(int index, org.codehaus.stax2.typed.TypedValueDecoder dec) throws java.lang.IllegalArgumentException
- Throws:
java.lang.IllegalArgumentException
-
decodeValues
public final int decodeValues(int index, org.codehaus.stax2.typed.TypedArrayDecoder dec, XmlScanner scanner) throws javax.xml.stream.XMLStreamException
- Throws:
javax.xml.stream.XMLStreamException
-
decodeValues
private final int decodeValues(org.codehaus.stax2.typed.TypedArrayDecoder dec, char[] buf, int ptr, int end, XmlScanner scanner) throws javax.xml.stream.XMLStreamException
- Throws:
javax.xml.stream.XMLStreamException
-
decodeBinaryValue
public byte[] decodeBinaryValue(int index, org.codehaus.stax2.typed.Base64Variant v, org.codehaus.stax2.ri.typed.CharArrayBase64Decoder dec, XmlScanner scanner) throws javax.xml.stream.XMLStreamException
- Throws:
javax.xml.stream.XMLStreamException
-
isSpace
private static final boolean isSpace(char c)
-
checkExpand
private final boolean checkExpand(org.codehaus.stax2.typed.TypedArrayDecoder tad)
Internal method used to see if we can expand the buffer that the array decoder has. Bit messy, but simpler than having separately typed instances; and called rarely so that performance downside of instanceof is irrelevant.
-
noteDupAttr
private void noteDupAttr(int ix1, int ix2)
-
-