Package org.mozilla.javascript
Class HashSlotMap
java.lang.Object
org.mozilla.javascript.HashSlotMap
This class implements the SlotMap interface using a java.util.HashMap. This class has more
overhead than EmbeddedSlotMap, especially because it puts each "Slot" inside an intermediate
object. However it is much more resistant to large number of hash collisions than EmbeddedSlotMap
and therefore we use this implementation when an object gains a large number of properties.
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.mozilla.javascript.SlotMap
SlotMap.SlotComputer<S extends Slot>
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
Insert a new slot to the map.<S extends Slot>
Scompute
(Object key, int index, SlotMap.SlotComputer<S> c) Replace the value of key with the slot computed by the "compute" method.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.int
size()
Return the size of the map.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
-
Constructor Details
-
HashSlotMap
public HashSlotMap() -
HashSlotMap
-
-
Method Details
-
size
public int size()Description copied from interface:SlotMap
Return the size of the map. -
isEmpty
public boolean isEmpty()Description copied from interface:SlotMap
Return whether the map is empty. -
query
Description copied from interface:SlotMap
Retrieve the slot at EITHER key or index, or return null if the slot cannot be found. -
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
- 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.
-
compute
Description copied from interface:SlotMap
Replace the value of key with the slot computed by the "compute" method. If "compute" throws an exception, make no change. If "compute" returns null, remove the mapping, otherwise, replace any existing mapping with the result of "compute", and create a new mapping if none exists. This is equivalent to the "compute" method on the Map interface, which simplifies code and is more efficient than making multiple calls to this interface. In order to allow use of multiple Slot subclasses, this function is templatized. -
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. -
iterator
-