Package com.fasterxml.aalto.in
Class CharBasedPNameTable
- java.lang.Object
-
- com.fasterxml.aalto.util.NameTable
-
- com.fasterxml.aalto.in.CharBasedPNameTable
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
CharBasedPNameTable.Bucket
This class is a symbol table entry.
-
Field Summary
Fields Modifier and Type Field Description protected CharBasedPNameTable.Bucket[]
_buckets
Overflow buckets; if primary doesn't match, lookup is done from here.protected boolean
_dirty
Flag that indicates if any changes have been made to the data; used to both determine if bucket array needs to be copied when (first) change is made, and potentially if updated bucket list is to be resync'ed back to master instance.protected int
_indexMask
Mask used to get index from hash values; equal tomBuckets.length - 1
, when mBuckets.length is a power of two.protected int
_size
Current size (number of entries); needed to know if and when rehash.protected int
_sizeThreshold
Limit that indicates maximum size this instance can hold before it needs to be expanded and rehashed.protected PNameC[]
_symbols
Primary matching symbols; it's expected most match occur from here.protected static float
DEFAULT_FILL_FACTOR
(package private) static int
MIN_HASH_SIZE
-
Constructor Summary
Constructors Constructor Description CharBasedPNameTable(int initialSize)
Main method for constructing a master symbol table instance; will be called by other public constructors.CharBasedPNameTable(CharBasedPNameTable parent)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description PNameC
addSymbol(char[] buffer, int start, int len, int hash)
private void
copyArrays()
Method called when copy-on-write is needed; generally when first change is made to a derived symbol table.PNameC
findSymbol(char[] buffer, int start, int len, int hash)
boolean
maybeDirty()
Method called to check to quickly see if a child symbol table may have gotten additional entries.void
mergeFromChild(CharBasedPNameTable child)
Method that allows contents of child table to potentially be "merged in" with contents of this symbol table.private void
rehash()
Method called when size (number of entries) of symbol table grows so big that load factor is exceeded.int
size()
-
-
-
Field Detail
-
MIN_HASH_SIZE
static final int MIN_HASH_SIZE
- See Also:
- Constant Field Values
-
DEFAULT_FILL_FACTOR
protected static final float DEFAULT_FILL_FACTOR
- See Also:
- Constant Field Values
-
_symbols
protected PNameC[] _symbols
Primary matching symbols; it's expected most match occur from here.
-
_buckets
protected CharBasedPNameTable.Bucket[] _buckets
Overflow buckets; if primary doesn't match, lookup is done from here.Note: Number of buckets is half of number of symbol entries, on assumption there's less need for buckets.
-
_size
protected int _size
Current size (number of entries); needed to know if and when rehash.
-
_sizeThreshold
protected int _sizeThreshold
Limit that indicates maximum size this instance can hold before it needs to be expanded and rehashed. Calculated using fill factor passed in to constructor.
-
_indexMask
protected int _indexMask
Mask used to get index from hash values; equal tomBuckets.length - 1
, when mBuckets.length is a power of two.
-
_dirty
protected boolean _dirty
Flag that indicates if any changes have been made to the data; used to both determine if bucket array needs to be copied when (first) change is made, and potentially if updated bucket list is to be resync'ed back to master instance.
-
-
Constructor Detail
-
CharBasedPNameTable
public CharBasedPNameTable(int initialSize)
Main method for constructing a master symbol table instance; will be called by other public constructors.- Parameters:
initialSize
- Minimum initial size for bucket array; internally will always use a power of two equal to or bigger than this value.
-
CharBasedPNameTable
CharBasedPNameTable(CharBasedPNameTable parent)
-
-
Method Detail
-
mergeFromChild
public void mergeFromChild(CharBasedPNameTable child)
Method that allows contents of child table to potentially be "merged in" with contents of this symbol table.Note that caller has to make sure symbol table passed in is really a child or sibling of this symbol table.
-
maybeDirty
public boolean maybeDirty()
Description copied from class:NameTable
Method called to check to quickly see if a child symbol table may have gotten additional entries. Used for checking to see if a child table should be merged into shared table.- Specified by:
maybeDirty
in classNameTable
-
findSymbol
public PNameC findSymbol(char[] buffer, int start, int len, int hash)
-
addSymbol
public PNameC addSymbol(char[] buffer, int start, int len, int hash)
-
copyArrays
private void copyArrays()
Method called when copy-on-write is needed; generally when first change is made to a derived symbol table.
-
rehash
private void rehash()
Method called when size (number of entries) of symbol table grows so big that load factor is exceeded. Since size has to remain power of two, arrays will then always be doubled. Main work is really redistributing old entries into new String/Bucket entries.
-
-