83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.recyclerview.widget;
 | |
| 
 | |
| import android.util.SparseArray;
 | |
| import java.lang.reflect.Array;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| class TileList<T> {
 | |
|     Tile<T> mLastAccessedTile;
 | |
|     final int mTileSize;
 | |
|     private final SparseArray<Tile<T>> mTiles = new SparseArray<>(10);
 | |
| 
 | |
|     public TileList(int i) {
 | |
|         this.mTileSize = i;
 | |
|     }
 | |
| 
 | |
|     public T getItemAt(int i) {
 | |
|         Tile<T> 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 int size() {
 | |
|         return this.mTiles.size();
 | |
|     }
 | |
| 
 | |
|     public void clear() {
 | |
|         this.mTiles.clear();
 | |
|     }
 | |
| 
 | |
|     public Tile<T> getAtIndex(int i) {
 | |
|         return this.mTiles.valueAt(i);
 | |
|     }
 | |
| 
 | |
|     public Tile<T> addOrReplace(Tile<T> tile) {
 | |
|         int indexOfKey = this.mTiles.indexOfKey(tile.mStartPosition);
 | |
|         if (indexOfKey < 0) {
 | |
|             this.mTiles.put(tile.mStartPosition, tile);
 | |
|             return null;
 | |
|         }
 | |
|         Tile<T> valueAt = this.mTiles.valueAt(indexOfKey);
 | |
|         this.mTiles.setValueAt(indexOfKey, tile);
 | |
|         if (this.mLastAccessedTile == valueAt) {
 | |
|             this.mLastAccessedTile = tile;
 | |
|         }
 | |
|         return valueAt;
 | |
|     }
 | |
| 
 | |
|     public Tile<T> removeAtPos(int i) {
 | |
|         Tile<T> tile = this.mTiles.get(i);
 | |
|         if (this.mLastAccessedTile == tile) {
 | |
|             this.mLastAccessedTile = null;
 | |
|         }
 | |
|         this.mTiles.delete(i);
 | |
|         return tile;
 | |
|     }
 | |
| 
 | |
|     public static class Tile<T> {
 | |
|         public int mItemCount;
 | |
|         public final T[] mItems;
 | |
|         Tile<T> mNext;
 | |
|         public int mStartPosition;
 | |
| 
 | |
|         boolean containsPosition(int i) {
 | |
|             int i2 = this.mStartPosition;
 | |
|             return i2 <= i && i < i2 + this.mItemCount;
 | |
|         }
 | |
| 
 | |
|         public Tile(Class<T> cls, int i) {
 | |
|             this.mItems = (T[]) ((Object[]) Array.newInstance((Class<?>) cls, i));
 | |
|         }
 | |
| 
 | |
|         T getByPosition(int i) {
 | |
|             return this.mItems[i - this.mStartPosition];
 | |
|         }
 | |
|     }
 | |
| }
 |