Class ThreadSafeSlotMapContainer

  • All Implemented Interfaces:
    java.lang.Iterable<ScriptableObject.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 addSlot​(ScriptableObject.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()  
      ScriptableObject.Slot get​(java.lang.Object key, int index, ScriptableObject.SlotAccess accessType)
      Return the Slot that matches EITHER "key" or "index".
      boolean isEmpty()
      Return whether the map is empty.
      java.util.Iterator<ScriptableObject.Slot> iterator()  
      ScriptableObject.Slot query​(java.lang.Object key, int index)
      This is an optimization that is the same as get with an accessType of SLOT_QUERY.
      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".
      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​(int initialSize)
    • Method Detail

      • get

        public ScriptableObject.Slot get​(java.lang.Object key,
                                         int index,
                                         ScriptableObject.SlotAccess accessType)
        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". "accessType" is one of the constants defined in ScriptableObject.
        Specified by:
        get in interface SlotMap
        Overrides:
        get in class SlotMapContainer
      • query

        public ScriptableObject.Slot query​(java.lang.Object key,
                                           int index)
        Description copied from interface: SlotMap
        This is an optimization that is the same as get with an accessType of SLOT_QUERY. It should be used instead of SLOT_QUERY because it is more efficient.
        Specified by:
        query in interface SlotMap
        Overrides:
        query in class SlotMapContainer
      • addSlot

        public void addSlot​(ScriptableObject.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 "get" method.
        Specified by:
        addSlot in interface SlotMap
        Overrides:
        addSlot 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
      • 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.
      • 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