HCOLL-167 Created a stateless map - fixed test case -net.openhft.chronicle.map.SerializerTest.testKeyMarshallable

This commit is contained in:
Rob Austin
2014-10-15 16:23:57 +01:00
parent 2e83944837
commit e48a44e6e9
3 changed files with 94 additions and 264 deletions
@@ -7,19 +7,16 @@ import net.openhft.chronicle.map.serialization.SizeMarshaller;
import net.openhft.chronicle.map.threadlocal.Provider;
import net.openhft.chronicle.map.threadlocal.ThreadLocalCopies;
import net.openhft.lang.io.Bytes;
import net.openhft.lang.io.serialization.BytesMarshallable;
import net.openhft.lang.io.serialization.ObjectFactory;
import net.openhft.lang.model.Byteable;
import net.openhft.lang.model.constraints.NotNull;
/**
* uses a {@code SerializationBuilder} to readMarshallable and writeMarshallable objects
*
* @author Rob Austin.
*/
public class Serializer<O, VW, MVW extends MetaBytesWriter<O, VW>>
implements BytesMarshallable {
public class Serializer<O, VW, MVW extends MetaBytesWriter<O, VW>> {
final Class<O> clazz;
final SizeMarshaller sizeMarshaller;
final BytesReader<O> originalReader;
transient Provider<BytesReader<O>> readerProvider;
@@ -27,44 +24,38 @@ public class Serializer<O, VW, MVW extends MetaBytesWriter<O, VW>>
transient Provider<VW> writerProvider;
final MVW originalMetaValueWriter;
final MetaProvider<O, VW, MVW> metaValueWriterProvider;
final ObjectFactory<O> objectFactory;
final ThreadLocal<O> value = new ThreadLocal<O>();
public Serializer(final SerializationBuilder<O> serializationBuilder) {
clazz = serializationBuilder.eClass;
sizeMarshaller = serializationBuilder.sizeMarshaller();
originalReader = serializationBuilder.reader();
originalWriter = (VW) serializationBuilder.interop();
originalMetaValueWriter = (MVW) serializationBuilder.metaInterop();
metaValueWriterProvider = (MetaProvider) serializationBuilder.metaInteropProvider();
objectFactory = serializationBuilder.factory();
readerProvider = Provider.of((Class) originalReader.getClass());
writerProvider = Provider.of((Class) originalWriter.getClass());
}
public O readMarshallable(@NotNull Bytes in) throws IllegalStateException {
public O getObject() {
return value.get();
ThreadLocalCopies copies;
copies = readerProvider.getCopies(null);
BytesReader<O> valueReader = readerProvider.get(copies, originalReader);
try {
long valueSize = sizeMarshaller.readSize(in);
return valueReader.read(in, valueSize, null);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void setObject(O value) {
this.value.set(value);
}
public void writeMarshallable(@NotNull Bytes out, O value) {
@Override
public void readMarshallable(@NotNull Bytes in) throws IllegalStateException {
O o = readObject(in);
setObject(o);
}
@Override
public void writeMarshallable(@NotNull Bytes out) {
O value1 = getObject();
boolean byteableValue = value1 instanceof Byteable;
boolean byteableValue = value instanceof Byteable;
ThreadLocalCopies copies;
copies = readerProvider.getCopies(null);
VW valueWriter = writerProvider.get(copies, originalWriter);
@@ -78,10 +69,10 @@ public class Serializer<O, VW, MVW extends MetaBytesWriter<O, VW>>
valueWriter = writerProvider.get(copies, originalWriter);
copies = metaValueWriterProvider.getCopies(copies);
metaValueWriter = metaValueWriterProvider.get(
copies, originalMetaValueWriter, valueWriter, value1);
valueSize = metaValueWriter.size(valueWriter, value1);
copies, originalMetaValueWriter, valueWriter, value);
valueSize = metaValueWriter.size(valueWriter, value);
} else {
valueAsByteable = (Byteable) value1;
valueAsByteable = (Byteable) value;
valueSize = valueAsByteable.maxSize();
}
@@ -89,26 +80,10 @@ public class Serializer<O, VW, MVW extends MetaBytesWriter<O, VW>>
if (metaValueWriter != null) {
metaValueWriter.write(valueWriter, out, value1);
metaValueWriter.write(valueWriter, out, value);
} else {
throw new UnsupportedOperationException("");
}
}
private O readObject(Bytes in) {
ThreadLocalCopies copies;
copies = readerProvider.getCopies(null);
BytesReader<O> valueReader = readerProvider.get(copies, originalReader);
try {
final O v = objectFactory.create();
long valueSize = sizeMarshaller.readSize(in);
return valueReader.read(in, valueSize, v);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}