package org.trifort.rootbeer.testcases.rootbeertest.serialization;
public class GpuVectorMap {
public static final int DEFAULT_CAPACITY = 16;
private GpuMapKeyValuePair[] m_values = null;
private boolean m_used = false;
public GpuVectorMap() {
this(DEFAULT_CAPACITY);
}
public GpuVectorMap(int size) {
this.m_values = new GpuMapKeyValuePair[size];
}
public int size() {
return m_values.length;
}
public void clear() {
if (m_used) {
for (int i = 0; i < m_values.length; i++) {
m_values[i] = null;
}
}
}
private boolean equalsKey(GpuMapKeyValuePair entry, long otherKey) {
if (entry != null) {
long key = (Long) entry.getKey();
return (key == otherKey);
}
return false;
}
public int indexForKey(long key) {
return (int) (key % m_values.length);
}
public double[] get(long key) {
GpuMapKeyValuePair entry = m_values[indexForKey(key)];
while (entry != null && !equalsKey(entry, key)) {
entry = entry.getNext();
}
return (entry != null) ? (double[]) entry.getValue() : null;
}
public void put(long key, double[] value) {
m_used = true;
int bucketIndex = indexForKey(key);
GpuMapKeyValuePair entry = m_values[bucketIndex];
if (entry != null) {
System.out.println("put3");
boolean done = false;
while (!done) {
if (equalsKey(entry, key)) {
entry.setValue(value);
done = true;
} else if (entry.getNext() == null) {
entry.setNext(new GpuMapKeyValuePair(key, value));
done = true;
}
entry = entry.getNext();
}
} else {
GpuMapKeyValuePair key_pair = new GpuMapKeyValuePair(key, value);
m_values[bucketIndex] = key_pair;
}
}
}