import java.util.HashMap;
public class Memory {
private HashMap<Integer, BlackProbability[][]> cache ;
private BlackProbability[][] common ;
public Memory()
{
common = initializeCommon();
initializeCache() ;
}
public BlackProbability[][] getData(int i)
{
return cache.get(i) ;
}
public BlackProbability[][] getCommonData( )
{
return common;
}
private BlackProbability[][] initializeCommon()
{
BlackProbability[][] blackProbabilities = new BlackProbability[Parameters.NUMBER_OF_ROWS][Parameters.NUMBER_OF_COLUMNS];
for(int y = 0; y < Parameters.NUMBER_OF_ROWS; y++)
{
for(int x = 0; x < Parameters.NUMBER_OF_COLUMNS; x++)
{
blackProbabilities[y][x] = new BlackProbability() ;
}
}
return blackProbabilities ;
}
private void initializeCache() {
cache = new HashMap<>();
for(int i = 0 ; i <= 9 ; i++)
{
cache.put(i, initializeCommon()) ;
}
}
public void upgrade(int[][] results, int value) {
BlackProbability[][] blackProbabilities = cache.get(value);
increment(results, common);
increment(results, blackProbabilities);
}
private void increment(int[][] results, BlackProbability[][] blackProbabilities) {
for (int y = 0; y < results.length; y++) {
for (int x = 0; x < results.length; x++) {
blackProbabilities[y][x].incrementDenominator();
if(results[y][x] == Parameters.BLACK) {
blackProbabilities[y][x].incrementNumerator();
}
}
}
}
}