Package org.mozilla.javascript
Class HashSlotMap
- java.lang.Object
-
- org.mozilla.javascript.HashSlotMap
-
public class HashSlotMap extends java.lang.Object implements SlotMap
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.
-
-
Constructor Summary
Constructors Constructor Description HashSlotMap()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
add(Slot newSlot)
Insert a new slot to the map.private Slot
createSlot(java.lang.Object key, int index, int attributes)
boolean
isEmpty()
Return whether the map is empty.java.util.Iterator<Slot>
iterator()
private java.lang.Object
makeKey(java.lang.Object name, int index)
private java.lang.Object
makeKey(Slot slot)
Slot
modify(java.lang.Object key, int index, int attributes)
Return the Slot that matches EITHER "key" or "index".Slot
query(java.lang.Object key, int index)
Retrieve the slot at EITHER key or index, or return null if the slot cannot be found.void
remove(java.lang.Object key, int index)
Remove the slot at either "key" or "index".void
replace(Slot oldSlot, Slot newSlot)
Replace "slot" with a new slot.int
size()
Return the size of the map.
-
-
-
Field Detail
-
map
private final java.util.LinkedHashMap<java.lang.Object,Slot> map
-
-
Method Detail
-
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
public Slot query(java.lang.Object key, int index)
Description copied from interface:SlotMap
Retrieve the slot at EITHER key or index, or return null if the slot cannot be found.
-
modify
public Slot modify(java.lang.Object key, int index, int attributes)
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.
-
replace
public void replace(Slot oldSlot, Slot newSlot)
Description copied from interface:SlotMap
Replace "slot" with a new slot. This is used to change slot types.
-
createSlot
private Slot createSlot(java.lang.Object key, int index, int attributes)
-
add
public void add(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 "modify" 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<Slot> iterator()
- Specified by:
iterator
in interfacejava.lang.Iterable<Slot>
-
makeKey
private java.lang.Object makeKey(java.lang.Object name, int index)
-
makeKey
private java.lang.Object makeKey(Slot slot)
-
-