Package org.mozilla.javascript
Class SlotMapContainer
java.lang.Object
org.mozilla.javascript.SlotMapContainer
- Direct Known Subclasses:
ThreadSafeSlotMapContainer
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
FieldsModifier and TypeFieldDescriptionprivate static final intprivate static final intOnce the object has this many properties in it, we will replace the EmbeddedSlotMap with HashSlotMap.protected SlotMap -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidInsert a new slot to the map.protected voidBefore 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.intbooleanisEmpty()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.longreadLock()voidRemove the slot at either "key" or "index".voidReplace "slot" with a new slot.intsize()Return the size of the map.voidunlockRead(long stamp) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface java.lang.Iterable
forEach, spliterator
-
Field Details
-
LARGE_HASH_SIZE
private static final int LARGE_HASH_SIZEOnce 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:
-
DEFAULT_SIZE
private static final int DEFAULT_SIZE- See Also:
-
map
-
-
Constructor Details
-
SlotMapContainer
SlotMapContainer() -
SlotMapContainer
SlotMapContainer(int initialSize)
-
-
Method Details
-
size
public int size()Description copied from interface:SlotMapReturn the size of the map. -
dirtySize
public int dirtySize() -
isEmpty
public boolean isEmpty()Description copied from interface:SlotMapReturn whether the map is empty. -
modify
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- 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:SlotMapReplace "slot" with a new slot. This is used to change slot types. -
query
Description copied from interface:SlotMapRetrieve the slot at EITHER key or index, or return null if the slot cannot be found. -
add
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. -
remove
Description copied from interface:SlotMapRemove the slot at either "key" or "index". -
iterator
-
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.
-