org.mapdb.serializer.SerializerIntegerDelta Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mapdb Show documentation
Show all versions of mapdb Show documentation
MapDB provides concurrent Maps, Sets and Queues backed by disk storage or off-heap memory. It is a fast, scalable and easy to use embedded Java database.
package org.mapdb.serializer;
import org.mapdb.CC;
import org.mapdb.DataInput2;
import org.mapdb.DataOutput2;
import java.io.IOException;
import java.util.Comparator;
/**
* Created by jan on 2/28/16.
*/
public class SerializerIntegerDelta extends SerializerInteger {
@Override
public void serialize(DataOutput2 out, Integer value) throws IOException {
out.packInt(value);
}
@Override
public Integer deserialize(DataInput2 in, int available) throws IOException {
return new Integer(in.unpackInt());
}
@Override
public void valueArraySerialize(DataOutput2 out, Object vals) throws IOException {
int[] keys = (int[]) vals;
int prev = keys[0];
out.packInt(prev);
for (int i = 1; i < keys.length; i++) {
int curr = keys[i];
//$DELAY$
out.packInt(curr - prev);
if (CC.ASSERT && curr < prev)
throw new AssertionError("not sorted");
prev = curr;
}
}
@Override
public int[] valueArrayDeserialize(DataInput2 in, int size) throws IOException {
int[] ret = new int[size];
int prev = 0;
for (int i = 0; i < size; i++) {
//$DELAY$
prev += in.unpackInt();
ret[i] = prev;
}
return ret;
}
@Override
public Integer valueArrayBinaryGet(DataInput2 input, int keysLen, int pos) throws IOException {
int a = 0;
while (pos-- >= 0) {
a += input.unpackInt();
}
return a;
}
@Override
public int valueArrayBinarySearch(Integer key, DataInput2 input, int keysLen, Comparator comparator) throws IOException {
if (comparator != this)
return super.valueArrayBinarySearch(key, input, keysLen, comparator);
int key2 = key;
int from = 0;
for (int pos = 0; pos < keysLen; pos++) {
from += input.unpackInt();
if (key2 <= from) {
input.unpackLongSkip(keysLen-pos-1);
return (key2 == from) ? pos : -(pos + 1);
}
}
//not found
return -(keysLen + 1);
}
@Override
public int fixedSize() {
return -1;
}
}