X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.databoard%2Fsrc%2Forg%2Fsimantics%2Fdataboard%2Fserialization%2Fimpl%2FGenericRecordSerializer.java;fp=bundles%2Forg.simantics.databoard%2Fsrc%2Forg%2Fsimantics%2Fdataboard%2Fserialization%2Fimpl%2FGenericRecordSerializer.java;h=33dfcf48b27835fbfe7c2e773aec26b0b3d9ef10;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hp=beebb1db625e94f699a275c3aecd6f5c5bd4583d;hpb=24e2b34260f219f0d1644ca7a138894980e25b14;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.databoard/src/org/simantics/databoard/serialization/impl/GenericRecordSerializer.java b/bundles/org.simantics.databoard/src/org/simantics/databoard/serialization/impl/GenericRecordSerializer.java index beebb1db6..33dfcf48b 100644 --- a/bundles/org.simantics.databoard/src/org/simantics/databoard/serialization/impl/GenericRecordSerializer.java +++ b/bundles/org.simantics.databoard/src/org/simantics/databoard/serialization/impl/GenericRecordSerializer.java @@ -1,227 +1,227 @@ -package org.simantics.databoard.serialization.impl; - -import gnu.trove.map.hash.TObjectIntHashMap; - -import java.io.DataInput; -import java.io.DataOutput; -import java.io.IOException; -import java.util.List; - -import org.simantics.databoard.binding.Binding; -import org.simantics.databoard.binding.RecordBinding; -import org.simantics.databoard.binding.error.BindingException; -import org.simantics.databoard.binding.reflection.ClassBinding; -import org.simantics.databoard.binding.util.IsReferableQuery; -import org.simantics.databoard.binding.util.Result; -import org.simantics.databoard.serialization.SerializationException; -import org.simantics.databoard.serialization.Serializer; -import org.simantics.databoard.serialization.Serializer.CompositeSerializer; - -public class GenericRecordSerializer extends CompositeSerializer { - - RecordBinding binding; - public Serializer[] componentSerializers; - Integer fixedSize; - int minSize; - boolean createPartial; - - /** - * Field type for each field - * 0 - Object - * 1 - boolean - * 2 - byte - * 3 - int - * 4 - long - * 5 - float - * 6 - double - */ - public int[] fieldType; - - /** - * - * @param binding - * @param componentSerializers (optional) can be set later - */ - public GenericRecordSerializer(RecordBinding binding, Serializer[] componentSerializers) { - super( IsReferableQuery.isReferable( binding.type() ) != Result.No ); - this.binding = binding; - this.componentSerializers = componentSerializers; - } - - @Override - public void finalizeConstruction() { - fixedSize = null; - - createPartial = !binding.isImmutable(); - - if ( binding instanceof ClassBinding ) { - ClassBinding cb = (ClassBinding) binding; - createPartial &= cb.ci.partialConstructionPossible; - } - - fieldType = new int[componentSerializers.length]; - for (int i=0; i identities) throws IOException { +// assertRemainingBytes(in, minSize); + try { + if (createPartial) { + Object obj = binding.createPartial(); + deserializeTo(in, identities, obj); + return obj; + } else { + Object[] temp = new Object[componentSerializers.length]; + for(int i=0;i identities, Object obj) throws IOException { +// assertRemainingBytes(in, minSize); + try { + for(int i=0;i identities) throws IOException, SerializationException { + if (fixedSize != null) { + in.skipBytes(fixedSize); + } else { + for(int i=0;i identities, Object obj) throws IOException { + try { + for(int i=0;i identities) throws IOException { + try { + if (fixedSize!=null) return fixedSize; + int result = 0; + for(int i=0;i