Class ThreadSafeSlotMapContainer

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

    class ThreadSafeSlotMapContainer
    extends SlotMapContainer
    This class extends the SlotMapContainer so that we have thread-safe access to all the properties of an object.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.util.concurrent.locks.StampedLock lock  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void add​(Slot newSlot)
      Insert a new slot to the map.
      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.
      int dirtySize()  
      boolean isEmpty()
      Return whether the map is empty.
      java.util.Iterator<Slot> iterator()  
      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.
      long readLock()
      Take out a read lock on the slot map, if locking is implemented.
      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.
      void unlockRead​(long stamp)
      Unlock the lock taken out by readLock.
      • 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

      • lock

        private final java.util.concurrent.locks.StampedLock lock
    • Constructor Detail

      • ThreadSafeSlotMapContainer

        ThreadSafeSlotMapContainer()
      • ThreadSafeSlotMapContainer

        ThreadSafeSlotMapContainer​(int initialSize)
    • Method Detail

      • 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 interface SlotMap
        Overrides:
        modify in class SlotMapContainer
        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.
        Specified by:
        replace in interface SlotMap
        Overrides:
        replace in class SlotMapContainer
      • 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.
        Specified by:
        query in interface SlotMap
        Overrides:
        query in class SlotMapContainer
        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
      • 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
        Overrides:
        add in class SlotMapContainer
      • 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
        Overrides:
        remove in class SlotMapContainer
        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.
      • readLock

        public long readLock()
        Take out a read lock on the slot map, if locking is implemented. The caller MUST call this method before using the iterator, and MUST NOT call this method otherwise.
        Overrides:
        readLock in class SlotMapContainer
      • unlockRead

        public void unlockRead​(long stamp)
        Unlock the lock taken out by readLock.
        Overrides:
        unlockRead in class SlotMapContainer
        Parameters:
        stamp - the value returned by readLock.
      • iterator

        public java.util.Iterator<Slot> iterator()
        Specified by:
        iterator in interface java.lang.Iterable<Slot>
        Overrides:
        iterator in class SlotMapContainer
      • 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.
        Overrides:
        checkMapSize in class SlotMapContainer