This commit is contained in:
redkale
2024-10-04 11:01:49 +08:00
parent b7a604ebee
commit 5c5bce467f
12 changed files with 299 additions and 301 deletions

View File

@@ -11,7 +11,6 @@ import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.util.*;
import java.util.concurrent.atomic.*;
import java.util.function.IntFunction;
import java.util.stream.Stream;
import org.redkale.convert.SimpledCoder;
import org.redkale.convert.ext.AtomicBooleanSimpledCoder;
@@ -879,193 +878,6 @@ public abstract class ProtobufCoders {
}
}
public static class ProtobufPrimitiveArraySimpledCoder<T> extends SimpledCoder<ProtobufReader, ProtobufWriter, T[]>
implements ProtobufEncodeable<ProtobufWriter, T[]> {
private final IntFunction<T[]> arrayFunc;
private final SimpledCoder<ProtobufReader, ProtobufWriter, T> componentCoder;
public ProtobufPrimitiveArraySimpledCoder(ProtobufPrimitivable primitiveCoder) {
this.componentCoder = (SimpledCoder) primitiveCoder;
this.arrayFunc = Creator.funcArray(TypeToken.typeToClass(this.componentCoder.getType()));
}
@Override
public void convertTo(ProtobufWriter out, T[] value) {
if (value == null || value.length == 0) {
return;
}
SimpledCoder<ProtobufReader, ProtobufWriter, T> itemCoder = this.componentCoder;
ProtobufPrimitivable primCoder = (ProtobufPrimitivable) itemCoder;
T[] array = value;
int len = 0;
for (T item : array) {
len += primCoder.computeSize(item == null ? 0 : item);
}
out.writeLength(len);
for (T item : array) {
itemCoder.convertTo(out, item);
}
}
@Override
public T[] convertFrom(ProtobufReader in) {
SimpledCoder<ProtobufReader, ProtobufWriter, T> itemCoder = this.componentCoder;
ProtobufPrimitivable primCoder = (ProtobufPrimitivable) itemCoder;
List<T> data = new ArrayList<>();
int len = in.readRawVarint32();
while (len > 0) {
T val = itemCoder.convertFrom(in);
len -= primCoder.computeSize(val);
data.add(val);
}
return data.toArray(this.arrayFunc);
}
@Override
public int computeSize(ProtobufWriter out, int tagSize, T[] value) {
if (value == null || value.length == 0) {
return 0;
}
ProtobufPrimitivable primCoder = (ProtobufPrimitivable) this.componentCoder;
int len = 0;
for (T item : value) {
len += primCoder.computeSize(item);
}
return len;
}
@Override
public final ProtobufTypeEnum typeEnum() {
return ProtobufTypeEnum.BYTES;
}
}
public static class ProtobufPrimitiveCollectionSimpledCoder<T>
extends SimpledCoder<ProtobufReader, ProtobufWriter, Collection<T>>
implements ProtobufEncodeable<ProtobufWriter, Collection<T>> {
private final Creator<? extends Collection> creator;
private final SimpledCoder<ProtobufReader, ProtobufWriter, T> componentCoder;
public ProtobufPrimitiveCollectionSimpledCoder(
Creator<? extends Collection> creator, ProtobufPrimitivable primitiveCoder) {
this.creator = creator;
this.componentCoder = (SimpledCoder) primitiveCoder;
}
@Override
public void convertTo(ProtobufWriter out, Collection<T> values) {
SimpledCoder<ProtobufReader, ProtobufWriter, T> itemCoder = this.componentCoder;
ProtobufPrimitivable primCoder = (ProtobufPrimitivable) itemCoder;
Collection<T> array = values;
if (array != null && !array.isEmpty()) {
int len = 0;
for (T item : array) {
len += primCoder.computeSize(item == null ? 0 : item);
}
out.writeLength(len);
for (T item : array) {
itemCoder.convertTo(out, item);
}
}
}
@Override
public Collection<T> convertFrom(ProtobufReader in) {
SimpledCoder<ProtobufReader, ProtobufWriter, T> itemCoder = this.componentCoder;
ProtobufPrimitivable primCoder = (ProtobufPrimitivable) itemCoder;
Collection<T> data = creator.create();
int len = in.readRawVarint32();
while (len > 0) {
T val = itemCoder.convertFrom(in);
len -= primCoder.computeSize(val);
data.add(val);
}
return data;
}
@Override
public int computeSize(ProtobufWriter out, int tagSize, Collection<T> value) {
if (value == null || value.isEmpty()) {
return 0;
}
ProtobufPrimitivable primCoder = (ProtobufPrimitivable) this.componentCoder;
int len = 0;
for (T item : value) {
len += primCoder.computeSize(item);
}
return len;
}
@Override
public final ProtobufTypeEnum typeEnum() {
return ProtobufTypeEnum.BYTES;
}
}
public static class ProtobufPrimitiveStreamSimpledCoder<T>
extends SimpledCoder<ProtobufReader, ProtobufWriter, Stream<T>>
implements ProtobufEncodeable<ProtobufWriter, Stream<T>> {
private final SimpledCoder<ProtobufReader, ProtobufWriter, T> componentCoder;
public ProtobufPrimitiveStreamSimpledCoder(ProtobufPrimitivable primitiveCoder) {
this.componentCoder = (SimpledCoder) primitiveCoder;
}
@Override
public void convertTo(ProtobufWriter out, Stream<T> value) {
if (value == null) {
return;
}
SimpledCoder<ProtobufReader, ProtobufWriter, T> itemCoder = this.componentCoder;
ProtobufPrimitivable primCoder = (ProtobufPrimitivable) itemCoder;
Object[] array = value.toArray();
int len = 0;
for (Object item : array) {
len += primCoder.computeSize(item == null ? 0 : item);
}
out.writeLength(len);
for (Object item : array) {
itemCoder.convertTo(out, (T) item);
}
}
@Override
public Stream<T> convertFrom(ProtobufReader in) {
SimpledCoder<ProtobufReader, ProtobufWriter, T> itemCoder = this.componentCoder;
ProtobufPrimitivable primCoder = (ProtobufPrimitivable) itemCoder;
List<T> data = new ArrayList<>();
int len = in.readRawVarint32();
while (len > 0) {
T val = itemCoder.convertFrom(in);
len -= primCoder.computeSize(val);
data.add(val);
}
return data.stream();
}
@Override
public int computeSize(ProtobufWriter out, int tagSize, Stream<T> value) {
if (value == null) {
return 0;
}
ProtobufPrimitivable primCoder = (ProtobufPrimitivable) this.componentCoder;
int len = 0;
for (Object item : value.toArray()) {
len += primCoder.computeSize(item);
}
return len;
}
@Override
public final ProtobufTypeEnum typeEnum() {
return ProtobufTypeEnum.BYTES;
}
}
// ------------------------------------- boolean[] -------------------------------------
public static class ProtobufBoolArraySimpledCoder extends SimpledCoder<ProtobufReader, ProtobufWriter, boolean[]>
implements ProtobufEncodeable<ProtobufWriter, boolean[]> {