Class EmbeddedSlotMap

  • All Implemented Interfaces:
    java.lang.Iterable<Slot>, SlotMap

    public class EmbeddedSlotMap
    extends java.lang.Object
    implements SlotMap
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      private static class  EmbeddedSlotMap.Iter  
    • Constructor Summary

      Constructors 
      Constructor Description
      EmbeddedSlotMap()  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void add​(Slot newSlot)
      Insert a new slot to the map.
      private static void addKnownAbsentSlot​(Slot[] addSlots, Slot slot)
      Add slot with keys that are known to absent from the table.
      private static void copyTable​(Slot[] oldSlots, Slot[] newSlots)  
      private Slot createSlot​(java.lang.Object key, int indexOrHash, int attributes)  
      private static int getSlotIndex​(int tableSize, int indexOrHash)  
      private void insertNewSlot​(Slot newSlot)  
      boolean isEmpty()
      Return whether the map is empty.
      java.util.Iterator<Slot> iterator()  
      Slot modify​(java.lang.Object key, int index, int attributes)
      Locate the slot with given name or index, and create a new one if necessary.
      Slot query​(java.lang.Object key, int index)
      Locate the slot with the given name or index.
      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.
      • 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
    • Field Detail

      • slots

        private Slot[] slots
      • firstAdded

        private Slot firstAdded
      • lastAdded

        private Slot lastAdded
      • count

        private int count
    • Constructor Detail

      • EmbeddedSlotMap

        public EmbeddedSlotMap()
    • Method Detail

      • size

        public int size()
        Description copied from interface: SlotMap
        Return the size of the map.
        Specified by:
        size in interface SlotMap
      • isEmpty

        public boolean isEmpty()
        Description copied from interface: SlotMap
        Return whether the map is empty.
        Specified by:
        isEmpty in interface SlotMap
      • iterator

        public java.util.Iterator<Slot> iterator()
        Specified by:
        iterator in interface java.lang.Iterable<Slot>
      • query

        public Slot query​(java.lang.Object key,
                          int index)
        Locate the slot with the given name or index.
        Specified by:
        query in interface SlotMap
        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
      • modify

        public Slot modify​(java.lang.Object key,
                           int index,
                           int attributes)
        Locate the slot with given name or index, and create a new one if necessary.
        Specified by:
        modify in interface SlotMap
        Parameters:
        key - either a String or a Symbol object that identifies the property
        index - index or 0 if slot holds property name.
        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.
      • createSlot

        private Slot createSlot​(java.lang.Object key,
                                int indexOrHash,
                                int attributes)
      • 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.
        Specified by:
        replace in interface SlotMap
      • 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.
        Specified by:
        add in interface SlotMap
      • insertNewSlot

        private void insertNewSlot​(Slot newSlot)
      • remove

        public void remove​(java.lang.Object key,
                           int index)
        Description copied from interface: SlotMap
        Remove the slot at either "key" or "index".
        Specified by:
        remove in interface SlotMap
        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.
      • copyTable

        private static void copyTable​(Slot[] oldSlots,
                                      Slot[] newSlots)
      • addKnownAbsentSlot

        private static void addKnownAbsentSlot​(Slot[] addSlots,
                                               Slot slot)
        Add slot with keys that are known to absent from the table. This is an optimization to use when inserting into empty table, after table growth or during deserialization.
      • getSlotIndex

        private static int getSlotIndex​(int tableSize,
                                        int indexOrHash)