| 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; |
| } |
| } |