Package org.mozilla.javascript
Class SlotMapContainer
- java.lang.Object
-
- org.mozilla.javascript.SlotMapContainer
-
- All Implemented Interfaces:
java.lang.Iterable<ScriptableObject.Slot>
,SlotMap
- Direct Known Subclasses:
ThreadSafeSlotMapContainer
class SlotMapContainer extends java.lang.Object implements SlotMap
This class holds the various SlotMaps of various types, and knows how to atomically switch between them when we need to so that we use the right data structure at the right time.
-
-
Field Summary
Fields Modifier and Type Field Description private static int
LARGE_HASH_SIZE
Once the object has this many properties in it, we will replace the EmbeddedSlotMap with HashSlotMap.protected SlotMap
map
-
Constructor Summary
Constructors Constructor Description SlotMapContainer(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()
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)
-
-
-
Field Detail
-
LARGE_HASH_SIZE
private static final int LARGE_HASH_SIZE
Once the object has this many properties in it, we will replace the EmbeddedSlotMap with HashSlotMap. We can adjust this parameter to balance performance for typical objects versus performance for huge objects with many collisions.- See Also:
- Constant Field Values
-
map
protected SlotMap map
-
-
Method Detail
-
size
public int size()
Description copied from interface:SlotMap
Return the size of the map.
-
dirtySize
public int dirtySize()
-
isEmpty
public boolean isEmpty()
Description copied from interface:SlotMap
Return whether the map is empty.
-
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.
-
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.
-
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.
-
remove
public void remove(java.lang.Object key, int index)
Description copied from interface:SlotMap
Remove the slot at either "key" or "index".
-
iterator
public java.util.Iterator<ScriptableObject.Slot> iterator()
- Specified by:
iterator
in interfacejava.lang.Iterable<ScriptableObject.Slot>
-
readLock
public long readLock()
-
unlockRead
public void unlockRead(long stamp)
-
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.
-
-