chaokunyang commented on PR #2027:
URL: https://github.com/apache/fury/pull/2027#issuecomment-2618222664
For following struct with map field:
```java
public class SimpleMapFieldStruct {
public Map<String, String> map;
}
```
This PR will generate code like:
```java
package org.apache.fury.serializer.collection;
import org.apache.fury.Fury;
import org.apache.fury.builder.Generated.GeneratedObjectSerializer;
import org.apache.fury.memory.MemoryBuffer;
import org.apache.fury.resolver.ClassInfo;
import org.apache.fury.resolver.ClassInfoHolder;
import org.apache.fury.resolver.ClassResolver;
import org.apache.fury.resolver.NoRefResolver;
import org.apache.fury.serializer.Serializer;
import org.apache.fury.serializer.StringSerializer;
public final class MapSerializersTest_SimpleMapFieldStructFuryCodec_0
extends GeneratedObjectSerializer {
private final NoRefResolver refResolver;
private final ClassResolver classResolver;
private final StringSerializer strSerializer;
private Fury fury;
private ClassInfo mapClassInfo;
private final StringSerializer stringSerializer;
private final ClassInfoHolder map3ClassInfoHolder;
public MapSerializersTest_SimpleMapFieldStructFuryCodec_0(Fury fury, Class
classType) {
super(fury, classType);
this.fury = fury;
fury.getClassResolver().setSerializerIfAbsent(classType, this);
org.apache.fury.resolver.RefResolver refResolver0 =
fury.getRefResolver();
refResolver = ((NoRefResolver)refResolver0);
classResolver = fury.getClassResolver();
strSerializer = fury.getStringSerializer();
mapClassInfo = classResolver.nilClassInfo();
stringSerializer =
((StringSerializer)classResolver.getRawSerializer(java.lang.String.class));
map3ClassInfoHolder = classResolver.nilClassInfoHolder();
}
private AbstractMapSerializer writeMapClassInfo(java.util.Map map1,
MemoryBuffer memoryBuffer) {
ClassResolver classResolver = this.classResolver;
Class value = mapClassInfo.getCls();
Class cls = map1.getClass();
if ((value != cls)) {
mapClassInfo = classResolver.getClassInfo(cls);
}
classResolver.writeClass(memoryBuffer, mapClassInfo);
Serializer serializer = mapClassInfo.getSerializer();
return ((AbstractMapSerializer)serializer);
}
private void
writeFields(org.apache.fury.serializer.collection.MapSerializersTest.SimpleMapFieldStruct
simpleMapFieldStruct1, MemoryBuffer memoryBuffer1) {
StringSerializer stringSerializer = this.stringSerializer;
java.util.Map map0 = simpleMapFieldStruct1.map;
if ((map0 == null)) {
memoryBuffer1.writeByte(((byte)-3));
} else {
memoryBuffer1.writeByte(((byte)0));
AbstractMapSerializer abstractMapSerializer =
this.writeMapClassInfo(map0, memoryBuffer1);
if (abstractMapSerializer.supportCodegenHook()) {
java.util.Map map2 =
abstractMapSerializer.onMapWrite(memoryBuffer1, map0);
if ((!map2.isEmpty())) {
java.util.Iterator iterator = map2.entrySet().iterator();
java.util.Map.Entry entry =
(java.util.Map.Entry)iterator.next();
while ((entry != null)) {
entry =
abstractMapSerializer.writeNullChunkKVNoRef(memoryBuffer1, entry, iterator,
stringSerializer, stringSerializer);
if ((entry != null)) {
String key = (String)entry.getKey();
String value0 = (String)entry.getValue();
memoryBuffer1.writeInt16(((short)-1));
int chunkSizeOffset = memoryBuffer1.writerIndex() -
1;
memoryBuffer1.putByte((chunkSizeOffset - 1), 36);
int chunkSize = 0;
while (true) {
if (((key == null) || (value0 == null))) {
break;
}
stringSerializer.write(memoryBuffer1, key);
stringSerializer.write(memoryBuffer1, value0);
chunkSize = (chunkSize + 1);
if ((chunkSize == 255)) {
break;
}
if (iterator.hasNext()) {
entry = ((java.util.Map.Entry)iterator.next());
key = ((String)entry.getKey());
value0 = ((String)entry.getValue());
} else {
entry = null;
break;
}
}
memoryBuffer1.putByte(chunkSizeOffset, chunkSize);
}
}
}
} else {
abstractMapSerializer.write(memoryBuffer1, map0);
}
}
}
private void readFields(MemoryBuffer memoryBuffer2,
org.apache.fury.serializer.collection.MapSerializersTest.SimpleMapFieldStruct
simpleMapFieldStruct2) {
StringSerializer strSerializer = this.strSerializer;
StringSerializer stringSerializer = this.stringSerializer;
if ((memoryBuffer2.readByte() != ((byte)-3))) {
Serializer serializer0 =
classResolver.readClassInfo(memoryBuffer2, map3ClassInfoHolder).getSerializer();
AbstractMapSerializer mapSerializer =
(AbstractMapSerializer)serializer0;
Object object1;
if (mapSerializer.supportCodegenHook()) {
java.util.Map map4 = mapSerializer.newMap(memoryBuffer2);
int size = mapSerializer.getAndClearNumElements();
if ((size == 0)) {
return;
}
int chunkHeader = memoryBuffer2.readUnsignedByte();
while ((size > 0)) {
long sizeAndHeader =
mapSerializer.readJavaNullChunk(memoryBuffer2, map4, chunkHeader, size,
stringSerializer, stringSerializer);
chunkHeader = ((int)(sizeAndHeader & 255));
size = ((int)(sizeAndHeader >>> 8));
int chunkSize0 = memoryBuffer2.readUnsignedByte();
for (int i = 0; i < chunkSize0; i+=1) {
String string =
strSerializer.readCharsString(memoryBuffer2);
String string1 =
strSerializer.readCharsString(memoryBuffer2);
map4.put(string, string1);
size = (size - 1);
}
if ((size > 0)) {
chunkHeader = memoryBuffer2.readUnsignedByte();
}
}
object1 = mapSerializer.onMapRead(map4);
} else {
Object object = mapSerializer.read(memoryBuffer2);
object1 = object;
}
simpleMapFieldStruct2.map = ((java.util.Map)object1);
} else {
simpleMapFieldStruct2.map = null;
}
}
@Override public final void write(MemoryBuffer buffer, Object obj) {
org.apache.fury.serializer.collection.MapSerializersTest.SimpleMapFieldStruct
simpleMapFieldStruct3 =
(org.apache.fury.serializer.collection.MapSerializersTest.SimpleMapFieldStruct)obj;
this.writeFields(simpleMapFieldStruct3, buffer);
}
@Override public final Object read(MemoryBuffer buffer) {
org.apache.fury.serializer.collection.MapSerializersTest.SimpleMapFieldStruct
simpleMapFieldStruct4 = new
org.apache.fury.serializer.collection.MapSerializersTest.SimpleMapFieldStruct();
refResolver.reference(simpleMapFieldStruct4);
this.readFields(buffer, simpleMapFieldStruct4);
return simpleMapFieldStruct4;
}
}
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]