package androidx.recyclerview.widget; import android.util.SparseArray; import java.lang.reflect.Array; public class TileList { public Tile mLastAccessedTile; public final int mTileSize; private final SparseArray> mTiles = new SparseArray<>(10); public static class Tile { public int mItemCount; public final T[] mItems; public Tile mNext; public int mStartPosition; public Tile(Class cls, int i) { this.mItems = (T[]) ((Object[]) Array.newInstance((Class) cls, i)); } public boolean containsPosition(int i) { int i2 = this.mStartPosition; return i2 <= i && i < i2 + this.mItemCount; } public T getByPosition(int i) { return this.mItems[i - this.mStartPosition]; } } public TileList(int i) { this.mTileSize = i; } public Tile addOrReplace(Tile tile) { int indexOfKey = this.mTiles.indexOfKey(tile.mStartPosition); if (indexOfKey < 0) { this.mTiles.put(tile.mStartPosition, tile); return null; } Tile valueAt = this.mTiles.valueAt(indexOfKey); this.mTiles.setValueAt(indexOfKey, tile); if (this.mLastAccessedTile == valueAt) { this.mLastAccessedTile = tile; } return valueAt; } public void clear() { this.mTiles.clear(); } public Tile getAtIndex(int i) { return this.mTiles.valueAt(i); } public T getItemAt(int i) { Tile tile = this.mLastAccessedTile; if (tile == null || !tile.containsPosition(i)) { int indexOfKey = this.mTiles.indexOfKey(i - (i % this.mTileSize)); if (indexOfKey < 0) { return null; } this.mLastAccessedTile = this.mTiles.valueAt(indexOfKey); } return this.mLastAccessedTile.getByPosition(i); } public Tile removeAtPos(int i) { Tile tile = this.mTiles.get(i); if (this.mLastAccessedTile == tile) { this.mLastAccessedTile = null; } this.mTiles.delete(i); return tile; } public int size() { return this.mTiles.size(); } }