package net.minecraft.world.gen.layer;
import java.util.ArrayList;
import java.util.List;
public class IntCache
{
private static int intCacheSize = 256;
/**
* A list of pre-allocated int[256] arrays that are currently unused and can be returned by getIntCache()
*/
private static List freeSmallArrays = new ArrayList();
/**
* A list of pre-allocated int[256] arrays that were previously returned by getIntCache() and which will not be re-
* used again until resetIntCache() is called.
*/
private static List inUseSmallArrays = new ArrayList();
/**
* A list of pre-allocated int[cacheSize] arrays that are currently unused and can be returned by getIntCache()
*/
private static List freeLargeArrays = new ArrayList();
/**
* A list of pre-allocated int[cacheSize] arrays that were previously returned by getIntCache() and which will not
* be re-used again until resetIntCache() is called.
*/
private static List inUseLargeArrays = new ArrayList();
public static synchronized int[] getIntCache(int par0)
{
int[] var1;
if (par0 <= 256)
{
if (freeSmallArrays.isEmpty())
{
var1 = new int[256];
inUseSmallArrays.add(var1);
return var1;
}
else
{
var1 = (int[])freeSmallArrays.remove(freeSmallArrays.size() - 1);
inUseSmallArrays.add(var1);
return var1;
}
}
else if (par0 > intCacheSize)
{
intCacheSize = par0;
freeLargeArrays.clear();
inUseLargeArrays.clear();
var1 = new int[intCacheSize];
inUseLargeArrays.add(var1);
return var1;
}
else if (freeLargeArrays.isEmpty())
{
var1 = new int[intCacheSize];
inUseLargeArrays.add(var1);
return var1;
}
else
{
var1 = (int[])freeLargeArrays.remove(freeLargeArrays.size() - 1);
inUseLargeArrays.add(var1);
return var1;
}
}
/**
* Mark all pre-allocated arrays as available for re-use by moving them to the appropriate free lists.
*/
public static synchronized void resetIntCache()
{
if (!freeLargeArrays.isEmpty())
{
freeLargeArrays.remove(freeLargeArrays.size() - 1);
}
if (!freeSmallArrays.isEmpty())
{
freeSmallArrays.remove(freeSmallArrays.size() - 1);
}
freeLargeArrays.addAll(inUseLargeArrays);
freeSmallArrays.addAll(inUseSmallArrays);
inUseLargeArrays.clear();
inUseSmallArrays.clear();
}
public static synchronized String func_85144_b()
{
return "cache: " + freeLargeArrays.size() + ", tcache: " + freeSmallArrays.size() + ", allocated: " + inUseLargeArrays.size() + ", tallocated: " + inUseSmallArrays.size();
}
}