Package org.htmlunit.corejs.javascript
Class ThreadSafeSlotMapContainer
- java.lang.Object
-
- org.htmlunit.corejs.javascript.SlotMapContainer
-
- org.htmlunit.corejs.javascript.ThreadSafeSlotMapContainer
-
class ThreadSafeSlotMapContainer extends SlotMapContainer
This class extends the SlotMapContainer so that we have thread-safe access to all the properties of an object.
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.concurrent.locks.StampedLocklock-
Fields inherited from class org.htmlunit.corejs.javascript.SlotMapContainer
map
-
-
Constructor Summary
Constructors Constructor Description ThreadSafeSlotMapContainer()ThreadSafeSlotMapContainer(int initialSize)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidadd(Slot newSlot)Insert a new slot to the map.protected voidcheckMapSize()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.intdirtySize()booleanisEmpty()Return whether the map is empty.java.util.Iterator<Slot>iterator()Slotmodify(java.lang.Object key, int index, int attributes)Return the Slot that matches EITHER "key" or "index".Slotquery(java.lang.Object key, int index)Retrieve the slot at EITHER key or index, or return null if the slot cannot be found.longreadLock()Take out a read lock on the slot map, if locking is implemented.voidremove(java.lang.Object key, int index)Remove the slot at either "key" or "index".voidreplace(Slot oldSlot, Slot newSlot)Replace "slot" with a new slot.intsize()Return the size of the map.voidunlockRead(long stamp)Unlock the lock taken out by readLock.
-
-
-
Method Detail
-
size
public int size()
Description copied from interface:SlotMapReturn the size of the map.- Specified by:
sizein interfaceSlotMap- Overrides:
sizein classSlotMapContainer
-
dirtySize
public int dirtySize()
- Overrides:
dirtySizein classSlotMapContainer
-
isEmpty
public boolean isEmpty()
Description copied from interface:SlotMapReturn whether the map is empty.- Specified by:
isEmptyin interfaceSlotMap- Overrides:
isEmptyin classSlotMapContainer
-
modify
public Slot modify(java.lang.Object key, int index, int attributes)
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- Overrides:
modifyin classSlotMapContainer- 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:SlotMapReplace "slot" with a new slot. This is used to change slot types.- Specified by:
replacein interfaceSlotMap- Overrides:
replacein classSlotMapContainer
-
query
public Slot query(java.lang.Object key, int index)
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- Overrides:
queryin classSlotMapContainer- 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: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- Overrides:
addin classSlotMapContainer
-
remove
public void remove(java.lang.Object key, int index)Description copied from interface:SlotMapRemove the slot at either "key" or "index".- Specified by:
removein interfaceSlotMap- Overrides:
removein classSlotMapContainer- 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:
readLockin classSlotMapContainer
-
unlockRead
public void unlockRead(long stamp)
Unlock the lock taken out by readLock.- Overrides:
unlockReadin classSlotMapContainer- Parameters:
stamp- the value returned by readLock.
-
iterator
public java.util.Iterator<Slot> iterator()
- Specified by:
iteratorin interfacejava.lang.Iterable<Slot>- Overrides:
iteratorin classSlotMapContainer
-
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:
checkMapSizein classSlotMapContainer
-
-