pb
This commit is contained in:
@@ -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[]> {
|
||||
|
||||
Reference in New Issue
Block a user