15207906814e7f5983ce16db79affba28e5651d2eSam Juddpackage com.bumptech.glide.load.engine.prefill; 25207906814e7f5983ce16db79affba28e5651d2eSam Judd 35207906814e7f5983ce16db79affba28e5651d2eSam Juddimport java.util.ArrayList; 45207906814e7f5983ce16db79affba28e5651d2eSam Juddimport java.util.List; 55207906814e7f5983ce16db79affba28e5651d2eSam Juddimport java.util.Map; 65207906814e7f5983ce16db79affba28e5651d2eSam Judd 75207906814e7f5983ce16db79affba28e5651d2eSam Juddfinal class PreFillQueue { 85207906814e7f5983ce16db79affba28e5651d2eSam Judd 935ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd private final Map<PreFillType, Integer> bitmapsPerType; 1035ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd private final List<PreFillType> keyList; 115207906814e7f5983ce16db79affba28e5651d2eSam Judd private int bitmapsRemaining; 125207906814e7f5983ce16db79affba28e5651d2eSam Judd private int keyIndex; 135207906814e7f5983ce16db79affba28e5651d2eSam Judd 1435ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd public PreFillQueue(Map<PreFillType, Integer> bitmapsPerType) { 155207906814e7f5983ce16db79affba28e5651d2eSam Judd this.bitmapsPerType = bitmapsPerType; 165207906814e7f5983ce16db79affba28e5651d2eSam Judd // We don't particularly care about the initial order. 1735ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd keyList = new ArrayList<PreFillType>(bitmapsPerType.keySet()); 185207906814e7f5983ce16db79affba28e5651d2eSam Judd 195207906814e7f5983ce16db79affba28e5651d2eSam Judd for (Integer count : bitmapsPerType.values()) { 205207906814e7f5983ce16db79affba28e5651d2eSam Judd bitmapsRemaining += count; 215207906814e7f5983ce16db79affba28e5651d2eSam Judd } 225207906814e7f5983ce16db79affba28e5651d2eSam Judd } 235207906814e7f5983ce16db79affba28e5651d2eSam Judd 2435ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd public PreFillType remove() { 2535ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd PreFillType result = keyList.get(keyIndex); 265207906814e7f5983ce16db79affba28e5651d2eSam Judd 275207906814e7f5983ce16db79affba28e5651d2eSam Judd Integer countForResult = bitmapsPerType.get(result); 285207906814e7f5983ce16db79affba28e5651d2eSam Judd if (countForResult == 1) { 295207906814e7f5983ce16db79affba28e5651d2eSam Judd bitmapsPerType.remove(result); 305207906814e7f5983ce16db79affba28e5651d2eSam Judd keyList.remove(keyIndex); 315207906814e7f5983ce16db79affba28e5651d2eSam Judd } else { 325207906814e7f5983ce16db79affba28e5651d2eSam Judd bitmapsPerType.put(result, countForResult - 1); 335207906814e7f5983ce16db79affba28e5651d2eSam Judd } 345207906814e7f5983ce16db79affba28e5651d2eSam Judd bitmapsRemaining--; 355207906814e7f5983ce16db79affba28e5651d2eSam Judd 365207906814e7f5983ce16db79affba28e5651d2eSam Judd // Avoid divide by 0. 375207906814e7f5983ce16db79affba28e5651d2eSam Judd keyIndex = keyList.isEmpty() ? 0 : (keyIndex + 1) % keyList.size(); 385207906814e7f5983ce16db79affba28e5651d2eSam Judd 395207906814e7f5983ce16db79affba28e5651d2eSam Judd return result; 405207906814e7f5983ce16db79affba28e5651d2eSam Judd } 415207906814e7f5983ce16db79affba28e5651d2eSam Judd 425207906814e7f5983ce16db79affba28e5651d2eSam Judd public int getSize() { 435207906814e7f5983ce16db79affba28e5651d2eSam Judd return bitmapsRemaining; 445207906814e7f5983ce16db79affba28e5651d2eSam Judd } 455207906814e7f5983ce16db79affba28e5651d2eSam Judd 465207906814e7f5983ce16db79affba28e5651d2eSam Judd public boolean isEmpty() { 475207906814e7f5983ce16db79affba28e5651d2eSam Judd return bitmapsRemaining == 0; 485207906814e7f5983ce16db79affba28e5651d2eSam Judd } 495207906814e7f5983ce16db79affba28e5651d2eSam Judd} 50