Class SlotMapContainer

java.lang.Object
org.mozilla.javascript.SlotMapContainer
All Implemented Interfaces:
Iterable<Slot>, SlotMap
Direct Known Subclasses:
ThreadSafeSlotMapContainer

class SlotMapContainer extends 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 Details

    • 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:
    • DEFAULT_SIZE

      private static final int DEFAULT_SIZE
      See Also:
    • map

      protected SlotMap map
  • Constructor Details

    • SlotMapContainer

      SlotMapContainer()
    • SlotMapContainer

      SlotMapContainer(int initialSize)
  • Method Details

    • 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
    • modify

      public Slot modify(Object key, int index, int attributes)
      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".) If no slot exists, then create a default slot class.
      Specified by:
      modify in interface SlotMap
      Parameters:
      key - The key for the slot, which should be a String or a Symbol.
      index - if key is zero, then this will be used as the key instead.
      attributes - the attributes to be set on the slot if a new slot is created. Existing slots will not be modified.
      Returns:
      a Slot, which will be created anew if no such slot exists.
    • replace

      public void replace(Slot oldSlot, Slot newSlot)
      Description copied from interface: SlotMap
      Replace "slot" with a new slot. This is used to change slot types.
      Specified by:
      replace in interface SlotMap
    • query

      public Slot query(Object key, int index)
      Description copied from interface: SlotMap
      Retrieve the slot at EITHER key or index, or return null if the slot cannot be found.
      Specified by:
      query in interface SlotMap
      Parameters:
      key - The key for the slot, which should be a String or a Symbol.
      index - if key is zero, then this will be used as the key instead.
      Returns:
      either the Slot that matched the key and index, or null
    • add

      public void add(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 "modify" method.
      Specified by:
      add in interface SlotMap
    • remove

      public void remove(Object key, int index)
      Description copied from interface: SlotMap
      Remove the slot at either "key" or "index".
      Specified by:
      remove in interface SlotMap
      Parameters:
      key - The key for the slot, which should be a String or a Symbol.
      index - if key is zero, then this will be used as the key instead.
    • iterator

      public Iterator<Slot> iterator()
      Specified by:
      iterator in interface Iterable<Slot>
    • 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.