Package org.mozilla.javascript
Class ThreadSafeSlotMapContainer
- java.lang.Object
-
- org.mozilla.javascript.SlotMapContainer
-
- org.mozilla.javascript.ThreadSafeSlotMapContainer
-
- All Implemented Interfaces:
java.lang.Iterable<ScriptableObject.Slot>
,SlotMap
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.StampedLock
lock
-
Fields inherited from class org.mozilla.javascript.SlotMapContainer
map
-
-
Constructor Summary
Constructors Constructor Description ThreadSafeSlotMapContainer(int initialSize)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addSlot(ScriptableObject.Slot newSlot)
Insert a new slot to the map.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.int
dirtySize()
ScriptableObject.Slot
get(java.lang.Object key, int index, ScriptableObject.SlotAccess accessType)
Return the Slot that matches EITHER "key" or "index".boolean
isEmpty()
Return whether the map is empty.java.util.Iterator<ScriptableObject.Slot>
iterator()
ScriptableObject.Slot
query(java.lang.Object key, int index)
This is an optimization that is the same as get with an accessType of SLOT_QUERY.long
readLock()
Take out a read lock on the slot map, if locking is implemented.void
remove(java.lang.Object key, int index)
Remove the slot at either "key" or "index".int
size()
Return the size of the map.void
unlockRead(long stamp)
Unlock the lock taken out by readLock.
-
-
-
Method Detail
-
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
-
get
public ScriptableObject.Slot get(java.lang.Object key, int index, ScriptableObject.SlotAccess accessType)
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". "accessType" is one of the constants defined in ScriptableObject.- Specified by:
get
in interfaceSlotMap
- Overrides:
get
in classSlotMapContainer
-
query
public ScriptableObject.Slot query(java.lang.Object key, int index)
Description copied from interface:SlotMap
This is an optimization that is the same as get with an accessType of SLOT_QUERY. It should be used instead of SLOT_QUERY because it is more efficient.- Specified by:
query
in interfaceSlotMap
- Overrides:
query
in classSlotMapContainer
-
addSlot
public void addSlot(ScriptableObject.Slot 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 "get" method.- Specified by:
addSlot
in interfaceSlotMap
- Overrides:
addSlot
in classSlotMapContainer
-
remove
public void remove(java.lang.Object key, int index)
Description copied from interface:SlotMap
Remove the slot at either "key" or "index".- Specified by:
remove
in interfaceSlotMap
- Overrides:
remove
in classSlotMapContainer
-
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
public java.util.Iterator<ScriptableObject.Slot> iterator()
- Specified by:
iterator
in interfacejava.lang.Iterable<ScriptableObject.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
-
-