blob: f88032a8082e9a76222c4b7b63e9bb75b81b0158 [file] [log] [blame]
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<PreFillType, Integer> bitmapsPerType;
private final List<PreFillType> keyList;
private int bitmapsRemaining;
private int keyIndex;
public PreFillQueue(Map<PreFillType, Integer> bitmapsPerType) {
this.bitmapsPerType = bitmapsPerType;
// We don't particularly care about the initial order.
keyList = new ArrayList<PreFillType>(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;
}
}