Class ThreadSafeSlotMapContainer

java.lang.Object
org.htmlunit.corejs.javascript.SlotMapContainer
org.htmlunit.corejs.javascript.ThreadSafeSlotMapContainer
All Implemented Interfaces:
Iterable<Slot>, SlotMap

class ThreadSafeSlotMapContainer extends SlotMapContainer
This class extends the SlotMapContainer so that we have thread-safe access to all the properties of an object.
  • Field Details

  • Constructor Details

    • ThreadSafeSlotMapContainer

      ThreadSafeSlotMapContainer()
    • ThreadSafeSlotMapContainer

      ThreadSafeSlotMapContainer(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
      Overrides:
      size in class SlotMapContainer
    • dirtySize

      public int dirtySize()
      Overrides:
      dirtySize in class SlotMapContainer
    • isEmpty

      public boolean isEmpty()
      Description copied from interface: SlotMap
      Return whether the map is empty.
      Specified by:
      isEmpty in interface SlotMap
      Overrides:
      isEmpty in class SlotMapContainer
    • 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
      Overrides:
      modify in class SlotMapContainer
      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
      Overrides:
      replace in class SlotMapContainer
    • 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
      Overrides:
      query in class SlotMapContainer
      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
      Overrides:
      add in class SlotMapContainer
    • 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
      Overrides:
      remove in class SlotMapContainer
      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.
    • readLock

      public long readLock()
      Take out a read lock on the slot map, if locking is implemented. The caller MUST call this method before using the iterator, and MUST NOT call this method otherwise.
      Overrides:
      readLock in class SlotMapContainer
    • unlockRead

      public void unlockRead(long stamp)
      Unlock the lock taken out by readLock.
      Overrides:
      unlockRead in class SlotMapContainer
      Parameters:
      stamp - the value returned by readLock.
    • iterator

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