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