blob: 7b25c6e371e60c7f694222144ec5bab3f80328b9 [file] [log] [blame]
package edu.uci.ics.asterix.runtime.evaluators.common;
import java.io.DataInputStream;
import java.nio.ByteBuffer;
import java.util.Arrays;
import edu.uci.ics.fuzzyjoin.similarity.SimilarityFilters;
import edu.uci.ics.fuzzyjoin.similarity.SimilarityFiltersFactory;
import edu.uci.ics.hyracks.algebricks.core.api.exceptions.AlgebricksException;
import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
import edu.uci.ics.hyracks.dataflow.common.comm.util.ByteBufferInputStream;
import edu.uci.ics.hyracks.dataflow.common.data.marshalling.UTF8StringSerializerDeserializer;
public class SimilarityFiltersCache {
private final ByteBufferInputStream bbis = new ByteBufferInputStream();
private final DataInputStream dis = new DataInputStream(bbis);
private float similarityThresholdCached = 0;
private byte[] similarityNameBytesCached = null;
private SimilarityFilters similarityFiltersCached = null;
public SimilarityFilters get(float similarityThreshold, byte[] similarityNameBytes) throws AlgebricksException {
if (similarityThreshold != similarityThresholdCached || similarityNameBytesCached == null
|| !Arrays.equals(similarityNameBytes, similarityNameBytesCached)) {
bbis.setByteBuffer(ByteBuffer.wrap(similarityNameBytes), 1);
String similarityName;
try {
similarityName = UTF8StringSerializerDeserializer.INSTANCE.deserialize(dis);
} catch (HyracksDataException e) {
throw new AlgebricksException(e);
}
similarityNameBytesCached = Arrays.copyOf(similarityNameBytes, similarityNameBytes.length);
similarityFiltersCached = SimilarityFiltersFactory
.getSimilarityFilters(similarityName, similarityThreshold);
}
return similarityFiltersCached;
}
}