Implemented AgileBytesMarshaller for Double

This commit is contained in:
leventov
2014-10-12 16:52:35 +04:00
parent 10250dbd60
commit 573b91464a
2 changed files with 74 additions and 24 deletions
@@ -92,6 +92,8 @@ final class SerializationBuilder<E> implements Cloneable {
agileMarshaller((AgileBytesMarshaller<E>) VoidMarshaller.INSTANCE, factory);
} else if (eClass == Long.class) {
agileMarshaller((AgileBytesMarshaller<E>) LongMarshaller.INSTANCE, factory);
} else if (eClass == Double.class) {
agileMarshaller((AgileBytesMarshaller<E>) DoubleMarshaller.INSTANCE, factory);
} else if (eClass == byte[].class) {
reader((BytesReader<E>) ByteArrayMarshaller.INSTANCE, factory);
interop((BytesInterop<E>) ByteArrayMarshaller.INSTANCE);
@@ -113,8 +115,6 @@ final class SerializationBuilder<E> implements Cloneable {
return new ExternalizableMarshaller(classForMarshaller);
if (eClass == Integer.class)
return (BytesMarshaller<E>) IntegerMarshaller.INSTANCE;
if (eClass == Double.class)
return (BytesMarshaller<E>) DoubleMarshaller.INSTANCE;
return null;
}
@@ -351,28 +351,6 @@ final class SerializationBuilder<E> implements Cloneable {
}
}
private enum DoubleMarshaller implements BytesMarshaller<Double> {
INSTANCE;
@Override
public void write(Bytes bytes, Double v) {
bytes.writeDouble(v);
}
@Nullable
@Override
public Double read(Bytes bytes) {
return bytes.readDouble();
}
@Nullable
@Override
public Double read(Bytes bytes, @Nullable Double v) {
return bytes.readDouble();
}
}
private static class SerializableMarshaller implements BytesMarshaller {
private static final long serialVersionUID = 0L;
@@ -0,0 +1,72 @@
/*
* Copyright 2014 Higher Frequency Trading http://www.higherfrequencytrading.com
*
* 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 net.openhft.chronicle.map.serialization.impl;
import net.openhft.chronicle.map.serialization.AgileBytesMarshaller;
import net.openhft.chronicle.map.serialization.Hasher;
import net.openhft.lang.io.Bytes;
import static java.lang.Double.doubleToLongBits;
public enum DoubleMarshaller implements AgileBytesMarshaller<Double> {
INSTANCE;
@Override
public long size(Double e) {
return 8L;
}
@Override
public int sizeEncodingSize(long size) {
return 0;
}
@Override
public void writeSize(Bytes bytes, long size) {
// do nothing
}
@Override
public boolean startsWith(Bytes bytes, Double e) {
return doubleToLongBits(e) == bytes.readLong(0);
}
@Override
public long hash(Double e) {
return Hasher.hash(doubleToLongBits(e));
}
@Override
public void write(Bytes bytes, Double e) {
bytes.writeLong(doubleToLongBits(e));
}
@Override
public long readSize(Bytes bytes) {
return 8L;
}
@Override
public Double read(Bytes bytes, long size) {
return Double.longBitsToDouble(bytes.readLong());
}
@Override
public Double read(Bytes bytes, long size, Double e) {
return read(bytes, size);
}
}