Module org.htmlunit.corejs
Package org.htmlunit.corejs.javascript
Interface SlotMap<T extends PropHolder<T>>
- All Known Implementing Classes:
CompoundOperationMap,EmbeddedSlotMap,HashSlotMap,ImmutableSmallSlotMap,ThreadSafeImmutableSmallSlotMap
A SlotMap is an interface to the main data structure that contains all the "Slots" that back a
ScriptableObject. It is the primary property map in Rhino. It is Iterable but does not implement
java.util.Map because that comes with a bunch of overhead that we do not need.
This class generally has a bit of a strange interface, and its interactions with ScriptableObject are complex. Many attempts to make this interface more elegant have resulted in substantial performance regressions so we are doing the best that we can.
-
Nested Class Summary
Nested ClassesModifier and TypeInterfaceDescriptionstatic interfaceSlotMap.SlotComputer<S extends Slot<T>,T extends PropHolder<T>> -
Method Summary
Modifier and TypeMethodDescriptionvoidadd(SlotMapOwner<T> owner, Slot<T> newSlot) Insert a new slot to the map.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> mutableMap, Object key, int index, SlotMap.SlotComputer<S, T> compute) copyMap()default intbooleanisEmpty()Return whether the map is empty.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.default CompoundOperationMap<T>startCompoundOp(SlotMapOwner<T> owner, boolean forWriting) Methods inherited from interface java.lang.Iterable
forEach, iterator, spliterator
-
Method Details
-
size
int size()Return the size of the map. -
isEmpty
boolean isEmpty()Return whether the map is empty. -
modify
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.- 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.
-
query
Retrieve the slot at EITHER key or index, or return null if the slot cannot be found.- 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
-
compute
default <S extends Slot<T>> S 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. 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. -
compute
<S extends Slot<T>> S compute(SlotMapOwner<T> owner, CompoundOperationMap<T> mutableMap, Object key, int index, SlotMap.SlotComputer<S, T> compute) -
add
Insert a new slot to the map. Both "name" and "indexOrHash" must be populated. Note that ScriptableObject generally adds slots via the "modify" method. -
dirtySize
default int dirtySize() -
startCompoundOp
-
copyMap
-