All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.dm.rf.android.internal.AbstractSparseIterator Maven / Gradle / Ivy

/**
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.dm.rf.android.internal;

import java.util.NoSuchElementException;

import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;

/**
 * Abstract implementation of a {@link SparseIterator}.
 * 

* This class implements the common logic leaving to the subclass the handling of low level data. *

* Created by davide-maestroni on 3/10/14. * * @param the element type. */ abstract class AbstractSparseIterator implements SparseIterator { private final int mTotalCount; private int mCurrPosition; private boolean mHasCurrent; private int mRemoveOffset; public AbstractSparseIterator(final int totalCount) { mTotalCount = totalCount - 1; mCurrPosition = -1; } @Override public boolean hasNext() { return (mCurrPosition < mTotalCount); } @Override @SuppressFBWarnings(value = "IT_NO_SUCH_ELEMENT", justification = "getElementAt() can throw it") public E next() { final E next = getElementAt(++mCurrPosition + mRemoveOffset); mHasCurrent = true; return next; } @Override public void remove() { if (!mHasCurrent) { throw new NoSuchElementException(); } removeElement(); --mRemoveOffset; mHasCurrent = false; } @Override public int originalIndex() { return mCurrPosition; } @Override public void reset() { mCurrPosition = -1; mRemoveOffset = 0; mHasCurrent = false; } /** * Gets the element at the specified position in the sparse collection. * * @param position the element position. * @return the element. * @throws NoSuchElementException if the position is out of bound. */ protected abstract E getElementAt(int position); /** * Removes the last element got from the sparse collection. * * @see #getElementAt(int) */ protected abstract void removeElement(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy