Package org.htmlunit.corejs.javascript
Class ThreadSafeSlotMapContainer
java.lang.Object
org.htmlunit.corejs.javascript.SlotMapContainer
org.htmlunit.corejs.javascript.ThreadSafeSlotMapContainer
This class extends the SlotMapContainer so that we have thread-safe access to all the properties
of an object.
-
Field Summary
FieldsFields inherited from class org.htmlunit.corejs.javascript.SlotMapContainer
map
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
Insert a new slot to the map.protected void
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.int
boolean
isEmpty()
Return whether the map is empty.iterator()
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.long
readLock()
Take out a read lock on the slot map, if locking is implemented.void
Remove the slot at either "key" or "index".void
Replace "slot" with a new slot.int
size()
Return the size of the map.void
unlockRead
(long stamp) Unlock the lock taken out by readLock.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
Field Details
-
lock
-
-
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 interfaceSlotMap
- Overrides:
size
in classSlotMapContainer
-
dirtySize
public int dirtySize()- Overrides:
dirtySize
in classSlotMapContainer
-
isEmpty
public boolean isEmpty()Description copied from interface:SlotMap
Return whether the map is empty.- Specified by:
isEmpty
in interfaceSlotMap
- Overrides:
isEmpty
in classSlotMapContainer
-
modify
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 interfaceSlotMap
- Overrides:
modify
in 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
Description copied from interface:SlotMap
Replace "slot" with a new slot. This is used to change slot types.- Specified by:
replace
in interfaceSlotMap
- Overrides:
replace
in classSlotMapContainer
-
query
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 interfaceSlotMap
- Overrides:
query
in 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
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 interfaceSlotMap
- Overrides:
add
in classSlotMapContainer
-
remove
Description copied from interface:SlotMap
Remove the slot at either "key" or "index".- Specified by:
remove
in interfaceSlotMap
- Overrides:
remove
in 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:
readLock
in classSlotMapContainer
-
unlockRead
public void unlockRead(long stamp) Unlock the lock taken out by readLock.- Overrides:
unlockRead
in classSlotMapContainer
- Parameters:
stamp
- the value returned by readLock.
-
iterator
- Specified by:
iterator
in interfaceIterable<Slot>
- Overrides:
iterator
in 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:
checkMapSize
in classSlotMapContainer
-