001 package net.minecraft.world.gen.layer; 002 003 import java.util.ArrayList; 004 import java.util.List; 005 006 public class IntCache 007 { 008 private static int intCacheSize = 256; 009 010 /** 011 * A list of pre-allocated int[256] arrays that are currently unused and can be returned by getIntCache() 012 */ 013 private static List freeSmallArrays = new ArrayList(); 014 015 /** 016 * A list of pre-allocated int[256] arrays that were previously returned by getIntCache() and which will not be re- 017 * used again until resetIntCache() is called. 018 */ 019 private static List inUseSmallArrays = new ArrayList(); 020 021 /** 022 * A list of pre-allocated int[cacheSize] arrays that are currently unused and can be returned by getIntCache() 023 */ 024 private static List freeLargeArrays = new ArrayList(); 025 026 /** 027 * A list of pre-allocated int[cacheSize] arrays that were previously returned by getIntCache() and which will not 028 * be re-used again until resetIntCache() is called. 029 */ 030 private static List inUseLargeArrays = new ArrayList(); 031 032 public static synchronized int[] getIntCache(int par0) 033 { 034 int[] var1; 035 036 if (par0 <= 256) 037 { 038 if (freeSmallArrays.isEmpty()) 039 { 040 var1 = new int[256]; 041 inUseSmallArrays.add(var1); 042 return var1; 043 } 044 else 045 { 046 var1 = (int[])freeSmallArrays.remove(freeSmallArrays.size() - 1); 047 inUseSmallArrays.add(var1); 048 return var1; 049 } 050 } 051 else if (par0 > intCacheSize) 052 { 053 intCacheSize = par0; 054 freeLargeArrays.clear(); 055 inUseLargeArrays.clear(); 056 var1 = new int[intCacheSize]; 057 inUseLargeArrays.add(var1); 058 return var1; 059 } 060 else if (freeLargeArrays.isEmpty()) 061 { 062 var1 = new int[intCacheSize]; 063 inUseLargeArrays.add(var1); 064 return var1; 065 } 066 else 067 { 068 var1 = (int[])freeLargeArrays.remove(freeLargeArrays.size() - 1); 069 inUseLargeArrays.add(var1); 070 return var1; 071 } 072 } 073 074 /** 075 * Mark all pre-allocated arrays as available for re-use by moving them to the appropriate free lists. 076 */ 077 public static synchronized void resetIntCache() 078 { 079 if (!freeLargeArrays.isEmpty()) 080 { 081 freeLargeArrays.remove(freeLargeArrays.size() - 1); 082 } 083 084 if (!freeSmallArrays.isEmpty()) 085 { 086 freeSmallArrays.remove(freeSmallArrays.size() - 1); 087 } 088 089 freeLargeArrays.addAll(inUseLargeArrays); 090 freeSmallArrays.addAll(inUseSmallArrays); 091 inUseLargeArrays.clear(); 092 inUseSmallArrays.clear(); 093 } 094 095 public static synchronized String func_85144_b() 096 { 097 return "cache: " + freeLargeArrays.size() + ", tcache: " + freeSmallArrays.size() + ", allocated: " + inUseLargeArrays.size() + ", tallocated: " + inUseSmallArrays.size(); 098 } 099 }