diff --git a/src/main/java/net/openhft/chronicle/hash/serialization/AgileBytesMarshaller.java b/src/main/java/net/openhft/chronicle/hash/serialization/AgileBytesMarshaller.java deleted file mode 100644 index 6ab1f7b15..000000000 --- a/src/main/java/net/openhft/chronicle/hash/serialization/AgileBytesMarshaller.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * 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.hash.serialization; - -public interface AgileBytesMarshaller extends BytesReader, BytesInterop, SizeMarshaller { -} diff --git a/src/main/java/net/openhft/chronicle/hash/serialization/internal/ByteableMarshaller.java b/src/main/java/net/openhft/chronicle/hash/serialization/internal/ByteableMarshaller.java index ecfb08f60..2e7f415ce 100644 --- a/src/main/java/net/openhft/chronicle/hash/serialization/internal/ByteableMarshaller.java +++ b/src/main/java/net/openhft/chronicle/hash/serialization/internal/ByteableMarshaller.java @@ -18,8 +18,10 @@ package net.openhft.chronicle.hash.serialization.internal; -import net.openhft.chronicle.hash.serialization.AgileBytesMarshaller; +import net.openhft.chronicle.hash.serialization.BytesInterop; +import net.openhft.chronicle.hash.serialization.BytesReader; import net.openhft.chronicle.hash.serialization.Hasher; +import net.openhft.chronicle.hash.serialization.SizeMarshaller; import net.openhft.lang.io.Bytes; import net.openhft.lang.io.MultiStoreBytes; import net.openhft.lang.io.NativeBytes; @@ -28,7 +30,8 @@ import net.openhft.lang.io.serialization.impl.AllocateInstanceObjectFactory; import net.openhft.lang.model.Byteable; import org.jetbrains.annotations.NotNull; -public class ByteableMarshaller implements AgileBytesMarshaller { +public class ByteableMarshaller + implements BytesInterop, BytesReader, SizeMarshaller { private static final long serialVersionUID = 0L; public static ByteableMarshaller of(@NotNull Class eClass) { diff --git a/src/main/java/net/openhft/chronicle/hash/serialization/internal/DoubleMarshaller.java b/src/main/java/net/openhft/chronicle/hash/serialization/internal/DoubleMarshaller.java index 7878b8850..621a6a8ef 100644 --- a/src/main/java/net/openhft/chronicle/hash/serialization/internal/DoubleMarshaller.java +++ b/src/main/java/net/openhft/chronicle/hash/serialization/internal/DoubleMarshaller.java @@ -18,13 +18,15 @@ package net.openhft.chronicle.hash.serialization.internal; -import net.openhft.chronicle.hash.serialization.AgileBytesMarshaller; +import net.openhft.chronicle.hash.serialization.BytesInterop; +import net.openhft.chronicle.hash.serialization.BytesReader; import net.openhft.chronicle.hash.serialization.Hasher; +import net.openhft.chronicle.hash.serialization.SizeMarshaller; import net.openhft.lang.io.Bytes; import static java.lang.Double.doubleToLongBits; -public enum DoubleMarshaller implements AgileBytesMarshaller { +public enum DoubleMarshaller implements BytesInterop, BytesReader, SizeMarshaller { INSTANCE; @Override diff --git a/src/main/java/net/openhft/chronicle/hash/serialization/internal/IntegerMarshaller.java b/src/main/java/net/openhft/chronicle/hash/serialization/internal/IntegerMarshaller.java index ca5fb2729..05476f18e 100644 --- a/src/main/java/net/openhft/chronicle/hash/serialization/internal/IntegerMarshaller.java +++ b/src/main/java/net/openhft/chronicle/hash/serialization/internal/IntegerMarshaller.java @@ -18,11 +18,11 @@ package net.openhft.chronicle.hash.serialization.internal; -import net.openhft.chronicle.hash.serialization.AgileBytesMarshaller; -import net.openhft.chronicle.hash.serialization.Hasher; +import net.openhft.chronicle.hash.serialization.*; import net.openhft.lang.io.Bytes; -public enum IntegerMarshaller implements AgileBytesMarshaller { +public enum IntegerMarshaller + implements BytesInterop, BytesReader, SizeMarshaller { INSTANCE; @Override diff --git a/src/main/java/net/openhft/chronicle/hash/serialization/internal/LongMarshaller.java b/src/main/java/net/openhft/chronicle/hash/serialization/internal/LongMarshaller.java index 6b348ae64..5a4654c4e 100644 --- a/src/main/java/net/openhft/chronicle/hash/serialization/internal/LongMarshaller.java +++ b/src/main/java/net/openhft/chronicle/hash/serialization/internal/LongMarshaller.java @@ -18,11 +18,14 @@ package net.openhft.chronicle.hash.serialization.internal; -import net.openhft.chronicle.hash.serialization.AgileBytesMarshaller; +import net.openhft.chronicle.hash.serialization.BytesInterop; +import net.openhft.chronicle.hash.serialization.BytesReader; import net.openhft.chronicle.hash.serialization.Hasher; +import net.openhft.chronicle.hash.serialization.SizeMarshaller; import net.openhft.lang.io.Bytes; -public enum LongMarshaller implements AgileBytesMarshaller { +public enum LongMarshaller + implements BytesInterop, BytesReader, SizeMarshaller { INSTANCE; @Override diff --git a/src/main/java/net/openhft/chronicle/hash/serialization/internal/VoidMarshaller.java b/src/main/java/net/openhft/chronicle/hash/serialization/internal/VoidMarshaller.java index 6b23d5aa4..5edf54d71 100644 --- a/src/main/java/net/openhft/chronicle/hash/serialization/internal/VoidMarshaller.java +++ b/src/main/java/net/openhft/chronicle/hash/serialization/internal/VoidMarshaller.java @@ -18,10 +18,13 @@ package net.openhft.chronicle.hash.serialization.internal; -import net.openhft.chronicle.hash.serialization.AgileBytesMarshaller; +import net.openhft.chronicle.hash.serialization.BytesInterop; +import net.openhft.chronicle.hash.serialization.BytesReader; +import net.openhft.chronicle.hash.serialization.SizeMarshaller; import net.openhft.lang.io.Bytes; -public enum VoidMarshaller implements AgileBytesMarshaller { +public enum VoidMarshaller + implements BytesInterop, BytesReader, SizeMarshaller { INSTANCE; @Override diff --git a/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java b/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java index be8172522..65828fc97 100644 --- a/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java +++ b/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java @@ -17,7 +17,8 @@ package net.openhft.chronicle.map; import net.openhft.chronicle.hash.ChronicleHashBuilder; -import net.openhft.chronicle.hash.serialization.AgileBytesMarshaller; +import net.openhft.chronicle.hash.serialization.BytesReader; +import net.openhft.chronicle.hash.serialization.BytesWriter; import net.openhft.lang.io.Bytes; import net.openhft.lang.io.serialization.BytesMarshallable; import net.openhft.lang.io.serialization.BytesMarshaller; @@ -223,9 +224,10 @@ public final class ChronicleMapBuilder return this; } - public ChronicleMapBuilder valueMarshaller( - @NotNull AgileBytesMarshaller valueMarshaller) { - valueBuilder.agileMarshaller(valueMarshaller, null); + public ChronicleMapBuilder valueMarshallers( + BytesWriter valueWriter, BytesReader valueReader) { + valueBuilder.writer(valueWriter); + valueBuilder.reader(valueReader, valueBuilder.factory()); return this; } } diff --git a/src/main/java/net/openhft/chronicle/map/SerializationBuilder.java b/src/main/java/net/openhft/chronicle/map/SerializationBuilder.java index ea67e3430..3c6b46510 100644 --- a/src/main/java/net/openhft/chronicle/map/SerializationBuilder.java +++ b/src/main/java/net/openhft/chronicle/map/SerializationBuilder.java @@ -83,18 +83,29 @@ final class SerializationBuilder implements Cloneable { NullObjectFactory.of(); if (concreteClass(eClass) && Byteable.class.isAssignableFrom(eClass)) { - agileMarshaller(ByteableMarshaller.of((Class) eClass), factory); + ByteableMarshaller agileBytesMarshaller = ByteableMarshaller.of((Class) eClass); + sizeMarshaller(agileBytesMarshaller) + .reader(agileBytesMarshaller, factory) + .interop(agileBytesMarshaller); } else if (eClass == CharSequence.class || eClass == String.class) { reader((BytesReader) CharSequenceReader.of(), factory); writer((BytesWriter) CharSequenceWriter.instance()); } else if (eClass == Void.class) { - agileMarshaller((AgileBytesMarshaller) VoidMarshaller.INSTANCE, factory); + sizeMarshaller(VoidMarshaller.INSTANCE) + .reader((BytesReader) VoidMarshaller.INSTANCE, factory) + .interop((BytesInterop) VoidMarshaller.INSTANCE); } else if (eClass == Long.class) { - agileMarshaller((AgileBytesMarshaller) LongMarshaller.INSTANCE, factory); + sizeMarshaller(LongMarshaller.INSTANCE) + .reader((BytesReader) LongMarshaller.INSTANCE, factory) + .interop((BytesInterop) LongMarshaller.INSTANCE); } else if (eClass == Double.class) { - agileMarshaller((AgileBytesMarshaller) DoubleMarshaller.INSTANCE, factory); + sizeMarshaller(DoubleMarshaller.INSTANCE) + .reader((BytesReader) DoubleMarshaller.INSTANCE, factory) + .interop((BytesInterop) DoubleMarshaller.INSTANCE); } else if (eClass == Integer.class) { - agileMarshaller((AgileBytesMarshaller) IntegerMarshaller.INSTANCE, factory); + sizeMarshaller(IntegerMarshaller.INSTANCE) + .reader((BytesReader) IntegerMarshaller.INSTANCE, factory) + .interop((BytesInterop) IntegerMarshaller.INSTANCE); } else if (eClass == byte[].class) { reader((BytesReader) ByteArrayMarshaller.INSTANCE, factory); interop((BytesInterop) ByteArrayMarshaller.INSTANCE); @@ -125,14 +136,6 @@ final class SerializationBuilder implements Cloneable { return this; } - public SerializationBuilder agileMarshaller(AgileBytesMarshaller agileBytesMarshaller, - ObjectFactory factory) { - if (factory == null) factory = this.factory; - return sizeMarshaller(agileBytesMarshaller) - .reader(agileBytesMarshaller, factory) - .interop(agileBytesMarshaller); - } - public SerializationBuilder interop(BytesInterop interop) { return copyingInterop(null) .setInterop(interop) @@ -142,6 +145,8 @@ final class SerializationBuilder implements Cloneable { } public SerializationBuilder writer(BytesWriter writer) { + if (writer instanceof BytesInterop) + return interop((BytesInterop) writer); return copyingInterop(CopyingInterop.FROM_WRITER) .setInterop(writer) .metaInterop(CopyingMetaBytesInterop @@ -287,10 +292,19 @@ final class SerializationBuilder implements Cloneable { " value don't use object factory"); } else if (interop instanceof ByteableMarshaller) { if (factory instanceof AllocateInstanceObjectFactory) { - agileMarshaller(ByteableMarshaller.of((Class) eClass), factory); + ByteableMarshaller agileBytesMarshaller = + ByteableMarshaller.of((Class) eClass); + sizeMarshaller(agileBytesMarshaller) + .reader(agileBytesMarshaller, factory) + .interop(agileBytesMarshaller); } else { - agileMarshaller(ByteableMarshaller.of((Class) eClass, (ObjectFactory) factory), - factory); + ByteableMarshaller agileBytesMarshaller = + ByteableMarshaller.of((Class) eClass, (ObjectFactory) factory); + ObjectFactory factory1 = factory; + if (factory1 == null) factory1 = this.factory; + sizeMarshaller(agileBytesMarshaller) + .reader(agileBytesMarshaller, factory1) + .interop(agileBytesMarshaller); } } else if (interop instanceof BytesMarshallableMarshaller) { if (factory instanceof AllocateInstanceObjectFactory) { diff --git a/src/main/java/net/openhft/chronicle/set/ChronicleSetBuilder.java b/src/main/java/net/openhft/chronicle/set/ChronicleSetBuilder.java index d317a8f98..fd607424c 100644 --- a/src/main/java/net/openhft/chronicle/set/ChronicleSetBuilder.java +++ b/src/main/java/net/openhft/chronicle/set/ChronicleSetBuilder.java @@ -53,7 +53,7 @@ public class ChronicleSetBuilder ChronicleSetBuilder(Class keyClass) { chronicleMapBuilder = ChronicleMapBuilder.of(keyClass, DummyValue.class) - .valueMarshaller(DummyValueMarshaller.INSTANCE); + .valueMarshallers(DummyValueMarshaller.INSTANCE, DummyValueMarshaller.INSTANCE); } public static ChronicleSetBuilder of(Class keyClass) { diff --git a/src/main/java/net/openhft/chronicle/set/DummyValueMarshaller.java b/src/main/java/net/openhft/chronicle/set/DummyValueMarshaller.java index a2f1b8cab..ddb3956f7 100644 --- a/src/main/java/net/openhft/chronicle/set/DummyValueMarshaller.java +++ b/src/main/java/net/openhft/chronicle/set/DummyValueMarshaller.java @@ -18,12 +18,15 @@ package net.openhft.chronicle.set; -import net.openhft.chronicle.hash.serialization.AgileBytesMarshaller; +import net.openhft.chronicle.hash.serialization.BytesInterop; +import net.openhft.chronicle.hash.serialization.BytesReader; +import net.openhft.chronicle.hash.serialization.SizeMarshaller; import net.openhft.lang.io.Bytes; import static net.openhft.chronicle.set.DummyValue.DUMMY_VALUE; -enum DummyValueMarshaller implements AgileBytesMarshaller { +enum DummyValueMarshaller + implements BytesInterop, BytesReader, SizeMarshaller { INSTANCE; @Override