/* * Copyright (C) 2015 SoftIndex LLC. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package io.datakernel.serializer.asm; import io.datakernel.bytebuf.ByteBuf; import io.datakernel.serializer.BufferSerializer; public final class BufferSerializers { private BufferSerializers() { } private static final BufferSerializer<Byte> BYTE_SERIALIZER = new BufferSerializer<Byte>() { @Override public void serialize(ByteBuf output, Byte item) { output.writeByte(item); } @Override public Byte deserialize(ByteBuf input) { return input.readByte(); } }; private static final BufferSerializer<byte[]> BYTES_SERIALIZER = new BufferSerializer<byte[]>() { @Override public void serialize(ByteBuf output, byte[] item) { output.writeVarInt(item.length); output.write(item); } @Override public byte[] deserialize(ByteBuf input) { int size = input.readVarInt(); byte[] result = new byte[size]; input.read(result); return result; } }; private static final BufferSerializer<Short> SHORT_SERIALIZER = new BufferSerializer<Short>() { @Override public void serialize(ByteBuf output, Short item) { output.writeShort(item); } @Override public Short deserialize(ByteBuf input) { return input.readShort(); } }; private static final BufferSerializer<Integer> INT_SERIALIZER = new BufferSerializer<Integer>() { @Override public void serialize(ByteBuf output, Integer item) { output.writeInt(item); } @Override public Integer deserialize(ByteBuf input) { return input.readInt(); } }; private static final BufferSerializer<Integer> VARINT_SERIALIZER = new BufferSerializer<Integer>() { @Override public void serialize(ByteBuf output, Integer item) { output.writeVarInt(item); } @Override public Integer deserialize(ByteBuf input) { return input.readVarInt(); } }; private static final BufferSerializer<Integer> VARINT_ZIGZAG_SERIALIZER = new BufferSerializer<Integer>() { @Override public void serialize(ByteBuf output, Integer item) { output.writeVarInt((item << 1) ^ (item >> 31)); } @Override public Integer deserialize(ByteBuf input) { int n = input.readVarInt(); return (n >>> 1) ^ -(n & 1); } }; private static final BufferSerializer<Long> LONG_SERIALIZER = new BufferSerializer<Long>() { @Override public void serialize(ByteBuf output, Long item) { output.writeLong(item); } @Override public Long deserialize(ByteBuf input) { return input.readLong(); } }; private static final BufferSerializer<Long> VARLONG_SERIALIZER = new BufferSerializer<Long>() { @Override public void serialize(ByteBuf output, Long item) { output.writeVarLong(item); } @Override public Long deserialize(ByteBuf input) { return input.readVarLong(); } }; private static final BufferSerializer<Long> VARLONG_ZIGZAG_SERIALIZER = new BufferSerializer<Long>() { @Override public void serialize(ByteBuf output, Long item) { output.writeVarLong((item << 1) ^ (item >> 63)); } @Override public Long deserialize(ByteBuf input) { long n = input.readVarLong(); return (n >>> 1) ^ -(n & 1); } }; private static final BufferSerializer<Float> FLOAT_SERIALIZER = new BufferSerializer<Float>() { @Override public void serialize(ByteBuf output, Float item) { output.writeFloat(item); } @Override public Float deserialize(ByteBuf input) { return input.readFloat(); } }; private static final BufferSerializer<Double> DOUBLE_SERIALIZER = new BufferSerializer<Double>() { @Override public void serialize(ByteBuf output, Double item) { output.writeDouble(item); } @Override public Double deserialize(ByteBuf input) { return input.readDouble(); } }; private static final BufferSerializer<Character> CHAR_SERIALIZER = new BufferSerializer<Character>() { @Override public void serialize(ByteBuf output, Character item) { output.writeChar(item); } @Override public Character deserialize(ByteBuf input) { return input.readChar(); } }; private static final BufferSerializer<String> JAVA_UTF8_SERIALIZER = new BufferSerializer<String>() { @Override public void serialize(ByteBuf output, String item) { output.writeJavaUTF8(item); } @Override public String deserialize(ByteBuf input) { return input.readJavaUTF8(); } }; private static final BufferSerializer<String> UTF16_SERIALIZER = new BufferSerializer<String>() { @Override public void serialize(ByteBuf output, String item) { output.writeUTF16(item); } @Override public String deserialize(ByteBuf input) { return input.readUTF16(); } }; private static final BufferSerializer<Boolean> BOOLEAN_SERIALIZER = new BufferSerializer<Boolean>() { @Override public void serialize(ByteBuf output, Boolean item) { output.writeBoolean(item); } @Override public Boolean deserialize(ByteBuf input) { return input.readBoolean(); } }; private static final BufferSerializer<String> ISO_8859_1_SERIALIZER = new BufferSerializer<String>() { @Override public void serialize(ByteBuf output, String item) { output.writeIso88591(item); } @Override public String deserialize(ByteBuf input) { return input.readIso88591(); } }; public static BufferSerializer<Byte> byteSerializer() { return BYTE_SERIALIZER; } public static BufferSerializer<byte[]> bytesSerializer() { return BYTES_SERIALIZER; } public static BufferSerializer<Short> shortSerializer() { return SHORT_SERIALIZER; } public static BufferSerializer<Integer> intSerializer() { return INT_SERIALIZER; } public static BufferSerializer<Integer> varIntSerializer(boolean optimizePositive) { return optimizePositive ? VARINT_SERIALIZER : VARINT_ZIGZAG_SERIALIZER; } public static BufferSerializer<Long> longSerializer() { return LONG_SERIALIZER; } public static BufferSerializer<Long> varLongSerializer(boolean optimizePositive) { return optimizePositive ? VARLONG_SERIALIZER : VARLONG_ZIGZAG_SERIALIZER; } public static BufferSerializer<Float> floatSerializer() { return FLOAT_SERIALIZER; } public static BufferSerializer<Double> doubleSerializer() { return DOUBLE_SERIALIZER; } public static BufferSerializer<Character> charSerializer() { return CHAR_SERIALIZER; } @Deprecated public static BufferSerializer<String> utf8Serializer() { return JAVA_UTF8_SERIALIZER; } public static BufferSerializer<String> utf16Serializer() { return UTF16_SERIALIZER; } public static BufferSerializer<String> iso88591Serializer() { return ISO_8859_1_SERIALIZER; } }