package org.wonderdb.serialize;
import org.jboss.netty.buffer.ChannelBuffer;
import org.wonderdb.types.DBType;
import org.wonderdb.types.TypeMetadata;
public class Serializer {
private static Serializer instance = new Serializer();
private Serializer() {
}
public static Serializer getInstance() {
return instance;
}
public DBType getObject(int type, ChannelBuffer buffer, TypeMetadata meta) {
byte b = buffer.readByte();
if ((b & 0x01) > 0) {
return SerializerManager.getInstance().getSerializer(type).getNull(type);
}
return SerializerManager.getInstance().getSerializer(type).unmarshal(type, buffer, meta);
}
public void serialize(int type, DBType object, ChannelBuffer buffer, TypeMetadata meta) {
if (SerializerManager.getInstance().getSerializer(type).isNull(type, object)) {
buffer.writeByte(1);
} else {
buffer.writeByte(0);
SerializerManager.getInstance().getSerializer(type).toBytes(object, buffer, meta);
}
}
public int getObjectSize(int type, DBType object, TypeMetadata meta) {
return 1+SerializerManager.getInstance().getSerializer(type).getSize(object, meta);
}
public int getSQLType(int type) {
return SerializerManager.getInstance().getSerializer(type).getSQLType(type);
}
}