@Override
    public T next() {
      /* Bounds-check. */
      if (!hasNext())
        throw new NoSuchElementException();

      /* Cache the return value; we'll be moving off of it soon. */
      T result = mCurrCell.mElems[mCurrIndex];

      /* Back up one step. */
      --mCurrIndex;

      /* If we walked off the end of the buffer, advance to the next
       * element of the list.
       */
      if (mCurrIndex < mCurrCell.mFreeSpace) {
        mCurrCell = mCurrCell.mPrev;

        /* Update the next get location, provided of course that we
         * didn't just walk off the end of the list.
         */
        if (mCurrCell != null)
          mCurrIndex = mCurrCell.mElems.length - 1;
      }

      /* Since there was indeed an element, we can remove it. */
      mCanRemove = true;

      return result;
    }