Class CompoundOperationMap<T extends PropHolder<T>>

java.lang.Object
org.htmlunit.corejs.javascript.CompoundOperationMap<T>
All Implemented Interfaces:
AutoCloseable, Iterable<Slot<T>>, SlotMap<T>

public class CompoundOperationMap<T extends PropHolder<T>> extends Object implements SlotMap<T>, AutoCloseable
This class represents a compound operation performed on a non-thread safe map. As such it does the minimum work possible and does not enforce locking, instead it simply records whether the map has been mutated as part of the operation to allow the underlying map to delegate operations as required.
  • Field Details

  • Constructor Details

    • CompoundOperationMap

      public CompoundOperationMap(SlotMapOwner<T> owner)
  • Method Details

    • updateMap

      protected void updateMap(boolean resetTouched)
    • isTouched

      public boolean isTouched()
    • add

      public void add(SlotMapOwner<T> owner, Slot<T> 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<T extends PropHolder<T>>
    • compute

      public <S extends Slot<T>> S compute(SlotMapOwner<T> owner, Object key, int index, SlotMap.SlotComputer<S,T> compute)
      Description copied from interface: SlotMap
      Replace the value of key with the slot computed by the "compute" method. If "compute" throws an exception, make no change. If "compute" returns null, remove the mapping, otherwise, replace any existing mapping with the result of "compute", and create a new mapping if none exists. This is equivalent to the "compute" method on the Map interface, which simplifies code and is more efficient than making multiple calls to this interface. In order to allow use of multiple Slot subclasses, this function is templatized.
      Specified by:
      compute in interface SlotMap<T extends PropHolder<T>>
    • compute

      public <S extends Slot<T>> S compute(SlotMapOwner<T> owner, CompoundOperationMap<T> compoundOp, Object key, int index, SlotMap.SlotComputer<S,T> compute)
      Specified by:
      compute in interface SlotMap<T extends PropHolder<T>>
    • dirtySize

      public int dirtySize()
      Specified by:
      dirtySize in interface SlotMap<T extends PropHolder<T>>
    • isEmpty

      public boolean isEmpty()
      Description copied from interface: SlotMap
      Return whether the map is empty.
      Specified by:
      isEmpty in interface SlotMap<T extends PropHolder<T>>
    • modify

      public Slot<T> modify(SlotMapOwner<T> owner, 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<T extends PropHolder<T>>
      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.
    • query

      public Slot<T> 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<T extends PropHolder<T>>
      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
    • size

      public int size()
      Description copied from interface: SlotMap
      Return the size of the map.
      Specified by:
      size in interface SlotMap<T extends PropHolder<T>>
    • iterator

      public Iterator<Slot<T>> iterator()
      Specified by:
      iterator in interface Iterable<T extends PropHolder<T>>
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable