package com.airbnb.epoxy;
import android.support.annotation.Nullable;
import android.support.v4.util.LongSparseArray;
import java.util.Iterator;
import java.util.NoSuchElementException;
/** Helper class for keeping track of {@link EpoxyViewHolder}s that are currently bound. */
@SuppressWarnings("WeakerAccess")
public class BoundViewHolders implements Iterable<EpoxyViewHolder> {
private final LongSparseArray<EpoxyViewHolder> holders = new LongSparseArray<>();
@Nullable
public EpoxyViewHolder get(EpoxyViewHolder holder) {
return holders.get(holder.getItemId());
}
public void put(EpoxyViewHolder holder) {
holders.put(holder.getItemId(), holder);
}
public void remove(EpoxyViewHolder holder) {
holders.remove(holder.getItemId());
}
public int size() {
return holders.size();
}
@Override
public Iterator<EpoxyViewHolder> iterator() {
return new HolderIterator();
}
@Nullable
public EpoxyViewHolder getHolderForModel(EpoxyModel<?> model) {
return holders.get(model.id());
}
private class HolderIterator implements Iterator<EpoxyViewHolder> {
private int position = 0;
@Override
public boolean hasNext() {
return position < holders.size();
}
@Override
public EpoxyViewHolder next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
return holders.valueAt(position++);
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
}
}