package org.mapdb.serializer;
import org.mapdb.DataInput2;
import org.mapdb.DataOutput2;
import java.io.IOException;
import java.util.Arrays;
/**
* Created by jan on 2/28/16.
*/
public class SerializerCharArray extends GroupSerializerObjectArray<char[]> {
@Override
public void serialize(DataOutput2 out, char[] value) throws IOException {
out.packInt(value.length);
for (char c : value) {
out.writeChar(c);
}
}
@Override
public char[] deserialize(DataInput2 in, int available) throws IOException {
final int size = in.unpackInt();
char[] ret = new char[size];
for (int i = 0; i < size; i++) {
ret[i] = in.readChar();
}
return ret;
}
@Override
public boolean isTrusted() {
return true;
}
@Override
public boolean equals(char[] a1, char[] a2) {
return Arrays.equals(a1, a2);
}
@Override
public int hashCode(char[] chars, int seed) {
//TODO CHANGE should use seed here, but is required for compatibility
int res = 0;
for (char c : chars) {
res = (res + c) * -1640531527 ;
}
return res;
}
@Override
public int compare(char[] o1, char[] o2) {
final int len = Math.min(o1.length, o2.length);
for (int i = 0; i < len; i++) {
int b1 = o1[i];
int b2 = o2[i];
if (b1 != b2)
return b1 - b2;
}
return SerializerUtils.compareInt(o1.length, o2.length);
}
@Override
public char[] nextValue(char[] value) {
value = value.clone();
for (int i = value.length-1; ;i--) {
char b1 = value[i];
if(b1==Character.MAX_VALUE){
if(i==0)
return null;
value[i]=Character.MIN_VALUE;
continue;
}
value[i] = (char) (b1+1);
return value;
}
}
}