Class ByteQuadsCanonicalizer


  • public final class ByteQuadsCanonicalizer
    extends java.lang.Object
    Replacement for BytesToNameCanonicalizer which aims at more localized memory access due to flattening of name quad data. Performance improvement modest for simple JSON document data binding (maybe 3%), but should help more for larger symbol tables, or for binary formats like Smile.

    Hash area is divided into 4 sections:

    1. Primary area (1/2 of total size), direct match from hash (LSB)
    2. Secondary area (1/4 of total size), match from hash (LSB) >> 1
    3. Tertiary area (1/8 of total size), match from hash (LSB) >> 2
    4. Spill-over area (remaining 1/8) with linear scan, insertion order
    and within every area, entries are 4 ints, where 1 - 3 ints contain 1 - 12 UTF-8 encoded bytes of name (null-padded), and last int is offset in _names that contains actual name Strings.
    Since:
    2.6
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      java.lang.String addName​(java.lang.String name, int q1)  
      java.lang.String addName​(java.lang.String name, int[] q, int qlen)  
      java.lang.String addName​(java.lang.String name, int q1, int q2)  
      java.lang.String addName​(java.lang.String name, int q1, int q2, int q3)  
      int bucketCount()
      Returns number of primary slots table has currently
      int calcHash​(int q1)  
      int calcHash​(int[] q, int qlen)  
      int calcHash​(int q1, int q2)  
      int calcHash​(int q1, int q2, int q3)  
      static ByteQuadsCanonicalizer createRoot()
      Factory method to call to create a symbol table instance with a randomized seed value.
      java.lang.String findName​(int q1)  
      java.lang.String findName​(int[] q, int qlen)  
      java.lang.String findName​(int q1, int q2)  
      java.lang.String findName​(int q1, int q2, int q3)  
      int hashSeed()  
      ByteQuadsCanonicalizer makeChild​(int flags)
      Factory method used to create actual symbol table instance to use for parsing.
      boolean maybeDirty()
      Method called to check to quickly see if a child symbol table may have gotten additional entries.
      int primaryCount()
      Method mostly needed by unit tests; calculates number of entries that are in the primary slot set.
      void release()
      Method called by the using code to indicate it is done with this instance.
      int secondaryCount()
      Method mostly needed by unit tests; calculates number of entries in secondary buckets
      int size()  
      int spilloverCount()
      Method mostly needed by unit tests; calculates number of entries in shared spillover area
      int tertiaryCount()
      Method mostly needed by unit tests; calculates number of entries in tertiary buckets
      java.lang.String toString()  
      int totalCount()  
      • Methods inherited from class java.lang.Object

        equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Method Detail

      • createRoot

        public static ByteQuadsCanonicalizer createRoot()
        Factory method to call to create a symbol table instance with a randomized seed value.
      • makeChild

        public ByteQuadsCanonicalizer makeChild​(int flags)
        Factory method used to create actual symbol table instance to use for parsing.
      • release

        public void release()
        Method called by the using code to indicate it is done with this instance. This lets instance merge accumulated changes into parent (if need be), safely and efficiently, and without calling code having to know about parent information.
      • size

        public int size()
      • bucketCount

        public int bucketCount()
        Returns number of primary slots table has currently
      • maybeDirty

        public boolean maybeDirty()
        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.
      • hashSeed

        public int hashSeed()
      • primaryCount

        public int primaryCount()
        Method mostly needed by unit tests; calculates number of entries that are in the primary slot set. These are "perfect" entries, accessible with a single lookup
      • secondaryCount

        public int secondaryCount()
        Method mostly needed by unit tests; calculates number of entries in secondary buckets
      • tertiaryCount

        public int tertiaryCount()
        Method mostly needed by unit tests; calculates number of entries in tertiary buckets
      • spilloverCount

        public int spilloverCount()
        Method mostly needed by unit tests; calculates number of entries in shared spillover area
      • totalCount

        public int totalCount()
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • findName

        public java.lang.String findName​(int q1)
      • findName

        public java.lang.String findName​(int q1,
                                         int q2)
      • findName

        public java.lang.String findName​(int q1,
                                         int q2,
                                         int q3)
      • findName

        public java.lang.String findName​(int[] q,
                                         int qlen)
      • addName

        public java.lang.String addName​(java.lang.String name,
                                        int q1)
      • addName

        public java.lang.String addName​(java.lang.String name,
                                        int q1,
                                        int q2)
      • addName

        public java.lang.String addName​(java.lang.String name,
                                        int q1,
                                        int q2,
                                        int q3)
      • addName

        public java.lang.String addName​(java.lang.String name,
                                        int[] q,
                                        int qlen)
      • calcHash

        public int calcHash​(int q1)
      • calcHash

        public int calcHash​(int q1,
                            int q2)
      • calcHash

        public int calcHash​(int q1,
                            int q2,
                            int q3)
      • calcHash

        public int calcHash​(int[] q,
                            int qlen)