Class CharBasedPNameTable


  • public class CharBasedPNameTable
    extends NameTable
    This is a symbol table implementation used for storing byte-based PNames, specifically, instances of (PNameC).
    • 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 to mBuckets.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  
    • 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()  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • _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 to mBuckets.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.
    • 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.

      • size

        public int size()
        Specified by:
        size in class NameTable
      • 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 class NameTable
      • 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.