Module org.htmlunit.corejs
Package org.htmlunit.corejs.javascript
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.
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.htmlunit.corejs.javascript.SlotMap
SlotMap.SlotComputer<S extends Slot<T>,T extends PropHolder<T>> -
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidadd(SlotMapOwner<T> owner, Slot<T> newSlot) Insert a new slot to the map.voidclose()compute(SlotMapOwner<T> owner, Object key, int index, SlotMap.SlotComputer<S, T> compute) Replace the value of key with the slot computed by the "compute" method.compute(SlotMapOwner<T> owner, CompoundOperationMap<T> compoundOp, Object key, int index, SlotMap.SlotComputer<S, T> compute) intbooleanisEmpty()Return whether the map is empty.booleaniterator()modify(SlotMapOwner<T> owner, Object key, int index, int attributes) Return the Slot that matches EITHER "key" or "index".Retrieve the slot at EITHER key or index, or return null if the slot cannot be found.intsize()Return the size of the map.protected voidupdateMap(boolean resetTouched) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface java.lang.Iterable
forEach, spliteratorMethods inherited from interface org.htmlunit.corejs.javascript.SlotMap
copyMap, startCompoundOp
-
Field Details
-
owner
-
map
-
-
Constructor Details
-
CompoundOperationMap
-
-
Method Details
-
updateMap
protected void updateMap(boolean resetTouched) -
isTouched
public boolean isTouched() -
add
Description copied from interface:SlotMapInsert 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:
addin interfaceSlotMap<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:SlotMapReplace 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:
computein interfaceSlotMap<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:
computein interfaceSlotMap<T extends PropHolder<T>>
-
dirtySize
public int dirtySize()- Specified by:
dirtySizein interfaceSlotMap<T extends PropHolder<T>>
-
isEmpty
public boolean isEmpty()Description copied from interface:SlotMapReturn whether the map is empty.- Specified by:
isEmptyin interfaceSlotMap<T extends PropHolder<T>>
-
modify
Description copied from interface:SlotMapReturn 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:
modifyin interfaceSlotMap<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
Description copied from interface:SlotMapRetrieve the slot at EITHER key or index, or return null if the slot cannot be found.- Specified by:
queryin interfaceSlotMap<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:SlotMapReturn the size of the map.- Specified by:
sizein interfaceSlotMap<T extends PropHolder<T>>
-
iterator
- Specified by:
iteratorin interfaceIterable<T extends PropHolder<T>>
-
close
public void close()- Specified by:
closein interfaceAutoCloseable
-