package edu.umd.hooka; import java.util.Map; import java.util.Set; import java.util.TreeMap; import org.apache.hadoop.io.FloatWritable; import edu.umd.hooka.alignment.IndexedFloatArray; public final class Int2FloatMap { //TODO the performance of this class can be improved TreeMap<Integer, FloatWritable> data = new TreeMap<Integer, FloatWritable>(); public Int2FloatMap() {} public final void increment(int k, float delta) { FloatWritable cvF = data.get(k); cvF.set(cvF.get() + delta); } public final Set<Map.Entry<Integer, FloatWritable>> entrySet() { return data.entrySet(); } public final int maxKey() { return data.lastKey(); } public final void createIfMissing(int k) { Integer ki = new Integer(k); if (data.get(ki) == null) { FloatWritable n = new FloatWritable(); data.put(k, n); } } public final void set(int k, float value) { data.get(k).set(value); } public final float get(int k) { return data.get(k).get(); } public final FloatWritable getFloatWritable(int k) { return data.get(k); } public IndexedFloatArray getAsIndexedFloatArray() { int[] indices = new int[data.size()]; float[] values = new float[data.size()]; int c = 0; for (Map.Entry<Integer, FloatWritable> p : data.entrySet()) { indices[c] = p.getKey(); values[c] = p.getValue().get(); c++; } return new IndexedFloatArray(indices, values); } }