package com.limegroup.gnutella.util;
import java.util.HashMap;
import java.util.Map;
/**
* A ByteArrayCache that stores byte[]'s to their nearest >= power of 2.
*/
public class PowerOf2ByteArrayCache {
private final Map CACHE = new HashMap(20);
/**
* @return a byte array of the specified size, using cached one
* if possible.
*/
public byte [] get(int size) {
int exp;
for (exp = 1 ; exp < size ; exp*=2);
// exp is now >= size. it will be equal
// to size if size was a power of two.
// otherwise, it will be the first power of 2
// greater than size.
// since we want to cache only powers of two,
// we will use exp from hereon.
Integer i = new Integer(exp);
byte[] ret = (byte[]) CACHE.get(i);
if (ret == null) {
ret = new byte[exp];
CACHE.put(i, ret);
}
return ret;
}
/** Erases all data in the cache. */
public void clear() {
CACHE.clear();
}
}