package com.juliasoft.beedeedee.factories; import java.util.Arrays; import com.juliasoft.beedeedee.factories.ERFactory.EquivResult; public class EquivCache { private final int[] bdds; private final EquivResult[] results; private final Object[] locks = new Object[100]; EquivCache(int size) { this.bdds = new int[size]; this.results = new EquivResult[size]; clear(); for (int i = 0; i < locks.length; i++) locks[i] = new Object(); } void clear() { Arrays.fill(bdds, -1); } public EquivResult get(int bdd) { int pos = hash(bdd); synchronized (locks[pos % locks.length]) { return bdds[pos] == bdd ? results[pos] : null; } } public void put(int bdd, EquivResult result) { int pos = hash(bdd); synchronized (locks[pos % locks.length]) { bdds[pos] = bdd; results[pos] = result; } } private int hash(int bdd) { return Math.abs(bdd % bdds.length); } }