Class AbstractSafeLongArray.SafeIterator

java.lang.Object
com.tangosol.util.AbstractSafeLongArray.SafeIterator
All Implemented Interfaces:
LongArray.Iterator<V>, Iterator<V>
Enclosing class:
AbstractSafeLongArray<V>

protected class AbstractSafeLongArray.SafeIterator extends Object implements LongArray.Iterator<V>
A lock based LongArray Iterator. Note the implementation is thread-safe so long as the wrapped unsafe LongArray supports stable iteration when accessed from a single thread. Specifically that performing an add or remove operation directly against the LongArray while being iterated does not corrupt the state of either the LongArray or the Iterator. An alternate approach would be to maintain a write counter and to refresh the delegate iterator each time the write counter changes, the refresh would be cheap as it could use iterator(m_lastIndex).
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected final LongArray.Iterator<V>
    The delegate iterator.
    protected long
    The index associated with the last returned value
    protected Object
    The last value returned from the iterator.
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    SafeIterator(LongArray<V> delegate, boolean fForward, long lIndexFrom)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected void
    Ensure that the cached value/index are valid.
    long
    Returns the index of the current value, which is the value returned by the most recent call to the next method.
    Returns the current value, which is the same value returned by the most recent call to the next method, or the most recent value passed to setValue if setValue were called after the next method.
    boolean
    Returns true if the iteration has more elements.
    Returns the next element in the iteration.
    void
    Removes from the underlying collection the last element returned by the iterator (optional operation).
    setValue(V oValue)
    Stores a new value at the current value index, returning the value that was replaced.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface java.util.Iterator

    forEachRemaining
  • Field Details

    • f_delegate

      protected final LongArray.Iterator<V> f_delegate
      The delegate iterator.
    • m_valueLast

      protected Object m_valueLast
      The last value returned from the iterator.
    • m_lIndexLast

      protected long m_lIndexLast
      The index associated with the last returned value
  • Constructor Details

    • SafeIterator

      protected SafeIterator(LongArray<V> delegate, boolean fForward, long lIndexFrom)
  • Method Details

    • hasNext

      public boolean hasNext()
      Description copied from interface: LongArray.Iterator
      Returns true if the iteration has more elements. (In other words, returns true if next would return an element rather than throwing an exception.)
      Specified by:
      hasNext in interface Iterator<V>
      Specified by:
      hasNext in interface LongArray.Iterator<V>
      Returns:
      true if the iterator has more elements
    • next

      public V next()
      Description copied from interface: LongArray.Iterator
      Returns the next element in the iteration.
      Specified by:
      next in interface Iterator<V>
      Specified by:
      next in interface LongArray.Iterator<V>
      Returns:
      the next element in the iteration
    • getIndex

      public long getIndex()
      Description copied from interface: LongArray.Iterator
      Returns the index of the current value, which is the value returned by the most recent call to the next method.
      Specified by:
      getIndex in interface LongArray.Iterator<V>
      Returns:
      the index of the current value
    • getValue

      public V getValue()
      Description copied from interface: LongArray.Iterator
      Returns the current value, which is the same value returned by the most recent call to the next method, or the most recent value passed to setValue if setValue were called after the next method.
      Specified by:
      getValue in interface LongArray.Iterator<V>
      Returns:
      the current value
    • setValue

      public V setValue(V oValue)
      Description copied from interface: LongArray.Iterator
      Stores a new value at the current value index, returning the value that was replaced. The index of the current value is obtainable by calling the getIndex method.
      Specified by:
      setValue in interface LongArray.Iterator<V>
      Parameters:
      oValue - the new value to store
      Returns:
      the replaced value
    • remove

      public void remove()
      Description copied from interface: LongArray.Iterator
      Removes from the underlying collection the last element returned by the iterator (optional operation). This method can be called only once per call to next. The behavior of an iterator is unspecified if the underlying collection is modified while the iteration is in progress in any way other than by calling this method.
      Specified by:
      remove in interface Iterator<V>
      Specified by:
      remove in interface LongArray.Iterator<V>
    • ensureValid

      protected void ensureValid()
      Ensure that the cached value/index are valid.