package com.bumptech.glide.load.engine.prefill; import java.util.ArrayList; import java.util.List; import java.util.Map; final class PreFillQueue { private final Map bitmapsPerType; private final List keyList; private int bitmapsRemaining; private int keyIndex; public PreFillQueue(Map bitmapsPerType) { this.bitmapsPerType = bitmapsPerType; // We don't particularly care about the initial order. keyList = new ArrayList(bitmapsPerType.keySet()); for (Integer count : bitmapsPerType.values()) { bitmapsRemaining += count; } } public PreFillType remove() { PreFillType result = keyList.get(keyIndex); Integer countForResult = bitmapsPerType.get(result); if (countForResult == 1) { bitmapsPerType.remove(result); keyList.remove(keyIndex); } else { bitmapsPerType.put(result, countForResult - 1); } bitmapsRemaining--; // Avoid divide by 0. keyIndex = keyList.isEmpty() ? 0 : (keyIndex + 1) % keyList.size(); return result; } public int getSize() { return bitmapsRemaining; } public boolean isEmpty() { return bitmapsRemaining == 0; } }