Class SlotMapContainer

  • All Implemented Interfaces:
    java.lang.Iterable<ScriptableObject.Slot>, SlotMap
    Direct Known Subclasses:
    ThreadSafeSlotMapContainer

    class SlotMapContainer
    extends java.lang.Object
    implements SlotMap
    This class holds the various SlotMaps of various types, and knows how to atomically switch between them when we need to so that we use the right data structure at the right time.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private static int LARGE_HASH_SIZE
      Once the object has this many properties in it, we will replace the EmbeddedSlotMap with HashSlotMap.
      protected SlotMap map  
    • Constructor Summary

      Constructors 
      Constructor Description
      SlotMapContainer​(int initialSize)  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addSlot​(ScriptableObject.Slot newSlot)
      Insert a new slot to the map.
      protected void checkMapSize()
      Before inserting a new item in the map, check and see if we need to expand from the embedded map to a HashMap that is more robust against large numbers of hash collisions.
      int dirtySize()  
      ScriptableObject.Slot get​(java.lang.Object key, int index, ScriptableObject.SlotAccess accessType)
      Return the Slot that matches EITHER "key" or "index".
      boolean isEmpty()
      Return whether the map is empty.
      java.util.Iterator<ScriptableObject.Slot> iterator()  
      ScriptableObject.Slot query​(java.lang.Object key, int index)
      This is an optimization that is the same as get with an accessType of SLOT_QUERY.
      long readLock()  
      void remove​(java.lang.Object key, int index)
      Remove the slot at either "key" or "index".
      int size()
      Return the size of the map.
      void unlockRead​(long stamp)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface java.lang.Iterable

        forEach, spliterator
    • Field Detail

      • LARGE_HASH_SIZE

        private static final int LARGE_HASH_SIZE
        Once the object has this many properties in it, we will replace the EmbeddedSlotMap with HashSlotMap. We can adjust this parameter to balance performance for typical objects versus performance for huge objects with many collisions.
        See Also:
        Constant Field Values
    • Constructor Detail

      • SlotMapContainer

        SlotMapContainer​(int initialSize)
    • Method Detail

      • size

        public int size()
        Description copied from interface: SlotMap
        Return the size of the map.
        Specified by:
        size in interface SlotMap
      • dirtySize

        public int dirtySize()
      • isEmpty

        public boolean isEmpty()
        Description copied from interface: SlotMap
        Return whether the map is empty.
        Specified by:
        isEmpty in interface SlotMap
      • get

        public ScriptableObject.Slot get​(java.lang.Object key,
                                         int index,
                                         ScriptableObject.SlotAccess accessType)
        Description copied from interface: SlotMap
        Return the Slot that matches EITHER "key" or "index". (It will use "key" if it is not null, and otherwise "index". "accessType" is one of the constants defined in ScriptableObject.
        Specified by:
        get in interface SlotMap
      • query

        public ScriptableObject.Slot query​(java.lang.Object key,
                                           int index)
        Description copied from interface: SlotMap
        This is an optimization that is the same as get with an accessType of SLOT_QUERY. It should be used instead of SLOT_QUERY because it is more efficient.
        Specified by:
        query in interface SlotMap
      • addSlot

        public void addSlot​(ScriptableObject.Slot newSlot)
        Description copied from interface: SlotMap
        Insert a new slot to the map. Both "name" and "indexOrHash" must be populated. Note that ScriptableObject generally adds slots via the "get" method.
        Specified by:
        addSlot in interface SlotMap
      • remove

        public void remove​(java.lang.Object key,
                           int index)
        Description copied from interface: SlotMap
        Remove the slot at either "key" or "index".
        Specified by:
        remove in interface SlotMap
      • readLock

        public long readLock()
      • unlockRead

        public void unlockRead​(long stamp)
      • checkMapSize

        protected void checkMapSize()
        Before inserting a new item in the map, check and see if we need to expand from the embedded map to a HashMap that is more robust against large numbers of hash collisions.