Interface SlotMap

All Superinterfaces:
Iterable<Slot>
All Known Implementing Classes:
EmbeddedSlotMap, HashSlotMap, SlotMapContainer, ThreadSafeSlotMapContainer

public interface SlotMap extends Iterable<Slot>
A SlotMap is an interface to the main data structure that contains all the "Slots" that back a ScriptableObject. It is the primary property map in Rhino. It is Iterable but does not implement java.util.Map because that comes with a bunch of overhead that we do not need.

This class generally has a bit of a strange interface, and its interactions with ScriptableObject are complex. Many attempts to make this interface more elegant have resulted in substantial performance regressions so we are doing the best that we can.

  • Method Summary

    Modifier and Type
    Method
    Description
    void
    add(Slot newSlot)
    Insert a new slot to the map.
    boolean
    Return whether the map is empty.
    modify(Object key, int index, int attributes)
    Return the Slot that matches EITHER "key" or "index".
    query(Object key, int index)
    Retrieve the slot at EITHER key or index, or return null if the slot cannot be found.
    void
    remove(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
    Return the size of the map.

    Methods inherited from interface Iterable

    forEach, iterator, spliterator
  • Method Details

    • size

      int size()
      Return the size of the map.
    • isEmpty

      boolean isEmpty()
      Return whether the map is empty.
    • modify

      Slot modify(Object key, int index, int attributes)
      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.
      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.
    • query

      Slot query(Object key, int index)
      Retrieve the slot at EITHER key or index, or return null if the slot cannot be found.
      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.
      Returns:
      either the Slot that matched the key and index, or null
    • replace

      void replace(Slot oldSlot, Slot newSlot)
      Replace "slot" with a new slot. This is used to change slot types.
    • add

      void add(Slot newSlot)
      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

      void remove(Object key, int index)
      Remove the slot at either "key" or "index".
      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.